From 7aabbd39d9d64e9406bae680e2b3ccd80e51c6a1 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 2 Apr 2016 20:05:12 -0400 Subject: [PATCH] inspector: Show more information for monitors --- gtk/inspector/general.c | 68 +++++++++++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/gtk/inspector/general.c b/gtk/inspector/general.c index 5116528e1f..4c8b2b4b88 100644 --- a/gtk/inspector/general.c +++ b/gtk/inspector/general.c @@ -310,6 +310,21 @@ add_label_row (GtkListBox *list, gtk_list_box_insert (GTK_LIST_BOX (list), row, -1); } +static const char * +translate_subpixel_layout (GdkSubpixelLayout subpixel) +{ + switch (subpixel) + { + case GDK_SUBPIXEL_LAYOUT_NONE: return "none"; + case GDK_SUBPIXEL_LAYOUT_UNKNOWN: return "unknown"; + case GDK_SUBPIXEL_LAYOUT_HORIZONTAL_RGB: return "horizontal rgb"; + case GDK_SUBPIXEL_LAYOUT_HORIZONTAL_BGR: return "horizontal bgr"; + case GDK_SUBPIXEL_LAYOUT_VERTICAL_RGB: return "vertical rgb"; + case GDK_SUBPIXEL_LAYOUT_VERTICAL_BGR: return "vertical bgr"; + default: g_assert_not_reached (); + } +} + static void populate_display (GdkScreen *screen, GtkInspectorGeneral *gen) { @@ -351,26 +366,47 @@ populate_display (GdkScreen *screen, GtkInspectorGeneral *gen) gchar *name; gchar *value; GdkRectangle rect; - gint w, h, wmm, hmm, scale; - - name = g_strdup_printf ("Monitor %s %s", - gdk_monitor_get_manufacturer (monitors[i]), - gdk_monitor_get_model (monitors[i])); - - gdk_screen_get_monitor_geometry (screen, i, &rect); - w = rect.width; - h = rect.height; - wmm = gdk_screen_get_monitor_width_mm (screen, i); - hmm = gdk_screen_get_monitor_height_mm (screen, i); - scale = gdk_screen_get_monitor_scale_factor (screen, i); - value = g_strdup_printf ("%d × %d%s, %d × %d mm²", - w, h, scale == 2 ? " @ 2" : "", - wmm, hmm); + gint scale; + const char *manufacturer; + const char *model; + name = g_strdup_printf ("Monitor %d", i); + manufacturer = gdk_monitor_get_manufacturer (monitors[i]); + model = gdk_monitor_get_model (monitors[i]); + value = g_strdup_printf ("%s%s%s", + manufacturer ? manufacturer : "", + manufacturer || model ? " " : "", + model ? model : ""); add_label_row (GTK_LIST_BOX (gen->priv->display_box), name, value, 0); - g_free (name); g_free (value); + + gdk_monitor_get_geometry (monitors[i], &rect); + scale = gdk_monitor_get_scale_factor (monitors[i]); + + value = g_strdup_printf ("%d × %d%s at %d, %d", + rect.width, rect.height, + scale == 2 ? " @ 2" : "", + rect.x, rect.y); + add_label_row (GTK_LIST_BOX (gen->priv->display_box), "Geometry", value, 10); + g_free (value); + + value = g_strdup_printf ("%d × %d mm²", + gdk_monitor_get_width_mm (monitors[i]), + gdk_monitor_get_height_mm (monitors[i])); + add_label_row (GTK_LIST_BOX (gen->priv->display_box), "Size", value, 10); + + if (gdk_monitor_get_refresh_rate (monitors[i]) != 0) + value = g_strdup_printf ("%.2f mHz", + 0.001 * gdk_monitor_get_refresh_rate (monitors[i])); + else + value = g_strdup ("unknown"); + add_label_row (GTK_LIST_BOX (gen->priv->display_box), "Refresh rate", value, 10); + g_free (value); + + value = g_strdup (translate_subpixel_layout (gdk_monitor_get_subpixel_layout (monitors[i]))); + add_label_row (GTK_LIST_BOX (gen->priv->display_box), "Subpixel layout", value, 10); + g_free (value); } }