mirror of
https://github.com/aseprite/aseprite.git
synced 2024-10-03 21:46:20 +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));
|
setColorWithSignal(Color::fromIndex(index));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColorSelector::onColorSlidersChange(const Color& color)
|
void ColorSelector::onColorSlidersChange(ColorSlidersChangeEvent& ev)
|
||||||
{
|
{
|
||||||
setColorWithSignal(color);
|
setColorWithSignal(ev.getColor());
|
||||||
|
findBestfitIndex(ev.getColor());
|
||||||
// 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::onColorHexEntryChange(const Color& color)
|
void ColorSelector::onColorHexEntryChange(const Color& color)
|
||||||
@ -143,7 +134,8 @@ void ColorSelector::onColorHexEntryChange(const Color& color)
|
|||||||
// is writting in the text field.
|
// is writting in the text field.
|
||||||
m_disableHexUpdate = true;
|
m_disableHexUpdate = true;
|
||||||
|
|
||||||
onColorSlidersChange(color);
|
setColorWithSignal(color);
|
||||||
|
findBestfitIndex(color);
|
||||||
|
|
||||||
m_disableHexUpdate = false;
|
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)
|
void ColorSelector::setColorWithSignal(const Color& color)
|
||||||
{
|
{
|
||||||
setColor(color);
|
setColor(color);
|
||||||
|
@ -43,13 +43,14 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void onColorPaletteIndexChange(int index);
|
void onColorPaletteIndexChange(int index);
|
||||||
void onColorSlidersChange(const Color& color);
|
void onColorSlidersChange(ColorSlidersChangeEvent& ev);
|
||||||
void onColorHexEntryChange(const Color& color);
|
void onColorHexEntryChange(const Color& color);
|
||||||
void onColorTypeButtonClick(Event& ev);
|
void onColorTypeButtonClick(Event& ev);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void selectColorType(Color::Type type);
|
void selectColorType(Color::Type type);
|
||||||
void setColorWithSignal(const Color& color);
|
void setColorWithSignal(const Color& color);
|
||||||
|
void findBestfitIndex(const Color& color);
|
||||||
|
|
||||||
Box m_vbox;
|
Box m_vbox;
|
||||||
Box m_topBox;
|
Box m_topBox;
|
||||||
|
@ -122,6 +122,7 @@ void ColorSliders::addSlider(Channel channel, const char* labelText, int min, in
|
|||||||
m_label.push_back(label);
|
m_label.push_back(label);
|
||||||
m_slider.push_back(slider);
|
m_slider.push_back(slider);
|
||||||
m_entry.push_back(entry);
|
m_entry.push_back(entry);
|
||||||
|
m_channel.push_back(channel);
|
||||||
|
|
||||||
slider->setProperty(PropertyPtr(new SkinSliderProperty(new ColorSliderBgPainter(channel))));
|
slider->setProperty(PropertyPtr(new SkinSliderProperty(new ColorSliderBgPainter(channel))));
|
||||||
slider->setDoubleBuffered(true);
|
slider->setDoubleBuffered(true);
|
||||||
@ -153,7 +154,7 @@ void ColorSliders::onSliderChange(int i)
|
|||||||
// Update the entry related to the changed slider widget.
|
// Update the entry related to the changed slider widget.
|
||||||
m_entry[i]->setTextf("%d", m_slider[i]->getValue());
|
m_entry[i]->setTextf("%d", m_slider[i]->getValue());
|
||||||
|
|
||||||
onControlChange();
|
onControlChange(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColorSliders::onEntryChange(int i)
|
void ColorSliders::onEntryChange(int i)
|
||||||
@ -167,10 +168,10 @@ void ColorSliders::onEntryChange(int i)
|
|||||||
|
|
||||||
m_slider[i]->setValue(value);
|
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
|
// Call derived class impl of getColorFromSliders() to update the
|
||||||
// background color of sliders.
|
// background color of sliders.
|
||||||
@ -179,7 +180,8 @@ void ColorSliders::onControlChange()
|
|||||||
updateSlidersBgColor(color);
|
updateSlidersBgColor(color);
|
||||||
|
|
||||||
// Fire ColorChange() signal
|
// Fire ColorChange() signal
|
||||||
ColorChange(color);
|
ColorSlidersChangeEvent ev(color, m_channel[i], this);
|
||||||
|
ColorChange(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColorSliders::updateSlidersBgColor(const Color& color)
|
void ColorSliders::updateSlidersBgColor(const Color& color)
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include "app/color.h"
|
#include "app/color.h"
|
||||||
#include "base/signal.h"
|
#include "base/signal.h"
|
||||||
|
#include "gui/event.h"
|
||||||
#include "gui/grid.h"
|
#include "gui/grid.h"
|
||||||
#include "gui/widget.h"
|
#include "gui/widget.h"
|
||||||
|
|
||||||
@ -30,6 +31,11 @@ class Label;
|
|||||||
class Slider;
|
class Slider;
|
||||||
class Entry;
|
class Entry;
|
||||||
|
|
||||||
|
class ColorSlidersChangeEvent;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// ColorSliders class
|
||||||
|
|
||||||
class ColorSliders : public Widget
|
class ColorSliders : public Widget
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -43,7 +49,7 @@ public:
|
|||||||
void setColor(const Color& color);
|
void setColor(const Color& color);
|
||||||
|
|
||||||
// Signals
|
// Signals
|
||||||
Signal1<void, const Color&> ColorChange;
|
Signal1<void, ColorSlidersChangeEvent&> ColorChange;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void onPreferredSize(PreferredSizeEvent& ev);
|
void onPreferredSize(PreferredSizeEvent& ev);
|
||||||
@ -59,7 +65,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
void onSliderChange(int i);
|
void onSliderChange(int i);
|
||||||
void onEntryChange(int i);
|
void onEntryChange(int i);
|
||||||
void onControlChange();
|
void onControlChange(int i);
|
||||||
|
|
||||||
void updateSlidersBgColor(const Color& color);
|
void updateSlidersBgColor(const Color& color);
|
||||||
void updateSliderBgColor(Slider* slider, const Color& color);
|
void updateSliderBgColor(Slider* slider, const Color& color);
|
||||||
@ -67,9 +73,13 @@ private:
|
|||||||
std::vector<Label*> m_label;
|
std::vector<Label*> m_label;
|
||||||
std::vector<Slider*> m_slider;
|
std::vector<Slider*> m_slider;
|
||||||
std::vector<Entry*> m_entry;
|
std::vector<Entry*> m_entry;
|
||||||
|
std::vector<Channel> m_channel;
|
||||||
Grid m_grid;
|
Grid m_grid;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// Derived-classes
|
||||||
|
|
||||||
class RgbSliders : public ColorSliders
|
class RgbSliders : public ColorSliders
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -100,4 +110,24 @@ private:
|
|||||||
virtual Color getColorFromSliders();
|
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
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user