diff options
| author | Tomasz Boczkowski <penginsbacon@gmail.com> | 2014-05-31 18:15:08 +0000 |
|---|---|---|
| committer | Tomasz Boczkowski <penginsbacon@gmail.com> | 2014-05-31 18:15:08 +0000 |
| commit | d128fc4fd60ebcd8ac820f584b5a4b3b35ad5b00 (patch) | |
| tree | 638e65f164634c0c376c6a03e07d3a02d142ea87 /src | |
| parent | updated CMakeLists (diff) | |
| download | inkscape-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.cpp | 253 | ||||
| -rw-r--r-- | src/ui/widget/color-scales.h | 63 | ||||
| -rw-r--r-- | src/widgets/sp-color-icc-selector.cpp | 3 | ||||
| -rw-r--r-- | src/widgets/sp-color-notebook.cpp | 6 | ||||
| -rw-r--r-- | src/widgets/sp-color-notebook.h | 1 | ||||
| -rw-r--r-- | src/widgets/sp-color-selector.cpp | 2 |
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); } } |
