[metacity] theme-viewer: add option to change scale
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [metacity] theme-viewer: add option to change scale
- Date: Sun, 2 Apr 2017 16:23:59 +0000 (UTC)
commit fa3ae8ef2bca601e6fdc0c2e4edd3265b0aca665
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Sun Apr 2 19:12:35 2017 +0300
theme-viewer: add option to change scale
data/ui/theme-viewer-window.ui | 157 +++++++++++++++++++++++-------------
theme-viewer/theme-viewer-window.c | 66 +++++++++++++++-
2 files changed, 167 insertions(+), 56 deletions(-)
---
diff --git a/data/ui/theme-viewer-window.ui b/data/ui/theme-viewer-window.ui
index 133892d..79637ad 100644
--- a/data/ui/theme-viewer-window.ui
+++ b/data/ui/theme-viewer-window.ui
@@ -2,6 +2,68 @@
<!-- Generated with glade 3.20.0 -->
<interface domain="metacity">
<requires lib="gtk+" version="3.20"/>
+ <object class="GtkHeaderBar" id="header_bar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="show_close_button">True</property>
+ <child type="title">
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">10</property>
+ <child>
+ <object class="GtkComboBoxText" id="type_combo_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="active">0</property>
+ <items>
+ <item>GTK+</item>
+ <item>Metacity</item>
+ </items>
+ <signal name="changed" handler="type_combo_box_changed_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="theme_combo_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <signal name="changed" handler="theme_combo_box_changed_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="reload_button">
+ <property name="label" translatable="yes">Reload</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked" handler="reload_button_clicked_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="scale_adjustment">
+ <property name="lower">1</property>
+ <property name="upper">4</property>
+ <property name="value">1</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ </object>
<template class="ThemeViewerWindow" parent="GtkWindow">
<property name="can_focus">False</property>
<property name="default_width">1024</property>
@@ -305,6 +367,46 @@
<property name="position">4</property>
</packing>
</child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">3</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Scale:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="scale_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">scale_adjustment</property>
+ <property name="value">1</property>
+ <signal name="value-changed" handler="scale_changed_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
</object>
</child>
</object>
@@ -520,59 +622,4 @@
<placeholder/>
</child>
</template>
- <object class="GtkHeaderBar" id="header_bar">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="show_close_button">True</property>
- <child type="title">
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">10</property>
- <child>
- <object class="GtkComboBoxText" id="type_combo_box">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="active">0</property>
- <items>
- <item>GTK+</item>
- <item>Metacity</item>
- </items>
- <signal name="changed" handler="type_combo_box_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBoxText" id="theme_combo_box">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <signal name="changed" handler="theme_combo_box_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="reload_button">
- <property name="label" translatable="yes">Reload</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <signal name="clicked" handler="reload_button_clicked_cb" swapped="no"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
</interface>
diff --git a/theme-viewer/theme-viewer-window.c b/theme-viewer/theme-viewer-window.c
index 6d526d7..56b8d7f 100644
--- a/theme-viewer/theme-viewer-window.c
+++ b/theme-viewer/theme-viewer-window.c
@@ -56,6 +56,9 @@ struct _ThemeViewerWindow
const gchar *theme_variant;
gboolean composited;
+ GtkWidget *scale_button;
+ gint scale;
+
MetaFrameType frame_type;
MetaFrameFlags frame_flags;
@@ -76,6 +79,22 @@ struct _ThemeViewerWindow
G_DEFINE_TYPE (ThemeViewerWindow, theme_viewer_window, GTK_TYPE_WINDOW)
+static gint
+get_screen_scale (void)
+{
+ GValue value = G_VALUE_INIT;
+ GdkScreen *screen;
+
+ screen = gdk_screen_get_default ();
+
+ g_value_init (&value, G_TYPE_INT);
+
+ if (gdk_screen_get_setting (screen, "gdk-window-scaling-factor", &value))
+ return g_value_get_int (&value);
+ else
+ return 1;
+}
+
static void
benchmark_load_time (ThemeViewerWindow *window,
MetaTheme *theme,
@@ -301,12 +320,16 @@ get_icon (gint size)
static void
get_client_width_and_height (GtkWidget *widget,
ThemeViewerWindow *window,
+ gint screen_scale,
gint *width,
gint *height)
{
*width = gtk_widget_get_allocated_width (widget) - PADDING * 2;
*height = gtk_widget_get_allocated_height (widget) - PADDING * 2;
+ *width /= 1.0 / screen_scale;
+ *height /= 1.0 / screen_scale;
+
*width -= window->borders.total.left + window->borders.total.right;
*height -= window->borders.total.top + window->borders.total.bottom;
}
@@ -323,6 +346,7 @@ update_button_state (MetaButtonType type,
GdkDevice *device;
gint x;
gint y;
+ gint screen_scale;
window = THEME_VIEWER_WINDOW (user_data);
state = META_BUTTON_STATE_NORMAL;
@@ -337,6 +361,10 @@ update_button_state (MetaButtonType type,
x -= PADDING;
y -= PADDING;
+ screen_scale = get_screen_scale ();
+ x /= 1.0 / screen_scale;
+ y /= 1.0 / screen_scale;
+
if (x >= rect.x && x < (rect.x + rect.width) &&
y >= rect.y && y < (rect.y + rect.height))
{
@@ -662,6 +690,7 @@ theme_combo_box_changed_cb (GtkComboBox *combo_box,
meta_theme_load (window->theme, theme, NULL);
meta_theme_set_composited (window->theme, window->composited);
+ meta_theme_set_scale (window->theme, window->scale);
update_frame_flags (window);
update_button_layout (window);
@@ -700,6 +729,7 @@ theme_box_draw_cb (GtkWidget *widget,
cairo_t *cr,
ThemeViewerWindow *window)
{
+ gint screen_scale;
gint client_width;
gint client_height;
@@ -710,7 +740,9 @@ theme_box_draw_cb (GtkWidget *widget,
cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
theme_box_draw_grid (widget, cr);
- get_client_width_and_height (widget, window, &client_width, &client_height);
+ screen_scale = get_screen_scale ();
+ get_client_width_and_height (widget, window, screen_scale,
+ &client_width, &client_height);
if (!window->mini_icon)
window->mini_icon = get_icon (MINI_ICON_SIZE);
@@ -719,12 +751,18 @@ theme_box_draw_cb (GtkWidget *widget,
window->icon = get_icon (ICON_SIZE);
cairo_translate (cr, PADDING, PADDING);
+
+ cairo_save (cr);
+ cairo_scale (cr, 1.0 / screen_scale, 1.0 / screen_scale);
+
meta_theme_draw_frame (window->theme, window->theme_variant, cr,
window->frame_type, window->frame_flags,
client_width, client_height, "Metacity Theme Viewer",
update_button_state, window,
window->mini_icon, window->icon);
+ cairo_restore (cr);
+
return TRUE;
}
@@ -827,6 +865,26 @@ composited_state_set_cb (GtkSwitch *widget,
}
static void
+scale_changed_cb (GtkSpinButton *spin_button,
+ ThemeViewerWindow *window)
+{
+ gint scale;
+
+ scale = (gint) gtk_spin_button_get_value (spin_button);
+
+ if (window->scale == scale)
+ return;
+
+ window->scale = scale;
+
+ meta_theme_set_scale (window->theme, scale);
+
+ update_frame_borders (window);
+
+ gtk_widget_queue_draw (window->theme_box);
+}
+
+static void
notebook_switch_page_cb (GtkNotebook *notebook,
GtkWidget *page,
guint page_num,
@@ -897,6 +955,9 @@ theme_viewer_window_class_init (ThemeViewerWindowClass *window_class)
gtk_widget_class_bind_template_callback (widget_class, frame_type_combo_box_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, composited_state_set_cb);
+ gtk_widget_class_bind_template_child (widget_class, ThemeViewerWindow, scale_button);
+ gtk_widget_class_bind_template_callback (widget_class, scale_changed_cb);
+
gtk_widget_class_bind_template_callback (widget_class, notebook_switch_page_cb);
gtk_widget_class_bind_template_child (widget_class, ThemeViewerWindow, benchmark_frame);
@@ -912,12 +973,15 @@ static void
theme_viewer_window_init (ThemeViewerWindow *window)
{
window->composited = TRUE;
+ window->scale = get_screen_scale ();
gtk_widget_init_template (GTK_WIDGET (window));
gtk_window_set_titlebar (GTK_WINDOW (window), window->header_bar);
gtk_widget_add_events (window->theme_box, GDK_POINTER_MOTION_MASK);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (window->scale_button), window->scale);
+
type_combo_box_changed_cb (GTK_COMBO_BOX (window->type_combo_box), window);
gtk_label_set_xalign (GTK_LABEL (window->load_time), 0.0);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]