mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-30 04:20:23 +00:00
Show a color indicator in ColorSpectrum as in ColorWheel
This commit is contained in:
parent
c34f0e4eb7
commit
48cc6d2dd0
@ -59,8 +59,12 @@ void SwitchColorsCommand::onExecute(Context* context)
|
||||
ColorBar* colorbar = ColorBar::instance();
|
||||
app::Color fg = colorbar->getFgColor();
|
||||
app::Color bg = colorbar->getBgColor();
|
||||
colorbar->setFgColor(bg);
|
||||
|
||||
// Change the background and then the foreground color so the color
|
||||
// spectrum and color wheel shows the foreground color as the
|
||||
// selected one.
|
||||
colorbar->setBgColor(fg);
|
||||
colorbar->setFgColor(bg);
|
||||
}
|
||||
|
||||
Command* CommandFactory::createSwitchColorsCommand()
|
||||
|
@ -318,6 +318,7 @@ void ColorBar::setColorSelector(ColorSelector selector)
|
||||
if (!m_spectrum) {
|
||||
m_spectrum = new ColorSpectrum;
|
||||
m_spectrum->setExpansive(true);
|
||||
m_spectrum->selectColor(m_fgColor.getColor());
|
||||
m_spectrum->ColorChange.connect(&ColorBar::onPickSpectrum, this);
|
||||
m_selectorPlaceholder.addChild(m_spectrum);
|
||||
}
|
||||
@ -772,6 +773,9 @@ void ColorBar::onColorButtonChange(const app::Color& color)
|
||||
m_paletteView.invalidate();
|
||||
}
|
||||
|
||||
if (m_spectrum && m_spectrum->isVisible())
|
||||
m_spectrum->selectColor(color);
|
||||
|
||||
if (m_wheel && m_wheel->isVisible())
|
||||
m_wheel->selectColor(color);
|
||||
}
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "app/color_utils.h"
|
||||
#include "app/ui/skin/skin_theme.h"
|
||||
#include "app/ui/status_bar.h"
|
||||
#include "she/surface.h"
|
||||
#include "ui/graphics.h"
|
||||
#include "ui/message.h"
|
||||
#include "ui/paint_event.h"
|
||||
@ -69,6 +70,12 @@ app::Color ColorSpectrum::pickColor(const gfx::Point& pos) const
|
||||
MID(0, val, 100));
|
||||
}
|
||||
|
||||
void ColorSpectrum::selectColor(const app::Color& color)
|
||||
{
|
||||
m_color = color;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
void ColorSpectrum::onPreferredSize(PreferredSizeEvent& ev)
|
||||
{
|
||||
ev.setPreferredSize(gfx::Size(32*ui::guiscale(), 32*ui::guiscale()));
|
||||
@ -122,6 +129,20 @@ void ColorSpectrum::onPaint(ui::PaintEvent& ev)
|
||||
g->putPixel(color, rc.x+x, rc.y+y);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_color.getType() != app::Color::MaskType) {
|
||||
int hue = m_color.getHue();
|
||||
int sat = m_color.getSaturation();
|
||||
int val = m_color.getValue();
|
||||
int lit = (200 - sat) * val / 200;
|
||||
gfx::Point pos(rc.x + hue * rc.w / 360,
|
||||
rc.y + rc.h - (lit * rc.h / 100));
|
||||
|
||||
she::Surface* icon = theme->parts.colorWheelIndicator()->getBitmap(0);
|
||||
g->drawRgbaSurface(icon,
|
||||
pos.x-icon->width()/2,
|
||||
pos.y-icon->height()/2);
|
||||
}
|
||||
}
|
||||
|
||||
bool ColorSpectrum::onProcessMessage(ui::Message* msg)
|
||||
|
@ -22,6 +22,7 @@ namespace app {
|
||||
~ColorSpectrum();
|
||||
|
||||
app::Color pickColor(const gfx::Point& pos) const;
|
||||
void selectColor(const app::Color& color);
|
||||
|
||||
// Signals
|
||||
Signal2<void, const app::Color&, ui::MouseButtons> ColorChange;
|
||||
@ -31,6 +32,9 @@ namespace app {
|
||||
void onResize(ui::ResizeEvent& ev) override;
|
||||
void onPaint(ui::PaintEvent& ev) override;
|
||||
bool onProcessMessage(ui::Message* msg) override;
|
||||
|
||||
private:
|
||||
app::Color m_color;
|
||||
};
|
||||
|
||||
} // namespace app
|
||||
|
Loading…
x
Reference in New Issue
Block a user