summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTomasz Boczkowski <penginsbacon@gmail.com>2014-05-31 18:15:08 +0000
committerTomasz Boczkowski <penginsbacon@gmail.com>2014-05-31 18:15:08 +0000
commitd128fc4fd60ebcd8ac820f584b5a4b3b35ad5b00 (patch)
tree638e65f164634c0c376c6a03e07d3a02d142ea87 /src
parentupdated CMakeLists (diff)
downloadinkscape-d128fc4fd60ebcd8ac820f584b5a4b3b35ad5b00.tar.gz
inkscape-d128fc4fd60ebcd8ac820f584b5a4b3b35ad5b00.zip
SPColorScales c++-sification - using SelectedColor
(bzr r13341.6.40)
Diffstat (limited to 'src')
-rw-r--r--src/ui/widget/color-scales.cpp253
-rw-r--r--src/ui/widget/color-scales.h63
-rw-r--r--src/widgets/sp-color-icc-selector.cpp3
-rw-r--r--src/widgets/sp-color-notebook.cpp6
-rw-r--r--src/widgets/sp-color-notebook.h1
-rw-r--r--src/widgets/sp-color-selector.cpp2
6 files changed, 101 insertions, 227 deletions
diff --git a/src/ui/widget/color-scales.cpp b/src/ui/widget/color-scales.cpp
index bba44034a..234e7a2d1 100644
--- a/src/ui/widget/color-scales.cpp
+++ b/src/ui/widget/color-scales.cpp
@@ -32,27 +32,18 @@
#define CSC_CHANNELS_ALL 0
-
-G_BEGIN_DECLS
-
-static void sp_color_scales_class_init (SPColorScalesClass *klass);
-static void sp_color_scales_init (SPColorScales *cs);
-static void sp_color_scales_dispose(GObject *object);
-
-static void sp_color_scales_show_all (GtkWidget *widget);
-static void sp_color_scales_hide(GtkWidget *widget);
-
-static const gchar *sp_color_scales_hue_map (void);
-
-G_END_DECLS
-
-static SPColorSelectorClass *parent_class;
-
#define XPAD 4
#define YPAD 1
#define noDUMP_CHANGE_INFO 1
+namespace Inkscape {
+namespace UI {
+namespace Widget {
+
+
+static const gchar * sp_color_scales_hue_map ();
+
const gchar* ColorScales::SUBMODE_NAMES[] = {
N_("None"),
N_("RGB"),
@@ -60,54 +51,14 @@ const gchar* ColorScales::SUBMODE_NAMES[] = {
N_("CMYK")
};
-GType
-sp_color_scales_get_type (void)
-{
- static GType type = 0;
- if (!type) {
- static const GTypeInfo info = {
- sizeof (SPColorScalesClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) sp_color_scales_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (SPColorScales),
- 0, /* n_preallocs */
- (GInstanceInitFunc) sp_color_scales_init,
- NULL
- };
-
- type = g_type_register_static (SP_TYPE_COLOR_SELECTOR,
- "SPColorScales",
- &info,
- static_cast< GTypeFlags > (0) );
- }
- return type;
-}
-
-static void
-sp_color_scales_class_init (SPColorScalesClass *klass)
-{
- static const gchar* nameset[] = {N_("RGB"), N_("HSL"), N_("CMYK"), 0};
- GObjectClass *object_class = G_OBJECT_CLASS(klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
- SPColorSelectorClass *selector_class = SP_COLOR_SELECTOR_CLASS (klass);
-
- parent_class = SP_COLOR_SELECTOR_CLASS (g_type_class_peek_parent (klass));
-
- selector_class->name = nameset;
- selector_class->submode_count = 3;
-
- object_class->dispose = sp_color_scales_dispose;
-
- widget_class->show_all = sp_color_scales_show_all;
- widget_class->hide = sp_color_scales_hide;
-}
-
-ColorScales::ColorScales( SPColorSelector* csel )
- : ColorSelector( csel ),
- _mode( SP_COLOR_SCALES_MODE_NONE ),
+ColorScales::ColorScales(SelectedColor &color, SPColorScalesMode mode)
+#if GTK_CHECK_VERSION(3,0,0)
+ : Gtk::Grid()
+#else
+ : Gtk::Table(5, 3, false)
+#endif
+ , _color(color)
+ ,
_rangeLimit( 255.0 ),
_updating( FALSE ),
_dragging( FALSE )
@@ -118,6 +69,12 @@ ColorScales::ColorScales( SPColorSelector* csel )
_s[i] = 0;
_b[i] = 0;
}
+
+ _initUI(mode);
+
+ _color.signal_changed.connect(sigc::mem_fun(this, &ColorScales::_onColorChanged));
+ _color.signal_dragged.connect(sigc::mem_fun(this, &ColorScales::_onColorChanged));
+
}
ColorScales::~ColorScales()
@@ -130,30 +87,14 @@ ColorScales::~ColorScales()
}
}
-void sp_color_scales_init (SPColorScales *cs)
-{
- SP_COLOR_SELECTOR(cs)->base = new ColorScales( SP_COLOR_SELECTOR(cs) );
-
- if ( SP_COLOR_SELECTOR(cs)->base )
- {
- SP_COLOR_SELECTOR(cs)->base->init();
- }
-}
-
-void ColorScales::init()
+void ColorScales::_initUI(SPColorScalesMode mode)
{
gint i;
_updating = FALSE;
_dragging = FALSE;
-#if GTK_CHECK_VERSION(3,0,0)
- GtkWidget *t = gtk_grid_new();
-#else
- GtkWidget *t = gtk_table_new (5, 3, FALSE);
-#endif
- gtk_widget_show (t);
- gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 4);
+ GtkWidget *t = GTK_WIDGET(gobj());
/* Create components */
for (i = 0; i < static_cast< gint > (G_N_ELEMENTS(_a)) ; i++) {
@@ -211,42 +152,23 @@ void ColorScales::init()
g_object_set_data (G_OBJECT (_a[i]), "channel", GINT_TO_POINTER (i));
/* Signals */
g_signal_connect (G_OBJECT (_a[i]), "value_changed",
- G_CALLBACK (_adjustmentAnyChanged), _csel);
+ G_CALLBACK (_adjustmentAnyChanged), this);
_s[i]->signal_grabbed.connect(sigc::mem_fun(this, &ColorScales::_sliderAnyGrabbed));
_s[i]->signal_released.connect(sigc::mem_fun(this, &ColorScales::_sliderAnyReleased));
_s[i]->signal_value_changed.connect(sigc::mem_fun(this, &ColorScales::_sliderAnyChanged));
}
/* Initial mode is none, so it works */
- setMode(SP_COLOR_SCALES_MODE_RGB);
-}
-
-static void sp_color_scales_dispose(GObject *object)
-{
- if ((G_OBJECT_CLASS(parent_class))->dispose)
- (* (G_OBJECT_CLASS(parent_class))->dispose) (object);
-}
-
-static void
-sp_color_scales_show_all (GtkWidget *widget)
-{
- gtk_widget_show (widget);
-}
-
-static void sp_color_scales_hide(GtkWidget *widget)
-{
- gtk_widget_hide(widget);
-}
-
-GtkWidget *sp_color_scales_new()
-{
- SPColorScales *csel = SP_COLOR_SCALES(g_object_new (SP_TYPE_COLOR_SCALES, NULL));
-
- return GTK_WIDGET (csel);
+ setMode(mode);
}
void ColorScales::_recalcColor( gboolean changing )
{
+ if (_updating) {
+ return;
+ }
+ _updating = true;
+
if ( changing )
{
SPColor color;
@@ -275,15 +197,14 @@ void ColorScales::_recalcColor( gboolean changing )
break;
}
- /* Preserve ICC */
- color.icc = _color.icc ? new SVGICCColor(*_color.icc) : 0;
-
- _updateInternals( color, alpha, _dragging );
+ _color.preserveICC();
+ _color.setColorAlpha(color, alpha, true);
}
else
{
- _updateInternals( _color, _alpha, _dragging );
+ // _updateInternals( _color, _alpha, _dragging );
}
+ _updating = false;
}
/* Helpers for setting color value */
@@ -309,29 +230,34 @@ void ColorScales::_setRangeLimit( gdouble upper )
}
}
-void ColorScales::_colorChanged()
+void ColorScales::_onColorChanged()
{
+ if (_updating || !get_visible()) {
+ return;
+ }
#ifdef DUMP_CHANGE_INFO
- g_message("ColorScales::_colorChanged( this=%p, %f, %f, %f, %f)", this, _color.v.c[0], _color.v.c[1], _color.v.c[2], _alpha );
+ g_message("ColorScales::_onColorChanged( this=%p, %f, %f, %f, %f)", this, _color.color().v.c[0], _color.color().v.c[1], _color.color().v.c[2], _color.alpha() );
#endif
gfloat tmp[3];
gfloat c[5] = {0.0, 0.0, 0.0, 0.0};
+ SPColor color = _color.color();
+
switch (_mode) {
case SP_COLOR_SCALES_MODE_RGB:
- sp_color_get_rgb_floatv( &_color, c );
- c[3] = _alpha;
+ sp_color_get_rgb_floatv( &color, c );
+ c[3] = _color.alpha();
c[4] = 0.0;
break;
case SP_COLOR_SCALES_MODE_HSV:
- sp_color_get_rgb_floatv( &_color, tmp );
+ sp_color_get_rgb_floatv( &color, tmp );
sp_color_rgb_to_hsl_floatv (c, tmp[0], tmp[1], tmp[2]);
- c[3] = _alpha;
+ c[3] = _color.alpha();
c[4] = 0.0;
break;
case SP_COLOR_SCALES_MODE_CMYK:
- sp_color_get_cmyk_floatv( &_color, c );
- c[4] = _alpha;
+ sp_color_get_cmyk_floatv( &color, c );
+ c[4] = _color.alpha();
break;
default:
g_warning ("file %s: line %d: Illegal color selector mode %d", __FILE__, __LINE__, _mode);
@@ -530,48 +456,7 @@ SPColorScalesMode ColorScales::getMode() const
return _mode;
}
-void ColorScales::setSubmode( guint submode )
-{
- g_return_if_fail (_csel != NULL);
- g_return_if_fail (SP_IS_COLOR_SCALES (_csel));
- g_return_if_fail (submode < 3);
-
- switch ( submode )
- {
- default:
- case 0:
- setMode(SP_COLOR_SCALES_MODE_RGB);
- break;
- case 1:
- setMode(SP_COLOR_SCALES_MODE_HSV);
- break;
- case 2:
- setMode(SP_COLOR_SCALES_MODE_CMYK);
- break;
- }
-}
-
-guint ColorScales::getSubmode() const
-{
- guint submode = 0;
-
- switch ( _mode )
- {
- case SP_COLOR_SCALES_MODE_HSV:
- submode = 1;
- break;
- case SP_COLOR_SCALES_MODE_CMYK:
- submode = 2;
- break;
- case SP_COLOR_SCALES_MODE_RGB:
- default:
- submode = 0;
- }
-
- return submode;
-}
-
-void ColorScales::_adjustmentAnyChanged( GtkAdjustment *adjustment, SPColorScales *cs )
+void ColorScales::_adjustmentAnyChanged( GtkAdjustment *adjustment, ColorScales *cs )
{
gint channel = GPOINTER_TO_INT (g_object_get_data(G_OBJECT (adjustment), "channel"));
@@ -580,39 +465,46 @@ void ColorScales::_adjustmentAnyChanged( GtkAdjustment *adjustment, SPColorScale
void ColorScales::_sliderAnyGrabbed()
{
+ if (_updating) {
+ return;
+ }
+ _updating = true;
if (!_dragging) {
_dragging = TRUE;
- _grabbed();
+ _color.setHeld(true);
_recalcColor( FALSE );
}
+ _updating = false;
}
void ColorScales::_sliderAnyReleased()
{
+ if (_updating) {
+ return;
+ }
+ _updating = true;
if (_dragging) {
_dragging = FALSE;
- _released();
+ _color.setHeld(false);
_recalcColor( FALSE );
}
+ _updating = false;
}
void ColorScales::_sliderAnyChanged()
{
+ if (_updating) {
+ return;
+ }
_recalcColor( TRUE );
}
-void ColorScales::_adjustmentChanged( SPColorScales *cs, guint channel )
+void ColorScales::_adjustmentChanged( ColorScales *scales, guint channel )
{
- ColorScales* scales = static_cast<ColorScales*>(SP_COLOR_SELECTOR(cs)->base);
if (scales->_updating) return;
- scales->_updating = TRUE;
-
scales->_updateSliders( (1 << channel) );
-
scales->_recalcColor (TRUE);
-
- scales->_updating = FALSE;
}
void ColorScales::_updateSliders( guint channels )
@@ -770,19 +662,14 @@ ColorScalesFactory::~ColorScalesFactory() {
}
Gtk::Widget *ColorScalesFactory::createWidget(Inkscape::UI::SelectedColor &color) const {
- GtkWidget *w = sp_color_selector_new(SP_TYPE_COLOR_SCALES);
- SPColorSelector* csel;
-
- csel = SP_COLOR_SELECTOR (w);
- if ( _submode > 0 )
- {
- csel->base->setSubmode( _submode - 1 );
- }
-
- Gtk::Widget *wrapped = Gtk::manage(Glib::wrap(w));
- return wrapped;
+ Gtk::Widget *w = Gtk::manage(new ColorScales(color, _submode));
+ return w;
}
Glib::ustring ColorScalesFactory::modeName() const {
return gettext(ColorScales::SUBMODE_NAMES[_submode]);
}
+
+}
+}
+}
diff --git a/src/ui/widget/color-scales.h b/src/ui/widget/color-scales.h
index 946f0935e..21f9708c1 100644
--- a/src/ui/widget/color-scales.h
+++ b/src/ui/widget/color-scales.h
@@ -9,26 +9,23 @@
#include <glibmm/threads.h>
#endif
+#include <color.h>
#include <glib.h>
#include <gtk/gtk.h>
-
-#include <color.h>
-#include <widgets/sp-color-selector.h>
+#if GTK_CHECK_VERSION(3,0,0)
+#include <gtkmm/grid.h>
+#else
+#include <gtkmm/table.h>
+#endif
#include "ui/selected-color.h"
-struct SPColorScales;
-struct SPColorScalesClass;
-
namespace Inkscape {
namespace UI {
namespace Widget {
class ColorSlider;
-}
-}
-}
typedef enum {
SP_COLOR_SCALES_MODE_NONE = 0,
@@ -39,7 +36,12 @@ typedef enum {
-class ColorScales: public ColorSelector
+class ColorScales
+#if GTK_CHECK_VERSION(3,0,0)
+ : public Gtk::Grid
+#else
+ : public Gtk::Table
+#endif
{
public:
static const gchar* SUBMODE_NAMES[];
@@ -47,26 +49,22 @@ public:
static gfloat getScaled( const GtkAdjustment *a );
static void setScaled( GtkAdjustment *a, gfloat v);
- ColorScales(SPColorSelector *csel);
+ ColorScales(SelectedColor &color, SPColorScalesMode mode);
virtual ~ColorScales();
- virtual void init();
-
- virtual void setSubmode(guint submode);
- virtual guint getSubmode() const;
+ virtual void _initUI(SPColorScalesMode mode);
void setMode(SPColorScalesMode mode);
SPColorScalesMode getMode() const;
-
protected:
- virtual void _colorChanged();
+ void _onColorChanged();
- static void _adjustmentAnyChanged(GtkAdjustment *adjustment, SPColorScales *cs);
+ static void _adjustmentAnyChanged(GtkAdjustment *adjustment, ColorScales *cs);
void _sliderAnyGrabbed();
void _sliderAnyReleased();
void _sliderAnyChanged();
- static void _adjustmentChanged(SPColorScales *cs, guint channel);
+ static void _adjustmentChanged(ColorScales *cs, guint channel);
void _getRgbaFloatv(gfloat *rgba);
void _getCmykaFloatv(gfloat *cmyka);
@@ -76,6 +74,7 @@ protected:
void _setRangeLimit( gdouble upper );
+ SelectedColor &_color;
SPColorScalesMode _mode;
gdouble _rangeLimit;
gboolean _updating : 1;
@@ -92,26 +91,6 @@ private:
};
-
-#define SP_TYPE_COLOR_SCALES (sp_color_scales_get_type())
-#define SP_COLOR_SCALES(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_COLOR_SCALES, SPColorScales))
-#define SP_COLOR_SCALES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_COLOR_SCALES, SPColorScalesClass))
-#define SP_IS_COLOR_SCALES(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_COLOR_SCALES))
-#define SP_IS_COLOR_SCALES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_COLOR_SCALES))
-
-struct SPColorScales {
- SPColorSelector parent;
-};
-
-struct SPColorScalesClass {
- SPColorSelectorClass parent_class;
-};
-
-GType sp_color_scales_get_type();
-
-GtkWidget *sp_color_scales_new();
-
-
class ColorScalesFactory: public Inkscape::UI::ColorSelectorFactory {
public:
ColorScalesFactory(SPColorScalesMode submode);
@@ -124,9 +103,11 @@ private:
SPColorScalesMode _submode;
};
+}
+}
+}
-#endif /* !SEEN_SP_COLOR_SCALES_H */
-
+#endif
/*
Local Variables:
mode:c++
diff --git a/src/widgets/sp-color-icc-selector.cpp b/src/widgets/sp-color-icc-selector.cpp
index 808dfc925..f872a3164 100644
--- a/src/widgets/sp-color-icc-selector.cpp
+++ b/src/widgets/sp-color-icc-selector.cpp
@@ -33,6 +33,9 @@
#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
+using namespace Inkscape::UI::Widget;
+
+
#ifdef DEBUG_LCMS
extern guint update_in_progress;
#define DEBUG_MESSAGE(key, ...) \
diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp
index 0e1634314..807fe38e0 100644
--- a/src/widgets/sp-color-notebook.cpp
+++ b/src/widgets/sp-color-notebook.cpp
@@ -455,7 +455,9 @@ ColorNotebook::Page::Page(Inkscape::UI::ColorSelectorFactory *selector_factory,
void ColorNotebook::_colorChanged()
{
+ _updating = true;
_selected_color.setColorAlpha(_color, _alpha, true);
+ _updating = false;
SPColorSelector* cselPage = getCurrentSelector();
if ( cselPage )
@@ -613,13 +615,13 @@ void ColorNotebook::_onSelectedColorDragged() {
}
bool oldState = _dragging;
- _dragging = TRUE;
+ _dragging = true;
SPColor color;
gfloat alpha = 1.0;
_updating = true;
_selected_color.colorAlpha(color, alpha);
- _updateInternals(color, alpha, _dragging);
+ _updateInternals(color, alpha, true);
_updating = false;
_dragging = oldState;
diff --git a/src/widgets/sp-color-notebook.h b/src/widgets/sp-color-notebook.h
index 7c6dbc770..ca9343bf0 100644
--- a/src/widgets/sp-color-notebook.h
+++ b/src/widgets/sp-color-notebook.h
@@ -23,6 +23,7 @@
#include <boost/ptr_container/ptr_vector.hpp>
#include <gtk/gtk.h>
#include <glib.h>
+#include <gtkmm/table.h>
#include "../color.h"
#include "sp-color-selector.h"
diff --git a/src/widgets/sp-color-selector.cpp b/src/widgets/sp-color-selector.cpp
index 05af162ef..58aa0e1af 100644
--- a/src/widgets/sp-color-selector.cpp
+++ b/src/widgets/sp-color-selector.cpp
@@ -312,7 +312,7 @@ void ColorSelector::_updateInternals( const SPColor& color, gfloat alpha, gboole
(_held ? "CHANGED" : "DRAGGED" ),
color.toRGBA32( alpha ), (color.icc?color.icc->colorProfile.c_str():"<null>"), FOO_NAME(_csel));
#endif
- g_signal_emit(G_OBJECT(_csel), csel_signals[_held ? CHANGED : DRAGGED], 0);
+ g_signal_emit(G_OBJECT(_csel), csel_signals[_held ? DRAGGED : CHANGED], 0);
}
}