diff options
| author | Tomasz Boczkowski <penginsbacon@gmail.com> | 2014-05-31 10:34:20 +0000 |
|---|---|---|
| committer | Tomasz Boczkowski <penginsbacon@gmail.com> | 2014-05-31 10:34:20 +0000 |
| commit | c2b99414ee441654e641552f372ebf1165f94ffc (patch) | |
| tree | a4336b6a41986c861038fcc4a1900d3486374321 /src/ui | |
| parent | SPColorWheelSelector c++-sification: moved to ui/widgets (diff) | |
| download | inkscape-c2b99414ee441654e641552f372ebf1165f94ffc.tar.gz inkscape-c2b99414ee441654e641552f372ebf1165f94ffc.zip | |
SPColorWheelSelector c++-sification: inherit Gtk::Table/Grid
(bzr r13341.6.35)
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/selected-color.cpp | 13 | ||||
| -rw-r--r-- | src/ui/selected-color.h | 2 | ||||
| -rw-r--r-- | src/ui/widget/color-wheel-selector.cpp | 220 | ||||
| -rw-r--r-- | src/ui/widget/color-wheel-selector.h | 70 |
4 files changed, 112 insertions, 193 deletions
diff --git a/src/ui/selected-color.cpp b/src/ui/selected-color.cpp index 1be171a6b..10ca68b21 100644 --- a/src/ui/selected-color.cpp +++ b/src/ui/selected-color.cpp @@ -16,6 +16,8 @@ #include <cmath> #include <glib.h> +#include "svg/svg-icc-color.h" + namespace Inkscape { namespace UI { @@ -24,8 +26,8 @@ double const SelectedColor::_EPSILON = 1e-4; SelectedColor::SelectedColor() : _color(0) , _alpha(1.0) - , _virgin(true) , _held(false) + , _virgin(true) { } @@ -36,7 +38,7 @@ SelectedColor::~SelectedColor() { void SelectedColor::setColor(SPColor const &color) { - setColorAlpha( color, _alpha ); + setColorAlpha( color, _alpha, true); } SPColor SelectedColor::color() const @@ -47,7 +49,7 @@ SPColor SelectedColor::color() const void SelectedColor::setAlpha(gfloat alpha) { g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) ); - setColorAlpha( _color, alpha ); + setColorAlpha( _color, alpha, true); } gfloat SelectedColor::alpha() const @@ -111,9 +113,14 @@ void SelectedColor::setHeld(bool held) { if (released) { signal_released.emit(); + signal_changed.emit(); } } +void SelectedColor::preserveICC() { + _color.icc = _color.icc ? new SVGICCColor(*_color.icc) : 0; +} + } } diff --git a/src/ui/selected-color.h b/src/ui/selected-color.h index ec0cc55e3..5d3d89672 100644 --- a/src/ui/selected-color.h +++ b/src/ui/selected-color.h @@ -44,6 +44,8 @@ public: void setHeld(bool held); + void preserveICC(); + sigc::signal<void> signal_grabbed; sigc::signal<void> signal_dragged; sigc::signal<void> signal_released; diff --git a/src/ui/widget/color-wheel-selector.cpp b/src/ui/widget/color-wheel-selector.cpp index 134232813..e14c70728 100644 --- a/src/ui/widget/color-wheel-selector.cpp +++ b/src/ui/widget/color-wheel-selector.cpp @@ -11,22 +11,14 @@ #include "dialogs/dialog-events.h" #include "widgets/sp-color-scales.h" #include "svg/svg-icc-color.h" +#include "ui/selected-color.h" #include "ui/widget/color-slider.h" #include "ui/widget/gimpcolorwheel.h" -G_BEGIN_DECLS +namespace Inkscape { +namespace UI { +namespace Widget { -static void sp_color_wheel_selector_class_init (SPColorWheelSelectorClass *klass); -static void sp_color_wheel_selector_init (SPColorWheelSelector *cs); -static void sp_color_wheel_selector_dispose(GObject *object); - -static void sp_color_wheel_selector_show_all (GtkWidget *widget); -static void sp_color_wheel_selector_hide(GtkWidget *widget); - - -G_END_DECLS - -static SPColorSelectorClass *parent_class; #define XPAD 4 #define YPAD 1 @@ -34,60 +26,24 @@ static SPColorSelectorClass *parent_class; const gchar* ColorWheelSelector::MODE_NAME = N_("Wheel"); -GType -sp_color_wheel_selector_get_type (void) -{ - static GType type = 0; - if (!type) { - static const GTypeInfo info = { - sizeof (SPColorWheelSelectorClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) sp_color_wheel_selector_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (SPColorWheelSelector), - 0, /* n_preallocs */ - (GInstanceInitFunc) sp_color_wheel_selector_init, - 0, /* value_table */ - }; - - type = g_type_register_static (SP_TYPE_COLOR_SELECTOR, - "SPColorWheelSelector", - &info, - static_cast< GTypeFlags > (0) ); - } - return type; -} - -static void sp_color_wheel_selector_class_init(SPColorWheelSelectorClass *klass) -{ - static const gchar* nameset[] = {N_("Wheel"), 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 = 1; - - object_class->dispose = sp_color_wheel_selector_dispose; - - widget_class->show_all = sp_color_wheel_selector_show_all; - widget_class->hide = sp_color_wheel_selector_hide; -} - -ColorWheelSelector::ColorWheelSelector( SPColorSelector* csel ) - : ColorSelector( csel ), - _updating( FALSE ), - _dragging( FALSE ), +ColorWheelSelector::ColorWheelSelector(SelectedColor &color) +#if GTK_CHECK_VERSION(3,0,0) + : Gtk::Grid() +#else + : Gtk::Table(5, 3, false) +#endif + , _color(color) + , _updating(false), _adj(0), _wheel(0), _slider(0), _sbtn(0), _label(0) { + _initUI(); + _color_changed_connection = color.signal_changed.connect(sigc::mem_fun(this, &ColorWheelSelector::_colorChanged)); + _color_dragged_connection = color.signal_dragged.connect(sigc::mem_fun(this, &ColorWheelSelector::_colorChanged)); + } ColorWheelSelector::~ColorWheelSelector() @@ -96,33 +52,17 @@ ColorWheelSelector::~ColorWheelSelector() _wheel = 0; _sbtn = 0; _label = 0; -} - -void sp_color_wheel_selector_init (SPColorWheelSelector *cs) -{ - SP_COLOR_SELECTOR(cs)->base = new ColorWheelSelector( SP_COLOR_SELECTOR(cs) ); - if ( SP_COLOR_SELECTOR(cs)->base ) - { - SP_COLOR_SELECTOR(cs)->base->init(); - } + _color_changed_connection.disconnect(); + _color_dragged_connection.disconnect(); } -void ColorWheelSelector::init() -{ +void ColorWheelSelector::_initUI() { gint row = 0; - _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 + GtkWidget *t = GTK_WIDGET(gobj()); - gtk_widget_show (t); - gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 0); + //gtk_widget_show (t); /* Create components */ row = 0; @@ -205,44 +145,14 @@ void ColorWheelSelector::init() /* Signals */ g_signal_connect (G_OBJECT (_adj), "value_changed", - G_CALLBACK (_adjustmentChanged), _csel); + G_CALLBACK (_adjustmentChanged), this); _slider->signal_grabbed.connect(sigc::mem_fun(*this, &ColorWheelSelector::_sliderGrabbed)); _slider->signal_released.connect(sigc::mem_fun(*this, &ColorWheelSelector::_sliderReleased)); _slider->signal_value_changed.connect(sigc::mem_fun(*this, &ColorWheelSelector::_sliderChanged)); g_signal_connect( G_OBJECT(_wheel), "changed", - G_CALLBACK (_wheelChanged), _csel ); -} - -static void sp_color_wheel_selector_dispose(GObject *object) -{ - if ((G_OBJECT_CLASS(parent_class))->dispose) - (* (G_OBJECT_CLASS(parent_class))->dispose) (object); -} - -static void -sp_color_wheel_selector_show_all (GtkWidget *widget) -{ - gtk_widget_show (widget); -} - -static void sp_color_wheel_selector_hide(GtkWidget *widget) -{ - gtk_widget_hide(widget); -} - -GtkWidget *sp_color_wheel_selector_new() -{ - SPColorWheelSelector *csel = SP_COLOR_WHEEL_SELECTOR(g_object_new (SP_TYPE_COLOR_WHEEL_SELECTOR, NULL)); - - return GTK_WIDGET (csel); -} - -/* Helpers for setting color value */ - -void ColorWheelSelector::_preserve_icc(SPColor *color) const { - color->icc = getColor().icc ? new SVGICCColor(*getColor().icc) : 0; + G_CALLBACK (_wheelChanged), this ); } void ColorWheelSelector::_colorChanged() @@ -250,26 +160,34 @@ void ColorWheelSelector::_colorChanged() #ifdef DUMP_CHANGE_INFO g_message("ColorWheelSelector::_colorChanged( this=%p, %f, %f, %f, %f)", this, color.v.c[0], color.v.c[1], color.v.c[2], alpha ); #endif - _updating = TRUE; + if (_updating) { + return; + } + + _updating = true; { float hsv[3] = {0,0,0}; - sp_color_rgb_to_hsv_floatv(hsv, _color.v.c[0], _color.v.c[1], _color.v.c[2]); + sp_color_rgb_to_hsv_floatv(hsv, _color.color().v.c[0], _color.color().v.c[1], _color.color().v.c[2]); gimp_color_wheel_set_color( GIMP_COLOR_WHEEL(_wheel), hsv[0], hsv[1], hsv[2] ); } - guint32 start = _color.toRGBA32( 0x00 ); - guint32 mid = _color.toRGBA32( 0x7f ); - guint32 end = _color.toRGBA32( 0xff ); + guint32 start = _color.color().toRGBA32( 0x00 ); + guint32 mid = _color.color().toRGBA32( 0x7f ); + guint32 end = _color.color().toRGBA32( 0xff ); _slider->setColors(start, mid, end); - ColorScales::setScaled(_adj, _alpha); + ColorScales::setScaled(_adj, _color.alpha()); _updating = FALSE; } -void ColorWheelSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorWheelSelector *cs ) +void ColorWheelSelector::_adjustmentChanged( GtkAdjustment *adjustment, ColorWheelSelector *cs ) { + if (cs->_updating) { + return; + } + // TODO check this. It looks questionable: // if a value is entered between 0 and 1 exclusive, normalize it to (int) 0..255 or 0..100 gdouble value = gtk_adjustment_get_value (adjustment); @@ -279,48 +197,42 @@ void ColorWheelSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorW gtk_adjustment_set_value( adjustment, floor (value * upper + 0.5) ); } - ColorWheelSelector* wheelSelector = static_cast<ColorWheelSelector*>(SP_COLOR_SELECTOR(cs)->base); - if (wheelSelector->_updating) return; + cs->_updating = true; - wheelSelector->_updating = TRUE; + cs->_color.preserveICC(); - wheelSelector->_preserve_icc(&wheelSelector->_color); - wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging ); + cs->_color.setAlpha(ColorScales::getScaled( cs->_adj )); - wheelSelector->_updating = FALSE; + cs->_updating = false; } void ColorWheelSelector::_sliderGrabbed() { - if (!_dragging) { - _dragging = TRUE; - _grabbed(); - - _preserve_icc(&_color); - _updateInternals( _color, ColorScales::getScaled( _adj ), _dragging ); - } + _color.preserveICC(); + _color.setHeld(true); } void ColorWheelSelector::_sliderReleased() { - if (_dragging) { - _dragging = FALSE; - _released(); - - _preserve_icc(&_color); - _updateInternals( _color, ColorScales::getScaled( _adj ), _dragging ); - } + _color.preserveICC(); + _color.setHeld(false); } void ColorWheelSelector::_sliderChanged() { - _preserve_icc(&_color); - _updateInternals( _color, ColorScales::getScaled( _adj ), _dragging ); + if (_updating) { + return; + } + + _updating = true; + _color.preserveICC(); + _color.setAlpha(ColorScales::getScaled(_adj)); + _updating = false; } -void ColorWheelSelector::_wheelChanged( GimpColorWheel *wheel, SPColorWheelSelector *cs ) +void ColorWheelSelector::_wheelChanged( GimpColorWheel *wheel, ColorWheelSelector *wheelSelector ) { - ColorWheelSelector* wheelSelector = static_cast<ColorWheelSelector*>(SP_COLOR_SELECTOR(cs)->base); + if (wheelSelector->_updating) return; gdouble h = 0; gdouble s = 0; @@ -338,21 +250,31 @@ void ColorWheelSelector::_wheelChanged( GimpColorWheel *wheel, SPColorWheelSelec wheelSelector->_slider->setColors(start, mid, end); - wheelSelector->_preserve_icc(&color); - wheelSelector->_updateInternals( color, wheelSelector->_alpha, gimp_color_wheel_is_adjusting(wheel) ); + wheelSelector->_updating = true; + + wheelSelector->_color.preserveICC(); + + wheelSelector->_color.setHeld(gimp_color_wheel_is_adjusting(wheel)); + wheelSelector->_color.setColor(color); + + wheelSelector->_updating = false; } Gtk::Widget *ColorWheelSelectorFactory::createWidget(Inkscape::UI::SelectedColor &color) const { - GtkWidget *w = sp_color_selector_new(SP_TYPE_COLOR_WHEEL_SELECTOR); - Gtk::Widget *wrapped = Gtk::manage(Glib::wrap(w)); - return wrapped; + Gtk::Widget *w = Gtk::manage(new ColorWheelSelector(color)); + return w; } Glib::ustring ColorWheelSelectorFactory::modeName() const { return gettext(ColorWheelSelector::MODE_NAME); } +} +} +} + + /* Local Variables: diff --git a/src/ui/widget/color-wheel-selector.h b/src/ui/widget/color-wheel-selector.h index 7a9cb5093..e289a8df6 100644 --- a/src/ui/widget/color-wheel-selector.h +++ b/src/ui/widget/color-wheel-selector.h @@ -1,3 +1,14 @@ +/** + * @file + * Color selector widget containing GIMP color wheel and slider + */ +/* Authors: + * Tomasz Boczkowski <penginsbacon@gmail.com> (c++-sification) + * + * Copyright (C) 2014 Authors + * + * This code is in public domain + */ #ifndef SEEN_SP_COLOR_WHEEL_SELECTOR_H #define SEEN_SP_COLOR_WHEEL_SELECTOR_H @@ -11,13 +22,11 @@ #include <glib.h> #include <gtk/gtk.h> +#include <gtkmm/table.h> -#include "widgets/sp-color-selector.h" #include "ui/selected-color.h" typedef struct _GimpColorWheel GimpColorWheel; -struct SPColorWheelSelector; -struct SPColorWheelSelectorClass; namespace Inkscape { namespace UI { @@ -25,36 +34,31 @@ namespace Widget { class ColorSlider; -} -} -} - -class ColorWheelSelector: public ColorSelector +class ColorWheelSelector + : public Gtk::Table //if GTK2 { public: static const gchar* MODE_NAME; - ColorWheelSelector( SPColorSelector* csel ); + ColorWheelSelector(SelectedColor &color); virtual ~ColorWheelSelector(); - virtual void init(); - protected: + void _initUI(); virtual void _colorChanged(); - static void _adjustmentChanged ( GtkAdjustment *adjustment, SPColorWheelSelector *cs ); + static void _adjustmentChanged ( GtkAdjustment *adjustment, ColorWheelSelector *cs ); void _sliderGrabbed(); void _sliderReleased(); void _sliderChanged(); - static void _wheelChanged( GimpColorWheel *wheel, SPColorWheelSelector *cs ); - - static void _fooChanged( GtkWidget foo, SPColorWheelSelector *cs ); + static void _wheelChanged( GimpColorWheel *wheel, ColorWheelSelector *cs ); void _recalcColor( gboolean changing ); - gboolean _updating : 1; - gboolean _dragging : 1; + SelectedColor &_color; + bool _updating; + GtkAdjustment* _adj; // Channel adjustment GtkWidget* _wheel; Inkscape::UI::Widget::ColorSlider* _slider; @@ -66,36 +70,20 @@ private: ColorWheelSelector( const ColorWheelSelector& obj ); ColorWheelSelector& operator=( const ColorWheelSelector& obj ); - void _preserve_icc(SPColor *color) const; + sigc::connection _color_changed_connection; + sigc::connection _color_dragged_connection; }; - - -#define SP_TYPE_COLOR_WHEEL_SELECTOR (sp_color_wheel_selector_get_type ()) -#define SP_COLOR_WHEEL_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_COLOR_WHEEL_SELECTOR, SPColorWheelSelector)) -#define SP_COLOR_WHEEL_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_WHEEL_SELECTOR, SPColorWheelSelectorClass)) -#define SP_IS_COLOR_WHEEL_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_COLOR_WHEEL_SELECTOR)) -#define SP_IS_COLOR_WHEEL_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_WHEEL_SELECTOR)) - -struct SPColorWheelSelector { - SPColorSelector parent; -}; - -struct SPColorWheelSelectorClass { - SPColorSelectorClass parent_class; -}; - -GType sp_color_wheel_selector_get_type (void); - -GtkWidget *sp_color_wheel_selector_new (void); - - -class ColorWheelSelectorFactory: public Inkscape::UI::ColorSelectorFactory { +class ColorWheelSelectorFactory: public ColorSelectorFactory { public: - Gtk::Widget *createWidget(Inkscape::UI::SelectedColor &color) const; + Gtk::Widget *createWidget(SelectedColor &color) const; Glib::ustring modeName() const; }; +} +} +} + #endif // SEEN_SP_COLOR_WHEEL_SELECTOR_H |
