/* 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;
/* 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);
}
/* 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);
}