Add ColorSlidersChangeEvent so ColorSliders::ColorChange signal

can receive the modified channel.
This commit is contained in:
David Capello 2011-03-03 22:16:54 -03:00
parent bb1151c0ac
commit d7458bc78f
4 changed files with 58 additions and 20 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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)

View File

@ -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