summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Hertzfeld <andy@src.gnome.org>2001-04-11 08:20:27 +0000
committerAndy Hertzfeld <andy@src.gnome.org>2001-04-11 08:20:27 +0000
commitb2589ec5830300981ab6bc07b8e6e585970d301b (patch)
tree0ae486938198277ea01fec3393af1b1f865c28c0
parentd815e27c2b3fb9e74bac1db6aa9d15ec171c0405 (diff)
downloadnautilus-post-1_0_10.tar.gz
improved sizing of the note item in the aa mode.post-1_0_10
* libnautilus-extensions/nautilus-canvas-note-item.c: (nautilus_canvas_note_item_set_note_text): improved sizing of the note item in the aa mode. * libnautilus-extensions/nautilus-icon-container.c: (hit_test_item): fixed bug by mapping from window to world coordinates
-rw-r--r--ChangeLog10
-rw-r--r--libnautilus-extensions/nautilus-canvas-note-item.c29
-rw-r--r--libnautilus-extensions/nautilus-icon-container.c5
-rw-r--r--libnautilus-private/nautilus-canvas-note-item.c29
-rw-r--r--libnautilus-private/nautilus-icon-container.c5
5 files changed, 52 insertions, 26 deletions
diff --git a/ChangeLog b/ChangeLog
index e1bbd3c7a..2bbc38133 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2001-04-11 Andy Hertzfeld <andy@eazel.com>
+
+ * libnautilus-extensions/nautilus-canvas-note-item.c:
+ (nautilus_canvas_note_item_set_note_text):
+ improved sizing of the note item in the aa mode.
+
+ * libnautilus-extensions/nautilus-icon-container.c:
+ (hit_test_item):
+ fixed bug by mapping from window to world coordinates
+
2001-04-10 Andy Hertzfeld <andy@eazel.com>
added a way for custom actions to take place when the user clicks
diff --git a/libnautilus-extensions/nautilus-canvas-note-item.c b/libnautilus-extensions/nautilus-canvas-note-item.c
index 2fb752696..6f3607090 100644
--- a/libnautilus-extensions/nautilus-canvas-note-item.c
+++ b/libnautilus-extensions/nautilus-canvas-note-item.c
@@ -68,7 +68,7 @@ enum {
ARG_WIDTH_UNITS
};
-#define ANNOTATION_WIDTH 240
+#define ANNOTATION_MAX_WIDTH 240
#define DEFAULT_FONT_SIZE 12
#define LINE_BREAK_CHARACTERS " -_,;.?/&"
@@ -305,11 +305,13 @@ static void
nautilus_canvas_note_item_set_note_text (NautilusCanvasNoteItem *note_item, const char *new_text)
{
char *display_text;
- int total_width, height, width, font_height;
+ int text_width, height, width;
+ int font_height;
GnomeCanvasItem *item;
EelScalableFont *scalable_font;
GdkFont *font;
EelDimensions dimensions;
+ EelSmoothTextLayout *smooth_text_layout;
item = GNOME_CANVAS_ITEM (note_item);
@@ -326,23 +328,28 @@ nautilus_canvas_note_item_set_note_text (NautilusCanvasNoteItem *note_item, cons
if (item->canvas->aa) {
scalable_font = eel_scalable_font_get_default_font ();
- dimensions = eel_scalable_font_measure_text (scalable_font,
- DEFAULT_FONT_SIZE,
- display_text,
- strlen (display_text));
- total_width = dimensions.width + 8;
- height = dimensions.height * (1 + (total_width / ANNOTATION_WIDTH));
+
+
+ smooth_text_layout = eel_smooth_text_layout_new (
+ display_text, strlen(display_text),
+ scalable_font, DEFAULT_FONT_SIZE, TRUE);
+
+ dimensions = eel_smooth_text_layout_get_dimensions (smooth_text_layout);
+ text_width = dimensions.width + 8;
+ height = dimensions.height + 4;
height += ARROW_HEIGHT;
gtk_object_unref (GTK_OBJECT (scalable_font));
+ gtk_object_destroy (GTK_OBJECT (smooth_text_layout));
+
} else {
font = nautilus_font_factory_get_font_from_preferences (DEFAULT_FONT_SIZE);
- total_width = 8 + gdk_text_measure (font, display_text, strlen (display_text));
+ text_width = 8 + gdk_text_measure (font, display_text, strlen (display_text));
font_height = gdk_text_height (font, display_text, strlen (display_text));
- height = font_height * (1 + (total_width / ANNOTATION_WIDTH));
+ height = font_height * (1 + (text_width / ANNOTATION_MAX_WIDTH));
gdk_font_unref (font);
}
- width = (total_width < ANNOTATION_WIDTH) ? total_width : ANNOTATION_WIDTH;
+ width = (text_width < ANNOTATION_MAX_WIDTH) ? text_width : ANNOTATION_MAX_WIDTH;
/* add some vertical slop for descenders and incorporate scale factor */
note_item->x2 = floor (note_item->x1 + (width / item->canvas->pixels_per_unit) + .5);
diff --git a/libnautilus-extensions/nautilus-icon-container.c b/libnautilus-extensions/nautilus-icon-container.c
index ec98db60d..e41f03522 100644
--- a/libnautilus-extensions/nautilus-icon-container.c
+++ b/libnautilus-extensions/nautilus-icon-container.c
@@ -2548,10 +2548,11 @@ hit_test_item (NautilusIconCanvasItem *icon_item, GdkEventButton *event)
HitType hit_type;
int emblem_index;
- world_rect.x0 = event->x;
- world_rect.y0 = event->y;
+ gnome_canvas_window_to_world (GNOME_CANVAS_ITEM (icon_item)->canvas, event->x, event->y,
+ &world_rect.x0, &world_rect.y0);
world_rect.x1 = world_rect.x0 + 1.0;
world_rect.y1 = world_rect.y0 + 1.0;
+
eel_gnome_canvas_world_to_canvas_rectangle
(GNOME_CANVAS_ITEM (icon_item)->canvas, &world_rect, &canvas_rect);
diff --git a/libnautilus-private/nautilus-canvas-note-item.c b/libnautilus-private/nautilus-canvas-note-item.c
index 2fb752696..6f3607090 100644
--- a/libnautilus-private/nautilus-canvas-note-item.c
+++ b/libnautilus-private/nautilus-canvas-note-item.c
@@ -68,7 +68,7 @@ enum {
ARG_WIDTH_UNITS
};
-#define ANNOTATION_WIDTH 240
+#define ANNOTATION_MAX_WIDTH 240
#define DEFAULT_FONT_SIZE 12
#define LINE_BREAK_CHARACTERS " -_,;.?/&"
@@ -305,11 +305,13 @@ static void
nautilus_canvas_note_item_set_note_text (NautilusCanvasNoteItem *note_item, const char *new_text)
{
char *display_text;
- int total_width, height, width, font_height;
+ int text_width, height, width;
+ int font_height;
GnomeCanvasItem *item;
EelScalableFont *scalable_font;
GdkFont *font;
EelDimensions dimensions;
+ EelSmoothTextLayout *smooth_text_layout;
item = GNOME_CANVAS_ITEM (note_item);
@@ -326,23 +328,28 @@ nautilus_canvas_note_item_set_note_text (NautilusCanvasNoteItem *note_item, cons
if (item->canvas->aa) {
scalable_font = eel_scalable_font_get_default_font ();
- dimensions = eel_scalable_font_measure_text (scalable_font,
- DEFAULT_FONT_SIZE,
- display_text,
- strlen (display_text));
- total_width = dimensions.width + 8;
- height = dimensions.height * (1 + (total_width / ANNOTATION_WIDTH));
+
+
+ smooth_text_layout = eel_smooth_text_layout_new (
+ display_text, strlen(display_text),
+ scalable_font, DEFAULT_FONT_SIZE, TRUE);
+
+ dimensions = eel_smooth_text_layout_get_dimensions (smooth_text_layout);
+ text_width = dimensions.width + 8;
+ height = dimensions.height + 4;
height += ARROW_HEIGHT;
gtk_object_unref (GTK_OBJECT (scalable_font));
+ gtk_object_destroy (GTK_OBJECT (smooth_text_layout));
+
} else {
font = nautilus_font_factory_get_font_from_preferences (DEFAULT_FONT_SIZE);
- total_width = 8 + gdk_text_measure (font, display_text, strlen (display_text));
+ text_width = 8 + gdk_text_measure (font, display_text, strlen (display_text));
font_height = gdk_text_height (font, display_text, strlen (display_text));
- height = font_height * (1 + (total_width / ANNOTATION_WIDTH));
+ height = font_height * (1 + (text_width / ANNOTATION_MAX_WIDTH));
gdk_font_unref (font);
}
- width = (total_width < ANNOTATION_WIDTH) ? total_width : ANNOTATION_WIDTH;
+ width = (text_width < ANNOTATION_MAX_WIDTH) ? text_width : ANNOTATION_MAX_WIDTH;
/* add some vertical slop for descenders and incorporate scale factor */
note_item->x2 = floor (note_item->x1 + (width / item->canvas->pixels_per_unit) + .5);
diff --git a/libnautilus-private/nautilus-icon-container.c b/libnautilus-private/nautilus-icon-container.c
index ec98db60d..e41f03522 100644
--- a/libnautilus-private/nautilus-icon-container.c
+++ b/libnautilus-private/nautilus-icon-container.c
@@ -2548,10 +2548,11 @@ hit_test_item (NautilusIconCanvasItem *icon_item, GdkEventButton *event)
HitType hit_type;
int emblem_index;
- world_rect.x0 = event->x;
- world_rect.y0 = event->y;
+ gnome_canvas_window_to_world (GNOME_CANVAS_ITEM (icon_item)->canvas, event->x, event->y,
+ &world_rect.x0, &world_rect.y0);
world_rect.x1 = world_rect.x0 + 1.0;
world_rect.y1 = world_rect.y0 + 1.0;
+
eel_gnome_canvas_world_to_canvas_rectangle
(GNOME_CANVAS_ITEM (icon_item)->canvas, &world_rect, &canvas_rect);