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

View File

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

View File

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

View File

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