aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-day-view-time-item.c
diff options
context:
space:
mode:
authorHans Petter Jansson <hpj@ximian.com>2003-01-26 09:42:05 +0800
committerHans Petter <hansp@src.gnome.org>2003-01-26 09:42:05 +0800
commit3cf26e43e21a5c9c551332a1c687a157fbcd3e3c (patch)
treeebb4ed56342905ee2bc42e04622d6e4fd2d32f93 /calendar/gui/e-day-view-time-item.c
parentcc35ce98a7a85b09dca062f7a781d7718cd17db2 (diff)
downloadgsoc2013-evolution-3cf26e43e21a5c9c551332a1c687a157fbcd3e3c.tar
gsoc2013-evolution-3cf26e43e21a5c9c551332a1c687a157fbcd3e3c.tar.gz
gsoc2013-evolution-3cf26e43e21a5c9c551332a1c687a157fbcd3e3c.tar.bz2
gsoc2013-evolution-3cf26e43e21a5c9c551332a1c687a157fbcd3e3c.tar.lz
gsoc2013-evolution-3cf26e43e21a5c9c551332a1c687a157fbcd3e3c.tar.xz
gsoc2013-evolution-3cf26e43e21a5c9c551332a1c687a157fbcd3e3c.tar.zst
gsoc2013-evolution-3cf26e43e21a5c9c551332a1c687a157fbcd3e3c.zip
Mainly making all views use PangoLayouts for text. When drawing a
2003-01-25 Hans Petter Jansson <hpj@ximian.com> Mainly making all views use PangoLayouts for text. When drawing a PangoLayout, the draw offset is the top left corner of the layout, not the text's baseline. Keep this in mind when viewing the changes. I'll be brief about the exact changes, since they speak better for themselves. * gui/e-day-view-time-item.c (e_day_view_time_item_get_column_width): Use Pango. (e_day_view_time_item_draw): Use Pango. * gui/e-day-view-top-item.c (e_day_view_top_item_draw): Use Pango. (e_day_view_top_item_draw_long_event): Add some FIXME text so we can see when this is being used. Is it in use at all? * gui/e-day-view.c: No longer specify an explicit X font string for the large font. Use the main font, and change the point size. (e_day_view_init): Use Pango. (e_day_view_style_set): Use Pango. Comment out the gdk_font setting for the drag text items for now. * gui/e-day-view.h: Use Pango. * gui/e-week-view-event-item.c (e_week_view_draw_time): Use Pango. * gui/e-week-view-main-item.c (e_week_view_main_item_draw_day): Use Pango. * gui/e-week-view-titles-item.c (e_week_view_titles_item_draw): Use Pango. * gui/e-week-view.c: No longer specify an explicit X font string for the small font. Use the main font, and change the point size. (e_week_view_init): Use Pango. (e_week_view_destroy): Use Pango. (get_string_width): Implemented for convenience. (get_digit_width): Implemented for convenience. (e_week_view_style_set): Use Pango. (e_week_view_recalc_cell_sizes): Use Pango. (e_week_view_get_time_string_width): Use Pango. * gui/e-week-view.h: Use Pango. Following are some random UTF-8 fixes and a crash fix. * gui/itip-utils.c (comp_description): Use g_locale_to_utf8 (). * gui/dialogs/comp-editor.c (make_title_from_comp): Return a UTF-8 string. * gui/dialogs/alarm-page.c (alarm_page_set_summary): Pass UTF-8 directly to GTK. * gui/dialogs/delete-comp.c (delete_component_dialog): Ditto. * gui/dialogs/meeting-page.c (meeting_page_fill_widgets): Ditto. (meeting_page_construct): Ditto. * gui/dialogs/recurrence-page.c (recurrence_page_set_summary): Ditto. * gui/dialogs/event-editor.c (event_editor_finalize): Fix crash caused by gtk_object_destroy()-ing a non-GtkObject. svn path=/trunk/; revision=19628
Diffstat (limited to 'calendar/gui/e-day-view-time-item.c')
-rw-r--r--calendar/gui/e-day-view-time-item.c71
1 files changed, 52 insertions, 19 deletions
diff --git a/calendar/gui/e-day-view-time-item.c b/calendar/gui/e-day-view-time-item.c
index 276c6062e4..b6e902e318 100644
--- a/calendar/gui/e-day-view-time-item.c
+++ b/calendar/gui/e-day-view-time-item.c
@@ -180,10 +180,12 @@ e_day_view_time_item_get_column_width (EDayViewTimeItem *dvtmitem)
{
EDayView *day_view;
GtkStyle *style;
- GdkFont *small_font, *large_font;
+ GdkFont *small_font;
+ PangoFontMetrics *large_font_metrics;
gint digit, large_digit_width, max_large_digit_width = 0;
gint max_suffix_width, max_minute_or_suffix_width;
gint column_width_default, column_width_60_min_rows;
+ PangoContext *context;
day_view = dvtmitem->day_view;
g_return_val_if_fail (day_view != NULL, 0);
@@ -192,11 +194,24 @@ e_day_view_time_item_get_column_width (EDayViewTimeItem *dvtmitem)
g_return_val_if_fail (style != NULL, 0);
small_font = gtk_style_get_font (style);
g_return_val_if_fail (small_font != NULL, 0);
- large_font = day_view->large_font;
- g_return_val_if_fail (large_font != NULL, 0);
+ context = gtk_widget_get_pango_context (GTK_WIDGET (day_view));
+
+ /* Find the maximum width a digit can have. FIXME: We could use pango's
+ * approximation function, but I worry it won't be precise enough. Also
+ * it needs a language tag that I don't know where to get. */
for (digit = '0'; digit <= '9'; digit++) {
- large_digit_width = gdk_char_width (large_font, digit);
+ PangoLayout *layout;
+ gchar digit_str [2];
+
+ digit_str [0] = digit;
+ digit_str [1] = '\0';
+
+ layout = gtk_widget_create_pango_layout (GTK_WIDGET (day_view), digit_str);
+ pango_layout_set_font_description (layout, day_view->large_font_desc);
+ pango_layout_get_pixel_size (layout, &large_digit_width, NULL);
+ g_object_unref (layout);
+
max_large_digit_width = MAX (max_large_digit_width,
large_digit_width);
}
@@ -245,7 +260,7 @@ e_day_view_time_item_draw (GnomeCanvasItem *canvas_item,
EDayView *day_view;
EDayViewTimeItem *dvtmitem;
GtkStyle *style;
- GdkFont *small_font, *large_font;
+ GdkFont *small_font;
GdkGC *fg_gc, *dark_gc;
gchar buffer[64], *suffix;
gint hour, display_hour, minute, row;
@@ -254,6 +269,10 @@ e_day_view_time_item_draw (GnomeCanvasItem *canvas_item,
gint large_hour_x2, minute_x2;
gint hour_width, minute_width, suffix_width;
gint max_suffix_width, max_minute_or_suffix_width;
+ PangoLayout *layout;
+ PangoContext *context;
+ PangoFontDescription *small_font_desc;
+ PangoFontMetrics *large_font_metrics;
dvtmitem = E_DAY_VIEW_TIME_ITEM (canvas_item);
day_view = dvtmitem->day_view;
@@ -261,7 +280,11 @@ e_day_view_time_item_draw (GnomeCanvasItem *canvas_item,
style = gtk_widget_get_style (GTK_WIDGET (day_view));
small_font = gtk_style_get_font (style);
- large_font = day_view->large_font;
+ small_font_desc = style->font_desc;
+
+ context = gtk_widget_get_pango_context (GTK_WIDGET (day_view));
+ large_font_metrics = pango_context_get_metrics (context, day_view->large_font_desc, NULL);
+
fg_gc = style->fg_gc[GTK_STATE_NORMAL];
dark_gc = style->dark_gc[GTK_STATE_NORMAL];
@@ -302,16 +325,18 @@ e_day_view_time_item_draw (GnomeCanvasItem *canvas_item,
minute = day_view->first_minute_shown;
/* The offset of the large hour string from the top of the row. */
- large_hour_y_offset = large_font->ascent + E_DVTMI_LARGE_HOUR_Y_PAD;
+ large_hour_y_offset = E_DVTMI_LARGE_HOUR_Y_PAD;
/* The offset of the small time/minute string from top of row. */
- small_font_y_offset = small_font->ascent + E_DVTMI_SMALL_FONT_Y_PAD;
+ small_font_y_offset = E_DVTMI_SMALL_FONT_Y_PAD;
/* Calculate the minimum y position of the first row we need to draw.
This is normally one row height above the 0 position, but if we
are using the large font we may have to go back a bit further. */
start_y = 0 - MAX (day_view->row_height,
- large_hour_y_offset + large_font->descent);
+ (pango_font_metrics_get_ascent (large_font_metrics) +
+ pango_font_metrics_get_descent (large_font_metrics)) / PANGO_SCALE +
+ E_DVTMI_LARGE_HOUR_Y_PAD);
/* Step through each row, drawing the times and the horizontal lines
between them. */
@@ -349,10 +374,13 @@ e_day_view_time_item_draw (GnomeCanvasItem *canvas_item,
display_hour, suffix);
}
minute_width = gdk_string_width (small_font, buffer);
- gdk_draw_string (drawable, small_font, fg_gc,
+
+ layout = gtk_widget_create_pango_layout (GTK_WIDGET (day_view), buffer);
+ gdk_draw_layout (drawable, fg_gc,
minute_x2 - minute_width,
row_y + small_font_y_offset,
- buffer);
+ layout);
+ g_object_unref (layout);
} else {
/* 5/10/15/30 minute intervals. */
@@ -366,12 +394,15 @@ e_day_view_time_item_draw (GnomeCanvasItem *canvas_item,
g_snprintf (buffer, sizeof (buffer), "%i",
display_hour);
- hour_width = gdk_string_width (large_font,
- buffer);
- gdk_draw_string (drawable, large_font, fg_gc,
+
+ layout = gtk_widget_create_pango_layout (GTK_WIDGET (day_view), buffer);
+ pango_layout_set_font_description (layout, day_view->large_font_desc);
+ pango_layout_get_pixel_size (layout, &hour_width, NULL);
+ gdk_draw_layout (drawable, fg_gc,
large_hour_x2 - hour_width,
row_y + large_hour_y_offset,
- buffer);
+ layout);
+ g_object_unref (layout);
} else {
/* Within the hour - draw a short line before
the time. */
@@ -393,12 +424,14 @@ e_day_view_time_item_draw (GnomeCanvasItem *canvas_item,
g_snprintf (buffer, sizeof (buffer),
"%02i", minute);
}
- minute_width = gdk_string_width (small_font,
- buffer);
- gdk_draw_string (drawable, small_font, fg_gc,
+
+ layout = gtk_widget_create_pango_layout (GTK_WIDGET (day_view), buffer);
+ pango_layout_get_pixel_size (layout, &minute_width, NULL);
+ gdk_draw_layout (drawable, fg_gc,
minute_x2 - minute_width,
row_y + small_font_y_offset,
- buffer);
+ layout);
+ g_object_unref (layout);
}
}