[evolution] M!69 - Use tabular numbers for any widgets that stack numbers
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] M!69 - Use tabular numbers for any widgets that stack numbers
- Date: Fri, 6 Nov 2020 08:06:38 +0000 (UTC)
commit 3ae8f2d79625c31143f1c734b4ebc36f75934bdf
Author: Ryan Hendrickson <ryan hendrickson alum mit edu>
Date: Fri Nov 6 01:05:40 2020 -0500
M!69 - Use tabular numbers for any widgets that stack numbers
Widgets covered in this commit are:
* ECalendarItem
* ECellDateEdit
* ECellDateEditText
* ECellPercent
* ECellSize
* EDateEdit (the time picker part)
* EDayView (the times on the side)
* ETaskTable (the combo popup for the percent field)
* EToDoPane (the date headers)
* EWeekView/EMonthView (the day numbers)
Closes https://gitlab.gnome.org/GNOME/evolution/-/merge_requests/69
src/calendar/gui/e-cell-date-edit-text.c | 1 +
src/calendar/gui/e-day-view-time-item.c | 19 +++++++++++++++++++
src/calendar/gui/e-task-table.c | 1 +
src/calendar/gui/e-to-do-pane.c | 2 +-
src/calendar/gui/e-week-view-main-item.c | 11 +++++++++--
src/calendar/gui/e-week-view.c | 7 +++++++
src/e-util/e-calendar-item.c | 16 ++++++++++++++++
src/e-util/e-cell-combo.c | 17 +++++++++++++++--
src/e-util/e-cell-combo.h | 4 ++++
src/e-util/e-cell-date-edit.c | 12 +++++++++++-
src/e-util/e-cell-percent.c | 1 +
src/e-util/e-cell-size.c | 1 +
src/e-util/e-dateedit.c | 7 +++++++
13 files changed, 93 insertions(+), 6 deletions(-)
---
diff --git a/src/calendar/gui/e-cell-date-edit-text.c b/src/calendar/gui/e-cell-date-edit-text.c
index fdc6cb2990..9fa0446545 100644
--- a/src/calendar/gui/e-cell-date-edit-text.c
+++ b/src/calendar/gui/e-cell-date-edit-text.c
@@ -289,6 +289,7 @@ e_cell_date_edit_text_init (ECellDateEditText *ecd)
ecd->priv->timezone = e_cal_util_copy_timezone (i_cal_timezone_get_utc_timezone ());
ecd->priv->use_24_hour_format = TRUE;
+ g_object_set (ecd, "use-tabular-numbers", TRUE, NULL);
}
/**
diff --git a/src/calendar/gui/e-day-view-time-item.c b/src/calendar/gui/e-day-view-time-item.c
index 60e2d2ec68..f7ecded80b 100644
--- a/src/calendar/gui/e-day-view-time-item.c
+++ b/src/calendar/gui/e-day-view-time-item.c
@@ -276,6 +276,8 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
gint hour_width, minute_width, suffix_width;
gint max_suffix_width, max_minute_or_suffix_width;
PangoLayout *layout;
+ PangoAttrList *tnum;
+ PangoAttribute *attr;
PangoContext *context;
PangoFontMetrics *large_font_metrics, *small_font_metrics;
GtkWidget *widget;
@@ -302,6 +304,10 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
e_utils_get_theme_color (widget, "theme_fg_color,theme_text_color", E_UTILS_DEFAULT_THEME_FG_COLOR,
&fg);
e_utils_get_theme_color (widget, "theme_base_color", E_UTILS_DEFAULT_THEME_BASE_COLOR, &dark);
+ tnum = pango_attr_list_new ();
+ attr = pango_attr_font_features_new ("tnum=1");
+ pango_attr_list_insert_before (tnum, attr);
+
/* The start and end of the long horizontal line between hours. */
long_line_x1 =
(use_zone ? 0 : E_DVTMI_TIME_GRID_X_PAD) - x + x_offset;
@@ -520,6 +526,7 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
else
gdk_cairo_set_source_rgba (cr, &fg);
layout = gtk_widget_create_pango_layout (GTK_WIDGET (day_view), NULL);
+ pango_layout_set_attributes (layout, tnum);
pango_layout_set_text (layout, buffer, -1);
pango_layout_get_pixel_size (layout, &minute_width, NULL);
cairo_translate (
@@ -561,6 +568,7 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
else
gdk_cairo_set_source_rgba (cr, &fg);
layout = gtk_widget_create_pango_layout (GTK_WIDGET (day_view), NULL);
+ pango_layout_set_attributes (layout, tnum);
pango_layout_set_text (layout, buffer, -1);
pango_layout_set_font_description (
layout, day_view->large_font_desc);
@@ -609,6 +617,7 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
else
gdk_cairo_set_source_rgba (cr, &fg);
layout = gtk_widget_create_pango_layout (GTK_WIDGET (day_view), NULL);
+ pango_layout_set_attributes (layout, tnum);
pango_layout_set_text (layout, buffer, -1);
pango_layout_set_font_description (
layout, day_view->small_font_desc);
@@ -630,6 +639,7 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
time_divisions);
}
+ pango_attr_list_unref (tnum);
pango_font_metrics_unref (large_font_metrics);
pango_font_metrics_unref (small_font_metrics);
@@ -1069,6 +1079,8 @@ gint
e_day_view_time_item_get_column_width (EDayViewTimeItem *time_item)
{
EDayView *day_view;
+ PangoAttrList *tnum;
+ PangoAttribute *attr;
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;
@@ -1076,6 +1088,10 @@ e_day_view_time_item_get_column_width (EDayViewTimeItem *time_item)
day_view = e_day_view_time_item_get_day_view (time_item);
g_return_val_if_fail (day_view != NULL, 0);
+ tnum = pango_attr_list_new ();
+ attr = pango_attr_font_features_new ("tnum=1");
+ pango_attr_list_insert_before (tnum, attr);
+
/* 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. */
@@ -1087,6 +1103,7 @@ e_day_view_time_item_get_column_width (EDayViewTimeItem *time_item)
digit_str[1] = '\0';
layout = gtk_widget_create_pango_layout (GTK_WIDGET (day_view), digit_str);
+ pango_layout_set_attributes (layout, tnum);
pango_layout_set_font_description (layout, day_view->large_font_desc);
pango_layout_get_pixel_size (layout, &large_digit_width, NULL);
@@ -1097,6 +1114,8 @@ e_day_view_time_item_get_column_width (EDayViewTimeItem *time_item)
large_digit_width);
}
+ pango_attr_list_unref (tnum);
+
/* Calculate the width of each time column, using the maximum of the
* default format with large hour numbers, and the 60-min divisions
* format which uses small text. */
diff --git a/src/calendar/gui/e-task-table.c b/src/calendar/gui/e-task-table.c
index a6fda0bd91..84786d09c5 100644
--- a/src/calendar/gui/e-task-table.c
+++ b/src/calendar/gui/e-task-table.c
@@ -483,6 +483,7 @@ task_table_constructed (GObject *object)
NULL);
popup_cell = e_cell_combo_new ();
+ e_cell_combo_use_tabular_numbers (E_CELL_COMBO (popup_cell));
e_cell_popup_set_child (E_CELL_POPUP (popup_cell), cell);
g_object_unref (cell);
diff --git a/src/calendar/gui/e-to-do-pane.c b/src/calendar/gui/e-to-do-pane.c
index 6eee939471..6e956d0050 100644
--- a/src/calendar/gui/e-to-do-pane.c
+++ b/src/calendar/gui/e-to-do-pane.c
@@ -1590,7 +1590,7 @@ etdp_check_time_changed (EToDoPane *to_do_pane,
gchar *date;
date = e_datetime_format_format_tm ("calendar", "table",
DTFormatKindDate, &tm);
- markup = g_markup_printf_escaped ("<b>%s</b>", date);
+ markup = g_markup_printf_escaped ("<span
font_features='tnum=1'><b>%s</b></span>", date);
g_free (date);
}
diff --git a/src/calendar/gui/e-week-view-main-item.c b/src/calendar/gui/e-week-view-main-item.c
index 5b2fd9d7d6..02355960e9 100644
--- a/src/calendar/gui/e-week-view-main-item.c
+++ b/src/calendar/gui/e-week-view-main-item.c
@@ -69,6 +69,8 @@ week_view_main_item_draw_day (EWeekViewMainItem *main_item,
PangoContext *pango_context;
PangoFontMetrics *font_metrics;
PangoLayout *layout;
+ PangoAttrList *tnum;
+ PangoAttribute *attr;
gboolean today = FALSE;
gboolean multi_week_view;
@@ -245,18 +247,23 @@ week_view_main_item_draw_day (EWeekViewMainItem *main_item,
cr, &week_view->colors[E_WEEK_VIEW_COLOR_DATES]);
}
+ layout = gtk_widget_create_pango_layout (GTK_WIDGET (week_view), NULL);
+ tnum = pango_attr_list_new ();
+ attr = pango_attr_font_features_new ("tnum=1");
+ pango_attr_list_insert_before (tnum, attr);
+ pango_layout_set_attributes (layout, tnum);
+ pango_attr_list_unref (tnum);
+
if (today) {
g_date_strftime (
buffer, sizeof (buffer),
format_string ? format_string : "<b>%d</b>", date);
- layout = gtk_widget_create_pango_layout (GTK_WIDGET (week_view), NULL);
pango_layout_set_text (layout, buffer, -1);
pango_layout_set_markup (layout, buffer, strlen (buffer));
} else {
g_date_strftime (
buffer, sizeof (buffer),
format_string ? format_string : "%d", date);
- layout = gtk_widget_create_pango_layout (GTK_WIDGET (week_view), NULL);
pango_layout_set_text (layout, buffer, -1);
}
diff --git a/src/calendar/gui/e-week-view.c b/src/calendar/gui/e-week-view.c
index a31f0a982d..17424e2c19 100644
--- a/src/calendar/gui/e-week-view.c
+++ b/src/calendar/gui/e-week-view.c
@@ -967,6 +967,8 @@ week_view_update_style_settings (EWeekView *week_view)
PangoContext *pango_context;
PangoFontMetrics *font_metrics;
PangoLayout *layout;
+ PangoAttrList *tnum;
+ PangoAttribute *attr;
EWeekViewEventSpan *span;
e_week_view_set_colors (week_view);
@@ -1003,6 +1005,11 @@ week_view_update_style_settings (EWeekView *week_view)
pango_context, font_desc,
pango_context_get_language (pango_context));
layout = pango_layout_new (pango_context);
+ tnum = pango_attr_list_new ();
+ attr = pango_attr_font_features_new ("tnum=1");
+ pango_attr_list_insert_before (tnum, attr);
+ pango_layout_set_attributes (layout, tnum);
+ pango_attr_list_unref (tnum);
/* Recalculate the height of each row based on the font size. */
week_view->row_height = PANGO_PIXELS (pango_font_metrics_get_ascent (font_metrics)) +
diff --git a/src/e-util/e-calendar-item.c b/src/e-util/e-calendar-item.c
index c08d01ef4b..14669d4396 100644
--- a/src/e-util/e-calendar-item.c
+++ b/src/e-util/e-calendar-item.c
@@ -1577,6 +1577,8 @@ e_calendar_item_draw_day_numbers (ECalendarItem *calitem,
PangoContext *pango_context;
PangoFontMetrics *font_metrics;
PangoLayout *layout;
+ PangoAttrList *tnum;
+ PangoAttribute *attr;
item = GNOME_CANVAS_ITEM (calitem);
widget = GTK_WIDGET (item->canvas);
@@ -1660,6 +1662,10 @@ e_calendar_item_draw_day_numbers (ECalendarItem *calitem,
* except for the top-left month displayed. */
draw_day = (mon == 1 || (row == 0 && col == 0));
+ tnum = pango_attr_list_new ();
+ attr = pango_attr_font_features_new ("tnum=1");
+ pango_attr_list_insert_before (tnum, attr);
+
for (drow = 0; drow < 6; drow++) {
/* Draw the week number. */
if (calitem->show_week_numbers) {
@@ -1843,6 +1849,7 @@ e_calendar_item_draw_day_numbers (ECalendarItem *calitem,
}
pango_layout_set_font_description (layout, font_desc);
+ pango_layout_set_attributes (layout, tnum);
pango_layout_set_text (layout, buffer, num_chars);
cairo_move_to (cr, day_x, day_y);
pango_cairo_update_layout (cr, layout);
@@ -1880,6 +1887,7 @@ e_calendar_item_draw_day_numbers (ECalendarItem *calitem,
g_object_unref (layout);
+ pango_attr_list_unref (tnum);
pango_font_metrics_unref (font_metrics);
pango_font_description_free (font_desc);
}
@@ -2142,6 +2150,8 @@ e_calendar_item_recalc_sizes (ECalendarItem *calitem)
PangoContext *pango_context;
PangoFontMetrics *font_metrics;
PangoLayout *layout;
+ PangoAttrList *tnum;
+ PangoAttribute *attr;
GDateWeekday weekday;
GtkWidget *widget;
GtkStyleContext *style_context;
@@ -2180,6 +2190,12 @@ e_calendar_item_recalc_sizes (ECalendarItem *calitem)
}
calitem->max_day_width = max_day_width;
+ tnum = pango_attr_list_new ();
+ attr = pango_attr_font_features_new ("tnum=1");
+ pango_attr_list_insert_before (tnum, attr);
+ pango_layout_set_attributes (layout, tnum);
+ pango_attr_list_unref (tnum);
+
max_digit_width = 0;
max_week_number_digit_width = 0;
for (digit = 0; digit < 10; digit++) {
diff --git a/src/e-util/e-cell-combo.c b/src/e-util/e-cell-combo.c
index 8c0679ee8a..c67b156166 100644
--- a/src/e-util/e-cell-combo.c
+++ b/src/e-util/e-cell-combo.c
@@ -123,6 +123,7 @@ e_cell_combo_init (ECellCombo *ecc)
GtkListStore *store;
GtkTreeSelection *selection;
GtkScrolledWindow *scrolled_window;
+ GtkCellRenderer *renderer;
/* We create one popup window for the ECell, since there will only
* ever be one popup in use at a time. */
@@ -154,11 +155,13 @@ e_cell_combo_init (ECellCombo *ecc)
gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
g_object_unref (store);
+ renderer = gtk_cell_renderer_text_new ();
+ ecc->popup_renderer = renderer;
+
gtk_tree_view_append_column (
GTK_TREE_VIEW (ecc->popup_tree_view),
gtk_tree_view_column_new_with_attributes (
- "Text", gtk_cell_renderer_text_new (),
- "text", 0, NULL));
+ "Text", renderer, "text", 0, NULL));
gtk_tree_view_set_headers_visible (
GTK_TREE_VIEW (ecc->popup_tree_view), FALSE);
@@ -258,6 +261,16 @@ e_cell_combo_set_popdown_strings (ECellCombo *ecc,
}
}
+void
+e_cell_combo_use_tabular_numbers (ECellCombo *ecc)
+{
+ PangoAttrList *tnum = pango_attr_list_new ();
+ PangoAttribute *attr = pango_attr_font_features_new ("tnum=1");
+ pango_attr_list_insert_before (tnum, attr);
+ g_object_set (ecc->popup_renderer, "attributes", tnum, NULL);
+ pango_attr_list_unref (tnum);
+}
+
static gint
e_cell_combo_do_popup (ECellPopup *ecp,
GdkEvent *event,
diff --git a/src/e-util/e-cell-combo.h b/src/e-util/e-cell-combo.h
index 36b2ab0e1f..053acc6200 100644
--- a/src/e-util/e-cell-combo.h
+++ b/src/e-util/e-cell-combo.h
@@ -66,6 +66,7 @@ struct _ECellCombo {
GtkWidget *popup_window;
GtkWidget *popup_scrolled_window;
GtkWidget *popup_tree_view;
+ GtkCellRenderer *popup_renderer;
GdkDevice *grabbed_keyboard;
GdkDevice *grabbed_pointer;
@@ -83,6 +84,9 @@ void e_cell_combo_set_popdown_strings
(ECellCombo *ecc,
GList *strings);
+void e_cell_combo_use_tabular_numbers
+ (ECellCombo *ecc);
+
G_END_DECLS
#endif /* _E_CELL_COMBO_H_ */
diff --git a/src/e-util/e-cell-date-edit.c b/src/e-util/e-cell-date-edit.c
index 9dd916af22..afa80986d4 100644
--- a/src/e-util/e-cell-date-edit.c
+++ b/src/e-util/e-cell-date-edit.c
@@ -218,6 +218,9 @@ e_cell_date_edit_init (ECellDateEdit *ecde)
GtkWidget *scrolled_window, *bbox, *tree_view;
GtkWidget *now_button, *today_button, *none_button, *ok_button;
GtkListStore *store;
+ GtkCellRenderer *renderer;
+ PangoAttrList *tnum;
+ PangoAttribute *attr;
ecde->lower_hour = 0;
ecde->upper_hour = 24;
@@ -286,10 +289,17 @@ e_cell_date_edit_init (ECellDateEdit *ecde)
tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
g_object_unref (store);
+ renderer = gtk_cell_renderer_text_new ();
+ tnum = pango_attr_list_new ();
+ attr = pango_attr_font_features_new ("tnum=1");
+ pango_attr_list_insert_before (tnum, attr);
+ g_object_set (renderer, "attributes", tnum, NULL);
+ pango_attr_list_unref (tnum);
+
gtk_tree_view_append_column (
GTK_TREE_VIEW (tree_view),
gtk_tree_view_column_new_with_attributes (
- "Text", gtk_cell_renderer_text_new (), "text", 0, NULL));
+ "Text", renderer, "text", 0, NULL));
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE);
diff --git a/src/e-util/e-cell-percent.c b/src/e-util/e-cell-percent.c
index 5086aca83d..95ff369c00 100644
--- a/src/e-util/e-cell-percent.c
+++ b/src/e-util/e-cell-percent.c
@@ -132,6 +132,7 @@ e_cell_percent_class_init (ECellPercentClass *ecpc)
static void
e_cell_percent_init (ECellPercent *ecp)
{
+ g_object_set (ecp, "use-tabular-numbers", TRUE, NULL);
}
/**
diff --git a/src/e-util/e-cell-size.c b/src/e-util/e-cell-size.c
index 8a8341b5b8..a981e1814a 100644
--- a/src/e-util/e-cell-size.c
+++ b/src/e-util/e-cell-size.c
@@ -71,6 +71,7 @@ e_cell_size_class_init (ECellSizeClass *class)
static void
e_cell_size_init (ECellSize *e_cell_size)
{
+ g_object_set (e_cell_size, "use-tabular-numbers", TRUE, NULL);
}
/**
diff --git a/src/e-util/e-dateedit.c b/src/e-util/e-dateedit.c
index a6f40ff6ad..ab7dd6d572 100644
--- a/src/e-util/e-dateedit.c
+++ b/src/e-util/e-dateedit.c
@@ -547,6 +547,8 @@ create_children (EDateEdit *dedit)
GtkStyleContext *style_context;
const gchar *css;
GError *error = NULL;
+ PangoAttrList *tnum;
+ PangoAttribute *attr;
priv = dedit->priv;
@@ -623,6 +625,11 @@ create_children (EDateEdit *dedit)
cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (priv->time_combo));
if (cells) {
g_object_set (GTK_CELL_RENDERER (cells->data), "xalign", 1.0, NULL);
+ tnum = pango_attr_list_new ();
+ attr = pango_attr_font_features_new ("tnum=1");
+ pango_attr_list_insert_before (tnum, attr);
+ g_object_set (GTK_CELL_RENDERER (cells->data), "attributes", tnum, NULL);
+ pango_attr_list_unref (tnum);
g_list_free (cells);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]