mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-10 01:13:49 +00:00
Merge branch 'normal-map-color-wheel' of https://github.com/robinjam/aseprite into robinjam-normal-map-color-wheel
This commit is contained in:
commit
2f251c8a5a
@ -984,6 +984,9 @@
|
||||
<item command="SetColorSelector" text="@.ryb_color_wheel">
|
||||
<param name="type" value="ryb-wheel" />
|
||||
</item>
|
||||
<item command="SetColorSelector" text="Normal Map Color Wheel">
|
||||
<param name="type" value="normal-map-wheel" />
|
||||
</item>
|
||||
<separator />
|
||||
<item command="LoadPalette" text="@.load_palette" />
|
||||
<item command="SavePalette" text="@.save_palette" />
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2016-2017 David Capello
|
||||
// Copyright (C) 2016-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
// the End-User License Agreement for Aseprite.
|
||||
@ -56,6 +56,9 @@ void SetColorSelectorCommand::onLoadParams(const Params& params)
|
||||
else if (type == "ryb-wheel") {
|
||||
m_type = ColorBar::ColorSelector::RYB_WHEEL;
|
||||
}
|
||||
else if (type == "normal-map-wheel") {
|
||||
m_type = ColorBar::ColorSelector::NORMAL_MAP_WHEEL;
|
||||
}
|
||||
}
|
||||
|
||||
bool SetColorSelectorCommand::onChecked(Context* context)
|
||||
@ -84,6 +87,9 @@ std::string SetColorSelectorCommand::onGetFriendlyName() const
|
||||
case ColorBar::ColorSelector::RYB_WHEEL:
|
||||
type = Strings::commands_SetColorSelector_RYBWheel();
|
||||
break;
|
||||
case ColorBar::ColorSelector::NORMAL_MAP_WHEEL:
|
||||
type = "Normal Map Color Wheel";
|
||||
break;
|
||||
}
|
||||
return fmt::format(getBaseFriendlyName(), type);
|
||||
}
|
||||
|
@ -369,6 +369,7 @@ void ColorBar::setColorSelector(ColorSelector selector)
|
||||
|
||||
case ColorSelector::RGB_WHEEL:
|
||||
case ColorSelector::RYB_WHEEL:
|
||||
case ColorSelector::NORMAL_MAP_WHEEL:
|
||||
if (!m_wheel) {
|
||||
m_wheel = new ColorWheel;
|
||||
m_wheel->setExpansive(true);
|
||||
@ -376,10 +377,15 @@ void ColorBar::setColorSelector(ColorSelector selector)
|
||||
m_wheel->ColorChange.connect(&ColorBar::onPickSpectrum, this);
|
||||
m_selectorPlaceholder.addChild(m_wheel);
|
||||
}
|
||||
m_wheel->setColorModel(
|
||||
(m_selector == ColorSelector::RGB_WHEEL ?
|
||||
ColorWheel::ColorModel::RGB:
|
||||
ColorWheel::ColorModel::RYB));
|
||||
if (m_selector == ColorSelector::RGB_WHEEL) {
|
||||
m_wheel->setColorModel(ColorWheel::ColorModel::RGB);
|
||||
}
|
||||
else if (m_selector == ColorSelector::RYB_WHEEL) {
|
||||
m_wheel->setColorModel(ColorWheel::ColorModel::RYB);
|
||||
}
|
||||
else if (m_selector == ColorSelector::NORMAL_MAP_WHEEL) {
|
||||
m_wheel->setColorModel(ColorWheel::ColorModel::NORMAL_MAP);
|
||||
}
|
||||
m_wheel->setVisible(true);
|
||||
break;
|
||||
|
||||
|
@ -54,6 +54,7 @@ namespace app {
|
||||
SPECTRUM,
|
||||
RGB_WHEEL,
|
||||
RYB_WHEEL,
|
||||
NORMAL_MAP_WHEEL,
|
||||
TINT_SHADE_TONE,
|
||||
};
|
||||
|
||||
|
@ -74,6 +74,22 @@ app::Color ColorWheel::getMainAreaColor(const int _u, const int umax,
|
||||
int v = _v - vmax/2;
|
||||
double d = std::sqrt(u*u + v*v);
|
||||
|
||||
if (m_colorModel == ColorModel::NORMAL_MAP) {
|
||||
float x = float(u) / float(m_wheelBounds.w / 2);
|
||||
float y = -float(v) / float(m_wheelBounds.h / 2);
|
||||
float z = std::sqrt(1 - x*x - y*y);
|
||||
if (z <= 1.f) {
|
||||
return app::Color::fromRgb(
|
||||
int(std::round((x + 1) * 127.5)),
|
||||
int(std::round((y + 1) * 127.5)),
|
||||
int(std::round((z + 1) * 127.5))
|
||||
);
|
||||
}
|
||||
else {
|
||||
return app::Color::fromRgb(128, 128, 255);
|
||||
}
|
||||
}
|
||||
|
||||
// Pick from the wheel
|
||||
if (d < m_wheelRadius+2*guiscale()) {
|
||||
double a = std::atan2(-v, u);
|
||||
@ -176,7 +192,7 @@ void ColorWheel::onPaintMainArea(ui::Graphics* g, const gfx::Rect& rc)
|
||||
}
|
||||
}
|
||||
|
||||
if (m_color.getAlpha() > 0) {
|
||||
if (m_color.getAlpha() > 0 && m_colorModel != ColorModel::NORMAL_MAP) {
|
||||
int n = getHarmonies();
|
||||
int boxsize = MIN(rc.w/10, rc.h/10);
|
||||
|
||||
@ -305,16 +321,32 @@ void ColorWheel::onOptions()
|
||||
menu.addChild(&tetradic);
|
||||
menu.addChild(&square);
|
||||
|
||||
if (isDiscrete()) discrete.setSelected(true);
|
||||
switch (m_harmony) {
|
||||
case Harmony::NONE: none.setSelected(true); break;
|
||||
case Harmony::COMPLEMENTARY: complementary.setSelected(true); break;
|
||||
case Harmony::MONOCHROMATIC: monochromatic.setSelected(true); break;
|
||||
case Harmony::ANALOGOUS: analogous.setSelected(true); break;
|
||||
case Harmony::SPLIT: split.setSelected(true); break;
|
||||
case Harmony::TRIADIC: triadic.setSelected(true); break;
|
||||
case Harmony::TETRADIC: tetradic.setSelected(true); break;
|
||||
case Harmony::SQUARE: square.setSelected(true); break;
|
||||
if (m_colorModel == ColorModel::NORMAL_MAP) {
|
||||
discrete.setSelected(false);
|
||||
discrete.setEnabled(false);
|
||||
|
||||
none.setSelected(true);
|
||||
none.setEnabled(false);
|
||||
complementary.setEnabled(false);
|
||||
monochromatic.setEnabled(false);
|
||||
analogous.setEnabled(false);
|
||||
split.setEnabled(false);
|
||||
triadic.setEnabled(false);
|
||||
tetradic.setEnabled(false);
|
||||
square.setEnabled(false);
|
||||
}
|
||||
else {
|
||||
if (isDiscrete()) discrete.setSelected(true);
|
||||
switch (m_harmony) {
|
||||
case Harmony::NONE: none.setSelected(true); break;
|
||||
case Harmony::COMPLEMENTARY: complementary.setSelected(true); break;
|
||||
case Harmony::MONOCHROMATIC: monochromatic.setSelected(true); break;
|
||||
case Harmony::ANALOGOUS: analogous.setSelected(true); break;
|
||||
case Harmony::SPLIT: split.setSelected(true); break;
|
||||
case Harmony::TRIADIC: triadic.setSelected(true); break;
|
||||
case Harmony::TETRADIC: tetradic.setSelected(true); break;
|
||||
case Harmony::SQUARE: square.setSelected(true); break;
|
||||
}
|
||||
}
|
||||
|
||||
discrete.Click.connect(base::Bind<void>(&ColorWheel::setDiscrete, this, !isDiscrete()));
|
||||
|
@ -18,6 +18,7 @@ namespace app {
|
||||
enum class ColorModel {
|
||||
RGB,
|
||||
RYB,
|
||||
NORMAL_MAP,
|
||||
};
|
||||
|
||||
enum class Harmony {
|
||||
|
Loading…
x
Reference in New Issue
Block a user