From e373a552e457bb9aec3a31cf7d3fd01ded3f330d Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Fri, 30 May 2014 13:28:00 +0200 Subject: SPColorSelector c++-sification: added ColorSelectorFactory (bzr r13341.6.27) --- src/widgets/sp-color-notebook.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets/sp-color-notebook.cpp') diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index e081f98e0..367063790 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -360,7 +360,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 ) -- cgit v1.2.3 From 17055d029cc8732d1b2636b9e98338c8e7056558 Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Fri, 30 May 2014 15:55:34 +0200 Subject: SPColorNotebok c++-sification - available pages list (bzr r13341.6.28) --- src/widgets/sp-color-notebook.cpp | 65 ++++++++++++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 8 deletions(-) (limited to 'src/widgets/sp-color-notebook.cpp') diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 367063790..923a4480f 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include "../dialogs/dialog-events.h" #include "../preferences.h" @@ -53,6 +54,7 @@ struct SPColorNotebookTracker { SPColorNotebook *backPointer; }; + static void sp_color_notebook_class_init (SPColorNotebookClass *klass); static void sp_color_notebook_init (SPColorNotebook *colorbook); static void sp_color_notebook_dispose(GObject *object); @@ -264,16 +266,11 @@ void ColorNotebook::init() #endif gtk_widget_show (_buttonbox); - _buttons = new GtkWidget *[_trackerList->len]; + _buttons = new GtkWidget *[_available_pages.size()]; - for ( i = 0; i < _trackerList->len; i++ ) + for ( i = 0; i < _available_pages.size(); i++ ) { - SPColorNotebookTracker *entry = - reinterpret_cast< SPColorNotebookTracker* > (g_ptr_array_index (_trackerList, i)); - if ( entry ) - { - addPage(entry->type, entry->submode); - } + _addPage(_available_pages[i]); } #if GTK_CHECK_VERSION(3,0,0) @@ -507,6 +504,20 @@ GtkWidget *sp_color_notebook_new() ColorNotebook::ColorNotebook( SPColorSelector* csel ) : ColorSelector( csel ) { + Page *page; + + page = new Page(new ColorScalesFactory(SP_COLOR_SCALES_MODE_RGB), true); + _available_pages.push_back(page); + page = new Page(new ColorScalesFactory(SP_COLOR_SCALES_MODE_HSV), true); + _available_pages.push_back(page); + page = new Page(new ColorScalesFactory(SP_COLOR_SCALES_MODE_CMYK), true); + _available_pages.push_back(page); + page = new Page(new ColorWheelSelectorFactory, true); + _available_pages.push_back(page); +#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) + page = new Page(new ColorICCSelectorFactory, true); + _available_pages.push_back(page); +#endif } SPColorSelector* ColorNotebook::getCurrentSelector() @@ -526,6 +537,12 @@ SPColorSelector* ColorNotebook::getCurrentSelector() return csel; } +ColorNotebook::Page::Page(Inkscape::UI::ColorSelectorFactory *selector_factory, bool enabled_full) + : selector_factory(selector_factory) + , enabled_full(enabled_full) +{ +} + void ColorNotebook::_colorChanged() { SPColorSelector* cselPage = getCurrentSelector(); @@ -769,6 +786,38 @@ GtkWidget* ColorNotebook::addPage(GType page_type, guint submode) return page; } +GtkWidget* ColorNotebook::_addPage(Page& page) { + Gtk::Widget *selector_widget; + + selector_widget = page.selector_factory->createWidget(_selected_color); + if (selector_widget) { + selector_widget->show(); + + Glib::ustring mode_name = page.selector_factory->modeName(); + Gtk::Widget* tab_label = Gtk::manage(new Gtk::Label(mode_name)); + gint page_num = gtk_notebook_append_page( GTK_NOTEBOOK(_book), selector_widget->gobj(), tab_label->gobj()); + + _buttons[page_num] = gtk_radio_button_new_with_label(NULL, mode_name.c_str()); + gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(_buttons[page_num]), FALSE); + if (page_num > 0) { + GSList *group = gtk_radio_button_get_group (GTK_RADIO_BUTTON(_buttons[0])); + gtk_radio_button_set_group (GTK_RADIO_BUTTON(_buttons[page_num]), group); + } + gtk_widget_show (_buttons[page_num]); + gtk_box_pack_start (GTK_BOX (_buttonbox), _buttons[page_num], TRUE, TRUE, 0); + + 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); + } + + return selector_widget->gobj(); +} + GtkWidget* ColorNotebook::getPage(GType page_type, guint submode) { gint count = 0; -- cgit v1.2.3 From cee4e3c55c0d455f10da9bd30fc18f8d1f1e531c Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Fri, 30 May 2014 16:37:08 +0200 Subject: SPColorNotebok c++-sification - removed trackerList, commented out unused pop-up menu (bzr r13341.6.29) --- src/widgets/sp-color-notebook.cpp | 196 ++++++++++---------------------------- 1 file changed, 52 insertions(+), 144 deletions(-) (limited to 'src/widgets/sp-color-notebook.cpp') diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 923a4480f..364e81ae5 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -141,47 +141,6 @@ void ColorNotebook::switchPage(GtkNotebook*, } } -static gint sp_color_notebook_menu_handler( GtkWidget *widget, GdkEvent *event ) -{ - if (event->type == GDK_BUTTON_PRESS) - { - SPColorSelector* csel = SP_COLOR_SELECTOR(widget); - (dynamic_cast(csel->base))->menuHandler( event ); - - /* Tell calling code that we have handled this event; the buck - * stops here. */ - return TRUE; - } - - /* Tell calling code that we have not handled this event; pass it on. */ - return FALSE; -} - -gint ColorNotebook::menuHandler( GdkEvent* event ) -{ - GdkEventButton *bevent = (GdkEventButton *) event; - gtk_menu_popup (GTK_MENU( _popup ), NULL, NULL, NULL, NULL, - bevent->button, bevent->time); - return TRUE; -} - -static void sp_color_notebook_menuitem_response (GtkMenuItem *menuitem, gpointer user_data) -{ - gboolean active = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem)); - SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (user_data); - if ( entry ) - { - if ( active ) - { - (dynamic_cast(SP_COLOR_SELECTOR(entry->backPointer)->base))->addPage(entry->type, entry->submode); - } - else - { - (dynamic_cast(SP_COLOR_SELECTOR(entry->backPointer)->base))->removePage(entry->type, entry->submode); - } - } -} - static void sp_color_notebook_init (SPColorNotebook *colorbook) { @@ -196,28 +155,9 @@ sp_color_notebook_init (SPColorNotebook *colorbook) void ColorNotebook::init() { guint row = 0; - guint i = 0; - guint j = 0; - GType *selector_types = 0; - guint selector_type_count = 0; - - /* tempory hardcoding to get types loaded */ - SP_TYPE_COLOR_SCALES; - SP_TYPE_COLOR_WHEEL_SELECTOR; -#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) - SP_TYPE_COLOR_ICC_SELECTOR; -#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) - - /* REJON: Comment out the next line to not use the normal GTK Color - wheel. */ - -// SP_TYPE_COLOR_GTKSELECTOR; _updating = FALSE; _updatingrgba = FALSE; - _btn = 0; - _popup = 0; - _trackerList = g_ptr_array_new (); _book = gtk_notebook_new (); gtk_widget_show (_book); @@ -226,38 +166,6 @@ void ColorNotebook::init() gtk_notebook_set_show_border (GTK_NOTEBOOK (_book), false); gtk_notebook_set_show_tabs (GTK_NOTEBOOK (_book), false); - selector_types = g_type_children (SP_TYPE_COLOR_SELECTOR, &selector_type_count); - - for ( i = 0; i < selector_type_count; i++ ) - { - if (!g_type_is_a (selector_types[i], SP_TYPE_COLOR_NOTEBOOK)) - { - guint howmany = 1; - gpointer klass = g_type_class_ref (selector_types[i]); - if ( klass && SP_IS_COLOR_SELECTOR_CLASS(klass) ) - { - SPColorSelectorClass *ck = SP_COLOR_SELECTOR_CLASS (klass); - howmany = MAX (1, ck->submode_count); - for ( j = 0; j < howmany; j++ ) - { - SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (malloc(sizeof(SPColorNotebookTracker))); - if ( entry ) - { - memset( entry, 0, sizeof(SPColorNotebookTracker) ); - entry->name = ck->name[j]; - entry->type = selector_types[i]; - entry->submode = j; - entry->enabledFull = TRUE; - entry->enabledBrief = TRUE; - entry->backPointer = SP_COLOR_NOTEBOOK(_csel); - - g_ptr_array_add (_trackerList, entry); - } - } - } - } - } - #if GTK_CHECK_VERSION(3,0,0) _buttonbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_set_homogeneous(GTK_BOX(_buttonbox), TRUE); @@ -268,7 +176,7 @@ void ColorNotebook::init() gtk_widget_show (_buttonbox); _buttons = new GtkWidget *[_available_pages.size()]; - for ( i = 0; i < _available_pages.size(); i++ ) + for (int i = 0; static_cast(i) < _available_pages.size(); i++ ) { _addPage(_available_pages[i]); } @@ -321,13 +229,15 @@ void ColorNotebook::init() Inkscape::Preferences *prefs = Inkscape::Preferences::get(); _setCurrentPage(prefs->getInt("/colorselector/page", 0)); + + /* Commented out: see comment at the bottom of the header file { gboolean found = FALSE; _popup = gtk_menu_new(); GtkMenu *menu = GTK_MENU (_popup); - for ( i = 0; i < _trackerList->len; i++ ) + for (int i = 0; i < _trackerList->len; i++ ) { SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (g_ptr_array_index (_trackerList, i)); if ( entry ) @@ -365,6 +275,7 @@ void ColorNotebook::init() gtk_widget_set_sensitive (_btn, FALSE); } } + */ row++; @@ -403,7 +314,6 @@ void ColorNotebook::init() GtkWidget *picker = gtk_image_new_from_icon_name ("color-picker", GTK_ICON_SIZE_SMALL_TOOLBAR); _btn_picker = gtk_button_new (); gtk_button_set_relief(GTK_BUTTON(_btn_picker), GTK_RELIEF_NONE); - gtk_widget_show (_btn); gtk_container_add (GTK_CONTAINER (_btn_picker), picker); gtk_widget_set_tooltip_text (_btn_picker, _("Pick colors from image")); gtk_box_pack_start(GTK_BOX(rgbabox), _btn_picker, FALSE, FALSE, 2); @@ -460,12 +370,6 @@ static void sp_color_notebook_dispose(GObject *object) ColorNotebook::~ColorNotebook() { - if ( _trackerList ) - { - g_ptr_array_free (_trackerList, TRUE); - _trackerList = 0; - } - if ( _switchId ) { if ( _book ) @@ -670,7 +574,7 @@ void ColorNotebook::_setCurrentPage(int i) { gtk_notebook_set_current_page(GTK_NOTEBOOK(_book), i); - if (_buttons && _trackerList && (static_cast(i) < _trackerList->len) ) { + if (_buttons && (static_cast(i) < _available_pages.size())) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(_buttons[i]), TRUE); } } @@ -744,48 +648,6 @@ void ColorNotebook::_entryModified (SPColorSelector *csel, SPColorNotebook *colo nb->_updateInternals( color, alpha, nb->_dragging ); } -GtkWidget* ColorNotebook::addPage(GType page_type, guint submode) -{ - GtkWidget *page; - - page = sp_color_selector_new( page_type ); - if ( page ) - { - GtkWidget* tab_label = 0; - SPColorSelector* csel; - - csel = SP_COLOR_SELECTOR (page); - if ( submode > 0 ) - { - csel->base->setSubmode( submode ); - } - gtk_widget_show (page); - int index = csel->base ? csel->base->getSubmode() : 0; - const gchar* str = _(SP_COLOR_SELECTOR_GET_CLASS (csel)->name[index]); -// g_message( "Hitting up for tab for '%s'", str ); - tab_label = gtk_label_new(_(str)); - gint pageNum = gtk_notebook_append_page( GTK_NOTEBOOK (_book), page, tab_label ); - - // Add a button for each page - _buttons[pageNum] = gtk_radio_button_new_with_label(NULL, _(str)); - gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(_buttons[pageNum]), FALSE); - if (pageNum > 0) { - GSList *group = gtk_radio_button_get_group (GTK_RADIO_BUTTON(_buttons[0])); - gtk_radio_button_set_group (GTK_RADIO_BUTTON(_buttons[pageNum]), group); - } - gtk_widget_show (_buttons[pageNum]); - gtk_box_pack_start (GTK_BOX (_buttonbox), _buttons[pageNum], TRUE, TRUE, 0); - - g_signal_connect (G_OBJECT (_buttons[pageNum]), "clicked", G_CALLBACK (_buttonClicked), _csel); - g_signal_connect (G_OBJECT (page), "grabbed", G_CALLBACK (_entryGrabbed), _csel); - g_signal_connect (G_OBJECT (page), "dragged", G_CALLBACK (_entryDragged), _csel); - g_signal_connect (G_OBJECT (page), "released", G_CALLBACK (_entryReleased), _csel); - g_signal_connect (G_OBJECT (page), "changed", G_CALLBACK (_entryChanged), _csel); - } - - return page; -} - GtkWidget* ColorNotebook::_addPage(Page& page) { Gtk::Widget *selector_widget; @@ -818,6 +680,9 @@ GtkWidget* ColorNotebook::_addPage(Page& page) { return selector_widget->gobj(); } + +/* Commented out: see comment at the bottom of the header file + GtkWidget* ColorNotebook::getPage(GType page_type, guint submode) { gint count = 0; @@ -873,6 +738,49 @@ void ColorNotebook::removePage( GType page_type, guint submode ) } } + +static gint sp_color_notebook_menu_handler( GtkWidget *widget, GdkEvent *event ) +{ + if (event->type == GDK_BUTTON_PRESS) + { + SPColorSelector* csel = SP_COLOR_SELECTOR(widget); + (dynamic_cast(csel->base))->menuHandler( event ); + + // Tell calling code that we have handled this event; the buck + // stops here. + return TRUE; + } + + //Tell calling code that we have not handled this event; pass it on. + return FALSE; +} + +gint ColorNotebook::menuHandler( GdkEvent* event ) +{ + GdkEventButton *bevent = (GdkEventButton *) event; + gtk_menu_popup (GTK_MENU( _popup ), NULL, NULL, NULL, NULL, + bevent->button, bevent->time); + return TRUE; +} + +static void sp_color_notebook_menuitem_response (GtkMenuItem *menuitem, gpointer user_data) +{ + gboolean active = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem)); + SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (user_data); + if ( entry ) + { + if ( active ) + { + (dynamic_cast(SP_COLOR_SELECTOR(entry->backPointer)->base))->addPage(entry->type, entry->submode); + } + else + { + (dynamic_cast(SP_COLOR_SELECTOR(entry->backPointer)->base))->removePage(entry->type, entry->submode); + } + } +} +*/ + /* Local Variables: mode:c++ -- cgit v1.2.3 From b0e9181bacdad19055532a2620f5390815b91727 Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Fri, 30 May 2014 22:53:40 +0200 Subject: added ColorEntry class, refactored SPColorNotebook to use it (bzr r13341.6.31) --- src/widgets/sp-color-notebook.cpp | 104 ++++++++++---------------------------- 1 file changed, 27 insertions(+), 77 deletions(-) (limited to 'src/widgets/sp-color-notebook.cpp') diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 364e81ae5..ac110b86c 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -41,9 +41,12 @@ #include "cms-system.h" #include "tools-switch.h" #include "ui/tools/tool-base.h" +#include "ui/widget/color-entry.h" using Inkscape::CMSSystem; +using namespace Inkscape::UI::Widget; + struct SPColorNotebookTracker { const gchar* name; const gchar* className; @@ -156,8 +159,7 @@ void ColorNotebook::init() { guint row = 0; - _updating = FALSE; - _updatingrgba = FALSE; + _updating = false; _book = gtk_notebook_new (); gtk_widget_show (_book); @@ -324,13 +326,10 @@ void ColorNotebook::init() gtk_misc_set_alignment (GTK_MISC (_rgbal), 1.0, 0.5); gtk_box_pack_start(GTK_BOX(rgbabox), _rgbal, TRUE, TRUE, 2); - _rgbae = gtk_entry_new (); - sp_dialog_defocus_on_enter (_rgbae); - gtk_entry_set_max_length (GTK_ENTRY (_rgbae), 8); - gtk_entry_set_width_chars (GTK_ENTRY (_rgbae), 8); - gtk_widget_set_tooltip_text (_rgbae, _("Hexadecimal RGBA value of the color")); - gtk_box_pack_start(GTK_BOX(rgbabox), _rgbae, FALSE, FALSE, 0); - gtk_label_set_mnemonic_widget (GTK_LABEL(_rgbal), _rgbae); + ColorEntry* rgba_entry = Gtk::manage(new ColorEntry(_selected_color)); + sp_dialog_defocus_on_enter (GTK_WIDGET(rgba_entry->gobj())); + gtk_box_pack_start(GTK_BOX(rgbabox), GTK_WIDGET(rgba_entry->gobj()), FALSE, FALSE, 0); + gtk_label_set_mnemonic_widget (GTK_LABEL(_rgbal), GTK_WIDGET(rgba_entry->gobj())); sp_set_font_size_smaller (rgbabox); gtk_widget_show_all (rgbabox); @@ -359,7 +358,7 @@ void ColorNotebook::init() _switchId = g_signal_connect(G_OBJECT (_book), "switch-page", G_CALLBACK (sp_color_notebook_switch_page), SP_COLOR_NOTEBOOK(_csel)); - _entryId = g_signal_connect (G_OBJECT (_rgbae), "changed", G_CALLBACK (ColorNotebook::_rgbaEntryChangedHook), _csel); + _selected_color.signal_changed.connect(sigc::mem_fun(this, &ColorNotebook::_onSelectedColorChanged)); } static void sp_color_notebook_dispose(GObject *object) @@ -449,13 +448,13 @@ ColorNotebook::Page::Page(Inkscape::UI::ColorSelectorFactory *selector_factory, void ColorNotebook::_colorChanged() { + _selected_color.setColorAlpha(_color, _alpha, true); + SPColorSelector* cselPage = getCurrentSelector(); if ( cselPage ) { cselPage->base->setColorAlpha( _color, _alpha ); } - - _updateRgbaEntry( _color, _alpha ); } void ColorNotebook::_picker_clicked(GtkWidget * /*widget*/, SPColorNotebook * /*colorbook*/) @@ -466,52 +465,6 @@ void ColorNotebook::_picker_clicked(GtkWidget * /*widget*/, SPColorNotebook * /* Inkscape::UI::Tools::sp_toggle_dropper(SP_ACTIVE_DESKTOP); } -void ColorNotebook::_rgbaEntryChangedHook(GtkEntry *entry, SPColorNotebook *colorbook) -{ - (dynamic_cast(SP_COLOR_SELECTOR(colorbook)->base))->_rgbaEntryChanged( entry ); -} - -void ColorNotebook::_rgbaEntryChanged(GtkEntry* entry) -{ - if (_updating) return; - if (_updatingrgba) return; - - const gchar *t = gtk_entry_get_text( entry ); - - if (t) { - Glib::ustring text = t; - bool changed = false; - if (!text.empty() && text[0] == '#') { - changed = true; - text.erase(0,1); - if (text.size() == 6) { - // it was a standard RGB hex - unsigned int alph = SP_COLOR_F_TO_U(_alpha); - gchar* tmp = g_strdup_printf("%02x", alph); - text += tmp; - g_free(tmp); - } - } - gchar* str = g_strdup(text.c_str()); - gchar* end = 0; - guint64 rgba = g_ascii_strtoull( str, &end, 16 ); - if ( end != str ) { - ptrdiff_t len = end - str; - if ( len < 8 ) { - rgba = rgba << ( 4 * ( 8 - len ) ); - } - _updatingrgba = TRUE; - if ( changed ) { - gtk_entry_set_text( entry, str ); - } - SPColor color( rgba ); - setColorAlpha( color, SP_RGBA32_A_F(rgba), true ); - _updatingrgba = FALSE; - } - g_free(str); - } -} - // TODO pass in param so as to avoid the need for SP_ACTIVE_DOCUMENT void ColorNotebook::_updateRgbaEntry( const SPColor& color, gfloat alpha ) { @@ -550,24 +503,6 @@ void ColorNotebook::_updateRgbaEntry( const SPColor& color, gfloat alpha ) } } #endif //defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) - - if ( !_updatingrgba ) - { - gchar s[32]; - guint32 rgba; - - /* Update RGBA entry */ - rgba = color.toRGBA32( alpha ); - - g_snprintf (s, 32, "%08x", rgba); - const gchar* oldText = gtk_entry_get_text( GTK_ENTRY( _rgbae ) ); - if ( strcmp( oldText, s ) != 0 ) - { - g_signal_handler_block( _rgbae, _entryId ); - gtk_entry_set_text( GTK_ENTRY(_rgbae), s ); - g_signal_handler_unblock( _rgbae, _entryId ); - } - } } void ColorNotebook::_setCurrentPage(int i) @@ -644,10 +579,25 @@ void ColorNotebook::_entryModified (SPColorSelector *csel, SPColorNotebook *colo gfloat alpha = 1.0; csel->base->getColorAlpha( color, alpha ); - nb->_updateRgbaEntry( color, alpha ); + + nb->_updating = true; + nb->_selected_color.setColorAlpha(color, alpha, true); + nb->_updating = false; nb->_updateInternals( color, alpha, nb->_dragging ); } +void ColorNotebook::_onSelectedColorChanged() { + if (_updating) { + return; + } + + SPColor color; + gfloat alpha = 1.0; + + _selected_color.colorAlpha(color, alpha); + _updateInternals(color, alpha, _dragging); +} + GtkWidget* ColorNotebook::_addPage(Page& page) { Gtk::Widget *selector_widget; -- cgit v1.2.3 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/widgets/sp-color-notebook.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets/sp-color-notebook.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; -- 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/widgets/sp-color-notebook.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'src/widgets/sp-color-notebook.cpp') 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 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'src/widgets/sp-color-notebook.cpp') 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); -- cgit v1.2.3 From 9325918fd04118cda566f15120b975467b2e6e9f Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Sat, 31 May 2014 15:09:21 +0200 Subject: SPColorScales c++-sification - move to ui/widget (bzr r13341.6.38) --- src/widgets/sp-color-notebook.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets/sp-color-notebook.cpp') diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 7495d1deb..0e1634314 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -30,7 +30,6 @@ #include "../preferences.h" #include "sp-color-notebook.h" #include "spw-utilities.h" -#include "sp-color-scales.h" #include "sp-color-icc-selector.h" #include "svg/svg-icc-color.h" #include "../inkscape.h" @@ -41,6 +40,7 @@ #include "tools-switch.h" #include "ui/tools/tool-base.h" #include "ui/widget/color-entry.h" +#include "ui/widget/color-scales.h" #include "ui/widget/color-wheel-selector.h" using Inkscape::CMSSystem; -- cgit v1.2.3 From d128fc4fd60ebcd8ac820f584b5a4b3b35ad5b00 Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Sat, 31 May 2014 20:15:08 +0200 Subject: SPColorScales c++-sification - using SelectedColor (bzr r13341.6.40) --- src/widgets/sp-color-notebook.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/widgets/sp-color-notebook.cpp') diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 0e1634314..807fe38e0 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -455,7 +455,9 @@ ColorNotebook::Page::Page(Inkscape::UI::ColorSelectorFactory *selector_factory, void ColorNotebook::_colorChanged() { + _updating = true; _selected_color.setColorAlpha(_color, _alpha, true); + _updating = false; SPColorSelector* cselPage = getCurrentSelector(); if ( cselPage ) @@ -613,13 +615,13 @@ void ColorNotebook::_onSelectedColorDragged() { } bool oldState = _dragging; - _dragging = TRUE; + _dragging = true; SPColor color; gfloat alpha = 1.0; _updating = true; _selected_color.colorAlpha(color, alpha); - _updateInternals(color, alpha, _dragging); + _updateInternals(color, alpha, true); _updating = false; _dragging = oldState; -- cgit v1.2.3 From e1e64d41e2a71a5e9a18b5a40803a72ad288cd53 Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Sat, 31 May 2014 20:22:51 +0200 Subject: SPColorICC c++sification: moved to ui/widget/ (bzr r13341.6.41) --- src/widgets/sp-color-notebook.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets/sp-color-notebook.cpp') diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 807fe38e0..2097737d4 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -30,7 +30,6 @@ #include "../preferences.h" #include "sp-color-notebook.h" #include "spw-utilities.h" -#include "sp-color-icc-selector.h" #include "svg/svg-icc-color.h" #include "../inkscape.h" #include "../document.h" @@ -40,6 +39,7 @@ #include "tools-switch.h" #include "ui/tools/tool-base.h" #include "ui/widget/color-entry.h" +#include "ui/widget/color-icc-selector.h" #include "ui/widget/color-scales.h" #include "ui/widget/color-wheel-selector.h" -- cgit v1.2.3 From ade68e2b3601c0ef2912440b028e7b9e1f326bcc Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Sun, 1 Jun 2014 10:41:10 +0200 Subject: inhibit SelectedColor::setColorAlpha in the callbacks of it's signals (bzr r13341.6.43) --- src/widgets/sp-color-notebook.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/widgets/sp-color-notebook.cpp') diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 2097737d4..5bfe1f400 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -456,7 +456,7 @@ ColorNotebook::Page::Page(Inkscape::UI::ColorSelectorFactory *selector_factory, void ColorNotebook::_colorChanged() { _updating = true; - _selected_color.setColorAlpha(_color, _alpha, true); + _selected_color.setColorAlpha(_color, _alpha); _updating = false; SPColorSelector* cselPage = getCurrentSelector(); @@ -590,7 +590,7 @@ void ColorNotebook::_entryModified (SPColorSelector *csel, SPColorNotebook *colo csel->base->getColorAlpha( color, alpha ); nb->_updating = true; - nb->_selected_color.setColorAlpha(color, alpha, true); + nb->_selected_color.setColorAlpha(color, alpha); nb->_updating = false; nb->_updateInternals( color, alpha, nb->_dragging ); } -- cgit v1.2.3 From 41d146e6c99b26bc5ce2a377fc70fe28e5bb8db5 Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Sun, 1 Jun 2014 11:06:36 +0200 Subject: SPColorNotebook cleanup (bzr r13341.6.44) --- src/widgets/sp-color-notebook.cpp | 146 ++++---------------------------------- 1 file changed, 15 insertions(+), 131 deletions(-) (limited to 'src/widgets/sp-color-notebook.cpp') diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 5bfe1f400..420efacc1 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -112,42 +112,12 @@ sp_color_notebook_switch_page(GtkNotebook *notebook, { if ( colorbook ) { - ColorNotebook* nb = dynamic_cast(SP_COLOR_SELECTOR(colorbook)->base); - nb->switchPage( notebook, page, page_num ); - // remember the page we switched to Inkscape::Preferences *prefs = Inkscape::Preferences::get(); prefs->setInt("/colorselector/page", page_num); } } -void ColorNotebook::switchPage(GtkNotebook*, - GtkWidget*, - guint page_num) -{ - SPColorSelector* csel; - GtkWidget* widget; - - if ( gtk_notebook_get_current_page (GTK_NOTEBOOK (_book)) >= 0 ) - { - csel = getCurrentSelector(); - 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); - if (csel) { - csel->base->setColorAlpha( _color, _alpha ); - } - - // Temporary workaround to undo a spurious GRABBED - _released(); - } -} - static void sp_color_notebook_init (SPColorNotebook *colorbook) { @@ -430,23 +400,6 @@ ColorNotebook::ColorNotebook( SPColorSelector* csel ) #endif } -SPColorSelector* ColorNotebook::getCurrentSelector() -{ - SPColorSelector* csel = NULL; - gint current_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (_book)); - - if ( current_page >= 0 ) - { - GtkWidget* widget = gtk_notebook_get_nth_page (GTK_NOTEBOOK (_book), current_page); - if ( SP_IS_COLOR_SELECTOR (widget) ) - { - csel = SP_COLOR_SELECTOR (widget); - } - } - - return csel; -} - ColorNotebook::Page::Page(Inkscape::UI::ColorSelectorFactory *selector_factory, bool enabled_full) : selector_factory(selector_factory) , enabled_full(enabled_full) @@ -457,13 +410,8 @@ void ColorNotebook::_colorChanged() { _updating = true; _selected_color.setColorAlpha(_color, _alpha); + _updateICCButtons(); _updating = false; - - SPColorSelector* cselPage = getCurrentSelector(); - if ( cselPage ) - { - cselPage->base->setColorAlpha( _color, _alpha ); - } } void ColorNotebook::_picker_clicked(GtkWidget * /*widget*/, SPColorNotebook * /*colorbook*/) @@ -475,8 +423,11 @@ void ColorNotebook::_picker_clicked(GtkWidget * /*widget*/, SPColorNotebook * /* } // TODO pass in param so as to avoid the need for SP_ACTIVE_DOCUMENT -void ColorNotebook::_updateRgbaEntry( const SPColor& color, gfloat alpha ) +void ColorNotebook::_updateICCButtons() { + SPColor color = _selected_color.color(); + gfloat alpha = _selected_color.alpha(); + g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) ); #if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) @@ -538,63 +489,6 @@ void ColorNotebook::_buttonClicked(GtkWidget *widget, SPColorNotebook *colorboo } } -void ColorNotebook::_entryGrabbed (SPColorSelector *, SPColorNotebook *colorbook) -{ - ColorNotebook* nb = dynamic_cast(SP_COLOR_SELECTOR(colorbook)->base); - nb->_grabbed(); -} - -void ColorNotebook::_entryDragged (SPColorSelector *csel, SPColorNotebook *colorbook) -{ - gboolean oldState; - ColorNotebook* nb = dynamic_cast(SP_COLOR_SELECTOR(colorbook)->base); - - oldState = nb->_dragging; - - nb->_dragging = TRUE; - nb->_entryModified( csel, colorbook ); - - nb->_dragging = oldState; -} - -void ColorNotebook::_entryReleased (SPColorSelector *, SPColorNotebook *colorbook) -{ - ColorNotebook* nb = dynamic_cast(SP_COLOR_SELECTOR(colorbook)->base); - nb->_released(); -} - -void ColorNotebook::_entryChanged (SPColorSelector *csel, SPColorNotebook *colorbook) -{ - gboolean oldState; - ColorNotebook* nb = dynamic_cast(SP_COLOR_SELECTOR(colorbook)->base); - - oldState = nb->_dragging; - - nb->_dragging = FALSE; - nb->_entryModified( csel, colorbook ); - - nb->_dragging = oldState; -} - -void ColorNotebook::_entryModified (SPColorSelector *csel, SPColorNotebook *colorbook) -{ - g_return_if_fail (colorbook != NULL); - g_return_if_fail (SP_IS_COLOR_NOTEBOOK (colorbook)); - g_return_if_fail (csel != NULL); - g_return_if_fail (SP_IS_COLOR_SELECTOR (csel)); - - ColorNotebook* nb = dynamic_cast(SP_COLOR_SELECTOR(colorbook)->base); - SPColor color; - gfloat alpha = 1.0; - - csel->base->getColorAlpha( color, alpha ); - - nb->_updating = true; - nb->_selected_color.setColorAlpha(color, alpha); - nb->_updating = false; - nb->_updateInternals( color, alpha, nb->_dragging ); -} - void ColorNotebook::_onSelectedColorChanged() { if (_updating) { return; @@ -602,36 +496,34 @@ void ColorNotebook::_onSelectedColorChanged() { SPColor color; gfloat alpha = 1.0; - - _updating = true; _selected_color.colorAlpha(color, alpha); - _updateInternals(color, alpha, _dragging); - _updating = false; + _updateInternals(color, alpha, false); + _updateICCButtons(); } 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, true); - _updating = false; - - _dragging = oldState; + _updateICCButtons(); } void ColorNotebook::_onSelectedColorGrabbed() { + if (_updating) { + return; + } + _grabbed(); } void ColorNotebook::_onSelectedColorReleased() { + if (_updating) { + return; + } _released(); } @@ -656,14 +548,6 @@ GtkWidget* ColorNotebook::_addPage(Page& page) { gtk_box_pack_start (GTK_BOX (_buttonbox), _buttons[page_num], TRUE, TRUE, 0); g_signal_connect (G_OBJECT (_buttons[page_num]), "clicked", G_CALLBACK (_buttonClicked), _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(); -- cgit v1.2.3 From bb5dacfc027558432b9a46f61329d7bd02731571 Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Sun, 1 Jun 2014 13:03:36 +0200 Subject: Using SelectedColor in extenstion/param/color (bzr r13341.6.45) --- src/widgets/sp-color-notebook.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/widgets/sp-color-notebook.cpp') diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 420efacc1..38ea04372 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -45,6 +45,7 @@ using Inkscape::CMSSystem; +using namespace Inkscape::UI; using namespace Inkscape::UI::Widget; struct SPColorNotebookTracker { @@ -383,6 +384,7 @@ GtkWidget *sp_color_notebook_new() ColorNotebook::ColorNotebook( SPColorSelector* csel ) : ColorSelector( csel ) + , _selected_color(_selected_color_tmp) { Page *page; @@ -400,6 +402,13 @@ ColorNotebook::ColorNotebook( SPColorSelector* csel ) #endif } +Gtk::Widget *ColorNotebook::create(SelectedColor &color) { + GtkWidget *w = sp_color_selector_new(SP_TYPE_COLOR_NOTEBOOK); + SPColorSelector *s = SP_COLOR_SELECTOR(w); + ColorNotebook* nb = dynamic_cast(s->base); + return Glib::wrap(w); +} + ColorNotebook::Page::Page(Inkscape::UI::ColorSelectorFactory *selector_factory, bool enabled_full) : selector_factory(selector_factory) , enabled_full(enabled_full) -- cgit v1.2.3 From 66275a3a9f7666fe68355c1d8c452395b706db30 Mon Sep 17 00:00:00 2001 From: Tomasz Boczkowski Date: Sun, 1 Jun 2014 17:29:01 +0200 Subject: moved ColorNotebook to ui/widget (bzr r13341.6.51) --- src/widgets/sp-color-notebook.cpp | 675 -------------------------------------- 1 file changed, 675 deletions(-) delete mode 100644 src/widgets/sp-color-notebook.cpp (limited to 'src/widgets/sp-color-notebook.cpp') diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp deleted file mode 100644 index 38ea04372..000000000 --- a/src/widgets/sp-color-notebook.cpp +++ /dev/null @@ -1,675 +0,0 @@ -/* - * A notebook with RGB, CMYK, CMS, HSL, and Wheel pages - * - * Author: - * Lauris Kaplinski - * bulia byak - * - * Copyright (C) 2001-2002 Lauris Kaplinski - * - * This code is in public domain - */ - -#undef SPCS_PREVIEW -#define noDUMP_CHANGE_INFO - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include "widgets/icon.h" -#include -#include -#include -#include -#include -#include -#include - -#include "../dialogs/dialog-events.h" -#include "../preferences.h" -#include "sp-color-notebook.h" -#include "spw-utilities.h" -#include "svg/svg-icc-color.h" -#include "../inkscape.h" -#include "../document.h" -#include "../profile-manager.h" -#include "color-profile.h" -#include "cms-system.h" -#include "tools-switch.h" -#include "ui/tools/tool-base.h" -#include "ui/widget/color-entry.h" -#include "ui/widget/color-icc-selector.h" -#include "ui/widget/color-scales.h" -#include "ui/widget/color-wheel-selector.h" - -using Inkscape::CMSSystem; - -using namespace Inkscape::UI; -using namespace Inkscape::UI::Widget; - -struct SPColorNotebookTracker { - const gchar* name; - const gchar* className; - GType type; - guint submode; - gboolean enabledFull; - gboolean enabledBrief; - SPColorNotebook *backPointer; -}; - - -static void sp_color_notebook_class_init (SPColorNotebookClass *klass); -static void sp_color_notebook_init (SPColorNotebook *colorbook); -static void sp_color_notebook_dispose(GObject *object); - -static void sp_color_notebook_show_all (GtkWidget *widget); -static void sp_color_notebook_hide(GtkWidget *widget); - -static SPColorSelectorClass *parent_class; - -#define XPAD 4 -#define YPAD 1 - -GType sp_color_notebook_get_type(void) -{ - static GType type = 0; - if (!type) { - GTypeInfo info = { - sizeof(SPColorNotebookClass), - 0, // base_init - 0, // base_finalize - (GClassInitFunc)sp_color_notebook_class_init, - 0, // class_finalize - 0, // class_data - sizeof(SPColorNotebook), - 0, // n_preallocs - (GInstanceInitFunc)sp_color_notebook_init, - 0 // value_table - }; - type = g_type_register_static(SP_TYPE_COLOR_SELECTOR, "SPColorNotebook", &info, static_cast(0)); - } - return type; -} - -static void sp_color_notebook_class_init(SPColorNotebookClass *klass) -{ - GObjectClass *object_class = reinterpret_cast(klass); - GtkWidgetClass *widget_class = reinterpret_cast(klass); - - parent_class = SP_COLOR_SELECTOR_CLASS(g_type_class_peek_parent(klass)); - - object_class->dispose = sp_color_notebook_dispose; - - widget_class->show_all = sp_color_notebook_show_all; - widget_class->hide = sp_color_notebook_hide; -} - -static void -sp_color_notebook_switch_page(GtkNotebook *notebook, - GtkWidget *page, - guint page_num, - SPColorNotebook *colorbook) -{ - if ( colorbook ) - { - // remember the page we switched to - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setInt("/colorselector/page", page_num); - } -} - -static void -sp_color_notebook_init (SPColorNotebook *colorbook) -{ - SP_COLOR_SELECTOR(colorbook)->base = new ColorNotebook( SP_COLOR_SELECTOR(colorbook) ); - - if ( SP_COLOR_SELECTOR(colorbook)->base ) - { - SP_COLOR_SELECTOR(colorbook)->base->init(); - } -} - -void ColorNotebook::init() -{ - guint row = 0; - - _updating = false; - - _book = gtk_notebook_new (); - gtk_widget_show (_book); - - // Dont show the notebook tabs, use radiobuttons instead - gtk_notebook_set_show_border (GTK_NOTEBOOK (_book), false); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (_book), false); - -#if GTK_CHECK_VERSION(3,0,0) - _buttonbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); - gtk_box_set_homogeneous(GTK_BOX(_buttonbox), TRUE); -#else - _buttonbox = gtk_hbox_new (TRUE, 2); -#endif - - gtk_widget_show (_buttonbox); - _buttons = new GtkWidget *[_available_pages.size()]; - - for (int i = 0; static_cast(i) < _available_pages.size(); i++ ) - { - _addPage(_available_pages[i]); - } - -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget* table = gtk_grid_new(); -#else - GtkWidget* table = gtk_table_new(2, 3, FALSE); -#endif - - gtk_widget_show (table); - - gtk_box_pack_start (GTK_BOX (_csel), table, TRUE, TRUE, 0); - - sp_set_font_size_smaller (_buttonbox); - -#if GTK_CHECK_VERSION(3,0,0) - gtk_widget_set_margin_left(_buttonbox, XPAD); - gtk_widget_set_margin_right(_buttonbox, XPAD); - gtk_widget_set_margin_top(_buttonbox, YPAD); - gtk_widget_set_margin_bottom(_buttonbox, YPAD); - gtk_widget_set_hexpand(_buttonbox, TRUE); - gtk_widget_set_valign(_buttonbox, GTK_ALIGN_CENTER); - gtk_grid_attach(GTK_GRID(table), _buttonbox, 0, row, 2, 1); -#else - gtk_table_attach (GTK_TABLE (table), _buttonbox, 0, 2, row, row + 1, - static_cast(GTK_EXPAND|GTK_FILL), - static_cast(0), - XPAD, YPAD); -#endif - - row++; - -#if GTK_CHECK_VERSION(3,0,0) - gtk_widget_set_margin_left(_book, XPAD*2); - gtk_widget_set_margin_right(_book, XPAD*2); - gtk_widget_set_margin_top(_book, YPAD); - gtk_widget_set_margin_bottom(_book, YPAD); - gtk_widget_set_hexpand(_book, TRUE); - gtk_widget_set_vexpand(_book, TRUE); - gtk_grid_attach(GTK_GRID(table), _book, 0, row, 2, 1); -#else - gtk_table_attach (GTK_TABLE (table), _book, 0, 2, row, row + 1, - static_cast(GTK_EXPAND|GTK_FILL), - static_cast(GTK_EXPAND|GTK_FILL), - XPAD*2, YPAD); -#endif - - // restore the last active page - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - _setCurrentPage(prefs->getInt("/colorselector/page", 0)); - - - /* Commented out: see comment at the bottom of the header file - { - gboolean found = FALSE; - - _popup = gtk_menu_new(); - GtkMenu *menu = GTK_MENU (_popup); - - for (int i = 0; i < _trackerList->len; i++ ) - { - SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (g_ptr_array_index (_trackerList, i)); - if ( entry ) - { - GtkWidget *item = gtk_check_menu_item_new_with_label (_(entry->name)); - gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), entry->enabledFull); - gtk_widget_show (item); - gtk_menu_shell_append (GTK_MENU_SHELL(menu), item); - - g_signal_connect (G_OBJECT (item), "activate", - G_CALLBACK (sp_color_notebook_menuitem_response), - reinterpret_cast< gpointer > (entry) ); - found = TRUE; - } - } - - GtkWidget *arrow = gtk_arrow_new(GTK_ARROW_RIGHT, GTK_SHADOW_NONE); - gtk_widget_show (arrow); - - _btn = gtk_button_new (); - gtk_widget_show (_btn); - gtk_container_add (GTK_CONTAINER (_btn), arrow); - - GtkWidget *align = gtk_alignment_new (1.0, 0.0, 0.0, 0.0); - gtk_widget_show (align); - gtk_container_add (GTK_CONTAINER (align), _btn); - - // 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); - - g_signal_connect_swapped(G_OBJECT(_btn), "event", G_CALLBACK (sp_color_notebook_menu_handler), G_OBJECT(_csel)); - if ( !found ) - { - gtk_widget_set_sensitive (_btn, FALSE); - } - } - */ - - row++; - -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *rgbabox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); -#else - GtkWidget *rgbabox = gtk_hbox_new (FALSE, 0); -#endif - -#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) - /* Create color management icons */ - _box_colormanaged = gtk_event_box_new (); - GtkWidget *colormanaged = gtk_image_new_from_icon_name ("color-management-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); - gtk_container_add (GTK_CONTAINER (_box_colormanaged), colormanaged); - gtk_widget_set_tooltip_text (_box_colormanaged, _("Color Managed")); - gtk_widget_set_sensitive (_box_colormanaged, false); - gtk_box_pack_start(GTK_BOX(rgbabox), _box_colormanaged, FALSE, FALSE, 2); - - _box_outofgamut = gtk_event_box_new (); - GtkWidget *outofgamut = gtk_image_new_from_icon_name ("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); - gtk_container_add (GTK_CONTAINER (_box_outofgamut), outofgamut); - gtk_widget_set_tooltip_text (_box_outofgamut, _("Out of gamut!")); - gtk_widget_set_sensitive (_box_outofgamut, false); - gtk_box_pack_start(GTK_BOX(rgbabox), _box_outofgamut, FALSE, FALSE, 2); - - _box_toomuchink = gtk_event_box_new (); - GtkWidget *toomuchink = gtk_image_new_from_icon_name ("too-much-ink-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); - gtk_container_add (GTK_CONTAINER (_box_toomuchink), toomuchink); - gtk_widget_set_tooltip_text (_box_toomuchink, _("Too much ink!")); - gtk_widget_set_sensitive (_box_toomuchink, false); - gtk_box_pack_start(GTK_BOX(rgbabox), _box_toomuchink, FALSE, FALSE, 2); -#endif //defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) - - - /* Color picker */ - GtkWidget *picker = gtk_image_new_from_icon_name ("color-picker", GTK_ICON_SIZE_SMALL_TOOLBAR); - _btn_picker = gtk_button_new (); - gtk_button_set_relief(GTK_BUTTON(_btn_picker), GTK_RELIEF_NONE); - gtk_container_add (GTK_CONTAINER (_btn_picker), picker); - gtk_widget_set_tooltip_text (_btn_picker, _("Pick colors from image")); - gtk_box_pack_start(GTK_BOX(rgbabox), _btn_picker, FALSE, FALSE, 2); - g_signal_connect(G_OBJECT(_btn_picker), "clicked", G_CALLBACK(ColorNotebook::_picker_clicked), _csel); - - /* Create RGBA entry and color preview */ - _rgbal = gtk_label_new_with_mnemonic (_("RGBA_:")); - gtk_misc_set_alignment (GTK_MISC (_rgbal), 1.0, 0.5); - gtk_box_pack_start(GTK_BOX(rgbabox), _rgbal, TRUE, TRUE, 2); - - ColorEntry* rgba_entry = Gtk::manage(new ColorEntry(_selected_color)); - sp_dialog_defocus_on_enter (GTK_WIDGET(rgba_entry->gobj())); - gtk_box_pack_start(GTK_BOX(rgbabox), GTK_WIDGET(rgba_entry->gobj()), FALSE, FALSE, 0); - gtk_label_set_mnemonic_widget (GTK_LABEL(_rgbal), GTK_WIDGET(rgba_entry->gobj())); - - sp_set_font_size_smaller (rgbabox); - gtk_widget_show_all (rgbabox); - -#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) - //the "too much ink" icon is initially hidden - gtk_widget_hide(GTK_WIDGET(_box_toomuchink)); -#endif //defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) - -#if GTK_CHECK_VERSION(3,0,0) - gtk_widget_set_margin_left(rgbabox, XPAD); - gtk_widget_set_margin_right(rgbabox, XPAD); - gtk_widget_set_margin_top(rgbabox, YPAD); - gtk_widget_set_margin_bottom(rgbabox, YPAD); - gtk_grid_attach(GTK_GRID(table), rgbabox, 0, row, 2, 1); -#else - gtk_table_attach (GTK_TABLE (table), rgbabox, 0, 2, row, row + 1, GTK_FILL, GTK_SHRINK, XPAD, YPAD); -#endif - -#ifdef SPCS_PREVIEW - _p = sp_color_preview_new (0xffffffff); - gtk_widget_show (_p); - gtk_table_attach (GTK_TABLE (table), _p, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD); -#endif - - _switchId = g_signal_connect(G_OBJECT (_book), "switch-page", - 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) -{ - if (((GObjectClass *) (parent_class))->dispose) - (* ((GObjectClass *) (parent_class))->dispose) (object); -} - -ColorNotebook::~ColorNotebook() -{ - if ( _switchId ) - { - if ( _book ) - { - g_signal_handler_disconnect (_book, _switchId); - _switchId = 0; - } - } - - if ( _buttons ) - { - delete [] _buttons; - _buttons = 0; - } - -} - -static void -sp_color_notebook_show_all (GtkWidget *widget) -{ - gtk_widget_show (widget); -} - -static void sp_color_notebook_hide(GtkWidget *widget) -{ - gtk_widget_hide(widget); -} - -GtkWidget *sp_color_notebook_new() -{ - SPColorNotebook *colorbook = SP_COLOR_NOTEBOOK(g_object_new (SP_TYPE_COLOR_NOTEBOOK, NULL)); - - return GTK_WIDGET(colorbook); -} - -ColorNotebook::ColorNotebook( SPColorSelector* csel ) - : ColorSelector( csel ) - , _selected_color(_selected_color_tmp) -{ - Page *page; - - page = new Page(new ColorScalesFactory(SP_COLOR_SCALES_MODE_RGB), true); - _available_pages.push_back(page); - page = new Page(new ColorScalesFactory(SP_COLOR_SCALES_MODE_HSV), true); - _available_pages.push_back(page); - page = new Page(new ColorScalesFactory(SP_COLOR_SCALES_MODE_CMYK), true); - _available_pages.push_back(page); - page = new Page(new ColorWheelSelectorFactory, true); - _available_pages.push_back(page); -#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) - page = new Page(new ColorICCSelectorFactory, true); - _available_pages.push_back(page); -#endif -} - -Gtk::Widget *ColorNotebook::create(SelectedColor &color) { - GtkWidget *w = sp_color_selector_new(SP_TYPE_COLOR_NOTEBOOK); - SPColorSelector *s = SP_COLOR_SELECTOR(w); - ColorNotebook* nb = dynamic_cast(s->base); - return Glib::wrap(w); -} - -ColorNotebook::Page::Page(Inkscape::UI::ColorSelectorFactory *selector_factory, bool enabled_full) - : selector_factory(selector_factory) - , enabled_full(enabled_full) -{ -} - -void ColorNotebook::_colorChanged() -{ - _updating = true; - _selected_color.setColorAlpha(_color, _alpha); - _updateICCButtons(); - _updating = false; -} - -void ColorNotebook::_picker_clicked(GtkWidget * /*widget*/, SPColorNotebook * /*colorbook*/) -{ - // Set the dropper into a "one click" mode, so it reverts to the previous tool after a click - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setBool("/tools/dropper/onetimepick", true); - Inkscape::UI::Tools::sp_toggle_dropper(SP_ACTIVE_DESKTOP); -} - -// TODO pass in param so as to avoid the need for SP_ACTIVE_DOCUMENT -void ColorNotebook::_updateICCButtons() -{ - SPColor color = _selected_color.color(); - gfloat alpha = _selected_color.alpha(); - - g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) ); - -#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) - /* update color management icon*/ - gtk_widget_set_sensitive (_box_colormanaged, color.icc != NULL); - - /* update out-of-gamut icon */ - gtk_widget_set_sensitive (_box_outofgamut, false); - if (color.icc){ - Inkscape::ColorProfile* target_profile = SP_ACTIVE_DOCUMENT->profileManager->find(color.icc->colorProfile.c_str()); - if ( target_profile ) - gtk_widget_set_sensitive(_box_outofgamut, target_profile->GamutCheck(color)); - } - - /* update too-much-ink icon */ - gtk_widget_set_sensitive (_box_toomuchink, false); - if (color.icc){ - Inkscape::ColorProfile* prof = SP_ACTIVE_DOCUMENT->profileManager->find(color.icc->colorProfile.c_str()); - if ( prof && CMSSystem::isPrintColorSpace(prof) ) { - gtk_widget_show(GTK_WIDGET(_box_toomuchink)); - double ink_sum = 0; - for (unsigned int i=0; icolors.size(); i++){ - ink_sum += color.icc->colors[i]; - } - - /* Some literature states that when the sum of paint values exceed 320%, it is considered to be a satured color, - which means the paper can get too wet due to an excessive ammount of ink. This may lead to several issues - such as misalignment and poor quality of printing in general.*/ - if ( ink_sum > 3.2 ) - gtk_widget_set_sensitive (_box_toomuchink, true); - } else { - gtk_widget_hide(GTK_WIDGET(_box_toomuchink)); - } - } -#endif //defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) -} - -void ColorNotebook::_setCurrentPage(int i) -{ - gtk_notebook_set_current_page(GTK_NOTEBOOK(_book), i); - - if (_buttons && (static_cast(i) < _available_pages.size())) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(_buttons[i]), TRUE); - } -} - -void ColorNotebook::_buttonClicked(GtkWidget *widget, SPColorNotebook *colorbook) -{ - ColorNotebook* nb = dynamic_cast(SP_COLOR_SELECTOR(colorbook)->base); - - if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget))) { - return; - } - - for(gint i = 0; i < gtk_notebook_get_n_pages (GTK_NOTEBOOK (nb->_book)); i++) { - if (nb->_buttons[i] == widget) { - gtk_notebook_set_current_page (GTK_NOTEBOOK (nb->_book), i); - } - } -} - -void ColorNotebook::_onSelectedColorChanged() { - if (_updating) { - return; - } - - SPColor color; - gfloat alpha = 1.0; - _selected_color.colorAlpha(color, alpha); - _updateInternals(color, alpha, false); - _updateICCButtons(); -} - -void ColorNotebook::_onSelectedColorDragged() { - if (_updating) { - return; - } - SPColor color; - gfloat alpha = 1.0; - _selected_color.colorAlpha(color, alpha); - _updateInternals(color, alpha, true); - _updateICCButtons(); -} - -void ColorNotebook::_onSelectedColorGrabbed() { - if (_updating) { - return; - } - - _grabbed(); -} - -void ColorNotebook::_onSelectedColorReleased() { - if (_updating) { - return; - } - _released(); -} - -GtkWidget* ColorNotebook::_addPage(Page& page) { - Gtk::Widget *selector_widget; - - selector_widget = page.selector_factory->createWidget(_selected_color); - if (selector_widget) { - selector_widget->show(); - - Glib::ustring mode_name = page.selector_factory->modeName(); - Gtk::Widget* tab_label = Gtk::manage(new Gtk::Label(mode_name)); - gint page_num = gtk_notebook_append_page( GTK_NOTEBOOK(_book), selector_widget->gobj(), tab_label->gobj()); - - _buttons[page_num] = gtk_radio_button_new_with_label(NULL, mode_name.c_str()); - gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(_buttons[page_num]), FALSE); - if (page_num > 0) { - GSList *group = gtk_radio_button_get_group (GTK_RADIO_BUTTON(_buttons[0])); - gtk_radio_button_set_group (GTK_RADIO_BUTTON(_buttons[page_num]), group); - } - gtk_widget_show (_buttons[page_num]); - gtk_box_pack_start (GTK_BOX (_buttonbox), _buttons[page_num], TRUE, TRUE, 0); - - g_signal_connect (G_OBJECT (_buttons[page_num]), "clicked", G_CALLBACK (_buttonClicked), _csel); - } - - return selector_widget->gobj(); -} - - -/* Commented out: see comment at the bottom of the header file - -GtkWidget* ColorNotebook::getPage(GType page_type, guint submode) -{ - gint count = 0; - gint i = 0; - GtkWidget* page = 0; - -// count = gtk_notebook_get_n_pages (_book); - count = 200; - for ( i = 0; i < count && !page; i++ ) - { - page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (_book), i); - if ( page ) - { - SPColorSelector* csel; - guint pagemode; - csel = SP_COLOR_SELECTOR (page); - pagemode = csel->base->getSubmode(); - if ( G_TYPE_FROM_INSTANCE (page) == page_type - && pagemode == submode ) - { - // found it. - break; - } - else - { - page = 0; - } - } - else - { - break; - } - } - return page; -} - -void ColorNotebook::removePage( GType page_type, guint submode ) -{ - GtkWidget *page = 0; - - page = getPage(page_type, submode); - if ( page ) - { - gint where = gtk_notebook_page_num (GTK_NOTEBOOK (_book), page); - if ( where >= 0 ) - { - if ( gtk_notebook_get_current_page (GTK_NOTEBOOK (_book)) == where ) - { -// getColorAlpha(_color, &_alpha); - } - gtk_notebook_remove_page (GTK_NOTEBOOK (_book), where); - } - } -} - - -static gint sp_color_notebook_menu_handler( GtkWidget *widget, GdkEvent *event ) -{ - if (event->type == GDK_BUTTON_PRESS) - { - SPColorSelector* csel = SP_COLOR_SELECTOR(widget); - (dynamic_cast(csel->base))->menuHandler( event ); - - // Tell calling code that we have handled this event; the buck - // stops here. - return TRUE; - } - - //Tell calling code that we have not handled this event; pass it on. - return FALSE; -} - -gint ColorNotebook::menuHandler( GdkEvent* event ) -{ - GdkEventButton *bevent = (GdkEventButton *) event; - gtk_menu_popup (GTK_MENU( _popup ), NULL, NULL, NULL, NULL, - bevent->button, bevent->time); - return TRUE; -} - -static void sp_color_notebook_menuitem_response (GtkMenuItem *menuitem, gpointer user_data) -{ - gboolean active = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem)); - SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (user_data); - if ( entry ) - { - if ( active ) - { - (dynamic_cast(SP_COLOR_SELECTOR(entry->backPointer)->base))->addPage(entry->type, entry->submode); - } - else - { - (dynamic_cast(SP_COLOR_SELECTOR(entry->backPointer)->base))->removePage(entry->type, entry->submode); - } - } -} -*/ - -/* - 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