diff options
| author | Tomasz Boczkowski <penginsbacon@gmail.com> | 2015-04-25 13:36:15 +0000 |
|---|---|---|
| committer | Tomasz Boczkowski <penginsbacon@gmail.com> | 2015-04-25 13:36:15 +0000 |
| commit | 29a14487f0e02a7a0e74c9f2bd02262b86c17b66 (patch) | |
| tree | f695adf494de8a1eb73f8669c0256fbd91e5aade /src | |
| parent | fixed possible bug SPPattern::_get_children (diff) | |
| parent | SPColorSelector c++-sification: added ColorSelectorFactory (diff) | |
| download | inkscape-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_insert | 2 | ||||
| -rw-r--r-- | src/ui/selected-color.cpp | 106 | ||||
| -rw-r--r-- | src/ui/selected-color.h | 71 | ||||
| -rw-r--r-- | src/widgets/sp-color-icc-selector.cpp | 11 | ||||
| -rw-r--r-- | src/widgets/sp-color-icc-selector.h | 9 | ||||
| -rw-r--r-- | src/widgets/sp-color-notebook.cpp | 2 | ||||
| -rw-r--r-- | src/widgets/sp-color-scales.cpp | 23 | ||||
| -rw-r--r-- | src/widgets/sp-color-scales.h | 18 | ||||
| -rw-r--r-- | src/widgets/sp-color-wheel-selector.cpp | 13 | ||||
| -rw-r--r-- | src/widgets/sp-color-wheel-selector.h | 9 |
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 |
