Listen to palette changes in ColorSelector.

This commit is contained in:
David Capello 2011-06-25 20:17:48 -03:00
parent 12de365e6f
commit e74bebcc79
3 changed files with 29 additions and 5 deletions

View File

@ -79,6 +79,10 @@ void ColorButton::setColor(const Color& color)
{
m_color = color;
// Change the color in its related frame
if (m_frame)
m_frame->setColor(m_color, ColorSelector::DoNotChangeType);
// Emit signal
Change(color);
@ -232,7 +236,7 @@ void ColorButton::openSelectorDialog()
m_frame->ColorChange.connect(&ColorButton::onFrameColorChange, this);
}
m_frame->setColor(m_color);
m_frame->setColor(m_color, ColorSelector::ChangeType);
m_frame->open_window();
x = MID(0, this->rc->x1, JI_SCREEN_W-jrect_w(m_frame->rc));

View File

@ -99,15 +99,21 @@ ColorSelector::ColorSelector()
selectColorType(Color::RgbType);
setPreferredSize(gfx::Size(300*jguiscale(), getPreferredSize().h));
m_onPaletteChangeSlot =
App::instance()->PaletteChange.connect(&ColorSelector::onPaletteChange, this);
initTheme();
}
ColorSelector::~ColorSelector()
{
App::instance()->PaletteChange.disconnect(m_onPaletteChangeSlot);
delete m_onPaletteChangeSlot;
getPin()->getParent()->removeChild(getPin());
}
void ColorSelector::setColor(const Color& color)
void ColorSelector::setColor(const Color& color, SetColorOptions options)
{
m_color = color;
@ -120,7 +126,8 @@ void ColorSelector::setColor(const Color& color)
if (!m_disableHexUpdate)
m_hexColorEntry.setColor(m_color);
selectColorType(m_color.getType());
if (options == ChangeType)
selectColorType(m_color.getType());
}
Color ColorSelector::getColor() const
@ -165,6 +172,12 @@ void ColorSelector::onColorTypeButtonClick(Event& ev)
}
}
void ColorSelector::onPaletteChange()
{
setColor(getColor(), DoNotChangeType);
invalidate();
}
void ColorSelector::findBestfitIndex(const Color& color)
{
// Find bestfit palette entry
@ -180,7 +193,7 @@ void ColorSelector::findBestfitIndex(const Color& color)
void ColorSelector::setColorWithSignal(const Color& color)
{
setColor(color);
setColor(color, ChangeType);
// Fire ColorChange signal
ColorChange(color);

View File

@ -33,10 +33,15 @@
class ColorSelector : public PopupFramePin
{
public:
enum SetColorOptions {
ChangeType,
DoNotChangeType
};
ColorSelector();
~ColorSelector();
void setColor(const Color& color);
void setColor(const Color& color, SetColorOptions options);
Color getColor() const;
// Signals
@ -47,6 +52,7 @@ protected:
void onColorSlidersChange(ColorSlidersChangeEvent& ev);
void onColorHexEntryChange(const Color& color);
void onColorTypeButtonClick(Event& ev);
void onPaletteChange();
private:
void selectColorType(Color::Type type);
@ -68,6 +74,7 @@ private:
HsvSliders m_hsvSliders;
GraySlider m_graySlider;
Label m_maskLabel;
Signal0<void>::SlotType* m_onPaletteChangeSlot;
// This variable is used to avoid updating the m_hexColorEntry text
// when the color change is generated from a