Select exact RGB match when we use eyedropper in RGB images

Fix #16
This commit is contained in:
David Capello 2015-05-11 11:25:53 -03:00
parent 2ac04c1c16
commit 7278f649f4
4 changed files with 44 additions and 12 deletions

View File

@ -401,9 +401,23 @@ void PaletteEntryEditor::onCloseWindow()
ColorBar::instance()->setPaletteEditorButtonState(false);
}
void PaletteEntryEditor::onFgBgColorChange(const app::Color& color)
void PaletteEntryEditor::onFgBgColorChange(const app::Color& _color)
{
if (color.isValid() && color.getType() == app::Color::IndexType) {
app::Color color = _color;
if (!color.isValid())
return;
if (color.getType() != app::Color::IndexType) {
PaletteView* paletteView = ColorBar::instance()->getPaletteView();
int index = paletteView->getSelectedEntry();
if (index < 0)
return;
color = app::Color::fromIndex(index);
}
if (color.getType() == app::Color::IndexType) {
setColor(color);
resetRelativeInfo();
}

View File

@ -220,14 +220,20 @@ app::Color ColorBar::getBgColor()
void ColorBar::setFgColor(const app::Color& color)
{
m_fgColor.setColor(color);
m_paletteView.invalidate();
if (!m_lock)
onColorButtonChange(color);
FgColorChange(color);
}
void ColorBar::setBgColor(const app::Color& color)
{
m_bgColor.setColor(color);
m_paletteView.invalidate();
if (!m_lock)
onColorButtonChange(color);
BgColorChange(color);
}
@ -470,8 +476,8 @@ void ColorBar::onFgColorButtonChange(const app::Color& color)
m_paletteView.invalidate();
}
FgColorChange(color);
onColorButtonChange(color);
FgColorChange(color);
}
void ColorBar::onBgColorButtonChange(const app::Color& color)
@ -481,26 +487,29 @@ void ColorBar::onBgColorButtonChange(const app::Color& color)
m_paletteView.invalidate();
}
BgColorChange(color);
onColorButtonChange(color);
BgColorChange(color);
}
void ColorBar::onColorButtonChange(const app::Color& color)
{
if (color.getType() == app::Color::IndexType)
m_paletteView.selectColor(color.getIndex());
else {
m_paletteView.selectExactMatchColor(color);
// As foreground or background color changed, we've to redraw the
// palette view fg/bg indicators.
m_paletteView.invalidate();
}
}
void ColorBar::onPickSpectrum(const app::Color& color, ui::MouseButtons buttons)
{
m_lock = true;
if ((buttons & kButtonRight) == kButtonRight)
setBgColor(color);
else
setFgColor(color);
m_lock = false;
}
void ColorBar::onReverseColors()

View File

@ -121,6 +121,13 @@ void PaletteView::selectColor(int index)
}
}
void PaletteView::selectExactMatchColor(const app::Color& color)
{
int index = findExactIndex(color);
if (index >= 0)
selectColor(index);
}
void PaletteView::selectRange(int index1, int index2)
{
m_rangeAnchor = index1;
@ -763,7 +770,8 @@ void PaletteView::setCursor()
ui::set_mouse_cursor(kArrowCursor);
}
int PaletteView::findExactIndex(const app::Color& color) const
// static
int PaletteView::findExactIndex(const app::Color& color)
{
switch (color.getType()) {

View File

@ -53,6 +53,7 @@ namespace app {
void deselect();
void selectColor(int index);
void selectExactMatchColor(const app::Color& color);
void selectRange(int index1, int index2);
int getSelectedEntry() const;
@ -123,7 +124,7 @@ namespace app {
bool pickedXY(const doc::PalettePicks& entries, int i, int dx, int dy) const;
void updateCopyFlag(ui::Message* msg);
void setCursor();
int findExactIndex(const app::Color& color) const;
static int findExactIndex(const app::Color& color);
State m_state;
bool m_editable;