text boxes with snap grid broken?
- From: Hans Busch <hans bu gmx net>
- To: dia-list gnome org
- Subject: text boxes with snap grid broken?
- Date: Mon, 10 Feb 2003 08:14:47 +0100 (MET)
It looks like snapGrid is broken for most of the box-like
objects that derive their extent from the text. These
objects snap to the upper left corner leaving most of
the connections off the grid.
Snap to grid is so important, because with an active grid
of about halve to fourth of the visible grid drawing is
ways easier than without.
I looked at it especially for UML-Object. I see three ways
out:
1) align the grid to the center
2) force the object size to a multiple of twice the grid size
3) allow manual resizing of the object
No 1) is a small change. It isn't perfect but e.g. for
uml/object it would remove the biggest pain.
No 2) produces uggly boxes with large grid sizes and the result
depends on the grid settings, which is a user preference.
No 3) gives the user maximum freedom at the price that she
probably always needs to resize the object.
Maybe a combination of 1) and 3) would be optimal, but as I
said it's a design decision. So I would be interested what
others think about it. In case some like to test the modfied
behaviour, a patch for solution 1) is appended (it's based
on dia-0.90).
*** objects/UML-backup/object.c Wed Feb 5 22:37:01 2003
--- objects/UML/object.c Sun Feb 9 09:23:57 2003
***************
*** 227,233 ****
static void
objet_move(Objet *ob, Point *to)
{
! ob->element.corner = *to;
objet_update_data(ob);
}
--- 227,233 ----
static void
objet_move(Objet *ob, Point *to)
{
! ob->element.object.position = *to;
objet_update_data(ob);
}
***************
*** 345,351 ****
}
font = ob->text->font;
! h = elem->corner.y + OBJET_MARGIN_Y;
if (ob->is_multiple) {
h += OBJET_MARGIN_M;
--- 345,351 ----
}
font = ob->text->font;
! h = OBJET_MARGIN_Y;
if (ob->is_multiple) {
h += OBJET_MARGIN_M;
***************
*** 373,392 ****
if (ob->show_attributes) {
h += OBJET_MARGIN_Y + ob->attributes->ascent;
! p2.x = elem->corner.x + OBJET_MARGIN_X;
! p2.y = h;
! text_set_position(ob->attributes, &p2);
!
h += ob->attributes->height*ob->attributes->numlines;
-
w = MAX(w, ob->attributes->max_width);
}
w += 2*OBJET_MARGIN_X;
- p1.x = elem->corner.x + w/2.0;
- text_set_position(ob->text, &p1);
-
ob->ex_pos.x = ob->st_pos.x = p1.x;
--- 373,385 ----
if (ob->show_attributes) {
h += OBJET_MARGIN_Y + ob->attributes->ascent;
! p2.y = h;
h += ob->attributes->height*ob->attributes->numlines;
w = MAX(w, ob->attributes->max_width);
}
w += 2*OBJET_MARGIN_X;
ob->ex_pos.x = ob->st_pos.x = p1.x;
***************
*** 394,401 ****
w += OBJET_MARGIN_M;
}
elem->width = w;
! elem->height = h - elem->corner.y;
/* Update connections: */
ob->connections[0].pos = elem->corner;
--- 387,406 ----
w += OBJET_MARGIN_M;
}
+ elem->corner.x = obj->position.x - w / 2.0;
+ elem->corner.y = obj->position.y - h / 2.0;
elem->width = w;
! elem->height = h;
!
! p1.x = obj->position.x;
! p1.y += elem->corner.y;
! text_set_position(ob->text, &p1);
!
! if (ob->show_attributes) {
! p2.x = elem->corner.x + OBJET_MARGIN_X;
! p2.y += elem->corner.y;
! text_set_position(ob->attributes, &p2);
! }
/* Update connections: */
ob->connections[0].pos = elem->corner;
***************
*** 415,421 ****
ob->connections[7].pos.y = elem->corner.y + elem->height;
element_update_boundingbox(elem);
- obj->position = elem->corner;
element_update_handles(elem);
}
--- 420,425 ----
***************
*** 440,446 ****
obj->ops = &objet_ops;
! elem->corner = *startpoint;
/* choose default font name for your locale. see also font_data
structure
in lib/font.c. */
--- 444,450 ----
obj->ops = &objet_ops;
! elem->object.position = *startpoint;
/* choose default font name for your locale. see also font_data
structure
in lib/font.c. */
--
+++ GMX - Mail, Messaging & more http://www.gmx.net +++
NEU: Mit GMX ins Internet. Rund um die Uhr für 1 ct/ Min. surfen!
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]