summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ui/selected-color.cpp17
-rw-r--r--src/ui/selected-color.h2
-rw-r--r--src/ui/widget/color-scales.cpp11
-rw-r--r--src/widgets/paint-selector.cpp18
4 files changed, 28 insertions, 20 deletions
diff --git a/src/ui/selected-color.cpp b/src/ui/selected-color.cpp
index 7652e5acf..6573129d3 100644
--- a/src/ui/selected-color.cpp
+++ b/src/ui/selected-color.cpp
@@ -72,7 +72,7 @@ guint32 SelectedColor::value() const
return color().toRGBA32(_alpha);
}
-void SelectedColor::setColorAlpha(SPColor const &color, gfloat alpha)
+void SelectedColor::setColorAlpha(SPColor const &color, gfloat alpha, bool emit_signal)
{
#ifdef DUMP_CHANGE_INFO
g_message("SelectedColor::setColorAlpha( this=%p, %f, %f, %f, %s, %f, %s) in %s", this, color.v.c[0], color.v.c[1], color.v.c[2], (color.icc?color.icc->colorProfile.c_str():"<null>"), alpha, (emit?"YES":"no"), FOO_NAME(_csel));
@@ -100,13 +100,16 @@ void SelectedColor::setColorAlpha(SPColor const &color, gfloat alpha)
_color = color;
_alpha = alpha;
- _updating = true;
- if (_held) {
- signal_dragged.emit();
- } else {
- signal_changed.emit();
+ if (emit_signal)
+ {
+ _updating = true;
+ if (_held) {
+ signal_dragged.emit();
+ } else {
+ signal_changed.emit();
+ }
+ _updating = false;
}
- _updating = false;
#ifdef DUMP_CHANGE_INFO
} else {
diff --git a/src/ui/selected-color.h b/src/ui/selected-color.h
index 168099c82..e9e702d43 100644
--- a/src/ui/selected-color.h
+++ b/src/ui/selected-color.h
@@ -38,7 +38,7 @@ public:
void setValue(guint32 value);
guint32 value() const;
- void setColorAlpha(SPColor const &color, gfloat alpha);
+ void setColorAlpha(SPColor const &color, gfloat alpha, bool emit_signal = true);
void colorAlpha(SPColor &color, gfloat &alpha) const;
void setHeld(bool held);
diff --git a/src/ui/widget/color-scales.cpp b/src/ui/widget/color-scales.cpp
index 5fa5af902..ead636406 100644
--- a/src/ui/widget/color-scales.cpp
+++ b/src/ui/widget/color-scales.cpp
@@ -376,8 +376,8 @@ void ColorScales::setMode(SPColorScalesMode mode)
setScaled(_a[1], rgba[1]);
setScaled(_a[2], rgba[2]);
setScaled(_a[3], rgba[3]);
- _updating = FALSE;
_updateSliders(CSC_CHANNELS_ALL);
+ _updating = FALSE;
break;
case SP_COLOR_SCALES_MODE_HSV:
_setRangeLimit(255.0);
@@ -404,8 +404,8 @@ void ColorScales::setMode(SPColorScalesMode mode)
setScaled(_a[1], c[1]);
setScaled(_a[2], c[2]);
setScaled(_a[3], rgba[3]);
- _updating = FALSE;
_updateSliders(CSC_CHANNELS_ALL);
+ _updating = FALSE;
break;
case SP_COLOR_SCALES_MODE_CMYK:
_setRangeLimit(100.0);
@@ -437,8 +437,8 @@ void ColorScales::setMode(SPColorScalesMode mode)
setScaled(_a[3], c[3]);
setScaled(_a[4], rgba[3]);
- _updating = FALSE;
_updateSliders(CSC_CHANNELS_ALL);
+ _updating = FALSE;
break;
default:
g_warning("file %s: line %d: Illegal color selector mode", __FILE__, __LINE__);
@@ -607,11 +607,6 @@ void ColorScales::_updateSliders(guint channels)
break;
}
- // Force the internal color to be updated
- if (!_updating) {
- _recalcColor();
- }
-
#ifdef SPCS_PREVIEW
rgba = sp_color_scales_get_rgba32(cs);
sp_color_preview_set_rgba32(SP_COLOR_PREVIEW(_p), rgba);
diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp
index 8dd309260..f9a537f41 100644
--- a/src/widgets/paint-selector.cpp
+++ b/src/widgets/paint-selector.cpp
@@ -657,7 +657,12 @@ void SPPaintSelector::onSelectedColorChanged() {
if (updating_color) {
return;
}
- g_signal_emit(G_OBJECT(this), psel_signals[CHANGED], 0);
+
+ if (mode == MODE_SOLID_COLOR) {
+ g_signal_emit(G_OBJECT(this), psel_signals[CHANGED], 0);
+ } else {
+ g_warning("SPPaintSelector::onSelectedColorChanged(): selected color changed while not in color selection mode");
+ }
}
static void sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelector::Mode /*mode*/)
@@ -670,9 +675,14 @@ static void sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelec
SPGradientSelector *gsel = getGradientFromData(psel);
if (gsel) {
SPGradient *gradient = gsel->getVector();
- SPColor color = gradient->getFirstStop()->specified_color;
- float alpha = gradient->getFirstStop()->opacity;
- psel->selected_color->setColorAlpha(color, alpha);
+
+ // Gradient can be null if object paint is changed externally (ie. with a color picker tool)
+ if (gradient)
+ {
+ SPColor color = gradient->getFirstStop()->specified_color;
+ float alpha = gradient->getFirstStop()->opacity;
+ psel->selected_color->setColorAlpha(color, alpha, false);
+ }
}
}