summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohn Smith <john.smith7545@yahoo.com>2012-11-24 08:20:08 +0000
committerJohn Smith <john.smith7545@yahoo.com>2012-11-24 08:20:08 +0000
commitd6a0a9aad6bc34cb5c2fac14bd6c046b480e85ab (patch)
tree1c24fd8ed6a4dfee46f15670b2f01d25e3f52264 /src
parentUI. Fix for Bug #1072007 (Mouse scroll zoom depends on if the cursor is over ... (diff)
downloadinkscape-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.cpp105
-rw-r--r--src/pixmaps/cursor-dropper-f.xpm38
-rw-r--r--src/pixmaps/cursor-dropper-s.xpm38
-rw-r--r--src/ui/dialog/fill-and-stroke.cpp25
-rw-r--r--src/ui/dialog/fill-and-stroke.h6
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);