summaryrefslogtreecommitdiffstats
path: root/src/desktop-events.cpp
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2007-12-23 23:46:26 +0000
committerjohanengelen <johanengelen@users.sourceforge.net>2007-12-23 23:46:26 +0000
commit6c751d1e0c7af729a7cc9b721be5c5e50325cacd (patch)
treef55be7f4ad7912d773118bdf7180fc6ff35f346e /src/desktop-events.cpp
parentnoop: remove unused variable (diff)
downloadinkscape-6c751d1e0c7af729a7cc9b721be5c5e50325cacd.tar.gz
inkscape-6c751d1e0c7af729a7cc9b721be5c5e50325cacd.zip
when dragging from rulers close to the edges, one gets 45 degree angled guidelines.
(bzr r4295)
Diffstat (limited to 'src/desktop-events.cpp')
-rw-r--r--src/desktop-events.cpp32
1 files changed, 28 insertions, 4 deletions
diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp
index eeb088160..24d94b5a3 100644
--- a/src/desktop-events.cpp
+++ b/src/desktop-events.cpp
@@ -53,8 +53,11 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
gdk_window_get_pointer(GTK_WIDGET(dtw->canvas)->window, &wx, &wy, NULL);
NR::Point const event_win(wx, wy);
+ gint width, height;
+ gdk_window_get_geometry(GTK_WIDGET(dtw->canvas)->window, NULL /*x*/, NULL /*y*/, &width, &height, NULL/*depth*/);
+
switch (event->type) {
- case GDK_BUTTON_PRESS:
+ case GDK_BUTTON_PRESS:
if (event->button.button == 1) {
dragging = true;
NR::Point const event_w(sp_canvas_window_to_world(dtw->canvas, event_win));
@@ -64,7 +67,28 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
sp_repr_set_boolean(repr, "showguides", TRUE);
sp_repr_set_boolean(repr, "inkscape:guide-bbox", TRUE);
- normal = horiz ? Geom::Point(0.,1.) : Geom::Point(1.,0.);
+ if (horiz) {
+ if (wx < 50) {
+ normal = Geom::Point(-1.,1.);
+ normal.normalize();
+ } else if (wx > width - 50) {
+ normal = Geom::Point(1.,1.);
+ normal.normalize();
+ } else {
+ normal = Geom::Point(0.,1.);
+ }
+ } else {
+ if (wy < 50) {
+ normal = Geom::Point(-1.,1.);
+ normal.normalize();
+ } else if (wy > height - 50) {
+ normal = Geom::Point(1.,1.);
+ normal.normalize();
+ } else {
+ normal = Geom::Point(1.,0.);
+ }
+ }
+
guide = sp_guideline_new(desktop->guides, event_dt.to_2geom(), normal);
sp_guideline_set_color(SP_GUIDELINE(guide), desktop->namedview->guidehicolor);
gdk_pointer_grab(widget->window, FALSE,
@@ -73,7 +97,7 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
event->button.time);
}
break;
- case GDK_MOTION_NOTIFY:
+ case GDK_MOTION_NOTIFY:
if (dragging) {
NR::Point const event_w(sp_canvas_window_to_world(dtw->canvas, event_win));
NR::Point event_dt(desktop->w2d(event_w));
@@ -86,7 +110,7 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
desktop->setPosition (event_dt);
}
break;
- case GDK_BUTTON_RELEASE:
+ case GDK_BUTTON_RELEASE:
if (dragging && event->button.button == 1) {
gdk_pointer_ungrab(event->button.time);
NR::Point const event_w(sp_canvas_window_to_world(dtw->canvas, event_win));