]> git.sur5r.net Git - glabels/blobdiff - src/view-box.c
Imported Upstream version 3.4.0
[glabels] / src / view-box.c
index a69bfd1cb0a6620c00bb65ac550d66cbb2cbea14..408d68c907539e3dabcd243d14a17e3ccbb60623 100644 (file)
@@ -78,9 +78,9 @@ gl_view_box_get_create_cursor (void)
 /* Object creation handler: button press event.                              */
 /*****************************************************************************/
 void
-gl_view_box_create_button_press_event   (glView *view,
-                                         gdouble x,
-                                         gdouble y)
+gl_view_box_create_button_press_event (glView *view,
+                                       gdouble x,
+                                       gdouble y)
 {
        GObject             *object;
 
@@ -101,19 +101,28 @@ gl_view_box_create_button_press_event   (glView *view,
 /* Object creation handler: motion event.                                    */
 /*****************************************************************************/
 void
-gl_view_box_create_motion_event         (glView *view,
-                                         gdouble x,
-                                         gdouble y)
+gl_view_box_create_motion_event (glView  *view,
+                                 gdouble  x,
+                                 gdouble  y,
+                                 gboolean square)
 {
-        gdouble w, h;
-
-        gl_label_object_set_position (GL_LABEL_OBJECT(view->create_object),
-                                      MIN (x, view->create_x0), MIN (y, view->create_y0),
-                                      FALSE);
-
-        w = MAX (x, view->create_x0) - MIN (x, view->create_x0);
-        h = MAX (y, view->create_y0) - MIN (y, view->create_y0);
-        gl_label_object_set_size (GL_LABEL_OBJECT(view->create_object), w, h, FALSE);
+       gdouble w, h;
+
+       w = ABS (x - view->create_x0);
+       h = ABS (y - view->create_y0);
+       if (square)
+               if (w < h) {
+                       h = w;
+                       y = (y < view->create_y0 ? view->create_y0 - h : view->create_y0 + h);
+               } else {
+                       w = h;
+                       x = (x < view->create_x0 ? view->create_x0 - w : view->create_x0 + w);
+               }
+
+       gl_label_object_set_position (GL_LABEL_OBJECT(view->create_object),
+                                     MIN (x, view->create_x0), MIN (y, view->create_y0),
+                                     FALSE);
+       gl_label_object_set_size (GL_LABEL_OBJECT(view->create_object), w, h, FALSE);
 }
 
 
@@ -121,23 +130,17 @@ gl_view_box_create_motion_event         (glView *view,
 /* Object creation handler: button relesase event.                           */
 /*****************************************************************************/
 void
-gl_view_box_create_button_release_event (glView *view,
-                                         gdouble x,
-                                         gdouble y)
+gl_view_box_create_button_release_event (glView  *view,
+                                         gdouble  x,
+                                         gdouble  y,
+                                         gboolean square)
 {
-        gdouble              w, h;
-
-        if ((view->create_x0 == x) && (view->create_y0 == y)) {
-                x = view->create_x0 + 36.0;
-                y = view->create_y0 + 36.0;
-        }
-        gl_label_object_set_position (GL_LABEL_OBJECT(view->create_object),
-                                      MIN (x, view->create_x0), MIN (y, view->create_y0),
-                                      FALSE);
-
-        w = MAX (x, view->create_x0) - MIN (x, view->create_x0);
-        h = MAX (y, view->create_y0) - MIN (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_box_create_motion_event (view, x, y, square);
 }