mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-14 09:41:19 +00:00
Add ColorSlidersChangeEvent so ColorSliders::ColorChange signal
can receive the modified channel.
This commit is contained in:
parent
bb1151c0ac
commit
d7458bc78f
@ -122,19 +122,10 @@ void ColorSelector::onColorPaletteIndexChange(int index)
|
||||
setColorWithSignal(Color::fromIndex(index));
|
||||
}
|
||||
|
||||
void ColorSelector::onColorSlidersChange(const Color& color)
|
||||
void ColorSelector::onColorSlidersChange(ColorSlidersChangeEvent& ev)
|
||||
{
|
||||
setColorWithSignal(color);
|
||||
|
||||
// Find bestfit palette entry
|
||||
int r = color.getRed();
|
||||
int g = color.getGreen();
|
||||
int b = color.getBlue();
|
||||
|
||||
// Search for the closest color to the RGB values
|
||||
int i = get_current_palette()->findBestfit(r, g, b);
|
||||
if (i >= 0 && i < 256)
|
||||
m_colorPalette.selectColor(i);
|
||||
setColorWithSignal(ev.getColor());
|
||||
findBestfitIndex(ev.getColor());
|
||||
}
|
||||
|
||||
void ColorSelector::onColorHexEntryChange(const Color& color)
|
||||
@ -143,7 +134,8 @@ void ColorSelector::onColorHexEntryChange(const Color& color)
|
||||
// is writting in the text field.
|
||||
m_disableHexUpdate = true;
|
||||
|
||||
onColorSlidersChange(color);
|
||||
setColorWithSignal(color);
|
||||
findBestfitIndex(color);
|
||||
|
||||
m_disableHexUpdate = false;
|
||||
}
|
||||
@ -162,6 +154,19 @@ void ColorSelector::onColorTypeButtonClick(Event& ev)
|
||||
}
|
||||
}
|
||||
|
||||
void ColorSelector::findBestfitIndex(const Color& color)
|
||||
{
|
||||
// Find bestfit palette entry
|
||||
int r = color.getRed();
|
||||
int g = color.getGreen();
|
||||
int b = color.getBlue();
|
||||
|
||||
// Search for the closest color to the RGB values
|
||||
int i = get_current_palette()->findBestfit(r, g, b);
|
||||
if (i >= 0 && i < 256)
|
||||
m_colorPalette.selectColor(i);
|
||||
}
|
||||
|
||||
void ColorSelector::setColorWithSignal(const Color& color)
|
||||
{
|
||||
setColor(color);
|
||||
|
@ -43,13 +43,14 @@ public:
|
||||
|
||||
protected:
|
||||
void onColorPaletteIndexChange(int index);
|
||||
void onColorSlidersChange(const Color& color);
|
||||
void onColorSlidersChange(ColorSlidersChangeEvent& ev);
|
||||
void onColorHexEntryChange(const Color& color);
|
||||
void onColorTypeButtonClick(Event& ev);
|
||||
|
||||
private:
|
||||
void selectColorType(Color::Type type);
|
||||
void setColorWithSignal(const Color& color);
|
||||
void findBestfitIndex(const Color& color);
|
||||
|
||||
Box m_vbox;
|
||||
Box m_topBox;
|
||||
|
@ -122,6 +122,7 @@ void ColorSliders::addSlider(Channel channel, const char* labelText, int min, in
|
||||
m_label.push_back(label);
|
||||
m_slider.push_back(slider);
|
||||
m_entry.push_back(entry);
|
||||
m_channel.push_back(channel);
|
||||
|
||||
slider->setProperty(PropertyPtr(new SkinSliderProperty(new ColorSliderBgPainter(channel))));
|
||||
slider->setDoubleBuffered(true);
|
||||
@ -153,7 +154,7 @@ void ColorSliders::onSliderChange(int i)
|
||||
// Update the entry related to the changed slider widget.
|
||||
m_entry[i]->setTextf("%d", m_slider[i]->getValue());
|
||||
|
||||
onControlChange();
|
||||
onControlChange(i);
|
||||
}
|
||||
|
||||
void ColorSliders::onEntryChange(int i)
|
||||
@ -167,10 +168,10 @@ void ColorSliders::onEntryChange(int i)
|
||||
|
||||
m_slider[i]->setValue(value);
|
||||
|
||||
onControlChange();
|
||||
onControlChange(i);
|
||||
}
|
||||
|
||||
void ColorSliders::onControlChange()
|
||||
void ColorSliders::onControlChange(int i)
|
||||
{
|
||||
// Call derived class impl of getColorFromSliders() to update the
|
||||
// background color of sliders.
|
||||
@ -179,7 +180,8 @@ void ColorSliders::onControlChange()
|
||||
updateSlidersBgColor(color);
|
||||
|
||||
// Fire ColorChange() signal
|
||||
ColorChange(color);
|
||||
ColorSlidersChangeEvent ev(color, m_channel[i], this);
|
||||
ColorChange(ev);
|
||||
}
|
||||
|
||||
void ColorSliders::updateSlidersBgColor(const Color& color)
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
#include "app/color.h"
|
||||
#include "base/signal.h"
|
||||
#include "gui/event.h"
|
||||
#include "gui/grid.h"
|
||||
#include "gui/widget.h"
|
||||
|
||||
@ -30,6 +31,11 @@ class Label;
|
||||
class Slider;
|
||||
class Entry;
|
||||
|
||||
class ColorSlidersChangeEvent;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// ColorSliders class
|
||||
|
||||
class ColorSliders : public Widget
|
||||
{
|
||||
public:
|
||||
@ -43,7 +49,7 @@ public:
|
||||
void setColor(const Color& color);
|
||||
|
||||
// Signals
|
||||
Signal1<void, const Color&> ColorChange;
|
||||
Signal1<void, ColorSlidersChangeEvent&> ColorChange;
|
||||
|
||||
protected:
|
||||
void onPreferredSize(PreferredSizeEvent& ev);
|
||||
@ -59,7 +65,7 @@ protected:
|
||||
private:
|
||||
void onSliderChange(int i);
|
||||
void onEntryChange(int i);
|
||||
void onControlChange();
|
||||
void onControlChange(int i);
|
||||
|
||||
void updateSlidersBgColor(const Color& color);
|
||||
void updateSliderBgColor(Slider* slider, const Color& color);
|
||||
@ -67,9 +73,13 @@ private:
|
||||
std::vector<Label*> m_label;
|
||||
std::vector<Slider*> m_slider;
|
||||
std::vector<Entry*> m_entry;
|
||||
std::vector<Channel> m_channel;
|
||||
Grid m_grid;
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Derived-classes
|
||||
|
||||
class RgbSliders : public ColorSliders
|
||||
{
|
||||
public:
|
||||
@ -100,4 +110,24 @@ private:
|
||||
virtual Color getColorFromSliders();
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Events
|
||||
|
||||
class ColorSlidersChangeEvent : public Event
|
||||
{
|
||||
public:
|
||||
ColorSlidersChangeEvent(const Color& color, ColorSliders::Channel channel, Component* source)
|
||||
: Event(source)
|
||||
, m_color(color)
|
||||
, m_channel(channel) { }
|
||||
|
||||
Color getColor() const { return m_color; }
|
||||
|
||||
ColorSliders::Channel getModifiedChannel() const { return m_channel; }
|
||||
|
||||
private:
|
||||
Color m_color;
|
||||
ColorSliders::Channel m_channel;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user