summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTomasz Boczkowski <penginsbacon@gmail.com>2015-04-26 09:53:37 +0000
committerTomasz Boczkowski <penginsbacon@gmail.com>2015-04-26 09:53:37 +0000
commitebf464073db4910f559e5661820542bc3ca78a34 (patch)
tree061ceb02269b3a1f02e75d594ffcd1fb16f55fad /src
parentmerged SelectedColor enhancements from svgpaints branch (diff)
parentSPColorWheelSelector c++-sification: replaced gtk calls by gtkmm versions (diff)
downloadinkscape-ebf464073db4910f559e5661820542bc3ca78a34.tar.gz
inkscape-ebf464073db4910f559e5661820542bc3ca78a34.zip
merged SPColorWheelSelector c++-sification from svgpaints branch
(bzr r14059.1.7)
Diffstat (limited to 'src')
-rw-r--r--src/ui/selected-color.cpp12
-rw-r--r--src/ui/selected-color.h2
-rw-r--r--src/ui/widget/Makefile_insert2
-rw-r--r--src/ui/widget/color-wheel-selector.cpp299
-rw-r--r--src/ui/widget/color-wheel-selector.h107
-rw-r--r--src/widgets/Makefile_insert2
-rw-r--r--src/widgets/sp-color-notebook.cpp53
-rw-r--r--src/widgets/sp-color-notebook.h3
-rw-r--r--src/widgets/sp-color-wheel-selector.cpp351
-rw-r--r--src/widgets/sp-color-wheel-selector.h111
10 files changed, 467 insertions, 475 deletions
diff --git a/src/ui/selected-color.cpp b/src/ui/selected-color.cpp
index 440459c74..dff43649c 100644
--- a/src/ui/selected-color.cpp
+++ b/src/ui/selected-color.cpp
@@ -22,6 +22,7 @@
#include <glib.h>
#include "selected-color.h"
+#include "svg/svg-icc-color.h"
namespace Inkscape {
namespace UI {
@@ -31,8 +32,8 @@ double const SelectedColor::_EPSILON = 1e-4;
SelectedColor::SelectedColor()
: _color(0)
, _alpha(1.0)
- , _virgin(true)
, _held(false)
+ , _virgin(true)
{
}
@@ -43,7 +44,7 @@ SelectedColor::~SelectedColor() {
void SelectedColor::setColor(SPColor const &color)
{
- setColorAlpha( color, _alpha );
+ setColorAlpha( color, _alpha, true);
}
SPColor SelectedColor::color() const
@@ -54,7 +55,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
@@ -118,9 +119,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/Makefile_insert b/src/ui/widget/Makefile_insert
index b63d6b264..cead320b6 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..80fa8c7f8
--- /dev/null
+++ b/src/ui/widget/color-wheel-selector.cpp
@@ -0,0 +1,299 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "color-wheel-selector.h"
+
+#include <math.h>
+#include <gtk/gtk.h>
+#include <glibmm/i18n.h>
+#include <gtkmm/adjustment.h>
+#include <gtkmm/label.h>
+#include <gtkmm/spinbutton.h>
+#include "widgets/sp-color-scales.h"
+#include "svg/svg-icc-color.h"
+#include "ui/dialog-events.h"
+#include "ui/selected-color.h"
+#include "ui/widget/color-slider.h"
+#include "ui/widget/gimpcolorwheel.h"
+
+namespace Inkscape {
+namespace UI {
+namespace Widget {
+
+
+#define XPAD 4
+#define YPAD 1
+
+
+const gchar* ColorWheelSelector::MODE_NAME = N_("Wheel");
+
+ColorWheelSelector::ColorWheelSelector(SelectedColor &color)
+#if GTK_CHECK_VERSION(3,0,0)
+ : Gtk::Grid()
+#else
+ : Gtk::Table(5, 3, false)
+#endif
+ , _color(color)
+ , _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));
+ _color_dragged_connection = color.signal_dragged.connect(sigc::mem_fun(this, &ColorWheelSelector::_colorChanged));
+
+}
+
+ColorWheelSelector::~ColorWheelSelector()
+{
+ _wheel = 0;
+#if !GTK_CHECK_VERSION(3,0,0)
+ delete _alpha_adjustment;
+#endif
+
+ _color_changed_connection.disconnect();
+ _color_dragged_connection.disconnect();
+}
+
+void ColorWheelSelector::_initUI() {
+ /* Create components */
+ gint 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(gobj()), _wheel, 0, row, 3, 1);
+#else
+ 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 */
+ 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)
+ #if GTK_CHECK_VERSION(3,12,0)
+ label->set_margin_start(XPAD);
+ label->set_margin_end(XPAD);
+ #else
+ label->set_margin_left(XPAD);
+ label->set_margin_right(XPAD);
+ #endif
+ 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
+ attach(*label, 0, 1, row, row + 1, Gtk::FILL, Gtk::FILL, XPAD, YPAD);
+#endif
+
+ /* Adjustment */
+#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(_alpha_adjustment));
+ _slider->set_tooltip_text(_("Alpha (opacity)"));
+ _slider->show();
+
+#if GTK_CHECK_VERSION(3,0,0)
+ #if GTK_CHECK_VERSION(3,12,0)
+ _slider->set_margin_start(XPAD);
+ _slider->set_margin_end(XPAD);
+ #else
+ _slider->set_margin_left(XPAD);
+ _slider->set_margin_right(XPAD);
+ #endif
+ _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);
+ attach(*_slider, 1, row, 1, 1);
+#else
+ 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),
+ 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 */
+#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)
+ #if GTK_CHECK_VERSION(3,12,0)
+ spin_button->set_margin_start(XPAD);
+ spin_button->set_margin_end(XPAD);
+ #else
+ spin_button->set_margin_left(XPAD);
+ spin_button->set_margin_right(XPAD);
+ #endif
+ 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
+ attach(*spin_button, 2, 3, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, XPAD, YPAD);
+#endif
+
+ /* Signals */
+ _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 );
+}
+
+void ColorWheelSelector::_colorChanged()
+{
+#ifdef DUMP_CHANGE_INFO
+ 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;
+ }
+
+ _updating = true;
+ {
+ float hsv[3] = {0,0,0};
+ 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.color().toRGBA32( 0x00 );
+ guint32 mid = _color.color().toRGBA32( 0x7f );
+ guint32 end = _color.color().toRGBA32( 0xff );
+
+ _slider->setColors(start, mid, end);
+
+ ColorScales::setScaled(_alpha_adjustment->gobj(), _color.alpha());
+
+ _updating = false;
+}
+
+void ColorWheelSelector::_adjustmentChanged()
+{
+ if (_updating) {
+ return;
+ }
+ _updating = true;
+
+ // 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 = _alpha_adjustment->get_value();
+ gdouble upper = _alpha_adjustment->get_upper();
+ if (value > 0.0 && value < 1.0) {
+ _alpha_adjustment->set_value(floor(value * upper + 0.5));
+ }
+
+ _color.preserveICC();
+ _color.setAlpha(ColorScales::getScaled(_alpha_adjustment->gobj()));
+
+ _updating = false;
+}
+
+void ColorWheelSelector::_sliderGrabbed()
+{
+ _color.preserveICC();
+ _color.setHeld(true);
+}
+
+void ColorWheelSelector::_sliderReleased()
+{
+ _color.preserveICC();
+ _color.setHeld(false);
+}
+
+void ColorWheelSelector::_sliderChanged()
+{
+ if (_updating) {
+ return;
+ }
+
+ _updating = true;
+ _color.preserveICC();
+ _color.setAlpha(ColorScales::getScaled(_alpha_adjustment->gobj()));
+ _updating = false;
+}
+
+void ColorWheelSelector::_wheelChanged(GimpColorWheel *wheel, ColorWheelSelector *wheelSelector)
+{
+ if (wheelSelector->_updating){
+ return;
+ }
+ wheelSelector->_updating = true;
+
+ 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->_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 {
+ Gtk::Widget *w = Gtk::manage(new ColorWheelSelector(color));
+ return w;
+}
+
+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..f5213fad7
--- /dev/null
+++ b/src/ui/widget/color-wheel-selector.h
@@ -0,0 +1,107 @@
+/**
+ * @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
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if GLIBMM_DISABLE_DEPRECATED && HAVE_GLIBMM_THREADS_H
+#include <glibmm/threads.h>
+#endif
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#if GTK_CHECK_VERSION(3,0,0)
+#include <gtkmm/grid.h>
+#else
+#include <gtkmm/table.h>
+#endif
+
+#include "ui/selected-color.h"
+
+typedef struct _GimpColorWheel GimpColorWheel;
+
+namespace Inkscape {
+namespace UI {
+namespace Widget {
+
+class ColorSlider;
+
+class ColorWheelSelector
+#if GTK_CHECK_VERSION(3,0,0)
+ : public Gtk::Grid
+#else
+ : public Gtk::Table
+#endif
+{
+public:
+ static const gchar* MODE_NAME;
+
+ ColorWheelSelector(SelectedColor &color);
+ virtual ~ColorWheelSelector();
+
+protected:
+ void _initUI();
+
+ void _colorChanged();
+ void _adjustmentChanged();
+ void _sliderGrabbed();
+ void _sliderReleased();
+ void _sliderChanged();
+ static void _wheelChanged(GimpColorWheel *wheel, ColorWheelSelector *cs);
+
+ void _recalcColor(gboolean changing);
+
+ SelectedColor &_color;
+ bool _updating;
+#if GTK_CHECK_VERSION(3,0,0)
+ Glib::RefPtr<Gtk::Adjustment> _alpha_adjustment;
+#else
+ Gtk::Adjustment* _alpha_adjustment;
+#endif
+ GtkWidget* _wheel;
+ Inkscape::UI::Widget::ColorSlider* _slider;
+
+private:
+ // By default, disallow copy constructor and assignment operator
+ ColorWheelSelector( const ColorWheelSelector& obj );
+ ColorWheelSelector& operator=( const ColorWheelSelector& obj );
+
+ sigc::connection _color_changed_connection;
+ sigc::connection _color_dragged_connection;
+};
+
+
+class ColorWheelSelectorFactory: public ColorSelectorFactory {
+public:
+ Gtk::Widget *createWidget(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 7dd7ba407..c1f5d331b 100644
--- a/src/widgets/Makefile_insert
+++ b/src/widgets/Makefile_insert
@@ -84,8 +84,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 4d628df66..0662a54ce 100644
--- a/src/widgets/sp-color-notebook.cpp
+++ b/src/widgets/sp-color-notebook.cpp
@@ -36,7 +36,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"
@@ -46,6 +45,7 @@
#include "ui/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;
@@ -109,13 +109,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();
@@ -352,6 +356,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)
@@ -587,8 +594,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) {
@@ -613,11 +648,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->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);
+ 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();
diff --git a/src/widgets/sp-color-notebook.h b/src/widgets/sp-color-notebook.h
index dfadc0572..6fdb104a2 100644
--- a/src/widgets/sp-color-notebook.h
+++ b/src/widgets/sp-color-notebook.h
@@ -63,6 +63,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);
diff --git a/src/widgets/sp-color-wheel-selector.cpp b/src/widgets/sp-color-wheel-selector.cpp
deleted file mode 100644
index 0e0c1fa4e..000000000
--- a/src/widgets/sp-color-wheel-selector.cpp
+++ /dev/null
@@ -1,351 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "sp-color-wheel-selector.h"
-
-#include <math.h>
-#include <gtk/gtk.h>
-#include <glibmm/i18n.h>
-#include <gtkmm/adjustment.h>
-#include "ui/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_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
-
-#define XPAD 4
-#define YPAD 1
-
-const gchar* ColorWheelSelector::MODE_NAME = N_("Wheel");
-
-G_DEFINE_TYPE(SPColorWheelSelector, sp_color_wheel_selector, SP_TYPE_COLOR_SELECTOR);
-
-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);
-
- 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)
- #if GTK_CHECK_VERSION(3,12,0)
- gtk_widget_set_margin_start(_label, XPAD);
- gtk_widget_set_margin_end(_label, XPAD);
- #else
- gtk_widget_set_margin_left(_label, XPAD);
- gtk_widget_set_margin_right(_label, XPAD);
- #endif
- 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)
- #if GTK_CHECK_VERSION(3,12,0)
- _slider->set_margin_start(XPAD);
- _slider->set_margin_end(XPAD);
- #else
- _slider->set_margin_left(XPAD);
- _slider->set_margin_right(XPAD);
- #endif
- _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)
- #if GTK_CHECK_VERSION(3,12,0)
- gtk_widget_set_margin_start(_sbtn, XPAD);
- gtk_widget_set_margin_end(_sbtn, XPAD);
- #else
- gtk_widget_set_margin_left(_sbtn, XPAD);
- gtk_widget_set_margin_right(_sbtn, XPAD);
- #endif
- 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(sp_color_wheel_selector_parent_class)->dispose)
- G_OBJECT_CLASS(sp_color_wheel_selector_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<ColorWheelSelector*>(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<ColorWheelSelector*>(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 <config.h>
-#endif
-
-#if GLIBMM_DISABLE_DEPRECATED && HAVE_GLIBMM_THREADS_H
-#include <glibmm/threads.h>
-#endif
-
-#include <glib.h>
-#include <gtk/gtk.h>
-
-#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 :