summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
authorTomasz Boczkowski <penginsbacon@gmail.com>2014-05-31 10:34:20 +0000
committerTomasz Boczkowski <penginsbacon@gmail.com>2014-05-31 10:34:20 +0000
commitc2b99414ee441654e641552f372ebf1165f94ffc (patch)
treea4336b6a41986c861038fcc4a1900d3486374321 /src/ui
parentSPColorWheelSelector c++-sification: moved to ui/widgets (diff)
downloadinkscape-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.cpp13
-rw-r--r--src/ui/selected-color.h2
-rw-r--r--src/ui/widget/color-wheel-selector.cpp220
-rw-r--r--src/ui/widget/color-wheel-selector.h70
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