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/dropper-context.cpp | |
| 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/dropper-context.cpp')
| -rw-r--r-- | src/dropper-context.cpp | 105 |
1 files changed, 87 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) { |
