[evolution] M!69 - Use tabular numbers for any widgets that stack numbers



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]