From ba8232e27fbff22f2af10c39a66c2a084bacbfb4 Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Sat, 31 May 2014 10:48:29 +0200 Subject: SPColorWheelSelector c++-sification: moved to ui/widgets (bzr r13341.6.34) --- src/ui/widget/Makefile_insert | 2 + src/ui/widget/color-wheel-selector.cpp | 366 +++++++++++++++++++++++++++++++ src/ui/widget/color-wheel-selector.h | 111 ++++++++++ src/widgets/Makefile_insert | 2 - src/widgets/sp-color-notebook.cpp | 2 +- src/widgets/sp-color-wheel-selector.cpp | 367 -------------------------------- src/widgets/sp-color-wheel-selector.h | 111 ---------- 7 files changed, 480 insertions(+), 481 deletions(-) create mode 100644 src/ui/widget/color-wheel-selector.cpp create mode 100644 src/ui/widget/color-wheel-selector.h delete mode 100644 src/widgets/sp-color-wheel-selector.cpp delete mode 100644 src/widgets/sp-color-wheel-selector.h (limited to 'src') diff --git a/src/ui/widget/Makefile_insert b/src/ui/widget/Makefile_insert index bad3342b1..97625f04e 100644 --- a/src/ui/widget/Makefile_insert +++ b/src/ui/widget/Makefile_insert @@ -8,6 +8,8 @@ ink_common_sources += \ ui/widget/button.cpp \ ui/widget/color-entry.cpp \ ui/widget/color-entry.h \ + ui/widget/color-wheel-selector.cpp \ + ui/widget/color-wheel-selector.h \ ui/widget/color-picker.cpp \ ui/widget/color-picker.h \ ui/widget/color-preview.cpp \ diff --git a/src/ui/widget/color-wheel-selector.cpp b/src/ui/widget/color-wheel-selector.cpp new file mode 100644 index 000000000..134232813 --- /dev/null +++ b/src/ui/widget/color-wheel-selector.cpp @@ -0,0 +1,366 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "color-wheel-selector.h" + +#include +#include +#include +#include +#include "dialogs/dialog-events.h" +#include "widgets/sp-color-scales.h" +#include "svg/svg-icc-color.h" +#include "ui/widget/color-slider.h" +#include "ui/widget/gimpcolorwheel.h" + +G_BEGIN_DECLS + +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 + + +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 ), + _adj(0), + _wheel(0), + _slider(0), + _sbtn(0), + _label(0) +{ +} + +ColorWheelSelector::~ColorWheelSelector() +{ + _adj = 0; + _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(); + } +} + +void ColorWheelSelector::init() +{ + 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 + + gtk_widget_show (t); + gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 0); + + /* Create components */ + row = 0; + + _wheel = gimp_color_wheel_new(); + gtk_widget_show( _wheel ); + +#if GTK_CHECK_VERSION(3,0,0) + gtk_widget_set_halign(_wheel, GTK_ALIGN_FILL); + gtk_widget_set_valign(_wheel, GTK_ALIGN_FILL); + gtk_widget_set_hexpand(_wheel, TRUE); + gtk_widget_set_vexpand(_wheel, TRUE); + gtk_grid_attach(GTK_GRID(t), _wheel, 0, row, 3, 1); +#else + gtk_table_attach(GTK_TABLE(t), _wheel, 0, 3, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); +#endif + + row++; + + /* Label */ + _label = gtk_label_new_with_mnemonic (_("_A:")); + gtk_misc_set_alignment (GTK_MISC (_label), 1.0, 0.5); + gtk_widget_show (_label); + +#if GTK_CHECK_VERSION(3,0,0) + gtk_widget_set_margin_left(_label, XPAD); + gtk_widget_set_margin_right(_label, XPAD); + gtk_widget_set_margin_top(_label, YPAD); + gtk_widget_set_margin_bottom(_label, YPAD); + gtk_widget_set_halign(_label, GTK_ALIGN_FILL); + gtk_widget_set_valign(_label, GTK_ALIGN_FILL); + gtk_grid_attach(GTK_GRID(t), _label, 0, row, 1, 1); +#else + gtk_table_attach (GTK_TABLE (t), _label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD); +#endif + + /* Adjustment */ + _adj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 255.0, 1.0, 10.0, 10.0)); + + /* Slider */ + _slider = Gtk::manage(new Inkscape::UI::Widget::ColorSlider(Glib::wrap(_adj, true))); + _slider->set_tooltip_text(_("Alpha (opacity)")); + _slider->show(); + +#if GTK_CHECK_VERSION(3,0,0) + _slider->set_margin_left(XPAD); + _slider->set_margin_right(XPAD); + _slider->set_margin_top(YPAD); + _slider->set_margin_bottom(YPAD); + _slider->set_hexpand(true); + _slider->set_halign(Gtk::ALIGN_FILL); + _slider->set_valign(Gtk::ALIGN_FILL); + gtk_grid_attach(GTK_GRID(t), _slider->gobj(), 1, row, 1, 1); +#else + gtk_table_attach(GTK_TABLE (t), _slider->gobj(), 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, XPAD, YPAD); +#endif + + _slider->setColors(SP_RGBA32_F_COMPOSE (1.0, 1.0, 1.0, 0.0), + SP_RGBA32_F_COMPOSE (1.0, 1.0, 1.0, 0.5), + SP_RGBA32_F_COMPOSE (1.0, 1.0, 1.0, 1.0)); + + /* Spinbutton */ + _sbtn = gtk_spin_button_new (GTK_ADJUSTMENT (_adj), 1.0, 0); + gtk_widget_set_tooltip_text (_sbtn, _("Alpha (opacity)")); + sp_dialog_defocus_on_enter (_sbtn); + gtk_label_set_mnemonic_widget (GTK_LABEL(_label), _sbtn); + gtk_widget_show (_sbtn); + +#if GTK_CHECK_VERSION(3,0,0) + gtk_widget_set_margin_left(_sbtn, XPAD); + gtk_widget_set_margin_right(_sbtn, XPAD); + gtk_widget_set_margin_top(_sbtn, YPAD); + gtk_widget_set_margin_bottom(_sbtn, YPAD); + gtk_widget_set_halign(_sbtn, GTK_ALIGN_CENTER); + gtk_widget_set_valign(_sbtn, GTK_ALIGN_CENTER); + gtk_grid_attach(GTK_GRID(t), _sbtn, 2, row, 1, 1); +#else + gtk_table_attach (GTK_TABLE (t), _sbtn, 2, 3, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD); +#endif + + /* Signals */ + g_signal_connect (G_OBJECT (_adj), "value_changed", + G_CALLBACK (_adjustmentChanged), _csel); + + _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; +} + +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; + { + 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]); + 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 ); + + _slider->setColors(start, mid, end); + + ColorScales::setScaled(_adj, _alpha); + + _updating = FALSE; +} + +void ColorWheelSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorWheelSelector *cs ) +{ +// 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); + gdouble upper = gtk_adjustment_get_upper (adjustment); + + if (value > 0.0 && value < 1.0) { + gtk_adjustment_set_value( adjustment, floor (value * upper + 0.5) ); + } + + ColorWheelSelector* wheelSelector = static_cast(SP_COLOR_SELECTOR(cs)->base); + if (wheelSelector->_updating) return; + + wheelSelector->_updating = TRUE; + + wheelSelector->_preserve_icc(&wheelSelector->_color); + wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging ); + + wheelSelector->_updating = FALSE; +} + +void ColorWheelSelector::_sliderGrabbed() +{ + if (!_dragging) { + _dragging = TRUE; + _grabbed(); + + _preserve_icc(&_color); + _updateInternals( _color, ColorScales::getScaled( _adj ), _dragging ); + } +} + +void ColorWheelSelector::_sliderReleased() +{ + if (_dragging) { + _dragging = FALSE; + _released(); + + _preserve_icc(&_color); + _updateInternals( _color, ColorScales::getScaled( _adj ), _dragging ); + } +} + +void ColorWheelSelector::_sliderChanged() +{ + _preserve_icc(&_color); + _updateInternals( _color, ColorScales::getScaled( _adj ), _dragging ); +} + +void ColorWheelSelector::_wheelChanged( GimpColorWheel *wheel, SPColorWheelSelector *cs ) +{ + ColorWheelSelector* wheelSelector = static_cast(SP_COLOR_SELECTOR(cs)->base); + + gdouble h = 0; + gdouble s = 0; + gdouble v = 0; + gimp_color_wheel_get_color( wheel, &h, &s, &v ); + + float rgb[3] = {0,0,0}; + sp_color_hsv_to_rgb_floatv (rgb, h, s, v); + + SPColor color(rgb[0], rgb[1], rgb[2]); + + guint32 start = color.toRGBA32( 0x00 ); + guint32 mid = color.toRGBA32( 0x7f ); + guint32 end = color.toRGBA32( 0xff ); + + wheelSelector->_slider->setColors(start, mid, end); + + wheelSelector->_preserve_icc(&color); + wheelSelector->_updateInternals( color, wheelSelector->_alpha, gimp_color_wheel_is_adjusting(wheel) ); +} + + +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; +} + +Glib::ustring ColorWheelSelectorFactory::modeName() const { + return gettext(ColorWheelSelector::MODE_NAME); +} + + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : diff --git a/src/ui/widget/color-wheel-selector.h b/src/ui/widget/color-wheel-selector.h new file mode 100644 index 000000000..7a9cb5093 --- /dev/null +++ b/src/ui/widget/color-wheel-selector.h @@ -0,0 +1,111 @@ +#ifndef SEEN_SP_COLOR_WHEEL_SELECTOR_H +#define SEEN_SP_COLOR_WHEEL_SELECTOR_H + +#ifdef HAVE_CONFIG_H +# include +#endif + +#if GLIBMM_DISABLE_DEPRECATED && HAVE_GLIBMM_THREADS_H +#include +#endif + +#include +#include + +#include "widgets/sp-color-selector.h" +#include "ui/selected-color.h" + +typedef struct _GimpColorWheel GimpColorWheel; +struct SPColorWheelSelector; +struct SPColorWheelSelectorClass; + +namespace Inkscape { +namespace UI { +namespace Widget { + +class ColorSlider; + +} +} +} + +class ColorWheelSelector: public ColorSelector +{ +public: + static const gchar* MODE_NAME; + + ColorWheelSelector( SPColorSelector* csel ); + virtual ~ColorWheelSelector(); + + virtual void init(); + +protected: + virtual void _colorChanged(); + + static void _adjustmentChanged ( GtkAdjustment *adjustment, SPColorWheelSelector *cs ); + + void _sliderGrabbed(); + void _sliderReleased(); + void _sliderChanged(); + static void _wheelChanged( GimpColorWheel *wheel, SPColorWheelSelector *cs ); + + static void _fooChanged( GtkWidget foo, SPColorWheelSelector *cs ); + + void _recalcColor( gboolean changing ); + + gboolean _updating : 1; + gboolean _dragging : 1; + GtkAdjustment* _adj; // Channel adjustment + GtkWidget* _wheel; + Inkscape::UI::Widget::ColorSlider* _slider; + GtkWidget* _sbtn; // Spinbutton + GtkWidget* _label; // Label + +private: + // By default, disallow copy constructor and assignment operator + ColorWheelSelector( const ColorWheelSelector& obj ); + ColorWheelSelector& operator=( const ColorWheelSelector& obj ); + + void _preserve_icc(SPColor *color) const; +}; + + + +#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 { +public: + Gtk::Widget *createWidget(Inkscape::UI::SelectedColor &color) const; + Glib::ustring modeName() const; +}; + + +#endif // SEEN_SP_COLOR_WHEEL_SELECTOR_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : diff --git a/src/widgets/Makefile_insert b/src/widgets/Makefile_insert index a4a3bb61b..7a1a7a4ef 100644 --- a/src/widgets/Makefile_insert +++ b/src/widgets/Makefile_insert @@ -74,8 +74,6 @@ ink_common_sources += \ widgets/sp-color-scales.h \ widgets/sp-color-selector.cpp \ widgets/sp-color-selector.h \ - widgets/sp-color-wheel-selector.cpp \ - widgets/sp-color-wheel-selector.h \ widgets/spinbutton-events.cpp \ widgets/spinbutton-events.h \ widgets/sp-widget.cpp \ diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index ac110b86c..ca189e086 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -32,7 +32,6 @@ #include "spw-utilities.h" #include "sp-color-scales.h" #include "sp-color-icc-selector.h" -#include "sp-color-wheel-selector.h" #include "svg/svg-icc-color.h" #include "../inkscape.h" #include "../document.h" @@ -42,6 +41,7 @@ #include "tools-switch.h" #include "ui/tools/tool-base.h" #include "ui/widget/color-entry.h" +#include "ui/widget/color-wheel-selector.h" using Inkscape::CMSSystem; diff --git a/src/widgets/sp-color-wheel-selector.cpp b/src/widgets/sp-color-wheel-selector.cpp deleted file mode 100644 index 2b448e075..000000000 --- a/src/widgets/sp-color-wheel-selector.cpp +++ /dev/null @@ -1,367 +0,0 @@ -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include "sp-color-wheel-selector.h" - -#include -#include -#include -#include -#include "../dialogs/dialog-events.h" -#include "sp-color-scales.h" -#include "sp-color-icc-selector.h" -#include "../svg/svg-icc-color.h" -#include "ui/widget/color-slider.h" -#include "ui/widget/gimpcolorwheel.h" - -G_BEGIN_DECLS - -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 - - -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 ), - _adj(0), - _wheel(0), - _slider(0), - _sbtn(0), - _label(0) -{ -} - -ColorWheelSelector::~ColorWheelSelector() -{ - _adj = 0; - _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(); - } -} - -void ColorWheelSelector::init() -{ - 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 - - gtk_widget_show (t); - gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 0); - - /* Create components */ - row = 0; - - _wheel = gimp_color_wheel_new(); - gtk_widget_show( _wheel ); - -#if GTK_CHECK_VERSION(3,0,0) - gtk_widget_set_halign(_wheel, GTK_ALIGN_FILL); - gtk_widget_set_valign(_wheel, GTK_ALIGN_FILL); - gtk_widget_set_hexpand(_wheel, TRUE); - gtk_widget_set_vexpand(_wheel, TRUE); - gtk_grid_attach(GTK_GRID(t), _wheel, 0, row, 3, 1); -#else - gtk_table_attach(GTK_TABLE(t), _wheel, 0, 3, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); -#endif - - row++; - - /* Label */ - _label = gtk_label_new_with_mnemonic (_("_A:")); - gtk_misc_set_alignment (GTK_MISC (_label), 1.0, 0.5); - gtk_widget_show (_label); - -#if GTK_CHECK_VERSION(3,0,0) - gtk_widget_set_margin_left(_label, XPAD); - gtk_widget_set_margin_right(_label, XPAD); - gtk_widget_set_margin_top(_label, YPAD); - gtk_widget_set_margin_bottom(_label, YPAD); - gtk_widget_set_halign(_label, GTK_ALIGN_FILL); - gtk_widget_set_valign(_label, GTK_ALIGN_FILL); - gtk_grid_attach(GTK_GRID(t), _label, 0, row, 1, 1); -#else - gtk_table_attach (GTK_TABLE (t), _label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD); -#endif - - /* Adjustment */ - _adj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 255.0, 1.0, 10.0, 10.0)); - - /* Slider */ - _slider = Gtk::manage(new Inkscape::UI::Widget::ColorSlider(Glib::wrap(_adj, true))); - _slider->set_tooltip_text(_("Alpha (opacity)")); - _slider->show(); - -#if GTK_CHECK_VERSION(3,0,0) - _slider->set_margin_left(XPAD); - _slider->set_margin_right(XPAD); - _slider->set_margin_top(YPAD); - _slider->set_margin_bottom(YPAD); - _slider->set_hexpand(true); - _slider->set_halign(Gtk::ALIGN_FILL); - _slider->set_valign(Gtk::ALIGN_FILL); - gtk_grid_attach(GTK_GRID(t), _slider->gobj(), 1, row, 1, 1); -#else - gtk_table_attach(GTK_TABLE (t), _slider->gobj(), 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, XPAD, YPAD); -#endif - - _slider->setColors(SP_RGBA32_F_COMPOSE (1.0, 1.0, 1.0, 0.0), - SP_RGBA32_F_COMPOSE (1.0, 1.0, 1.0, 0.5), - SP_RGBA32_F_COMPOSE (1.0, 1.0, 1.0, 1.0)); - - /* Spinbutton */ - _sbtn = gtk_spin_button_new (GTK_ADJUSTMENT (_adj), 1.0, 0); - gtk_widget_set_tooltip_text (_sbtn, _("Alpha (opacity)")); - sp_dialog_defocus_on_enter (_sbtn); - gtk_label_set_mnemonic_widget (GTK_LABEL(_label), _sbtn); - gtk_widget_show (_sbtn); - -#if GTK_CHECK_VERSION(3,0,0) - gtk_widget_set_margin_left(_sbtn, XPAD); - gtk_widget_set_margin_right(_sbtn, XPAD); - gtk_widget_set_margin_top(_sbtn, YPAD); - gtk_widget_set_margin_bottom(_sbtn, YPAD); - gtk_widget_set_halign(_sbtn, GTK_ALIGN_CENTER); - gtk_widget_set_valign(_sbtn, GTK_ALIGN_CENTER); - gtk_grid_attach(GTK_GRID(t), _sbtn, 2, row, 1, 1); -#else - gtk_table_attach (GTK_TABLE (t), _sbtn, 2, 3, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD); -#endif - - /* Signals */ - g_signal_connect (G_OBJECT (_adj), "value_changed", - G_CALLBACK (_adjustmentChanged), _csel); - - _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; -} - -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; - { - 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]); - 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 ); - - _slider->setColors(start, mid, end); - - ColorScales::setScaled(_adj, _alpha); - - _updating = FALSE; -} - -void ColorWheelSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorWheelSelector *cs ) -{ -// 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); - gdouble upper = gtk_adjustment_get_upper (adjustment); - - if (value > 0.0 && value < 1.0) { - gtk_adjustment_set_value( adjustment, floor (value * upper + 0.5) ); - } - - ColorWheelSelector* wheelSelector = static_cast(SP_COLOR_SELECTOR(cs)->base); - if (wheelSelector->_updating) return; - - wheelSelector->_updating = TRUE; - - wheelSelector->_preserve_icc(&wheelSelector->_color); - wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging ); - - wheelSelector->_updating = FALSE; -} - -void ColorWheelSelector::_sliderGrabbed() -{ - if (!_dragging) { - _dragging = TRUE; - _grabbed(); - - _preserve_icc(&_color); - _updateInternals( _color, ColorScales::getScaled( _adj ), _dragging ); - } -} - -void ColorWheelSelector::_sliderReleased() -{ - if (_dragging) { - _dragging = FALSE; - _released(); - - _preserve_icc(&_color); - _updateInternals( _color, ColorScales::getScaled( _adj ), _dragging ); - } -} - -void ColorWheelSelector::_sliderChanged() -{ - _preserve_icc(&_color); - _updateInternals( _color, ColorScales::getScaled( _adj ), _dragging ); -} - -void ColorWheelSelector::_wheelChanged( GimpColorWheel *wheel, SPColorWheelSelector *cs ) -{ - ColorWheelSelector* wheelSelector = static_cast(SP_COLOR_SELECTOR(cs)->base); - - gdouble h = 0; - gdouble s = 0; - gdouble v = 0; - gimp_color_wheel_get_color( wheel, &h, &s, &v ); - - float rgb[3] = {0,0,0}; - sp_color_hsv_to_rgb_floatv (rgb, h, s, v); - - SPColor color(rgb[0], rgb[1], rgb[2]); - - guint32 start = color.toRGBA32( 0x00 ); - guint32 mid = color.toRGBA32( 0x7f ); - guint32 end = color.toRGBA32( 0xff ); - - wheelSelector->_slider->setColors(start, mid, end); - - wheelSelector->_preserve_icc(&color); - wheelSelector->_updateInternals( color, wheelSelector->_alpha, gimp_color_wheel_is_adjusting(wheel) ); -} - - -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; -} - -Glib::ustring ColorWheelSelectorFactory::modeName() const { - return gettext(ColorWheelSelector::MODE_NAME); -} - - -/* - Local Variables: - mode:c++ - c-file-style:"stroustrup" - c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) - indent-tabs-mode:nil - fill-column:99 - End: -*/ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : diff --git a/src/widgets/sp-color-wheel-selector.h b/src/widgets/sp-color-wheel-selector.h deleted file mode 100644 index ad0d11bad..000000000 --- a/src/widgets/sp-color-wheel-selector.h +++ /dev/null @@ -1,111 +0,0 @@ -#ifndef SEEN_SP_COLOR_WHEEL_SELECTOR_H -#define SEEN_SP_COLOR_WHEEL_SELECTOR_H - -#ifdef HAVE_CONFIG_H -# include -#endif - -#if GLIBMM_DISABLE_DEPRECATED && HAVE_GLIBMM_THREADS_H -#include -#endif - -#include -#include - -#include "sp-color-selector.h" -#include "ui/selected-color.h" - -typedef struct _GimpColorWheel GimpColorWheel; -struct SPColorWheelSelector; -struct SPColorWheelSelectorClass; - -namespace Inkscape { -namespace UI { -namespace Widget { - -class ColorSlider; - -} -} -} - -class ColorWheelSelector: public ColorSelector -{ -public: - static const gchar* MODE_NAME; - - ColorWheelSelector( SPColorSelector* csel ); - virtual ~ColorWheelSelector(); - - virtual void init(); - -protected: - virtual void _colorChanged(); - - static void _adjustmentChanged ( GtkAdjustment *adjustment, SPColorWheelSelector *cs ); - - void _sliderGrabbed(); - void _sliderReleased(); - void _sliderChanged(); - static void _wheelChanged( GimpColorWheel *wheel, SPColorWheelSelector *cs ); - - static void _fooChanged( GtkWidget foo, SPColorWheelSelector *cs ); - - void _recalcColor( gboolean changing ); - - gboolean _updating : 1; - gboolean _dragging : 1; - GtkAdjustment* _adj; // Channel adjustment - GtkWidget* _wheel; - Inkscape::UI::Widget::ColorSlider* _slider; - GtkWidget* _sbtn; // Spinbutton - GtkWidget* _label; // Label - -private: - // By default, disallow copy constructor and assignment operator - ColorWheelSelector( const ColorWheelSelector& obj ); - ColorWheelSelector& operator=( const ColorWheelSelector& obj ); - - void _preserve_icc(SPColor *color) const; -}; - - - -#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 { -public: - Gtk::Widget *createWidget(Inkscape::UI::SelectedColor &color) const; - Glib::ustring modeName() const; -}; - - -#endif // SEEN_SP_COLOR_WHEEL_SELECTOR_H - -/* - Local Variables: - mode:c++ - c-file-style:"stroustrup" - c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) - indent-tabs-mode:nil - fill-column:99 - End: -*/ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : -- cgit v1.2.3 From c2b99414ee441654e641552f372ebf1165f94ffc Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Sat, 31 May 2014 12:34:20 +0200 Subject: SPColorWheelSelector c++-sification: inherit Gtk::Table/Grid (bzr r13341.6.35) --- src/ui/selected-color.cpp | 13 +- src/ui/selected-color.h | 2 + src/ui/widget/color-wheel-selector.cpp | 220 +++++++++++---------------------- src/ui/widget/color-wheel-selector.h | 70 +++++------ src/widgets/sp-color-notebook.cpp | 20 +-- 5 files changed, 125 insertions(+), 200 deletions(-) (limited to 'src') 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 #include +#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 signal_grabbed; sigc::signal signal_dragged; sigc::signal 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(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(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 (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 #include +#include -#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 diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index ca189e086..58c26b8b0 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -131,13 +131,17 @@ void ColorNotebook::switchPage(GtkNotebook*, if ( gtk_notebook_get_current_page (GTK_NOTEBOOK (_book)) >= 0 ) { csel = getCurrentSelector(); - csel->base->getColorAlpha(_color, _alpha); + if (csel) { + csel->base->getColorAlpha(_color, _alpha); + } } widget = gtk_notebook_get_nth_page (GTK_NOTEBOOK (_book), page_num); if ( widget && SP_IS_COLOR_SELECTOR(widget) ) { csel = SP_COLOR_SELECTOR (widget); - csel->base->setColorAlpha( _color, _alpha ); + if (csel) { + csel->base->setColorAlpha( _color, _alpha ); + } // Temporary workaround to undo a spurious GRABBED _released(); @@ -620,11 +624,13 @@ GtkWidget* ColorNotebook::_addPage(Page& page) { g_signal_connect (G_OBJECT (_buttons[page_num]), "clicked", G_CALLBACK (_buttonClicked), _csel); - //Connect glib signals of non-refactored widgets - g_signal_connect (selector_widget->gobj(), "grabbed", G_CALLBACK (_entryGrabbed), _csel); - g_signal_connect (selector_widget->gobj(), "dragged", G_CALLBACK (_entryDragged), _csel); - g_signal_connect (selector_widget->gobj(), "released", G_CALLBACK (_entryReleased), _csel); - g_signal_connect (selector_widget->gobj(), "changed", G_CALLBACK (_entryChanged), _csel); + if (SP_IS_COLOR_SELECTOR(selector_widget)) { + //Connect glib signals of non-refactored widgets + g_signal_connect (selector_widget->gobj(), "grabbed", G_CALLBACK (_entryGrabbed), _csel); + g_signal_connect (selector_widget->gobj(), "dragged", G_CALLBACK (_entryDragged), _csel); + g_signal_connect (selector_widget->gobj(), "released", G_CALLBACK (_entryReleased), _csel); + g_signal_connect (selector_widget->gobj(), "changed", G_CALLBACK (_entryChanged), _csel); + } } return selector_widget->gobj(); -- cgit v1.2.3 From efd28a1d2bae756f53ad9b689fb6079be9d92605 Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Sat, 31 May 2014 13:13:31 +0200 Subject: fixed updating selected color using wheel (bzr r13341.6.36) --- src/widgets/sp-color-notebook.cpp | 33 ++++++++++++++++++++++++++++++++- src/widgets/sp-color-notebook.h | 3 +++ 2 files changed, 35 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 58c26b8b0..7495d1deb 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -363,6 +363,9 @@ void ColorNotebook::init() G_CALLBACK (sp_color_notebook_switch_page), SP_COLOR_NOTEBOOK(_csel)); _selected_color.signal_changed.connect(sigc::mem_fun(this, &ColorNotebook::_onSelectedColorChanged)); + _selected_color.signal_dragged.connect(sigc::mem_fun(this, &ColorNotebook::_onSelectedColorDragged)); + _selected_color.signal_grabbed.connect(sigc::mem_fun(this, &ColorNotebook::_onSelectedColorGrabbed)); + _selected_color.signal_released.connect(sigc::mem_fun(this, &ColorNotebook::_onSelectedColorReleased)); } static void sp_color_notebook_dispose(GObject *object) @@ -598,8 +601,36 @@ void ColorNotebook::_onSelectedColorChanged() { SPColor color; gfloat alpha = 1.0; + _updating = true; _selected_color.colorAlpha(color, alpha); _updateInternals(color, alpha, _dragging); + _updating = false; +} + +void ColorNotebook::_onSelectedColorDragged() { + if (_updating) { + return; + } + bool oldState = _dragging; + + _dragging = TRUE; + SPColor color; + gfloat alpha = 1.0; + + _updating = true; + _selected_color.colorAlpha(color, alpha); + _updateInternals(color, alpha, _dragging); + _updating = false; + + _dragging = oldState; +} + +void ColorNotebook::_onSelectedColorGrabbed() { + _grabbed(); +} + +void ColorNotebook::_onSelectedColorReleased() { + _released(); } GtkWidget* ColorNotebook::_addPage(Page& page) { @@ -624,7 +655,7 @@ GtkWidget* ColorNotebook::_addPage(Page& page) { g_signal_connect (G_OBJECT (_buttons[page_num]), "clicked", G_CALLBACK (_buttonClicked), _csel); - if (SP_IS_COLOR_SELECTOR(selector_widget)) { + if (SP_IS_COLOR_SELECTOR(selector_widget->gobj())) { //Connect glib signals of non-refactored widgets g_signal_connect (selector_widget->gobj(), "grabbed", G_CALLBACK (_entryGrabbed), _csel); g_signal_connect (selector_widget->gobj(), "dragged", G_CALLBACK (_entryDragged), _csel); diff --git a/src/widgets/sp-color-notebook.h b/src/widgets/sp-color-notebook.h index 9ab98f1e9..7c6dbc770 100644 --- a/src/widgets/sp-color-notebook.h +++ b/src/widgets/sp-color-notebook.h @@ -61,6 +61,9 @@ protected: virtual void _colorChanged(); virtual void _onSelectedColorChanged(); + virtual void _onSelectedColorDragged(); + virtual void _onSelectedColorGrabbed(); + virtual void _onSelectedColorReleased(); void _updateRgbaEntry( const SPColor& color, gfloat alpha ); void _setCurrentPage(int i); -- cgit v1.2.3 From acb2a6bf56c0c932e89114e00cef10fdb5c2f9b5 Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Sat, 31 May 2014 14:59:50 +0200 Subject: SPColorWheelSelector c++-sification: replaced gtk calls by gtkmm versions (bzr r13341.6.37) --- src/ui/widget/color-wheel-selector.cpp | 146 ++++++++++++++++----------------- src/ui/widget/color-wheel-selector.h | 30 ++++--- 2 files changed, 90 insertions(+), 86 deletions(-) (limited to 'src') diff --git a/src/ui/widget/color-wheel-selector.cpp b/src/ui/widget/color-wheel-selector.cpp index e14c70728..e49e4ba16 100644 --- a/src/ui/widget/color-wheel-selector.cpp +++ b/src/ui/widget/color-wheel-selector.cpp @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include "dialogs/dialog-events.h" #include "widgets/sp-color-scales.h" #include "svg/svg-icc-color.h" @@ -33,12 +35,12 @@ ColorWheelSelector::ColorWheelSelector(SelectedColor &color) : Gtk::Table(5, 3, false) #endif , _color(color) - , _updating(false), - _adj(0), - _wheel(0), - _slider(0), - _sbtn(0), - _label(0) + , _updating(false) +#if !GTK_CHECK_VERSION(3,0,0) + , _alpha_adjustment(NULL) +#endif + , _wheel(0) + , _slider(0) { _initUI(); _color_changed_connection = color.signal_changed.connect(sigc::mem_fun(this, &ColorWheelSelector::_colorChanged)); @@ -48,24 +50,18 @@ ColorWheelSelector::ColorWheelSelector(SelectedColor &color) ColorWheelSelector::~ColorWheelSelector() { - _adj = 0; _wheel = 0; - _sbtn = 0; - _label = 0; +#if !GTK_CHECK_VERSION(3,0,0) + delete _alpha_adjustment; +#endif _color_changed_connection.disconnect(); _color_dragged_connection.disconnect(); } void ColorWheelSelector::_initUI() { - gint row = 0; - - GtkWidget *t = GTK_WIDGET(gobj()); - - //gtk_widget_show (t); - /* Create components */ - row = 0; + gint row = 0; _wheel = gimp_color_wheel_new(); gtk_widget_show( _wheel ); @@ -75,35 +71,38 @@ void ColorWheelSelector::_initUI() { gtk_widget_set_valign(_wheel, GTK_ALIGN_FILL); gtk_widget_set_hexpand(_wheel, TRUE); gtk_widget_set_vexpand(_wheel, TRUE); - gtk_grid_attach(GTK_GRID(t), _wheel, 0, row, 3, 1); + gtk_grid_attach(GTK_GRID(gobj()), _wheel, 0, row, 3, 1); #else - gtk_table_attach(GTK_TABLE(t), _wheel, 0, 3, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); + gtk_table_attach(GTK_TABLE(gobj()), _wheel, 0, 3, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); #endif row++; /* Label */ - _label = gtk_label_new_with_mnemonic (_("_A:")); - gtk_misc_set_alignment (GTK_MISC (_label), 1.0, 0.5); - gtk_widget_show (_label); + Gtk::Label* label = Gtk::manage(new Gtk::Label(_("_A:"), true)); + label->set_alignment(1.0, 0.5); + label->show(); #if GTK_CHECK_VERSION(3,0,0) - gtk_widget_set_margin_left(_label, XPAD); - gtk_widget_set_margin_right(_label, XPAD); - gtk_widget_set_margin_top(_label, YPAD); - gtk_widget_set_margin_bottom(_label, YPAD); - gtk_widget_set_halign(_label, GTK_ALIGN_FILL); - gtk_widget_set_valign(_label, GTK_ALIGN_FILL); - gtk_grid_attach(GTK_GRID(t), _label, 0, row, 1, 1); + label->set_margin_left(XPAD); + label->set_margin_right(XPAD); + label->set_margin_top(YPAD); + label->set_margin_bottom(YPAD); + label->set_halign(Gtk::ALIGN_FILL); + label->set_valign(Gtk::ALIGN_FILL); + attach(*label, 0, row, 1, 1); #else - gtk_table_attach (GTK_TABLE (t), _label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD); + attach(*label, 0, 1, row, row + 1, Gtk::FILL, Gtk::FILL, XPAD, YPAD); #endif /* Adjustment */ - _adj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 255.0, 1.0, 10.0, 10.0)); - +#if GTK_CHECK_VERSION(3,0,0) + _alpha_adjustment = Gtk::Adjustment::create(0.0, 0.0, 255.0, 1.0, 10.0, 10.0); +#else + _alpha_adjustment = new Gtk::Adjustment(0.0, 0.0, 255.0, 1.0, 10.0, 10.0); +#endif /* Slider */ - _slider = Gtk::manage(new Inkscape::UI::Widget::ColorSlider(Glib::wrap(_adj, true))); + _slider = Gtk::manage(new Inkscape::UI::Widget::ColorSlider(_alpha_adjustment)); _slider->set_tooltip_text(_("Alpha (opacity)")); _slider->show(); @@ -115,9 +114,9 @@ void ColorWheelSelector::_initUI() { _slider->set_hexpand(true); _slider->set_halign(Gtk::ALIGN_FILL); _slider->set_valign(Gtk::ALIGN_FILL); - gtk_grid_attach(GTK_GRID(t), _slider->gobj(), 1, row, 1, 1); + attach(*_slider, 1, row, 1, 1); #else - gtk_table_attach(GTK_TABLE (t), _slider->gobj(), 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, XPAD, YPAD); + attach(*_slider, 1, 2, row, row+1, Gtk::EXPAND | Gtk::FILL, Gtk::FILL, XPAD, YPAD); #endif _slider->setColors(SP_RGBA32_F_COMPOSE (1.0, 1.0, 1.0, 0.0), @@ -125,32 +124,34 @@ void ColorWheelSelector::_initUI() { SP_RGBA32_F_COMPOSE (1.0, 1.0, 1.0, 1.0)); /* Spinbutton */ - _sbtn = gtk_spin_button_new (GTK_ADJUSTMENT (_adj), 1.0, 0); - gtk_widget_set_tooltip_text (_sbtn, _("Alpha (opacity)")); - sp_dialog_defocus_on_enter (_sbtn); - gtk_label_set_mnemonic_widget (GTK_LABEL(_label), _sbtn); - gtk_widget_show (_sbtn); +#if GTK_CHECK_VERSION(3,0,0) + Gtk::SpinButton* spin_button = Gtk::manage(new Gtk::SpinButton(_alpha_adjustment, 1.0, 0)); + #else + Gtk::SpinButton* spin_button = Gtk::manage(new Gtk::SpinButton(*_alpha_adjustment, 1.0, 0)); +#endif + spin_button->set_tooltip_text(_("Alpha (opacity)")); + sp_dialog_defocus_on_enter(GTK_WIDGET(spin_button->gobj())); + label->set_mnemonic_widget(*spin_button); + spin_button->show(); #if GTK_CHECK_VERSION(3,0,0) - gtk_widget_set_margin_left(_sbtn, XPAD); - gtk_widget_set_margin_right(_sbtn, XPAD); - gtk_widget_set_margin_top(_sbtn, YPAD); - gtk_widget_set_margin_bottom(_sbtn, YPAD); - gtk_widget_set_halign(_sbtn, GTK_ALIGN_CENTER); - gtk_widget_set_valign(_sbtn, GTK_ALIGN_CENTER); - gtk_grid_attach(GTK_GRID(t), _sbtn, 2, row, 1, 1); + + spin_button->set_margin_left(XPAD); + spin_button->set_margin_right(XPAD); + spin_button->set_margin_top(YPAD); + spin_button->set_margin_bottom(YPAD); + spin_button->set_halign(Gtk::ALIGN_CENTER); + spin_button->set_valign(Gtk::ALIGN_CENTER); + attach(*spin_button, 2, row, 1, 1); #else - gtk_table_attach (GTK_TABLE (t), _sbtn, 2, 3, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD); + attach(*spin_button, 2, 3, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, XPAD, YPAD); #endif /* Signals */ - g_signal_connect (G_OBJECT (_adj), "value_changed", - G_CALLBACK (_adjustmentChanged), this); - + _alpha_adjustment->signal_value_changed().connect(sigc::mem_fun(this, &ColorWheelSelector::_adjustmentChanged)); _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), this ); } @@ -158,7 +159,7 @@ void ColorWheelSelector::_initUI() { 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 ); + g_message("ColorWheelSelector::_colorChanged( this=%p, %f, %f, %f, %f)", this, _color.color().v.c[0], _color.color().v.c[1], _color.color().v.c[2], alpha ); #endif if (_updating) { return; @@ -177,33 +178,30 @@ void ColorWheelSelector::_colorChanged() _slider->setColors(start, mid, end); - ColorScales::setScaled(_adj, _color.alpha()); + ColorScales::setScaled(_alpha_adjustment->gobj(), _color.alpha()); - _updating = FALSE; + _updating = false; } -void ColorWheelSelector::_adjustmentChanged( GtkAdjustment *adjustment, ColorWheelSelector *cs ) +void ColorWheelSelector::_adjustmentChanged() { - if (cs->_updating) { + if (_updating) { return; } + _updating = true; -// TODO check this. It looks questionable: + // 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); - gdouble upper = gtk_adjustment_get_upper (adjustment); - + gdouble value = _alpha_adjustment->get_value(); + gdouble upper = _alpha_adjustment->get_upper(); if (value > 0.0 && value < 1.0) { - gtk_adjustment_set_value( adjustment, floor (value * upper + 0.5) ); + _alpha_adjustment->set_value(floor(value * upper + 0.5)); } - cs->_updating = true; - - cs->_color.preserveICC(); - - cs->_color.setAlpha(ColorScales::getScaled( cs->_adj )); + _color.preserveICC(); + _color.setAlpha(ColorScales::getScaled(_alpha_adjustment->gobj())); - cs->_updating = false; + _updating = false; } void ColorWheelSelector::_sliderGrabbed() @@ -226,13 +224,16 @@ void ColorWheelSelector::_sliderChanged() _updating = true; _color.preserveICC(); - _color.setAlpha(ColorScales::getScaled(_adj)); + _color.setAlpha(ColorScales::getScaled(_alpha_adjustment->gobj())); _updating = false; } -void ColorWheelSelector::_wheelChanged( GimpColorWheel *wheel, ColorWheelSelector *wheelSelector ) +void ColorWheelSelector::_wheelChanged(GimpColorWheel *wheel, ColorWheelSelector *wheelSelector) { - if (wheelSelector->_updating) return; + if (wheelSelector->_updating){ + return; + } + wheelSelector->_updating = true; gdouble h = 0; gdouble s = 0; @@ -250,8 +251,6 @@ void ColorWheelSelector::_wheelChanged( GimpColorWheel *wheel, ColorWheelSelecto wheelSelector->_slider->setColors(start, mid, end); - wheelSelector->_updating = true; - wheelSelector->_color.preserveICC(); wheelSelector->_color.setHeld(gimp_color_wheel_is_adjusting(wheel)); @@ -273,9 +272,6 @@ Glib::ustring ColorWheelSelectorFactory::modeName() const { } } } - - - /* Local Variables: mode:c++ diff --git a/src/ui/widget/color-wheel-selector.h b/src/ui/widget/color-wheel-selector.h index e289a8df6..f5213fad7 100644 --- a/src/ui/widget/color-wheel-selector.h +++ b/src/ui/widget/color-wheel-selector.h @@ -22,7 +22,11 @@ #include #include +#if GTK_CHECK_VERSION(3,0,0) +#include +#else #include +#endif #include "ui/selected-color.h" @@ -35,7 +39,11 @@ namespace Widget { class ColorSlider; class ColorWheelSelector - : public Gtk::Table //if GTK2 +#if GTK_CHECK_VERSION(3,0,0) + : public Gtk::Grid +#else + : public Gtk::Table +#endif { public: static const gchar* MODE_NAME; @@ -45,25 +53,25 @@ public: protected: void _initUI(); - virtual void _colorChanged(); - - static void _adjustmentChanged ( GtkAdjustment *adjustment, ColorWheelSelector *cs ); + void _colorChanged(); + void _adjustmentChanged(); void _sliderGrabbed(); void _sliderReleased(); void _sliderChanged(); - static void _wheelChanged( GimpColorWheel *wheel, ColorWheelSelector *cs ); + static void _wheelChanged(GimpColorWheel *wheel, ColorWheelSelector *cs); - void _recalcColor( gboolean changing ); + void _recalcColor(gboolean changing); SelectedColor &_color; bool _updating; - - GtkAdjustment* _adj; // Channel adjustment +#if GTK_CHECK_VERSION(3,0,0) + Glib::RefPtr _alpha_adjustment; +#else + Gtk::Adjustment* _alpha_adjustment; +#endif GtkWidget* _wheel; Inkscape::UI::Widget::ColorSlider* _slider; - GtkWidget* _sbtn; // Spinbutton - GtkWidget* _label; // Label private: // By default, disallow copy constructor and assignment operator @@ -74,6 +82,7 @@ private: sigc::connection _color_dragged_connection; }; + class ColorWheelSelectorFactory: public ColorSelectorFactory { public: Gtk::Widget *createWidget(SelectedColor &color) const; @@ -84,7 +93,6 @@ public: } } - #endif // SEEN_SP_COLOR_WHEEL_SELECTOR_H /* -- cgit v1.2.3