mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-14 04:19:12 +00:00
Implement app::IColorSource in color selectors
This commit is contained in:
parent
07b67a66f7
commit
497cfa61a4
@ -10,13 +10,15 @@
|
||||
#pragma once
|
||||
|
||||
#include "app/color.h"
|
||||
#include "app/ui/color_source.h"
|
||||
#include "base/signal.h"
|
||||
#include "ui/mouse_buttons.h"
|
||||
#include "ui/widget.h"
|
||||
|
||||
namespace app {
|
||||
|
||||
class ColorSelector : public ui::Widget {
|
||||
class ColorSelector : public ui::Widget
|
||||
, public IColorSource {
|
||||
public:
|
||||
ColorSelector();
|
||||
|
||||
|
@ -34,7 +34,7 @@ ColorSpectrum::ColorSpectrum()
|
||||
setBorder(gfx::Border(3*ui::guiscale()));
|
||||
}
|
||||
|
||||
app::Color ColorSpectrum::pickColor(const gfx::Point& pos) const
|
||||
app::Color ColorSpectrum::getColorByPosition(const gfx::Point& pos)
|
||||
{
|
||||
gfx::Rect rc = childrenBounds();
|
||||
if (rc.isEmpty())
|
||||
@ -137,7 +137,7 @@ bool ColorSpectrum::onProcessMessage(ui::Message* msg)
|
||||
case kMouseMoveMessage: {
|
||||
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
|
||||
|
||||
app::Color color = pickColor(mouseMsg->position());
|
||||
app::Color color = getColorByPosition(mouseMsg->position());
|
||||
if (color != app::Color::fromMask()) {
|
||||
StatusBar::instance()->showColor(0, "", color);
|
||||
if (hasCapture())
|
||||
|
@ -18,7 +18,8 @@ namespace app {
|
||||
public:
|
||||
ColorSpectrum();
|
||||
|
||||
app::Color pickColor(const gfx::Point& pos) const;
|
||||
// IColorSource
|
||||
app::Color getColorByPosition(const gfx::Point& pos) override;
|
||||
|
||||
protected:
|
||||
void onPaint(ui::PaintEvent& ev) override;
|
||||
|
@ -34,7 +34,7 @@ ColorTintShadeTone::ColorTintShadeTone()
|
||||
setBorder(gfx::Border(3*ui::guiscale()));
|
||||
}
|
||||
|
||||
app::Color ColorTintShadeTone::pickColor(const gfx::Point& pos) const
|
||||
app::Color ColorTintShadeTone::getColorByPosition(const gfx::Point& pos)
|
||||
{
|
||||
gfx::Rect rc = childrenBounds();
|
||||
if (rc.isEmpty())
|
||||
@ -49,7 +49,11 @@ app::Color ColorTintShadeTone::pickColor(const gfx::Point& pos) const
|
||||
|
||||
double hue, sat, val;
|
||||
|
||||
if (m_capturedInHue) {
|
||||
bool inHue =
|
||||
(( hasCapture() && m_capturedInHue) ||
|
||||
(!hasCapture() && inHueBarArea(pos)));
|
||||
|
||||
if (inHue) {
|
||||
hue = (360.0 * u / umax);
|
||||
sat = m_color.getSaturation();
|
||||
val = m_color.getValue();
|
||||
@ -142,23 +146,28 @@ bool ColorTintShadeTone::onProcessMessage(ui::Message* msg)
|
||||
switch (msg->type()) {
|
||||
|
||||
case kMouseDownMessage:
|
||||
if (manager()->getCapture())
|
||||
break;
|
||||
|
||||
captureMouse();
|
||||
|
||||
// Continue...
|
||||
|
||||
case kMouseMoveMessage: {
|
||||
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
|
||||
case kMouseMoveMessage:
|
||||
if (hasCapture()) {
|
||||
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
|
||||
|
||||
if (msg->type() == kMouseDownMessage)
|
||||
m_capturedInHue = inHueBarArea(mouseMsg->position());
|
||||
if (msg->type() == kMouseDownMessage)
|
||||
m_capturedInHue = inHueBarArea(mouseMsg->position());
|
||||
|
||||
app::Color color = pickColor(mouseMsg->position());
|
||||
if (color != app::Color::fromMask()) {
|
||||
StatusBar::instance()->showColor(0, "", color);
|
||||
if (hasCapture())
|
||||
ColorChange(color, mouseMsg->buttons());
|
||||
app::Color color = getColorByPosition(mouseMsg->position());
|
||||
if (color != app::Color::fromMask()) {
|
||||
StatusBar::instance()->showColor(0, "", color);
|
||||
if (hasCapture())
|
||||
ColorChange(color, mouseMsg->buttons());
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case kMouseUpMessage:
|
||||
if (hasCapture()) {
|
||||
|
@ -17,12 +17,14 @@ namespace app {
|
||||
public:
|
||||
ColorTintShadeTone();
|
||||
|
||||
// IColorSource
|
||||
app::Color getColorByPosition(const gfx::Point& pos) override;
|
||||
|
||||
protected:
|
||||
void onPaint(ui::PaintEvent& ev) override;
|
||||
bool onProcessMessage(ui::Message* msg) override;
|
||||
|
||||
private:
|
||||
app::Color pickColor(const gfx::Point& pos) const;
|
||||
bool inHueBarArea(const gfx::Point& pos) const;
|
||||
int getHueBarSize() const;
|
||||
|
||||
|
@ -72,7 +72,12 @@ ColorWheel::ColorWheel()
|
||||
addChild(&m_options);
|
||||
}
|
||||
|
||||
app::Color ColorWheel::pickColor(const gfx::Point& pos) const
|
||||
app::Color ColorWheel::getColorByPosition(const gfx::Point& mousePos)
|
||||
{
|
||||
return getColorInClientPos(mousePos - bounds().origin());
|
||||
}
|
||||
|
||||
app::Color ColorWheel::getColorInClientPos(const gfx::Point& pos)
|
||||
{
|
||||
m_harmonyPicked = false;
|
||||
|
||||
@ -213,7 +218,7 @@ void ColorWheel::onPaint(ui::PaintEvent& ev)
|
||||
for (int y=rc.y; y<rc.y+rc.h; ++y) {
|
||||
for (int x=rc.x; x<rc.x+rc.w; ++x) {
|
||||
app::Color appColor =
|
||||
ColorWheel::pickColor(gfx::Point(x, y));
|
||||
ColorWheel::getColorInClientPos(gfx::Point(x, y));
|
||||
|
||||
gfx::Color color;
|
||||
if (appColor.getType() != app::Color::MaskType) {
|
||||
@ -271,7 +276,7 @@ bool ColorWheel::onProcessMessage(ui::Message* msg)
|
||||
case kMouseMoveMessage: {
|
||||
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
|
||||
|
||||
app::Color color = pickColor(
|
||||
app::Color color = getColorInClientPos(
|
||||
mouseMsg->position()
|
||||
- bounds().origin());
|
||||
|
||||
@ -293,7 +298,7 @@ bool ColorWheel::onProcessMessage(ui::Message* msg)
|
||||
|
||||
case kSetCursorMessage: {
|
||||
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
|
||||
app::Color color = pickColor(
|
||||
app::Color color = getColorInClientPos(
|
||||
mouseMsg->position()
|
||||
- bounds().origin());
|
||||
|
||||
|
@ -35,7 +35,8 @@ namespace app {
|
||||
|
||||
ColorWheel();
|
||||
|
||||
app::Color pickColor(const gfx::Point& pos) const;
|
||||
// IColorSource
|
||||
app::Color getColorByPosition(const gfx::Point& pos) override;
|
||||
|
||||
bool isDiscrete() const { return m_discrete; }
|
||||
void setDiscrete(bool state);
|
||||
@ -44,6 +45,7 @@ namespace app {
|
||||
void setHarmony(Harmony harmony);
|
||||
|
||||
private:
|
||||
app::Color getColorInClientPos(const gfx::Point& pos);
|
||||
void onResize(ui::ResizeEvent& ev) override;
|
||||
void onPaint(ui::PaintEvent& ev) override;
|
||||
bool onProcessMessage(ui::Message* msg) override;
|
||||
|
Loading…
x
Reference in New Issue
Block a user