summaryrefslogtreecommitdiffstats
path: root/src/ui/selected-color.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/selected-color.cpp')
-rw-r--r--src/ui/selected-color.cpp41
1 files changed, 32 insertions, 9 deletions
diff --git a/src/ui/selected-color.cpp b/src/ui/selected-color.cpp
index dff43649c..0d3505c45 100644
--- a/src/ui/selected-color.cpp
+++ b/src/ui/selected-color.cpp
@@ -34,6 +34,7 @@ SelectedColor::SelectedColor()
, _alpha(1.0)
, _held(false)
, _virgin(true)
+ , _updating(false)
{
}
@@ -44,7 +45,7 @@ SelectedColor::~SelectedColor() {
void SelectedColor::setColor(SPColor const &color)
{
- setColorAlpha( color, _alpha, true);
+ setColorAlpha( color, _alpha);
}
SPColor SelectedColor::color() const
@@ -55,7 +56,7 @@ SPColor SelectedColor::color() const
void SelectedColor::setAlpha(gfloat alpha)
{
g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) );
- setColorAlpha( _color, alpha, true);
+ setColorAlpha( _color, alpha);
}
gfloat SelectedColor::alpha() const
@@ -63,13 +64,29 @@ gfloat SelectedColor::alpha() const
return _alpha;
}
-void SelectedColor::setColorAlpha(SPColor const &color, gfloat alpha, bool emit)
+void SelectedColor::setValue(guint32 value)
+{
+ SPColor color(value);
+ gfloat alpha = SP_RGBA32_A_F(value);
+ setColorAlpha(color, alpha);
+}
+
+guint32 SelectedColor::value() const
+{
+ return color().toRGBA32(_alpha);
+}
+
+void SelectedColor::setColorAlpha(SPColor const &color, gfloat alpha)
{
#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));
#endif
g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) );
+ if (_updating) {
+ return;
+ }
+
#ifdef DUMP_CHANGE_INFO
g_message("---- SelectedColor::setColorAlpha virgin:%s !close:%s alpha is:%s in %s",
(_virgin?"YES":"no"),
@@ -87,13 +104,14 @@ void SelectedColor::setColorAlpha(SPColor const &color, gfloat alpha, bool emit)
_color = color;
_alpha = alpha;
- if (emit) {
- if (_held) {
- signal_dragged.emit();
- } else {
- signal_changed.emit();
- }
+ _updating = true;
+ if (_held) {
+ signal_dragged.emit();
+ } else {
+ signal_changed.emit();
}
+ _updating = false;
+
#ifdef DUMP_CHANGE_INFO
} else {
g_message("++++ SelectedColor::setColorAlpha color:%08x ==> _color:%08X isClose:%s in %s", color.toRGBA32(alpha), _color.toRGBA32(_alpha),
@@ -108,11 +126,15 @@ void SelectedColor::colorAlpha(SPColor &color, gfloat &alpha) const {
}
void SelectedColor::setHeld(bool held) {
+ if (_updating) {
+ return;
+ }
bool grabbed = held && !_held;
bool released = !held && _held;
_held = held;
+ _updating = true;
if (grabbed) {
signal_grabbed.emit();
}
@@ -121,6 +143,7 @@ void SelectedColor::setHeld(bool held) {
signal_released.emit();
signal_changed.emit();
}
+ _updating = false;
}
void SelectedColor::preserveICC() {