summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/color.h1
-rw-r--r--src/desktop-events.cpp2
-rw-r--r--src/pixmaps/cursor-3dbox.xpm2
-rw-r--r--src/pixmaps/cursor-arc.xpm38
-rw-r--r--src/pixmaps/cursor-arrow.xpm38
-rw-r--r--src/pixmaps/cursor-calligraphy.xpm2
-rw-r--r--src/pixmaps/cursor-connector.xpm2
-rw-r--r--src/pixmaps/cursor-crosshairs.xpm2
-rw-r--r--src/pixmaps/cursor-dropper-f.xpm2
-rw-r--r--src/pixmaps/cursor-dropper-s.xpm2
-rw-r--r--src/pixmaps/cursor-ellipse.xpm2
-rw-r--r--src/pixmaps/cursor-eraser.xpm2
-rw-r--r--src/pixmaps/cursor-gradient-add.xpm2
-rw-r--r--src/pixmaps/cursor-gradient.xpm2
-rw-r--r--src/pixmaps/cursor-measure.xpm2
-rw-r--r--src/pixmaps/cursor-node-d.xpm2
-rw-r--r--src/pixmaps/cursor-node-m.xpm38
-rw-r--r--src/pixmaps/cursor-node.xpm2
-rw-r--r--src/pixmaps/cursor-paintbucket.xpm2
-rw-r--r--src/pixmaps/cursor-pen.xpm2
-rw-r--r--src/pixmaps/cursor-pencil.xpm2
-rw-r--r--src/pixmaps/cursor-rect.xpm2
-rw-r--r--src/pixmaps/cursor-select-d.xpm2
-rw-r--r--src/pixmaps/cursor-select-m.xpm2
-rw-r--r--src/pixmaps/cursor-select.xpm2
-rw-r--r--src/pixmaps/cursor-spiral.xpm2
-rw-r--r--src/pixmaps/cursor-spray-move.xpm2
-rw-r--r--src/pixmaps/cursor-spray.xpm2
-rw-r--r--src/pixmaps/cursor-star.xpm2
-rw-r--r--src/pixmaps/cursor-text-insert.xpm2
-rw-r--r--src/pixmaps/cursor-text.xpm2
-rw-r--r--src/pixmaps/cursor-tweak-attract.xpm (renamed from src/pixmaps/cursor-attract.xpm)2
-rw-r--r--src/pixmaps/cursor-tweak-color.xpm (renamed from src/pixmaps/cursor-color.xpm)2
-rw-r--r--src/pixmaps/cursor-tweak-less.xpm2
-rw-r--r--src/pixmaps/cursor-tweak-more.xpm2
-rw-r--r--src/pixmaps/cursor-tweak-move-in.xpm2
-rw-r--r--src/pixmaps/cursor-tweak-move-jitter.xpm2
-rw-r--r--src/pixmaps/cursor-tweak-move-out.xpm2
-rw-r--r--src/pixmaps/cursor-tweak-move.xpm2
-rw-r--r--src/pixmaps/cursor-tweak-push.xpm (renamed from src/pixmaps/cursor-push.xpm)2
-rw-r--r--src/pixmaps/cursor-tweak-repel.xpm (renamed from src/pixmaps/cursor-repel.xpm)2
-rw-r--r--src/pixmaps/cursor-tweak-rotate-clockwise.xpm2
-rw-r--r--src/pixmaps/cursor-tweak-rotate-counterclockwise.xpm2
-rw-r--r--src/pixmaps/cursor-tweak-roughen.xpm (renamed from src/pixmaps/cursor-roughen.xpm)2
-rw-r--r--src/pixmaps/cursor-tweak-scale-down.xpm2
-rw-r--r--src/pixmaps/cursor-tweak-scale-up.xpm2
-rw-r--r--src/pixmaps/cursor-tweak-thicken.xpm (renamed from src/pixmaps/cursor-thicken.xpm)2
-rw-r--r--src/pixmaps/cursor-tweak-thin.xpm (renamed from src/pixmaps/cursor-thin.xpm)2
-rw-r--r--src/pixmaps/cursor-zoom-out.xpm2
-rw-r--r--src/pixmaps/cursor-zoom.xpm2
-rw-r--r--src/sp-cursor.cpp106
-rw-r--r--src/sp-cursor.h3
-rw-r--r--src/ui/tools/arc-tool.cpp2
-rw-r--r--src/ui/tools/box3d-tool.cpp2
-rw-r--r--src/ui/tools/calligraphic-tool.cpp2
-rw-r--r--src/ui/tools/connector-tool.cpp2
-rw-r--r--src/ui/tools/dropper-tool.cpp6
-rw-r--r--src/ui/tools/dynamic-base.cpp4
-rw-r--r--src/ui/tools/dynamic-base.h2
-rw-r--r--src/ui/tools/eraser-tool.cpp2
-rw-r--r--src/ui/tools/flood-tool.cpp2
-rw-r--r--src/ui/tools/freehand-base.cpp4
-rw-r--r--src/ui/tools/freehand-base.h2
-rw-r--r--src/ui/tools/gradient-tool.cpp2
-rw-r--r--src/ui/tools/lpe-tool.cpp2
-rw-r--r--src/ui/tools/measure-tool.cpp2
-rw-r--r--src/ui/tools/mesh-tool.cpp2
-rw-r--r--src/ui/tools/node-tool.cpp6
-rw-r--r--src/ui/tools/pen-tool.cpp6
-rw-r--r--src/ui/tools/pen-tool.h2
-rw-r--r--src/ui/tools/pencil-tool.cpp2
-rw-r--r--src/ui/tools/rect-tool.cpp2
-rw-r--r--src/ui/tools/select-tool.cpp6
-rw-r--r--src/ui/tools/spiral-tool.cpp2
-rw-r--r--src/ui/tools/spray-tool.cpp2
-rw-r--r--src/ui/tools/star-tool.cpp2
-rw-r--r--src/ui/tools/text-tool.cpp6
-rw-r--r--src/ui/tools/tool-base.cpp55
-rw-r--r--src/ui/tools/tool-base.h5
-rw-r--r--src/ui/tools/tweak-tool.cpp16
-rw-r--r--src/ui/tools/zoom-tool.cpp2
81 files changed, 165 insertions, 303 deletions
diff --git a/src/color.h b/src/color.h
index 887daf66b..02a4fc90f 100644
--- a/src/color.h
+++ b/src/color.h
@@ -30,6 +30,7 @@ typedef unsigned int guint32; // uint is guaranteed to hold up to 2^32 − 1
#define SP_RGBA32_A_F(v) SP_COLOR_U_TO_F (SP_RGBA32_A_U (v))
#define SP_RGBA32_U_COMPOSE(r,g,b,a) ((((r) & 0xff) << 24) | (((g) & 0xff) << 16) | (((b) & 0xff) << 8) | ((a) & 0xff))
#define SP_RGBA32_F_COMPOSE(r,g,b,a) SP_RGBA32_U_COMPOSE (SP_COLOR_F_TO_U (r), SP_COLOR_F_TO_U (g), SP_COLOR_F_TO_U (b), SP_COLOR_F_TO_U (a))
+#define SP_RGBA32_C_COMPOSE(c,o) SP_RGBA32_U_COMPOSE(SP_RGBA32_R_U(c),SP_RGBA32_G_U(c),SP_RGBA32_B_U(c),SP_COLOR_F_TO_U(o))
struct SVGICCColor;
diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp
index 5fef8cbfc..894087c8c 100644
--- a/src/desktop-events.cpp
+++ b/src/desktop-events.cpp
@@ -521,7 +521,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data)
GdkCursor *guide_cursor = gdk_cursor_new_for_display(display, cursor_type);
if(guide->getLocked()){
- guide_cursor = sp_cursor_new_from_xpm(cursor_select_xpm , 1, 1);
+ guide_cursor = sp_cursor_from_xpm(cursor_select_xpm);
}
gdk_window_set_cursor(gtk_widget_get_window (GTK_WIDGET(desktop->getCanvas())), guide_cursor);
g_object_unref(guide_cursor);
diff --git a/src/pixmaps/cursor-3dbox.xpm b/src/pixmaps/cursor-3dbox.xpm
index 3fda78ef1..c7fcb9248 100644
--- a/src/pixmaps/cursor-3dbox.xpm
+++ b/src/pixmaps/cursor-3dbox.xpm
@@ -1,6 +1,6 @@
/* XPM */
static const char * cursor_3dbox_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-arc.xpm b/src/pixmaps/cursor-arc.xpm
deleted file mode 100644
index cbf6a9e30..000000000
--- a/src/pixmaps/cursor-arc.xpm
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char const *cursor_arc_xpm[] = {
-"32 32 3 1",
-" c None",
-". c #FFFFFF",
-"+ c #000000",
-" ... ",
-" .+. ",
-" .+. ",
-"....+.... ",
-".+++ +++. ",
-"....+.... ",
-" .+. ",
-" .+. ..... ",
-" ... .+++.... ",
-" .+..+++.. ",
-" .+.....+.. ",
-" .+......+.. ",
-" ..+.......+. ",
-" ...++.......+. ",
-" ...++.........+. ",
-" ...++..........+.. ",
-" .++...........+.. ",
-" ...++......+++.. ",
-" ...++++++.... ",
-" ........ ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" "};
diff --git a/src/pixmaps/cursor-arrow.xpm b/src/pixmaps/cursor-arrow.xpm
deleted file mode 100644
index 963656a92..000000000
--- a/src/pixmaps/cursor-arrow.xpm
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char const *cursor_arrow_xpm[] = {
-"32 32 3 1",
-" c None",
-". c #FFFFFF",
-"+ c #000000",
-" .. ",
-".++.. ",
-".+ ++.. ",
-" .+ ++.. ",
-" .+ ++.. ",
-" .+ ++. ",
-" .+ +. ",
-" .+ +. ",
-" .+ +. ",
-" .+ +. ",
-" .+ + +. ",
-" .++.+ +. ",
-" .. .+ +. ",
-" .+ +. ",
-" .+ +. ",
-" .+ +. ",
-" .+ +. ",
-" .+ +. ",
-" .+. ",
-" . ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" "};
diff --git a/src/pixmaps/cursor-calligraphy.xpm b/src/pixmaps/cursor-calligraphy.xpm
index 52c4f76cb..193bd6196 100644
--- a/src/pixmaps/cursor-calligraphy.xpm
+++ b/src/pixmaps/cursor-calligraphy.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_calligraphy_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-connector.xpm b/src/pixmaps/cursor-connector.xpm
index ddff5cdf5..86e8d1753 100644
--- a/src/pixmaps/cursor-connector.xpm
+++ b/src/pixmaps/cursor-connector.xpm
@@ -1,6 +1,6 @@
/* XPM */
static const char * cursor_connector_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 1 1",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-crosshairs.xpm b/src/pixmaps/cursor-crosshairs.xpm
index 8c7554523..407b76048 100644
--- a/src/pixmaps/cursor-crosshairs.xpm
+++ b/src/pixmaps/cursor-crosshairs.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_crosshairs_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 7 7",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-dropper-f.xpm b/src/pixmaps/cursor-dropper-f.xpm
index 3bf1e80e1..e5602d94b 100644
--- a/src/pixmaps/cursor-dropper-f.xpm
+++ b/src/pixmaps/cursor-dropper-f.xpm
@@ -1,6 +1,6 @@
/* XPM */
static const char * cursor_dropper_f_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 5 5",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-dropper-s.xpm b/src/pixmaps/cursor-dropper-s.xpm
index 1a12934d8..2a80f3600 100644
--- a/src/pixmaps/cursor-dropper-s.xpm
+++ b/src/pixmaps/cursor-dropper-s.xpm
@@ -1,6 +1,6 @@
/* XPM */
static const char * cursor_dropper_s_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 5 5",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-ellipse.xpm b/src/pixmaps/cursor-ellipse.xpm
index b0f20d18c..83a820f49 100644
--- a/src/pixmaps/cursor-ellipse.xpm
+++ b/src/pixmaps/cursor-ellipse.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_ellipse_xpm[] = {
-"32 32 5 1",
+"32 32 5 1 4 4",
" c None",
". c #FFFFFF",
"% c Stroke",
diff --git a/src/pixmaps/cursor-eraser.xpm b/src/pixmaps/cursor-eraser.xpm
index dbe730291..b3f8f2d84 100644
--- a/src/pixmaps/cursor-eraser.xpm
+++ b/src/pixmaps/cursor-eraser.xpm
@@ -1,6 +1,6 @@
/* XPM */
static const char * cursor_eraser_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-gradient-add.xpm b/src/pixmaps/cursor-gradient-add.xpm
index d1fe8ed95..ea8341bb2 100644
--- a/src/pixmaps/cursor-gradient-add.xpm
+++ b/src/pixmaps/cursor-gradient-add.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_gradient_add_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-gradient.xpm b/src/pixmaps/cursor-gradient.xpm
index a7be769f5..92c9a9a15 100644
--- a/src/pixmaps/cursor-gradient.xpm
+++ b/src/pixmaps/cursor-gradient.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_gradient_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-measure.xpm b/src/pixmaps/cursor-measure.xpm
index 2a28579c6..9f6497c65 100644
--- a/src/pixmaps/cursor-measure.xpm
+++ b/src/pixmaps/cursor-measure.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_measure_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-node-d.xpm b/src/pixmaps/cursor-node-d.xpm
index 7e177bff4..e28bc73d3 100644
--- a/src/pixmaps/cursor-node-d.xpm
+++ b/src/pixmaps/cursor-node-d.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_node_d_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 1 1",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-node-m.xpm b/src/pixmaps/cursor-node-m.xpm
deleted file mode 100644
index 08574bfb0..000000000
--- a/src/pixmaps/cursor-node-m.xpm
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char const *cursor_node_m_xpm[] = {
-"32 32 3 1",
-" g None",
-". g #FFFFFF",
-"+ g #000000",
-" . ",
-".+. ",
-" .+. ",
-" .++. ",
-" .++. ",
-" .+++. ",
-" .+++. ",
-" .++++. ",
-" .++++. ",
-" .+++++. ",
-" .+++++. ",
-" .++++++. +++ ",
-" .+++++. +.+..+ ",
-" .+++.. +..+..++++ ",
-" .+. +..+..+..+ ",
-" . +..+..+..++ ",
-" +++..+..+..+.+ ",
-" +..+..+..+..+.+ ",
-" +..+..+..+..+.+ ",
-" +..+..+..+..+.+ ",
-" +.............+ ",
-" +............+ ",
-" +...........+ ",
-" +..........+ ",
-" +.........+ ",
-" +........+ ",
-" +.......+ ",
-" +.......+ ",
-" +++++++++ ",
-" ",
-" ",
-" "};
diff --git a/src/pixmaps/cursor-node.xpm b/src/pixmaps/cursor-node.xpm
index 6daae6bda..4d3bd9407 100644
--- a/src/pixmaps/cursor-node.xpm
+++ b/src/pixmaps/cursor-node.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_node_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 1 1",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-paintbucket.xpm b/src/pixmaps/cursor-paintbucket.xpm
index 11ffd6ed1..0c6767f75 100644
--- a/src/pixmaps/cursor-paintbucket.xpm
+++ b/src/pixmaps/cursor-paintbucket.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_paintbucket_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 11 30",
" c None",
". c #000000",
"+ c #FFFFFF",
diff --git a/src/pixmaps/cursor-pen.xpm b/src/pixmaps/cursor-pen.xpm
index 11512e03f..79b68e9ba 100644
--- a/src/pixmaps/cursor-pen.xpm
+++ b/src/pixmaps/cursor-pen.xpm
@@ -1,6 +1,6 @@
/* XPM */
static const char * cursor_pen_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-pencil.xpm b/src/pixmaps/cursor-pencil.xpm
index 4e7b03776..92c6331ab 100644
--- a/src/pixmaps/cursor-pencil.xpm
+++ b/src/pixmaps/cursor-pencil.xpm
@@ -1,6 +1,6 @@
/* XPM */
static const char * cursor_pencil_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-rect.xpm b/src/pixmaps/cursor-rect.xpm
index 69007bc77..e54b7ce4f 100644
--- a/src/pixmaps/cursor-rect.xpm
+++ b/src/pixmaps/cursor-rect.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_rect_xpm[] = {
-"32 32 5 1",
+"32 32 5 1 4 4",
" c None",
". c #FFFFFF",
"% c Stroke",
diff --git a/src/pixmaps/cursor-select-d.xpm b/src/pixmaps/cursor-select-d.xpm
index 501816da0..e84e4de9f 100644
--- a/src/pixmaps/cursor-select-d.xpm
+++ b/src/pixmaps/cursor-select-d.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_select_d_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 1 1",
" c None",
". c #000000",
"+ c #FFFFFF",
diff --git a/src/pixmaps/cursor-select-m.xpm b/src/pixmaps/cursor-select-m.xpm
index 439639c8f..8dd8fb076 100644
--- a/src/pixmaps/cursor-select-m.xpm
+++ b/src/pixmaps/cursor-select-m.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_select_m_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 1 1",
" c None",
". c #000000",
"+ c #FFFFFF",
diff --git a/src/pixmaps/cursor-select.xpm b/src/pixmaps/cursor-select.xpm
index 569573618..36b40c6c5 100644
--- a/src/pixmaps/cursor-select.xpm
+++ b/src/pixmaps/cursor-select.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_select_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 1 1",
" c None",
". c #000000",
"+ c #FFFFFF",
diff --git a/src/pixmaps/cursor-spiral.xpm b/src/pixmaps/cursor-spiral.xpm
index db6f9d2ec..1eaef1e8c 100644
--- a/src/pixmaps/cursor-spiral.xpm
+++ b/src/pixmaps/cursor-spiral.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_spiral_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-spray-move.xpm b/src/pixmaps/cursor-spray-move.xpm
index ad898b3a5..0c918392a 100644
--- a/src/pixmaps/cursor-spray-move.xpm
+++ b/src/pixmaps/cursor-spray-move.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const * cursor_spray_move_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-spray.xpm b/src/pixmaps/cursor-spray.xpm
index 9ccefee4f..19a40997c 100644
--- a/src/pixmaps/cursor-spray.xpm
+++ b/src/pixmaps/cursor-spray.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const * cursor_spray_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-star.xpm b/src/pixmaps/cursor-star.xpm
index eedf448e4..c9f2e85e7 100644
--- a/src/pixmaps/cursor-star.xpm
+++ b/src/pixmaps/cursor-star.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_star_xpm[] = {
-"32 32 5 1",
+"32 32 5 1 4 4",
" c None",
". c #FFFFFF",
"% c Stroke",
diff --git a/src/pixmaps/cursor-text-insert.xpm b/src/pixmaps/cursor-text-insert.xpm
index d72c59686..488791e2e 100644
--- a/src/pixmaps/cursor-text-insert.xpm
+++ b/src/pixmaps/cursor-text-insert.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_text_insert_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 7 10",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-text.xpm b/src/pixmaps/cursor-text.xpm
index 46098db30..6d74ae305 100644
--- a/src/pixmaps/cursor-text.xpm
+++ b/src/pixmaps/cursor-text.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_text_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 7 7",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-attract.xpm b/src/pixmaps/cursor-tweak-attract.xpm
index 56033b287..264360b2e 100644
--- a/src/pixmaps/cursor-attract.xpm
+++ b/src/pixmaps/cursor-tweak-attract.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_attract_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-color.xpm b/src/pixmaps/cursor-tweak-color.xpm
index 327028ba8..4bce642d6 100644
--- a/src/pixmaps/cursor-color.xpm
+++ b/src/pixmaps/cursor-tweak-color.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_color_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-tweak-less.xpm b/src/pixmaps/cursor-tweak-less.xpm
index 6c065ba62..c669bca77 100644
--- a/src/pixmaps/cursor-tweak-less.xpm
+++ b/src/pixmaps/cursor-tweak-less.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const * cursor_tweak_less_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-tweak-more.xpm b/src/pixmaps/cursor-tweak-more.xpm
index 0e80bb9c5..6321ce940 100644
--- a/src/pixmaps/cursor-tweak-more.xpm
+++ b/src/pixmaps/cursor-tweak-more.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const * cursor_tweak_more_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-tweak-move-in.xpm b/src/pixmaps/cursor-tweak-move-in.xpm
index 11ee4c3e1..d80fa03c6 100644
--- a/src/pixmaps/cursor-tweak-move-in.xpm
+++ b/src/pixmaps/cursor-tweak-move-in.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const * cursor_tweak_move_in_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-tweak-move-jitter.xpm b/src/pixmaps/cursor-tweak-move-jitter.xpm
index 1f2b1d26a..7f0f8114d 100644
--- a/src/pixmaps/cursor-tweak-move-jitter.xpm
+++ b/src/pixmaps/cursor-tweak-move-jitter.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const * cursor_tweak_move_jitter_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-tweak-move-out.xpm b/src/pixmaps/cursor-tweak-move-out.xpm
index 7d4569dfe..1fa0293bb 100644
--- a/src/pixmaps/cursor-tweak-move-out.xpm
+++ b/src/pixmaps/cursor-tweak-move-out.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const * cursor_tweak_move_out_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-tweak-move.xpm b/src/pixmaps/cursor-tweak-move.xpm
index e44028f6c..67b10980b 100644
--- a/src/pixmaps/cursor-tweak-move.xpm
+++ b/src/pixmaps/cursor-tweak-move.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const * cursor_tweak_move_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-push.xpm b/src/pixmaps/cursor-tweak-push.xpm
index ba05369a8..bf331e58d 100644
--- a/src/pixmaps/cursor-push.xpm
+++ b/src/pixmaps/cursor-tweak-push.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_push_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-repel.xpm b/src/pixmaps/cursor-tweak-repel.xpm
index d365cddc3..5dccefdb8 100644
--- a/src/pixmaps/cursor-repel.xpm
+++ b/src/pixmaps/cursor-tweak-repel.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_repel_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-tweak-rotate-clockwise.xpm b/src/pixmaps/cursor-tweak-rotate-clockwise.xpm
index 20bad59af..ecbbde820 100644
--- a/src/pixmaps/cursor-tweak-rotate-clockwise.xpm
+++ b/src/pixmaps/cursor-tweak-rotate-clockwise.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const * cursor_tweak_rotate_clockwise_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-tweak-rotate-counterclockwise.xpm b/src/pixmaps/cursor-tweak-rotate-counterclockwise.xpm
index c5fcc70e8..a3c220842 100644
--- a/src/pixmaps/cursor-tweak-rotate-counterclockwise.xpm
+++ b/src/pixmaps/cursor-tweak-rotate-counterclockwise.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const * cursor_tweak_rotate_counterclockwise_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-roughen.xpm b/src/pixmaps/cursor-tweak-roughen.xpm
index 5adafbbd2..1581b95fa 100644
--- a/src/pixmaps/cursor-roughen.xpm
+++ b/src/pixmaps/cursor-tweak-roughen.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_roughen_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-tweak-scale-down.xpm b/src/pixmaps/cursor-tweak-scale-down.xpm
index cfd804aab..b1b15af17 100644
--- a/src/pixmaps/cursor-tweak-scale-down.xpm
+++ b/src/pixmaps/cursor-tweak-scale-down.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const * cursor_tweak_scale_down_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-tweak-scale-up.xpm b/src/pixmaps/cursor-tweak-scale-up.xpm
index 547346f4c..dcc73c122 100644
--- a/src/pixmaps/cursor-tweak-scale-up.xpm
+++ b/src/pixmaps/cursor-tweak-scale-up.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const * cursor_tweak_scale_up_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-thicken.xpm b/src/pixmaps/cursor-tweak-thicken.xpm
index ab76c6c8c..ba7a2dfb8 100644
--- a/src/pixmaps/cursor-thicken.xpm
+++ b/src/pixmaps/cursor-tweak-thicken.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_thicken_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-thin.xpm b/src/pixmaps/cursor-tweak-thin.xpm
index 16a32311d..7d10fe7e9 100644
--- a/src/pixmaps/cursor-thin.xpm
+++ b/src/pixmaps/cursor-tweak-thin.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_thin_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 4 4",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-zoom-out.xpm b/src/pixmaps/cursor-zoom-out.xpm
index c8ddf48a2..8f35ad049 100644
--- a/src/pixmaps/cursor-zoom-out.xpm
+++ b/src/pixmaps/cursor-zoom-out.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_zoom_out_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 6 6",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-zoom.xpm b/src/pixmaps/cursor-zoom.xpm
index 0def57427..e869239d6 100644
--- a/src/pixmaps/cursor-zoom.xpm
+++ b/src/pixmaps/cursor-zoom.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_zoom_xpm[] = {
-"32 32 3 1",
+"32 32 3 1 6 6",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/sp-cursor.cpp b/src/sp-cursor.cpp
index 4b9f1cc2d..78bfc9075 100644
--- a/src/sp-cursor.cpp
+++ b/src/sp-cursor.cpp
@@ -54,82 +54,92 @@ struct RGBA {
}
};
-GdkPixbuf *sp_cursor_pixbuf_from_xpm(char const *const *xpm, GdkColor const& black, GdkColor const& white, guint32 fill, guint32 stroke)
+GdkCursor *sp_cursor_from_xpm(char const *const *xpm, GdkColor *black, GdkColor *white, guint32 fill, guint32 stroke)
{
+ GdkPixbuf *pixbuf;
+ GdkCursor *cursor;
+ GdkDisplay *display = gdk_display_get_default();
+
int height = 0;
int width = 0;
int colors = 0;
int pix = 0;
+ int hot_x = 0;
+ int hot_y = 0;
std::stringstream ss (std::stringstream::in | std::stringstream::out);
ss << xpm[0];
ss >> height;
ss >> width;
ss >> colors;
ss >> pix;
+ ss >> hot_x;
+ ss >> hot_y;
- std::map<char, RGBA> colorMap;
+ if (gdk_display_supports_cursor_alpha(display) && gdk_display_supports_cursor_color(display)) {
+ std::map<char, RGBA> colorMap;
- for (int i = 0; i < colors; i++) {
+ for (int i = 0; i < colors; i++) {
- char const *p = xpm[1 + i];
- g_assert(*p >=0);
- unsigned char const ccode = (guchar) *p;
+ char const *p = xpm[1 + i];
+ g_assert(*p >=0);
+ unsigned char const ccode = (guchar) *p;
- p++;
- while (isspace(*p)) {
p++;
- }
- p++;
- while (isspace(*p)) {
+ while (isspace(*p)) {
+ p++;
+ }
p++;
+ while (isspace(*p)) {
+ p++;
+ }
+
+ if (strcmp(p, "Fill") == 0) {
+ colorMap[ccode] = RGBA(SP_RGBA32_R_U(fill), SP_RGBA32_G_U(fill), SP_RGBA32_B_U(fill), SP_RGBA32_A_U(fill));
+ } else if (strcmp(p, "Stroke") == 0) {
+ colorMap[ccode] = RGBA(SP_RGBA32_R_U(stroke), SP_RGBA32_G_U(stroke), SP_RGBA32_B_U(stroke), SP_RGBA32_A_U(stroke));
+ } else if (black && strcmp(p, "#000000") == 0) {
+ colorMap[ccode] = RGBA(black->red, black->green, black->blue, 255);
+ } else if (white && strcmp(p, "#FFFFFF") == 0) {
+ colorMap[ccode] = RGBA(white->red, white->green, white->blue, 255);
+ } else if (p[0] == '#') {
+ GdkRGBA color;
+ if (gdk_rgba_parse(&color, p)) {
+ colorMap[ccode] = RGBA(color.red * 255, color.green * 255, color.blue * 255, color.alpha * 255);
+ } else {
+ colorMap[ccode] = RGBA();
+ }
+ } else { // Catches 'None'
+ colorMap[ccode] = RGBA();
+ }
}
- if (strcmp(p, "None") == 0) {
- colorMap[ccode] = RGBA();
- } else if (strcmp(p, "Fill") == 0) {
- colorMap[ccode] = RGBA(SP_RGBA32_R_U(fill), SP_RGBA32_G_U(fill), SP_RGBA32_B_U(fill), SP_RGBA32_A_U(fill));
- } else if (strcmp(p, "Stroke") == 0) {
- colorMap[ccode] = RGBA(SP_RGBA32_R_U(stroke), SP_RGBA32_G_U(stroke), SP_RGBA32_B_U(stroke), SP_RGBA32_A_U(stroke));
- } else if (strcmp(p, "#000000") == 0) {
- colorMap[ccode] = RGBA(black.red, black.green, black.blue, 255);
- } else if (strcmp(p, "#FFFFFF") == 0) {
- colorMap[ccode] = RGBA(white.red, white.green, white.blue, 255);
- } else {
- colorMap[ccode] = RGBA();
- }
- }
+ guint32 *pixmap_buffer = new guint32[width * height];
- guint32 *pixmap_buffer = new guint32[width * height];
-
- for (int y = 0; y < height; y++) {
- for (int x = 0; x < width; x++) {
- std::map<char, RGBA>::const_iterator it = colorMap.find(xpm[1 + colors + y][x]);
- pixmap_buffer[y * width + x] = (it == colorMap.end()) ? 0u : it->second;
+ for (int y = 0; y < height; y++) {
+ for (int x = 0; x < width; x++) {
+ std::map<char, RGBA>::const_iterator it = colorMap.find(xpm[1 + colors + y][x]);
+ pixmap_buffer[y * width + x] = (it == colorMap.end()) ? 0u : it->second;
+ }
}
- }
#if G_BYTE_ORDER == G_BIG_ENDIAN
- for (int i = 0, n = width * height; i < n; i++) {
- guint32 v = pixmap_buffer[i];
- pixmap_buffer[i] = ((v & 0xFF) << 24) | (((v >> 8) & 0xFF) << 16) | (((v >> 16) & 0xFF) << 8) | ((v >> 24) & 0xFF);
- }
+ for (int i = 0, n = width * height; i < n; i++) {
+ guint32 v = pixmap_buffer[i];
+ pixmap_buffer[i] = ((v & 0xFF) << 24) | (((v >> 8) & 0xFF) << 16) | (((v >> 16) & 0xFF) << 8) | ((v >> 24) & 0xFF);
+ }
#endif
- return gdk_pixbuf_new_from_data(reinterpret_cast<guchar*>(pixmap_buffer), GDK_COLORSPACE_RGB, TRUE, 8, width, height, width * sizeof(guint32), free_cursor_data, NULL);
-}
-
-GdkCursor *sp_cursor_new_from_xpm(char const *const *xpm, int hot_x, int hot_y)
-{
- GdkCursor *cursor = 0;
- GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data((const gchar **)xpm);
-
- if (pixbuf) {
- cursor = gdk_cursor_new_from_pixbuf(gdk_display_get_default(),
- pixbuf, hot_x, hot_y);
+ pixbuf = gdk_pixbuf_new_from_data(reinterpret_cast<guchar*>(pixmap_buffer), GDK_COLORSPACE_RGB, TRUE, 8, width, height, width * sizeof(guint32), free_cursor_data, NULL);
+ } else {
+ pixbuf = gdk_pixbuf_new_from_xpm_data((const gchar **)xpm);
+ }
+ if (pixbuf != NULL) {
+ cursor = gdk_cursor_new_from_pixbuf(display, pixbuf, hot_x, hot_y);
g_object_unref(pixbuf);
+ } else {
+ g_warning("Failed to load cursor from xpm!");
}
-
return cursor;
}
diff --git a/src/sp-cursor.h b/src/sp-cursor.h
index c0b8b46a3..6579d6a16 100644
--- a/src/sp-cursor.h
+++ b/src/sp-cursor.h
@@ -6,8 +6,7 @@ typedef struct _GdkPixbuf GdkPixbuf;
typedef struct _GdkCursor GdkCursor;
typedef struct _GdkColor GdkColor;
-GdkPixbuf* sp_cursor_pixbuf_from_xpm(char const *const *xpm, GdkColor const& black, GdkColor const& white, guint32 fill, guint32 stroke);
-GdkCursor *sp_cursor_new_from_xpm(char const *const *xpm, int hot_x, int hot_y);
+GdkCursor* sp_cursor_from_xpm(char const *const *xpm, GdkColor *black=NULL, GdkColor *white=NULL, guint32 fill=0, guint32 stroke=0);
#endif
diff --git a/src/ui/tools/arc-tool.cpp b/src/ui/tools/arc-tool.cpp
index 6652f7ab5..01e0c3e00 100644
--- a/src/ui/tools/arc-tool.cpp
+++ b/src/ui/tools/arc-tool.cpp
@@ -59,7 +59,7 @@ const std::string ArcTool::prefsPath = "/tools/shapes/arc";
ArcTool::ArcTool()
- : ToolBase(cursor_ellipse_xpm, 4, 4)
+ : ToolBase(cursor_ellipse_xpm)
, arc(NULL)
{
}
diff --git a/src/ui/tools/box3d-tool.cpp b/src/ui/tools/box3d-tool.cpp
index 425695a2c..276385335 100644
--- a/src/ui/tools/box3d-tool.cpp
+++ b/src/ui/tools/box3d-tool.cpp
@@ -54,7 +54,7 @@ const std::string& Box3dTool::getPrefsPath() {
const std::string Box3dTool::prefsPath = "/tools/shapes/3dbox";
Box3dTool::Box3dTool()
- : ToolBase(cursor_3dbox_xpm, 4, 4)
+ : ToolBase(cursor_3dbox_xpm)
, _vpdrag(NULL)
, box3d(NULL)
, ctrl_dragged(false)
diff --git a/src/ui/tools/calligraphic-tool.cpp b/src/ui/tools/calligraphic-tool.cpp
index 7228a52bc..266375caa 100644
--- a/src/ui/tools/calligraphic-tool.cpp
+++ b/src/ui/tools/calligraphic-tool.cpp
@@ -88,7 +88,7 @@ const std::string& CalligraphicTool::getPrefsPath() {
const std::string CalligraphicTool::prefsPath = "/tools/calligraphic";
CalligraphicTool::CalligraphicTool()
- : DynamicBase(cursor_calligraphy_xpm, 4, 4)
+ : DynamicBase(cursor_calligraphy_xpm)
, keep_selected(true)
, hatch_spacing(0)
, hatch_spacing_step(0)
diff --git a/src/ui/tools/connector-tool.cpp b/src/ui/tools/connector-tool.cpp
index 7e6fb4b72..29be4831a 100644
--- a/src/ui/tools/connector-tool.cpp
+++ b/src/ui/tools/connector-tool.cpp
@@ -145,7 +145,7 @@ const std::string& ConnectorTool::getPrefsPath() {
const std::string ConnectorTool::prefsPath = "/tools/connector";
ConnectorTool::ConnectorTool()
- : ToolBase(cursor_connector_xpm, 1, 1)
+ : ToolBase(cursor_connector_xpm)
, selection(NULL)
, npoints(0)
, state(SP_CONNECTOR_CONTEXT_IDLE)
diff --git a/src/ui/tools/dropper-tool.cpp b/src/ui/tools/dropper-tool.cpp
index 99177dc75..bd341262b 100644
--- a/src/ui/tools/dropper-tool.cpp
+++ b/src/ui/tools/dropper-tool.cpp
@@ -60,7 +60,7 @@ const std::string& DropperTool::getPrefsPath() {
const std::string DropperTool::prefsPath = "/tools/dropper";
DropperTool::DropperTool()
- : ToolBase(cursor_dropper_f_xpm, 5, 5)
+ : ToolBase(cursor_dropper_f_xpm)
, R(0)
, G(0)
, B(0)
@@ -70,8 +70,8 @@ DropperTool::DropperTool()
, area(NULL)
, centre(0, 0)
{
- cursor_dropper_fill = sp_cursor_new_from_xpm(cursor_dropper_f_xpm , 5, 5);
- cursor_dropper_stroke = sp_cursor_new_from_xpm(cursor_dropper_s_xpm , 5, 5);
+ cursor_dropper_fill = sp_cursor_from_xpm(cursor_dropper_f_xpm);
+ cursor_dropper_stroke = sp_cursor_from_xpm(cursor_dropper_s_xpm);
}
DropperTool::~DropperTool() {
diff --git a/src/ui/tools/dynamic-base.cpp b/src/ui/tools/dynamic-base.cpp
index 6627a470e..bb4989333 100644
--- a/src/ui/tools/dynamic-base.cpp
+++ b/src/ui/tools/dynamic-base.cpp
@@ -18,8 +18,8 @@ namespace Inkscape {
namespace UI {
namespace Tools {
-DynamicBase::DynamicBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y)
- : ToolBase(cursor_shape, hot_x, hot_y)
+DynamicBase::DynamicBase(gchar const *const *cursor_shape)
+ : ToolBase(cursor_shape)
, accumulated(NULL)
, segments(NULL)
, currentshape(NULL)
diff --git a/src/ui/tools/dynamic-base.h b/src/ui/tools/dynamic-base.h
index 095af8f88..e270052f3 100644
--- a/src/ui/tools/dynamic-base.h
+++ b/src/ui/tools/dynamic-base.h
@@ -38,7 +38,7 @@ namespace Tools {
class DynamicBase : public ToolBase {
public:
- DynamicBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y);
+ DynamicBase(gchar const *const *cursor_shape);
virtual ~DynamicBase();
virtual void set(const Inkscape::Preferences::Entry& val);
diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp
index ae312e054..b4246b9cc 100644
--- a/src/ui/tools/eraser-tool.cpp
+++ b/src/ui/tools/eraser-tool.cpp
@@ -93,7 +93,7 @@ const std::string& EraserTool::getPrefsPath() {
const std::string EraserTool::prefsPath = "/tools/eraser";
EraserTool::EraserTool()
- : DynamicBase(cursor_eraser_xpm, 4, 4)
+ : DynamicBase(cursor_eraser_xpm)
, nowidth(false)
{
}
diff --git a/src/ui/tools/flood-tool.cpp b/src/ui/tools/flood-tool.cpp
index 6e1d085aa..f6f9b4355 100644
--- a/src/ui/tools/flood-tool.cpp
+++ b/src/ui/tools/flood-tool.cpp
@@ -98,7 +98,7 @@ Glib::ustring gap_init[4] = {
const std::vector<Glib::ustring> FloodTool::gap_list( gap_init, gap_init+4 );
FloodTool::FloodTool()
- : ToolBase(cursor_paintbucket_xpm, 11, 30)
+ : ToolBase(cursor_paintbucket_xpm)
, item(NULL)
{
// TODO: Why does the flood tool use a hardcoded tolerance instead of a pref?
diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp
index 4af70a816..8a5ef0aad 100644
--- a/src/ui/tools/freehand-base.cpp
+++ b/src/ui/tools/freehand-base.cpp
@@ -63,8 +63,8 @@ static void spdc_flush_white(FreehandBase *dc, SPCurve *gc);
static void spdc_reset_white(FreehandBase *dc);
static void spdc_free_colors(FreehandBase *dc);
-FreehandBase::FreehandBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y)
- : ToolBase(cursor_shape, hot_x, hot_y)
+FreehandBase::FreehandBase(gchar const *const *cursor_shape)
+ : ToolBase(cursor_shape)
, selection(NULL)
, grab(NULL)
, attach(false)
diff --git a/src/ui/tools/freehand-base.h b/src/ui/tools/freehand-base.h
index 3ee4cd7d0..a3069aa09 100644
--- a/src/ui/tools/freehand-base.h
+++ b/src/ui/tools/freehand-base.h
@@ -44,7 +44,7 @@ namespace Tools {
class FreehandBase : public ToolBase {
public:
- FreehandBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y);
+ FreehandBase(gchar const *const *cursor_shape);
virtual ~FreehandBase();
Inkscape::Selection *selection;
diff --git a/src/ui/tools/gradient-tool.cpp b/src/ui/tools/gradient-tool.cpp
index 750596808..95d940bd6 100644
--- a/src/ui/tools/gradient-tool.cpp
+++ b/src/ui/tools/gradient-tool.cpp
@@ -58,7 +58,7 @@ const std::string GradientTool::prefsPath = "/tools/gradient";
GradientTool::GradientTool()
- : ToolBase(cursor_gradient_xpm, 4, 4)
+ : ToolBase(cursor_gradient_xpm)
, cursor_addnode(false)
, node_added(false)
// TODO: Why are these connections stored as pointers?
diff --git a/src/ui/tools/lpe-tool.cpp b/src/ui/tools/lpe-tool.cpp
index 29e4c9e74..35e6d14a0 100644
--- a/src/ui/tools/lpe-tool.cpp
+++ b/src/ui/tools/lpe-tool.cpp
@@ -68,7 +68,7 @@ const std::string& LpeTool::getPrefsPath() {
const std::string LpeTool::prefsPath = "/tools/lpetool";
LpeTool::LpeTool()
- : PenTool(cursor_crosshairs_xpm, 7, 7)
+ : PenTool(cursor_crosshairs_xpm)
, shape_editor(NULL)
, canvas_bbox(NULL)
, mode(Inkscape::LivePathEffect::BEND_PATH)
diff --git a/src/ui/tools/measure-tool.cpp b/src/ui/tools/measure-tool.cpp
index 98b2c7d03..7f3c99716 100644
--- a/src/ui/tools/measure-tool.cpp
+++ b/src/ui/tools/measure-tool.cpp
@@ -322,7 +322,7 @@ void createAngleDisplayCurve(SPDesktop *desktop, Geom::Point const &center, Geom
boost::optional<Geom::Point> explicit_base_tmp = boost::none;
MeasureTool::MeasureTool()
- : ToolBase(cursor_measure_xpm, 4, 4)
+ : ToolBase(cursor_measure_xpm)
, grabbed(NULL)
{
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
diff --git a/src/ui/tools/mesh-tool.cpp b/src/ui/tools/mesh-tool.cpp
index ac43b6c9d..d79741270 100644
--- a/src/ui/tools/mesh-tool.cpp
+++ b/src/ui/tools/mesh-tool.cpp
@@ -72,7 +72,7 @@ const std::string MeshTool::prefsPath = "/tools/mesh";
// TODO: The gradient tool class looks like a 1:1 copy.
MeshTool::MeshTool()
- : ToolBase(cursor_gradient_xpm, 4, 4)
+ : ToolBase(cursor_gradient_xpm)
, cursor_addnode(false)
, node_added(false)
, show_handles(true)
diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp
index 0c948c91c..08aacf805 100644
--- a/src/ui/tools/node-tool.cpp
+++ b/src/ui/tools/node-tool.cpp
@@ -118,7 +118,7 @@ const std::string NodeTool::prefsPath = "/tools/nodes";
SPCanvasGroup *create_control_group(SPDesktop *d);
NodeTool::NodeTool()
- : ToolBase(cursor_node_xpm, 1, 1)
+ : ToolBase(cursor_node_xpm)
, _selected_nodes(NULL)
, _multipath(NULL)
, edit_clipping_paths(false)
@@ -773,14 +773,10 @@ void NodeTool::mouseover_changed(Inkscape::UI::ControlPoint *p) {
if (cdp && !this->cursor_drag) {
this->cursor_shape = cursor_node_d_xpm;
- this->hot_x = 1;
- this->hot_y = 1;
this->sp_event_context_update_cursor();
this->cursor_drag = true;
} else if (!cdp && this->cursor_drag) {
this->cursor_shape = cursor_node_xpm;
- this->hot_x = 1;
- this->hot_y = 1;
this->sp_event_context_update_cursor();
this->cursor_drag = false;
}
diff --git a/src/ui/tools/pen-tool.cpp b/src/ui/tools/pen-tool.cpp
index caf6faec2..265ddf2ea 100644
--- a/src/ui/tools/pen-tool.cpp
+++ b/src/ui/tools/pen-tool.cpp
@@ -81,7 +81,7 @@ const std::string& PenTool::getPrefsPath() {
const std::string PenTool::prefsPath = "/tools/freehand/pen";
PenTool::PenTool()
- : FreehandBase(cursor_pen_xpm, 4, 4)
+ : FreehandBase(cursor_pen_xpm)
, p()
, npoints(0)
, mode(MODE_CLICK)
@@ -100,8 +100,8 @@ PenTool::PenTool()
{
}
-PenTool::PenTool(gchar const *const *cursor_shape, gint hot_x, gint hot_y)
- : FreehandBase(cursor_shape, hot_x, hot_y)
+PenTool::PenTool(gchar const *const *cursor_shape)
+ : FreehandBase(cursor_shape)
, p()
, npoints(0)
, mode(MODE_CLICK)
diff --git a/src/ui/tools/pen-tool.h b/src/ui/tools/pen-tool.h
index 5a21e3bac..7e5483358 100644
--- a/src/ui/tools/pen-tool.h
+++ b/src/ui/tools/pen-tool.h
@@ -23,7 +23,7 @@ namespace Tools {
class PenTool : public FreehandBase {
public:
PenTool();
- PenTool(gchar const *const *cursor_shape, gint hot_x, gint hot_y);
+ PenTool(gchar const *const *cursor_shape);
virtual ~PenTool();
enum Mode {
diff --git a/src/ui/tools/pencil-tool.cpp b/src/ui/tools/pencil-tool.cpp
index ec2874823..99b8103c3 100644
--- a/src/ui/tools/pencil-tool.cpp
+++ b/src/ui/tools/pencil-tool.cpp
@@ -57,7 +57,7 @@ const std::string& PencilTool::getPrefsPath() {
const std::string PencilTool::prefsPath = "/tools/freehand/pencil";
PencilTool::PencilTool()
- : FreehandBase(cursor_pencil_xpm, 4, 4)
+ : FreehandBase(cursor_pencil_xpm)
, p()
, npoints(0)
, state(SP_PENCIL_CONTEXT_IDLE)
diff --git a/src/ui/tools/rect-tool.cpp b/src/ui/tools/rect-tool.cpp
index 272531945..8eaae2f7b 100644
--- a/src/ui/tools/rect-tool.cpp
+++ b/src/ui/tools/rect-tool.cpp
@@ -52,7 +52,7 @@ const std::string& RectTool::getPrefsPath() {
const std::string RectTool::prefsPath = "/tools/shapes/rect";
RectTool::RectTool()
- : ToolBase(cursor_rect_xpm, 4, 4)
+ : ToolBase(cursor_rect_xpm)
, rect(NULL)
, rx(0)
, ry(0)
diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp
index 927b8a3d4..fca2173ca 100644
--- a/src/ui/tools/select-tool.cpp
+++ b/src/ui/tools/select-tool.cpp
@@ -81,7 +81,7 @@ sp_load_handles(int start, int count, char const **xpm) {
SelectTool::SelectTool()
// Don't load a default cursor
- : ToolBase(NULL, 0, 0)
+ : ToolBase(NULL)
, dragging(false)
, moved(false)
, button_press_shift(false)
@@ -94,8 +94,8 @@ SelectTool::SelectTool()
, _describer(NULL)
{
// cursors in select context
- CursorSelectMouseover = sp_cursor_new_from_xpm(cursor_select_m_xpm , 1, 1);
- CursorSelectDragging = sp_cursor_new_from_xpm(cursor_select_d_xpm , 1, 1);
+ CursorSelectMouseover = sp_cursor_from_xpm(cursor_select_m_xpm);
+ CursorSelectDragging = sp_cursor_from_xpm(cursor_select_d_xpm);
// selection handles
sp_load_handles(0, 2, handle_scale_xpm);
diff --git a/src/ui/tools/spiral-tool.cpp b/src/ui/tools/spiral-tool.cpp
index 0ba08853e..08c35b9b0 100644
--- a/src/ui/tools/spiral-tool.cpp
+++ b/src/ui/tools/spiral-tool.cpp
@@ -51,7 +51,7 @@ const std::string& SpiralTool::getPrefsPath() {
const std::string SpiralTool::prefsPath = "/tools/shapes/spiral";
SpiralTool::SpiralTool()
- : ToolBase(cursor_spiral_xpm, 4, 4)
+ : ToolBase(cursor_spiral_xpm)
, spiral(NULL)
, revo(3)
, exp(1)
diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp
index ad006627c..f3e7e6d3c 100644
--- a/src/ui/tools/spray-tool.cpp
+++ b/src/ui/tools/spray-tool.cpp
@@ -137,7 +137,7 @@ static void sp_spray_scale_rel(Geom::Point c, SPDesktop */*desktop*/, SPItem *it
}
SprayTool::SprayTool()
- : ToolBase(cursor_spray_xpm, 4, 4, false)
+ : ToolBase(cursor_spray_xpm, false)
, pressure(TC_DEFAULT_PRESSURE)
, dragging(false)
, usepressurewidth(false)
diff --git a/src/ui/tools/star-tool.cpp b/src/ui/tools/star-tool.cpp
index ddee08189..18992d87a 100644
--- a/src/ui/tools/star-tool.cpp
+++ b/src/ui/tools/star-tool.cpp
@@ -57,7 +57,7 @@ const std::string& StarTool::getPrefsPath() {
const std::string StarTool::prefsPath = "/tools/shapes/star";
StarTool::StarTool()
- : ToolBase(cursor_star_xpm, 4, 4)
+ : ToolBase(cursor_star_xpm)
, star(NULL)
, magnitude(5)
, proportion(0.5)
diff --git a/src/ui/tools/text-tool.cpp b/src/ui/tools/text-tool.cpp
index 649bbb045..9091b455e 100644
--- a/src/ui/tools/text-tool.cpp
+++ b/src/ui/tools/text-tool.cpp
@@ -76,7 +76,7 @@ const std::string TextTool::prefsPath = "/tools/text";
TextTool::TextTool()
- : ToolBase(cursor_text_xpm, 7, 7)
+ : ToolBase(cursor_text_xpm)
, imc(NULL)
, text(NULL)
, pdoc(0, 0)
@@ -359,8 +359,6 @@ bool TextTool::item_handler(SPItem* item, GdkEvent* event) {
sp_canvas_item_show(this->indicator);
this->cursor_shape = cursor_text_insert_xpm;
- this->hot_x = 7;
- this->hot_y = 10;
this->sp_event_context_update_cursor();
sp_text_context_update_text_selection(this);
@@ -548,8 +546,6 @@ bool TextTool::root_handler(GdkEvent* event) {
this->over_text = 0;
// update cursor and statusbar: we are not over a text object now
this->cursor_shape = cursor_text_xpm;
- this->hot_x = 7;
- this->hot_y = 7;
this->sp_event_context_update_cursor();
desktop->event_context->defaultMessageContext()->clear();
}
diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp
index 9231db7c8..0467b984e 100644
--- a/src/ui/tools/tool-base.cpp
+++ b/src/ui/tools/tool-base.cpp
@@ -86,7 +86,7 @@ SPDesktop const& ToolBase::getDesktop() const {
return *desktop;
}
-ToolBase::ToolBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y, bool uses_snap)
+ToolBase::ToolBase(gchar const *const *cursor_shape, bool uses_snap)
: pref_observer(NULL)
, cursor(NULL)
, xp(0)
@@ -104,8 +104,6 @@ ToolBase::ToolBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y, boo
, desktop(NULL)
, _uses_snap(uses_snap)
, cursor_shape(cursor_shape)
- , hot_x(hot_x)
- , hot_y(hot_y)
{
}
@@ -154,44 +152,24 @@ void ToolBase::sp_event_context_set_cursor(GdkCursorType cursor_type) {
void ToolBase::sp_event_context_update_cursor() {
GtkWidget *w = GTK_WIDGET(this->desktop->getCanvas());
if (gtk_widget_get_window (w)) {
-
GtkStyle *style = gtk_widget_get_style(w);
- /* fixme: */
if (this->cursor_shape) {
- GdkDisplay *display = gdk_display_get_default();
- if (gdk_display_supports_cursor_alpha(display) && gdk_display_supports_cursor_color(display)) {
- bool fillHasColor=false, strokeHasColor=false;
- guint32 fillColor = sp_desktop_get_color_tool(this->desktop, this->getPrefsPath(), true, &fillHasColor);
- guint32 strokeColor = sp_desktop_get_color_tool(this->desktop, this->getPrefsPath(), false, &strokeHasColor);
- double fillOpacity = fillHasColor ? sp_desktop_get_opacity_tool(this->desktop, this->getPrefsPath(), true) : 0;
- double strokeOpacity = strokeHasColor ? sp_desktop_get_opacity_tool(this->desktop, this->getPrefsPath(), false) : 0;
-
- GdkPixbuf *pixbuf = sp_cursor_pixbuf_from_xpm(
- this->cursor_shape,
- style->black, style->white,
- SP_RGBA32_U_COMPOSE(SP_RGBA32_R_U(fillColor),SP_RGBA32_G_U(fillColor),SP_RGBA32_B_U(fillColor),SP_COLOR_F_TO_U(fillOpacity)),
- SP_RGBA32_U_COMPOSE(SP_RGBA32_R_U(strokeColor),SP_RGBA32_G_U(strokeColor),SP_RGBA32_B_U(strokeColor),SP_COLOR_F_TO_U(strokeOpacity))
- );
- if (pixbuf != NULL) {
- if (this->cursor) {
- g_object_unref(this->cursor);
- }
- this->cursor = gdk_cursor_new_from_pixbuf(display, pixbuf, this->hot_x, this->hot_y);
- g_object_unref(pixbuf);
- }
- } else {
- GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data((const gchar **)this->cursor_shape);
-
- if (pixbuf) {
- if (this->cursor) {
- g_object_unref(this->cursor);
- }
- this->cursor = gdk_cursor_new_from_pixbuf(display,
- pixbuf, this->hot_x, this->hot_y);
- g_object_unref(pixbuf);
- }
+ if(this->cursor) {
+ g_object_unref(this->cursor);
}
+
+ bool fillHasColor=false, strokeHasColor=false;
+ guint32 fillColor = sp_desktop_get_color_tool(this->desktop, this->getPrefsPath(), true, &fillHasColor);
+ guint32 strokeColor = sp_desktop_get_color_tool(this->desktop, this->getPrefsPath(), false, &strokeHasColor);
+ double fillOpacity = fillHasColor ? sp_desktop_get_opacity_tool(this->desktop, this->getPrefsPath(), true) : 0;
+ double strokeOpacity = strokeHasColor ? sp_desktop_get_opacity_tool(this->desktop, this->getPrefsPath(), false) : 0;
+
+ this->cursor = sp_cursor_from_xpm(
+ this->cursor_shape, &style->black, &style->white,
+ SP_RGBA32_C_COMPOSE(fillColor, fillOpacity),
+ SP_RGBA32_C_COMPOSE(strokeColor, strokeOpacity)
+ );
}
gdk_window_set_cursor(gtk_widget_get_window (w), this->cursor);
gdk_flush();
@@ -208,8 +186,7 @@ void ToolBase::sp_event_context_update_cursor() {
void ToolBase::setup() {
this->pref_observer = new ToolPrefObserver(this->getPrefsPath(), this);
Inkscape::Preferences::get()->addObserver(*(this->pref_observer));
-
- this->sp_event_context_update_cursor();
+ this->sp_event_context_update_cursor();
}
/**
diff --git a/src/ui/tools/tool-base.h b/src/ui/tools/tool-base.h
index 3d22fc66f..b0140cecb 100644
--- a/src/ui/tools/tool-base.h
+++ b/src/ui/tools/tool-base.h
@@ -144,7 +144,7 @@ public:
void enableGrDrag (bool enable=true);
bool deleteSelectedDrag(bool just_one);
- ToolBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y, bool uses_snap = true);
+ ToolBase(gchar const *const *cursor_shape, bool uses_snap=true);
virtual ~ToolBase();
@@ -224,9 +224,6 @@ protected:
/// An xpm containing the shape of the tool's cursor.
gchar const *const *cursor_shape;
- /// The cursor's hot spot
- gint hot_x, hot_y;
-
bool sp_event_context_knot_mouseover() const;
private:
diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp
index ff5d623c2..dcd9413fb 100644
--- a/src/ui/tools/tweak-tool.cpp
+++ b/src/ui/tools/tweak-tool.cpp
@@ -38,13 +38,13 @@
#include "pixmaps/cursor-tweak-rotate-counterclockwise.xpm"
#include "pixmaps/cursor-tweak-more.xpm"
#include "pixmaps/cursor-tweak-less.xpm"
-#include "pixmaps/cursor-thin.xpm"
-#include "pixmaps/cursor-thicken.xpm"
-#include "pixmaps/cursor-attract.xpm"
-#include "pixmaps/cursor-repel.xpm"
-#include "pixmaps/cursor-push.xpm"
-#include "pixmaps/cursor-roughen.xpm"
-#include "pixmaps/cursor-color.xpm"
+#include "pixmaps/cursor-tweak-thin.xpm"
+#include "pixmaps/cursor-tweak-thicken.xpm"
+#include "pixmaps/cursor-tweak-attract.xpm"
+#include "pixmaps/cursor-tweak-repel.xpm"
+#include "pixmaps/cursor-tweak-push.xpm"
+#include "pixmaps/cursor-tweak-roughen.xpm"
+#include "pixmaps/cursor-tweak-color.xpm"
#include "context-fns.h"
#include "inkscape.h"
#include "splivarot.h"
@@ -92,7 +92,7 @@ const std::string& TweakTool::getPrefsPath() {
const std::string TweakTool::prefsPath = "/tools/tweak";
TweakTool::TweakTool()
- : ToolBase(cursor_push_xpm, 4, 4)
+ : ToolBase(cursor_push_xpm)
, pressure(TC_DEFAULT_PRESSURE)
, dragging(false)
, usepressure(false)
diff --git a/src/ui/tools/zoom-tool.cpp b/src/ui/tools/zoom-tool.cpp
index d40d2e969..8ba0c17b3 100644
--- a/src/ui/tools/zoom-tool.cpp
+++ b/src/ui/tools/zoom-tool.cpp
@@ -36,7 +36,7 @@ const std::string& ZoomTool::getPrefsPath() {
const std::string ZoomTool::prefsPath = "/tools/zoom";
ZoomTool::ZoomTool()
- : ToolBase(cursor_zoom_xpm, 6, 6)
+ : ToolBase(cursor_zoom_xpm)
, grabbed(NULL)
, escaped(false)
{