X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fview-line.c;fp=src%2Fview-line.c;h=e616350abb62d40332a0fbf9eea3954667df4d8d;hb=38d44627bd551b2f3855ee44d2d1e3f03f30e2ce;hp=9da709e1ba99e3b4a64047b4c5c3be004b17c6a0;hpb=80f8b7f229a635ac0bdcbe81cc260ab37a55d32e;p=glabels diff --git a/src/view-line.c b/src/view-line.c index 9da709e1..e616350a 100644 --- a/src/view-line.c +++ b/src/view-line.c @@ -78,9 +78,9 @@ gl_view_line_get_create_cursor (void) /* Object creation handler: button press event. */ /*****************************************************************************/ void -gl_view_line_create_button_press_event (glView *view, - gdouble x, - gdouble y) +gl_view_line_create_button_press_event (glView *view, + gdouble x, + gdouble y) { GObject *object; @@ -101,15 +101,30 @@ gl_view_line_create_button_press_event (glView *view, /* Object creation handler: motion event. */ /*****************************************************************************/ void -gl_view_line_create_motion_event (glView *view, - gdouble x, - gdouble y) +gl_view_line_create_motion_event (glView *view, + gdouble x, + gdouble y, + gboolean fixed_angle) { - gdouble w, h; - - w = x - view->create_x0; - h = y - view->create_y0; - gl_label_object_set_size (GL_LABEL_OBJECT(view->create_object), w, h, FALSE); + gdouble w, h; + + w = x - view->create_x0; + h = y - view->create_y0; + + if (fixed_angle && /* step by 45 degree */ + h != 0) { /* avoid divide by 0 */ + if (ABS (w) / ABS (h) < 0.414213562) /* precalculated tangent of 22,5 degree */ + w = 0; /* horizontal line */ + else if (ABS (w) / ABS (h) > 2.414213562) /* precalculated tangent of 67,5 degree */ + h = 0; /* vertical line */ + else /* diagonal line */ + if (w < h) + h = SIGN_AND_VALUE(h, w); + else + w = SIGN_AND_VALUE(w, h); + } + + gl_label_object_set_size (GL_LABEL_OBJECT(view->create_object), w, h, FALSE); } @@ -117,19 +132,17 @@ gl_view_line_create_motion_event (glView *view, /* Object creation handler: button relesase event. */ /*****************************************************************************/ void -gl_view_line_create_button_release_event (glView *view, - gdouble x, - gdouble y) +gl_view_line_create_button_release_event (glView *view, + gdouble x, + gdouble y, + gboolean fixed_angle) { - gdouble w, h; - - if ((view->create_x0 == x) && (view->create_y0 == y)) { - x = view->create_x0 + 36.0; - y = view->create_y0 + 36.0; - } - w = x - view->create_x0; - h = y - view->create_y0; - gl_label_object_set_size (GL_LABEL_OBJECT(view->create_object), w, h, FALSE); + if ((view->create_x0 == x) && (view->create_y0 == y)) { + x = view->create_x0 + 36.0; + y = view->create_y0 + 36.0; + } + + gl_view_line_create_motion_event (view, x, y, fixed_angle); }