inspector: Show more information for monitors

This commit is contained in:
Matthias Clasen
2016-04-02 20:05:12 -04:00
parent 12337c9751
commit 7aabbd39d9

View File

@@ -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);
}
}