- 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);