diff options
| author | John Smith <john.smith7545@yahoo.com> | 2012-11-24 08:20:08 +0000 |
|---|---|---|
| committer | John Smith <john.smith7545@yahoo.com> | 2012-11-24 08:20:08 +0000 |
| commit | d6a0a9aad6bc34cb5c2fac14bd6c046b480e85ab (patch) | |
| tree | 1c24fd8ed6a4dfee46f15670b2f01d25e3f52264 /src | |
| parent | UI. Fix for Bug #1072007 (Mouse scroll zoom depends on if the cursor is over ... (diff) | |
| download | inkscape-d6a0a9aad6bc34cb5c2fac14bd6c046b480e85ab.tar.gz inkscape-d6a0a9aad6bc34cb5c2fac14bd6c046b480e85ab.zip | |
Fix for 172236 : Dropper pixmaps and onetime fix
(bzr r11894)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dropper-context.cpp | 105 | ||||
| -rw-r--r-- | src/pixmaps/cursor-dropper-f.xpm | 38 | ||||
| -rw-r--r-- | src/pixmaps/cursor-dropper-s.xpm | 38 | ||||
| -rw-r--r-- | src/ui/dialog/fill-and-stroke.cpp | 25 | ||||
| -rw-r--r-- | src/ui/dialog/fill-and-stroke.h | 6 |
5 files changed, 194 insertions, 18 deletions
diff --git a/src/dropper-context.cpp b/src/dropper-context.cpp index 4742f5cff..8b293a9d9 100644 --- a/src/dropper-context.cpp +++ b/src/dropper-context.cpp @@ -32,6 +32,7 @@ #include "desktop-style.h" #include "preferences.h" #include "sp-namedview.h" +#include "sp-cursor.h" #include "desktop.h" #include "desktop-handles.h" #include "selection.h" @@ -39,6 +40,8 @@ #include "document-undo.h" #include "pixmaps/cursor-dropper.xpm" +#include "pixmaps/cursor-dropper-f.xpm" +#include "pixmaps/cursor-dropper-s.xpm" #include "dropper-context.h" #include "message-context.h" @@ -57,6 +60,9 @@ static gint sp_dropper_context_root_handler(SPEventContext *ec, GdkEvent * event static SPEventContextClass *parent_class; +static GdkCursor *cursor_dropper_fill = NULL; +static GdkCursor *cursor_dropper_stroke = NULL; + GType sp_dropper_context_get_type() { static GType type = 0; @@ -90,9 +96,13 @@ static void sp_dropper_context_class_init(SPDropperContextClass *klass) static void sp_dropper_context_init(SPDropperContext *dc) { SPEventContext *event_context = SP_EVENT_CONTEXT(dc); - event_context->cursor_shape = cursor_dropper_xpm; + event_context->cursor_shape = cursor_dropper_f_xpm; event_context->hot_x = 7; event_context->hot_y = 7; + + cursor_dropper_fill = sp_cursor_new_from_xpm(cursor_dropper_f_xpm , 7, 7); + cursor_dropper_stroke = sp_cursor_new_from_xpm(cursor_dropper_s_xpm , 7, 7); + } static void sp_dropper_context_setup(SPEventContext *ec) @@ -143,6 +153,27 @@ static void sp_dropper_context_finish(SPEventContext *ec) sp_canvas_item_destroy(dc->area); dc->area = NULL; } + + if (cursor_dropper_fill) { +#if GTK_CHECK_VERSION(3,0,0) + g_object_unref(cursor_dropper_fill); +#else + gdk_cursor_unref (cursor_dropper_fill); +#endif + cursor_dropper_fill = NULL; + } + if (cursor_dropper_stroke) { +#if GTK_CHECK_VERSION(3,0,0) + g_object_unref(cursor_dropper_stroke); +#else + gdk_cursor_unref (cursor_dropper_stroke); +#endif + cursor_dropper_fill = NULL; + } + + //Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + //prefs->setBool("/tools/dropper/onetimepick", false); + } @@ -205,6 +236,13 @@ static gint sp_dropper_context_root_handler(SPEventContext *event_context, GdkEv } else if (!event_context->space_panning) { // otherwise, constantly calculate color no matter is any button pressed or not + // If one time pick with stroke set the pixmap + if (prefs->getBool("/tools/dropper/onetimepick", false) && prefs->getInt("/dialogs/fillstroke/page", 0) == 1) { + //TODO Only set when not set already + GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(sp_desktop_canvas(desktop))); + gdk_window_set_cursor(window, cursor_dropper_stroke); + } + double rw = 0.0; double R(0), G(0), B(0), A(0); @@ -310,14 +348,24 @@ static gint sp_dropper_context_root_handler(SPEventContext *event_context, GdkEv double alpha_to_set = setalpha? dc->alpha : 1.0; + bool fill = !(event->button.state & GDK_SHIFT_MASK); // Stroke if Shift key held + if (prefs->getBool("/tools/dropper/onetimepick", false)) { + // "One time" pick from Fill/Stroke dialog stroke page, always apply fill or stroke (ignore <Shift> key) + fill = (prefs->getInt("/dialogs/fillstroke/page", 0) == 0) ? true : false; + } + // do the actual color setting sp_desktop_set_color(desktop, (event->button.state & GDK_MOD1_MASK)? ColorRGBA(1 - dc->R, 1 - dc->G, 1 - dc->B, alpha_to_set) : ColorRGBA(dc->R, dc->G, dc->B, alpha_to_set), - false, !(event->button.state & GDK_SHIFT_MASK)); + false, fill); // REJON: set aux. toolbar input to hex color! + if (event->button.state & GDK_SHIFT_MASK) { + GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(sp_desktop_canvas(desktop))); + gdk_window_set_cursor(window, cursor_dropper_stroke); + } if (!(sp_desktop_selection(desktop)->isEmpty())) { DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_DROPPER, @@ -332,25 +380,46 @@ static gint sp_dropper_context_root_handler(SPEventContext *event_context, GdkEv ret = TRUE; } break; - case GDK_KEY_PRESS: - switch (get_group0_keyval(&event->key)) { - case GDK_KEY_Up: - case GDK_KEY_Down: - case GDK_KEY_KP_Up: - case GDK_KEY_KP_Down: - // prevent the zoom field from activation - if (!MOD__CTRL_ONLY) { - ret = TRUE; - } - break; - case GDK_KEY_Escape: - sp_desktop_selection(desktop)->clear(); - default: - break; + case GDK_KEY_PRESS: + switch (get_group0_keyval(&event->key)) { + case GDK_KEY_Up: + case GDK_KEY_Down: + case GDK_KEY_KP_Up: + case GDK_KEY_KP_Down: + // prevent the zoom field from activation + if (!MOD__CTRL_ONLY) { + ret = TRUE; } break; - default: + case GDK_KEY_Escape: + sp_desktop_selection(desktop)->clear(); + case GDK_KEY_Shift_L: + case GDK_KEY_Shift_R: + if (!desktop->isWaitingCursor() && !prefs->getBool("/tools/dropper/onetimepick", false)) { + GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(sp_desktop_canvas(desktop))); + gdk_window_set_cursor(window, cursor_dropper_stroke); + } + break; + default: + break; + } + break; + case GDK_KEY_RELEASE: + switch (get_group0_keyval(&event->key)) { + case GDK_KEY_Shift_L: + case GDK_KEY_Shift_R: + if (!desktop->isWaitingCursor() && !prefs->getBool("/tools/dropper/onetimepick", false)) { + GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(sp_desktop_canvas(desktop))); + gdk_window_set_cursor(window, cursor_dropper_fill); + } + break; + default: + break; + } + break; + default: + break; } if (!ret) { diff --git a/src/pixmaps/cursor-dropper-f.xpm b/src/pixmaps/cursor-dropper-f.xpm new file mode 100644 index 000000000..3bf1e80e1 --- /dev/null +++ b/src/pixmaps/cursor-dropper-f.xpm @@ -0,0 +1,38 @@ +/* XPM */ +static const char * cursor_dropper_f_xpm[] = { +"32 32 3 1", +" c None", +". c #FFFFFF", +"+ c #000000", +" ... ............", +" .+. .++++++++++.", +" .+. .+........+.", +" .+. .+........+.", +".... .... .+........+.", +".+++ +++. .+........+.", +".... .... .+........+.", +" .+. .+........+.", +" .+. .... .+........+.", +" .+. .+++. .+........+.", +" ... .+..+. .++++++++++.", +" .++..+. ............", +" .++..+. ", +" .++..+. ", +" .++..+. . ", +" .++..+.+. ", +" .++..+++. ", +" .++++.+. ", +" .++++.+.. ", +" .++++++.++. ", +" .++++++..+. ", +" ..+++++.+. ", +" .++++++. ", +" .+++++. ", +" .+++. ", +" ... ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/cursor-dropper-s.xpm b/src/pixmaps/cursor-dropper-s.xpm new file mode 100644 index 000000000..1a12934d8 --- /dev/null +++ b/src/pixmaps/cursor-dropper-s.xpm @@ -0,0 +1,38 @@ +/* XPM */ +static const char * cursor_dropper_s_xpm[] = { +"32 32 3 1", +" c None", +". c #FFFFFF", +"+ c #000000", +" ... ............", +" .+. .+++.++.+++.", +" .+. .+........+.", +" .+. .+. .+.", +".... .... ... ...", +".+++ +++. .+. .+.", +".... .... .+. .+.", +" .+. ... ...", +" .+. .... .+. .+.", +" .+. .+++. .+........+.", +" ... .+..+. .+++.++.+++.", +" .++..+. ............", +" .++..+. ", +" .++..+. ", +" .++..+. . ", +" .++..+.+. ", +" .++..+++. ", +" .++++.+. ", +" .++++.+.. ", +" .++++++.++. ", +" .++++++..+. ", +" ..+++++.+. ", +" .++++++. ", +" .+++++. ", +" .+++. ", +" ... ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/ui/dialog/fill-and-stroke.cpp b/src/ui/dialog/fill-and-stroke.cpp index c7efd3bf2..5ba4e7e39 100644 --- a/src/ui/dialog/fill-and-stroke.cpp +++ b/src/ui/dialog/fill-and-stroke.cpp @@ -22,6 +22,7 @@ #include "filter-chemistry.h" #include "inkscape.h" #include "selection.h" +#include "preferences.h" #include "style.h" #include "svg/css-ostringstream.h" #include "ui/icon-names.h" @@ -59,6 +60,8 @@ FillAndStroke::FillAndStroke() _notebook.append_page(_page_stroke_paint, _createPageTabLabel(_("Stroke _paint"), INKSCAPE_ICON("object-stroke"))); _notebook.append_page(_page_stroke_style, _createPageTabLabel(_("Stroke st_yle"), INKSCAPE_ICON("object-stroke-style"))); + _notebook.signal_switch_page().connect(sigc::mem_fun(this, &FillAndStroke::_onSwitchPage)); + _layoutPageFill(); _layoutPageStrokePaint(); _layoutPageStrokeStyle(); @@ -105,6 +108,23 @@ void FillAndStroke::setTargetDesktop(SPDesktop *desktop) } } +#if WITH_GTKMM_3_0 +void FillAndStroke::_onSwitchPage(Gtk::Widget * /*page*/, guint pagenum) +#else +void FillAndStroke::_onSwitchPage(GtkNotebookPage * /*page*/, guint pagenum) +#endif +{ + _savePagePref(pagenum); +} + +void +FillAndStroke::_savePagePref(guint page_num) +{ + // remember the current page + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setInt("/dialogs/fillstroke/page", page_num); +} + void FillAndStroke::_layoutPageFill() { @@ -133,6 +153,8 @@ FillAndStroke::showPageFill() { present(); _notebook.set_current_page(0); + _savePagePref(0); + } void @@ -140,6 +162,7 @@ FillAndStroke::showPageStrokePaint() { present(); _notebook.set_current_page(1); + _savePagePref(1); } void @@ -147,6 +170,8 @@ FillAndStroke::showPageStrokeStyle() { present(); _notebook.set_current_page(2); + _savePagePref(2); + } Gtk::HBox& diff --git a/src/ui/dialog/fill-and-stroke.h b/src/ui/dialog/fill-and-stroke.h index 596205c58..255cea89a 100644 --- a/src/ui/dialog/fill-and-stroke.h +++ b/src/ui/dialog/fill-and-stroke.h @@ -60,6 +60,12 @@ protected: void _layoutPageFill(); void _layoutPageStrokePaint(); void _layoutPageStrokeStyle(); + void _savePagePref(guint page_num); +#if WITH_GTKMM_3_0 + void _onSwitchPage(Gtk::Widget *page, guint pagenum); +#else + void _onSwitchPage(GtkNotebookPage *page, guint pagenum); +#endif private: FillAndStroke(FillAndStroke const &d); |
