summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTomasz Boczkowski <penginsbacon@gmail.com>2015-04-25 13:36:15 +0000
committerTomasz Boczkowski <penginsbacon@gmail.com>2015-04-25 13:36:15 +0000
commit29a14487f0e02a7a0e74c9f2bd02262b86c17b66 (patch)
treef695adf494de8a1eb73f8669c0256fbd91e5aade /src
parentfixed possible bug SPPattern::_get_children (diff)
parentSPColorSelector c++-sification: added ColorSelectorFactory (diff)
downloadinkscape-29a14487f0e02a7a0e74c9f2bd02262b86c17b66.tar.gz
inkscape-29a14487f0e02a7a0e74c9f2bd02262b86c17b66.zip
merged SPSelected color implementation from svgpaints branch
(bzr r14059.1.4)
Diffstat (limited to 'src')
-rw-r--r--src/ui/Makefile_insert2
-rw-r--r--src/ui/selected-color.cpp106
-rw-r--r--src/ui/selected-color.h71
-rw-r--r--src/widgets/sp-color-icc-selector.cpp11
-rw-r--r--src/widgets/sp-color-icc-selector.h9
-rw-r--r--src/widgets/sp-color-notebook.cpp2
-rw-r--r--src/widgets/sp-color-scales.cpp23
-rw-r--r--src/widgets/sp-color-scales.h18
-rw-r--r--src/widgets/sp-color-wheel-selector.cpp13
-rw-r--r--src/widgets/sp-color-wheel-selector.h9
10 files changed, 262 insertions, 2 deletions
diff --git a/src/ui/Makefile_insert b/src/ui/Makefile_insert
index f94cba4e9..bbfdb532c 100644
--- a/src/ui/Makefile_insert
+++ b/src/ui/Makefile_insert
@@ -19,6 +19,8 @@ ink_common_sources += \
ui/previewfillable.h \
ui/previewholder.cpp \
ui/previewholder.h \
+ ui/selected-color.h \
+ ui/selected-color.cpp \
ui/shape-editor.cpp \
ui/shape-editor.h \
ui/tool-factory.cpp \
diff --git a/src/ui/selected-color.cpp b/src/ui/selected-color.cpp
new file mode 100644
index 000000000..0da2139cd
--- /dev/null
+++ b/src/ui/selected-color.cpp
@@ -0,0 +1,106 @@
+/** @file
+ * Color selected in color selector widget.
+ * This file was created during the refactoring of SPColorSelector
+ *//*
+ * Authors:
+ * bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Tomasz Boczkowski <penginsbacon@gmail.com>
+ *
+ * Copyright (C) 2014 Authors
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#if GLIBMM_DISABLE_DEPRECATED && HAVE_GLIBMM_THREADS_H
+#include <glibmm/threads.h>
+#endif
+
+#include <cmath>
+#include <glib.h>
+
+#include "selected-color.h"
+
+namespace Inkscape {
+namespace UI {
+
+double SelectedColor::_epsilon = 1e-4;
+
+SelectedColor::SelectedColor()
+ : _color(0)
+ , _alpha(1.0)
+ , _virgin(true)
+{
+
+}
+
+SelectedColor::~SelectedColor() {
+
+}
+
+void SelectedColor::set_color(const SPColor& color)
+{
+ set_color_alpha( color, _alpha );
+}
+
+SPColor SelectedColor::get_color() const
+{
+ return _color;
+}
+
+void SelectedColor::set_alpha(gfloat alpha)
+{
+ g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) );
+ set_color_alpha( _color, alpha );
+}
+
+gfloat SelectedColor::get_alpha() const
+{
+ return _alpha;
+}
+
+void SelectedColor::set_color_alpha(const SPColor& color, gfloat alpha, bool emit)
+{
+#ifdef DUMP_CHANGE_INFO
+ g_message("SelectedColor::setColorAlpha( this=%p, %f, %f, %f, %s, %f, %s) in %s", this, color.v.c[0], color.v.c[1], color.v.c[2], (color.icc?color.icc->colorProfile.c_str():"<null>"), alpha, (emit?"YES":"no"), FOO_NAME(_csel));
+#endif
+ g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) );
+
+#ifdef DUMP_CHANGE_INFO
+ g_message("---- SelectedColor::setColorAlpha virgin:%s !close:%s alpha is:%s in %s",
+ (_virgin?"YES":"no"),
+ (!color.isClose( _color, _epsilon )?"YES":"no"),
+ ((fabs((_alpha) - (alpha)) >= _epsilon )?"YES":"no"),
+ FOO_NAME(_csel)
+ );
+#endif
+
+ if ( _virgin || !color.isClose( _color, _epsilon ) ||
+ (fabs((_alpha) - (alpha)) >= _epsilon )) {
+
+ _virgin = false;
+
+ _color = color;
+ _alpha = alpha;
+
+ if (emit) {
+ signal_changed.emit();
+ }
+#ifdef DUMP_CHANGE_INFO
+ } else {
+ g_message("++++ SelectedColor::setColorAlpha color:%08x ==> _color:%08X isClose:%s in %s", color.toRGBA32(alpha), _color.toRGBA32(_alpha),
+ (color.isClose( _color, _epsilon )?"YES":"no"), FOO_NAME(_csel));
+#endif
+ }
+}
+
+void SelectedColor::get_color_alpha(SPColor &color, gfloat &alpha) const {
+ color = _color;
+ alpha = _alpha;
+}
+
+}
+}
+
diff --git a/src/ui/selected-color.h b/src/ui/selected-color.h
new file mode 100644
index 000000000..db2f2f68c
--- /dev/null
+++ b/src/ui/selected-color.h
@@ -0,0 +1,71 @@
+/** @file
+ * Color selected in color selector widget.
+ * This file was created during the refactoring of SPColorSelector
+ *//*
+ * Authors:
+ * bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Tomasz Boczkowski <penginsbacon@gmail.com>
+ *
+ * Copyright (C) 2014 Authors
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+#ifndef SEEN_SELECTED_COLOR
+#define SEEN_SELECTED_COLOR
+
+#include <sigc++/signal.h>
+#include <gtkmm/widget.h>
+#include "color.h"
+
+namespace Inkscape {
+namespace UI {
+
+class SelectedColor {
+public:
+ SelectedColor();
+ virtual ~SelectedColor();
+
+ void set_color( const SPColor& color );
+ SPColor get_color() const;
+
+ void set_alpha( gfloat alpha );
+ gfloat get_alpha() const;
+
+ void set_color_alpha( const SPColor& color, gfloat alpha, bool emit = false );
+ void get_color_alpha( SPColor &color, gfloat &alpha ) const;
+
+ sigc::signal<void> signal_changed;
+private:
+ // By default, disallow copy constructor and assignment operator
+ SelectedColor( const SelectedColor& obj );
+ SelectedColor& operator=( const SelectedColor& obj );
+
+ SPColor _color;
+ /**
+ * Color alpha value guaranteed to be in [0, 1].
+ */
+ gfloat _alpha;
+
+ /**
+ * This flag is true if no color is set yet
+ */
+ bool _virgin;
+
+ static double _epsilon;
+};
+
+
+class ColorSelectorFactory {
+public:
+ virtual ~ColorSelectorFactory() {}
+
+ virtual Gtk::Widget* createWidget(SelectedColor& color) const = 0;
+ virtual Glib::ustring modeName() const = 0;
+};
+
+
+}
+}
+
+#endif
+
diff --git a/src/widgets/sp-color-icc-selector.cpp b/src/widgets/sp-color-icc-selector.cpp
index 4d5e94dab..bd7eb13f0 100644
--- a/src/widgets/sp-color-icc-selector.cpp
+++ b/src/widgets/sp-color-icc-selector.cpp
@@ -250,6 +250,7 @@ static void sp_color_icc_selector_class_init(SPColorICCSelectorClass *klass)
widget_class->hide = sp_color_icc_selector_hide;
}
+const gchar* ColorICCSelector::MODE_NAME = N_("CMS");
ColorICCSelector::ColorICCSelector( SPColorSelector* csel )
: ColorSelector( csel ),
@@ -1103,6 +1104,16 @@ void ColorICCSelectorImpl::_sliderChanged()
// iccSelector->_updateInternals( iccSelector->_color, ColorScales::getScaled( iccSelector->_adj ), iccSelector->_dragging );
}
+Gtk::Widget *ColorICCSelectorFactory::createWidget(Inkscape::UI::SelectedColor &color) const {
+ GtkWidget *w = sp_color_selector_new(SP_TYPE_COLOR_ICC_SELECTOR);
+ Gtk::Widget *wrapped = Glib::wrap(w);
+ return wrapped;
+}
+
+Glib::ustring ColorICCSelectorFactory::modeName() const {
+ return gettext(ColorICCSelector::MODE_NAME);
+}
+
/*
Local Variables:
diff --git a/src/widgets/sp-color-icc-selector.h b/src/widgets/sp-color-icc-selector.h
index 6cdaff639..7ebb00c4d 100644
--- a/src/widgets/sp-color-icc-selector.h
+++ b/src/widgets/sp-color-icc-selector.h
@@ -3,6 +3,7 @@
#include <glib.h>
#include "sp-color-selector.h"
+#include "ui/selected-color.h"
namespace Inkscape {
class ColorProfile;
@@ -16,6 +17,8 @@ class ColorICCSelectorImpl;
class ColorICCSelector: public ColorSelector
{
public:
+ static const gchar* MODE_NAME;
+
ColorICCSelector( SPColorSelector* csel );
virtual ~ColorICCSelector();
@@ -56,7 +59,11 @@ GType sp_color_icc_selector_get_type(void);
GtkWidget *sp_color_icc_selector_new(void);
-
+class ColorICCSelectorFactory: public Inkscape::UI::ColorSelectorFactory {
+public:
+ Gtk::Widget* createWidget(Inkscape::UI::SelectedColor &color) const;
+ Glib::ustring modeName() const;
+};
#endif // SEEN_SP_COLOR_ICC_SELECTOR_H
diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp
index b9a8d3475..a0603adc2 100644
--- a/src/widgets/sp-color-notebook.cpp
+++ b/src/widgets/sp-color-notebook.cpp
@@ -349,7 +349,7 @@ void ColorNotebook::init()
// uncomment to reenable the "show/hide modes" menu,
// but first fix it so it remembers its settings in prefs and does not take that much space (entire vertical column!)
- //gtk_table_attach (GTK_TABLE (table), align, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD);
+ gtk_table_attach (GTK_TABLE (table), align, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD);
g_signal_connect_swapped(G_OBJECT(_btn), "event", G_CALLBACK (sp_color_notebook_menu_handler), G_OBJECT(_csel));
if ( !found )
diff --git a/src/widgets/sp-color-scales.cpp b/src/widgets/sp-color-scales.cpp
index 87afe76ea..4ae202e32 100644
--- a/src/widgets/sp-color-scales.cpp
+++ b/src/widgets/sp-color-scales.cpp
@@ -54,6 +54,13 @@ G_END_DECLS
#define noDUMP_CHANGE_INFO 1
+const gchar* ColorScales::SUBMODE_NAMES[] = {
+ N_("RGB"),
+ N_("HSL"),
+ N_("CMYK")
+};
+
+
G_DEFINE_TYPE(SPColorScales, sp_color_scales, SP_TYPE_COLOR_SELECTOR);
static void
@@ -744,4 +751,20 @@ sp_color_scales_hue_map (void)
return map;
}
+ColorScalesFactory::ColorScalesFactory(SPColorScalesMode submode)
+ : _submode(submode)
+{
+}
+ColorScalesFactory::~ColorScalesFactory() {
+}
+
+Gtk::Widget *ColorScalesFactory::createWidget(Inkscape::UI::SelectedColor &color) const {
+ GtkWidget *w = sp_color_selector_new(SP_TYPE_COLOR_SCALES);
+ Gtk::Widget *wrapped = Glib::wrap(w);
+ return wrapped;
+}
+
+Glib::ustring ColorScalesFactory::modeName() const {
+ return gettext(ColorScales::SUBMODE_NAMES[_submode]);
+}
diff --git a/src/widgets/sp-color-scales.h b/src/widgets/sp-color-scales.h
index 4194f9423..58660824a 100644
--- a/src/widgets/sp-color-scales.h
+++ b/src/widgets/sp-color-scales.h
@@ -5,6 +5,8 @@
#include <widgets/sp-color-selector.h>
+#include "ui/selected-color.h"
+
struct SPColorScales;
struct SPColorScalesClass;
@@ -30,6 +32,8 @@ typedef enum {
class ColorScales: public ColorSelector
{
public:
+ static const gchar* SUBMODE_NAMES[];
+
static gfloat getScaled( const GtkAdjustment *a );
static void setScaled( GtkAdjustment *a, gfloat v);
@@ -97,6 +101,20 @@ GType sp_color_scales_get_type();
GtkWidget *sp_color_scales_new();
+
+class ColorScalesFactory: public Inkscape::UI::ColorSelectorFactory {
+public:
+ ColorScalesFactory(SPColorScalesMode submode);
+ ~ColorScalesFactory();
+
+ Gtk::Widget *createWidget(Inkscape::UI::SelectedColor &color) const;
+ Glib::ustring modeName() const;
+
+private:
+ SPColorScalesMode _submode;
+};
+
+
#endif /* !SEEN_SP_COLOR_SCALES_H */
/*
diff --git a/src/widgets/sp-color-wheel-selector.cpp b/src/widgets/sp-color-wheel-selector.cpp
index f9a6d7ceb..929902602 100644
--- a/src/widgets/sp-color-wheel-selector.cpp
+++ b/src/widgets/sp-color-wheel-selector.cpp
@@ -28,6 +28,8 @@ 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)
@@ -326,6 +328,17 @@ void ColorWheelSelector::_wheelChanged( GimpColorWheel *wheel, SPColorWheelSelec
}
+Gtk::Widget *ColorWheelSelectorFactory::createWidget(Inkscape::UI::SelectedColor &color) const {
+ GtkWidget *w = sp_color_selector_new(SP_TYPE_COLOR_WHEEL_SELECTOR);
+ Gtk::Widget *wrapped = Glib::wrap(w);
+ return wrapped;
+}
+
+Glib::ustring ColorWheelSelectorFactory::modeName() const {
+ return gettext(ColorWheelSelector::MODE_NAME);
+}
+
+
/*
Local Variables:
mode:c++
diff --git a/src/widgets/sp-color-wheel-selector.h b/src/widgets/sp-color-wheel-selector.h
index bb6078906..ad0d11bad 100644
--- a/src/widgets/sp-color-wheel-selector.h
+++ b/src/widgets/sp-color-wheel-selector.h
@@ -13,6 +13,7 @@
#include <gtk/gtk.h>
#include "sp-color-selector.h"
+#include "ui/selected-color.h"
typedef struct _GimpColorWheel GimpColorWheel;
struct SPColorWheelSelector;
@@ -31,6 +32,8 @@ class ColorSlider;
class ColorWheelSelector: public ColorSelector
{
public:
+ static const gchar* MODE_NAME;
+
ColorWheelSelector( SPColorSelector* csel );
virtual ~ColorWheelSelector();
@@ -87,6 +90,12 @@ 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