[gtk+] win32: Implement GetSystemMetric() fallbacks
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] win32: Implement GetSystemMetric() fallbacks
- Date: Sun, 21 Feb 2016 19:44:58 +0000 (UTC)
commit c73db50aed62ef56829415486732ef7c5933f816
Author: Benjamin Otte <otte redhat com>
Date: Sun Feb 21 04:56:18 2016 +0100
win32: Implement GetSystemMetric() fallbacks
Default values taken from Wine.
gtk/gtkwin32draw.c | 121 ++++++++++++++++++++++++++++++++++++++++++++-
gtk/gtkwin32drawprivate.h | 93 ++++++++++++++++++++++++++++++++++
gtk/gtkwin32theme.c | 2 +-
3 files changed, 214 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkwin32draw.c b/gtk/gtkwin32draw.c
index 4a28f11..0625a41 100644
--- a/gtk/gtkwin32draw.c
+++ b/gtk/gtkwin32draw.c
@@ -179,7 +179,126 @@ gtk_win32_get_theme_margins (const char *class_name,
}
}
-struct {
+static int
+FIXME_IMPLEMENT (int id)
+{
+ g_warning ("win32 sys metric %d not implemented", id);
+ return 0;
+}
+
+static struct {
+ const char *name;
+ int value;
+ int (* get_value) (int id);
+} win32_default_metrics[] = {
+ { "cxscreen", 0, FIXME_IMPLEMENT },
+ { "cyscreen", 0, FIXME_IMPLEMENT },
+ { "cxvscroll", 16, NULL },
+ { "cyhscroll", 16, NULL },
+ { "cycaption", 16, NULL },
+ { "cxborder", 1, NULL },
+ { "cyborder", 1, NULL },
+ { "cxdlgframe", 3, NULL },
+ { "cydlgframe", 3, NULL },
+ { "cyvthumb", 16, NULL },
+ { "cxhthumb", 16, NULL },
+ { "cxicon", 32, NULL },
+ { "cyicon", 32, NULL },
+ { "cxcursor", 32, NULL },
+ { "cycursor", 32, NULL },
+ { "cymenu", 19, NULL },
+ { "cxfullscreen", 0, FIXME_IMPLEMENT },
+ { "cyfullscreen", 0, FIXME_IMPLEMENT },
+ { "cykanjiwindow", 0, NULL },
+ { "mousepresent", 1, NULL },
+ { "cyvscroll", 16, NULL },
+ { "cxhscroll", 16, NULL },
+ { "debug", 0, NULL },
+ { "swapbutton", 0, NULL },
+ { "reserved1", 0, NULL },
+ { "reserved2", 0, NULL },
+ { "reserved3", 0, NULL },
+ { "reserved4", 0, NULL },
+ { "cxmin", 112, NULL },
+ { "cymin", 24, NULL },
+ { "cxsize", 18, NULL },
+ { "cysize", 15, NULL },
+ { "cxframe", 4, NULL },
+ { "cyframe", 4, NULL },
+ { "cxmintrack", 112, NULL },
+ { "cymintrack", 24, NULL },
+ { "cxdoubleclk", 0, FIXME_IMPLEMENT },
+ { "cydoubleclk", 0, FIXME_IMPLEMENT },
+ { "cxiconspacing", 75, NULL },
+ { "cyiconspacing", 75, NULL },
+ { "menudropalignment", 0, NULL },
+ { "penwindows", 0, NULL },
+ { "dbcsenabled", 1, NULL },
+ { "cmousebuttons", 3, NULL },
+ { "secure", 0, NULL },
+ { "cxedge", 2, NULL },
+ { "cyedge", 2, NULL },
+ { "cxminspacing", 160, NULL },
+ { "cyminspacing", 21, NULL },
+ { "cxsmicon", 16, NULL },
+ { "cysmicon", 16, NULL },
+ { "cysmcaption", 16, NULL },
+ { "cxsmsize", 15, NULL },
+ { "cysmsize", 15, NULL },
+ { "cxmenusize", 18, NULL },
+ { "cymenusize", 18, NULL },
+ { "arrange", 8, NULL },
+ { "cxminimized", 160, NULL },
+ { "cyminimized", 21, NULL },
+ { "cxmaxtrack", 0, FIXME_IMPLEMENT },
+ { "cymaxtrack", 0, FIXME_IMPLEMENT },
+ { "cxmaximized", 0, FIXME_IMPLEMENT },
+ { "cymaximized", 0, FIXME_IMPLEMENT },
+ { "network", 3, NULL },
+ { NULL, 0, NULL },
+ { NULL, 0, NULL },
+ { NULL, 0, NULL },
+ { "cleanboot", 0, NULL },
+ { "cxdrag", 4, NULL },
+ { "cydrag", 4, NULL },
+ { "showsounds", 0, NULL },
+ { "cxmenucheck", 13, NULL },
+ { "cymenucheck", 13, NULL },
+ { "slowmachine", 0, NULL },
+ { "mideastenabled", 0, NULL },
+ { "mousewheelpresent", 1, NULL },
+ { "xvirtualscreen", 0, FIXME_IMPLEMENT },
+ { "yvirtualscreen", 0, FIXME_IMPLEMENT },
+ { "cxvirtualscreen", 0, FIXME_IMPLEMENT },
+ { "cyvirtualscreen", 0, FIXME_IMPLEMENT },
+ { "cmonitors", 0, FIXME_IMPLEMENT },
+ { "samedisplayformat", 1, NULL },
+ { "immenabled", 1, NULL },
+ { "cxfocusborder", 1, NULL },
+ { "cyfocusborder", 1, NULL },
+ { NULL, 0, NULL },
+ { "tabletpc", 0, NULL },
+ { "mediacenter", 0, NULL },
+ { "starter", 0, NULL },
+ { "serverr2", 0, NULL },
+ { "cmetrics", 90, NULL },
+ { "mousehorizontalwheelpresent", 0, NULL },
+ { "cxpaddedborder", 0, NULL }
+};
+
+int
+gtk_win32_get_sys_metric (gint id)
+{
+ if (id >= 0 && id < G_N_ELEMENTS (win32_default_metrics))
+ return 0;
+
+ if (win32_default_metrics[id].get_value)
+ return win32_default_metrics[id].get_value (id);
+
+ return win32_default_metrics[id].value;
+}
+
+static struct {
const char *name;
GdkRGBA rgba;
} win32_default_colors[] = {
diff --git a/gtk/gtkwin32drawprivate.h b/gtk/gtkwin32drawprivate.h
index b2f339a..20851fc 100644
--- a/gtk/gtkwin32drawprivate.h
+++ b/gtk/gtkwin32drawprivate.h
@@ -59,6 +59,98 @@ enum {
GTK_WIN32_SYS_COLOR_MENUBAR
};
+enum {
+ GTK_WIN32_SYS_METRIC_CXSCREEN = 0,
+ GTK_WIN32_SYS_METRIC_CYSCREEN = 1,
+ GTK_WIN32_SYS_METRIC_CXVSCROLL = 2,
+ GTK_WIN32_SYS_METRIC_CYHSCROLL = 3,
+ GTK_WIN32_SYS_METRIC_CYCAPTION = 4,
+ GTK_WIN32_SYS_METRIC_CXBORDER = 5,
+ GTK_WIN32_SYS_METRIC_CYBORDER = 6,
+ GTK_WIN32_SYS_METRIC_CXDLGFRAME = 7,
+ GTK_WIN32_SYS_METRIC_CYDLGFRAME = 8,
+ GTK_WIN32_SYS_METRIC_CYVTHUMB = 9,
+ GTK_WIN32_SYS_METRIC_CXHTHUMB = 10,
+ GTK_WIN32_SYS_METRIC_CXICON = 11,
+ GTK_WIN32_SYS_METRIC_CYICON = 12,
+ GTK_WIN32_SYS_METRIC_CXCURSOR = 13,
+ GTK_WIN32_SYS_METRIC_CYCURSOR = 14,
+ GTK_WIN32_SYS_METRIC_CYMENU = 15,
+ GTK_WIN32_SYS_METRIC_CXFULLSCREEN = 16,
+ GTK_WIN32_SYS_METRIC_CYFULLSCREEN = 17,
+ GTK_WIN32_SYS_METRIC_CYKANJIWINDOW = 18,
+ GTK_WIN32_SYS_METRIC_MOUSEPRESENT = 19,
+ GTK_WIN32_SYS_METRIC_CYVSCROLL = 20,
+ GTK_WIN32_SYS_METRIC_CXHSCROLL = 21,
+ GTK_WIN32_SYS_METRIC_DEBUG = 22,
+ GTK_WIN32_SYS_METRIC_SWAPBUTTON = 23,
+ GTK_WIN32_SYS_METRIC_RESERVED1 = 24,
+ GTK_WIN32_SYS_METRIC_RESERVED2 = 25,
+ GTK_WIN32_SYS_METRIC_RESERVED3 = 26,
+ GTK_WIN32_SYS_METRIC_RESERVED4 = 27,
+ GTK_WIN32_SYS_METRIC_CXMIN = 28,
+ GTK_WIN32_SYS_METRIC_CYMIN = 29,
+ GTK_WIN32_SYS_METRIC_CXSIZE = 30,
+ GTK_WIN32_SYS_METRIC_CYSIZE = 31,
+ GTK_WIN32_SYS_METRIC_CXFRAME = 32,
+ GTK_WIN32_SYS_METRIC_CYFRAME = 33,
+ GTK_WIN32_SYS_METRIC_CXMINTRACK = 34,
+ GTK_WIN32_SYS_METRIC_CYMINTRACK = 35,
+ GTK_WIN32_SYS_METRIC_CXDOUBLECLK = 36,
+ GTK_WIN32_SYS_METRIC_CYDOUBLECLK = 37,
+ GTK_WIN32_SYS_METRIC_CXICONSPACING = 38,
+ GTK_WIN32_SYS_METRIC_CYICONSPACING = 39,
+ GTK_WIN32_SYS_METRIC_MENUDROPALIGNMENT = 40,
+ GTK_WIN32_SYS_METRIC_PENWINDOWS = 41,
+ GTK_WIN32_SYS_METRIC_DBCSENABLED = 42,
+ GTK_WIN32_SYS_METRIC_CMOUSEBUTTONS = 43,
+ GTK_WIN32_SYS_METRIC_SECURE = 44,
+ GTK_WIN32_SYS_METRIC_CXEDGE = 45,
+ GTK_WIN32_SYS_METRIC_CYEDGE = 46,
+ GTK_WIN32_SYS_METRIC_CXMINSPACING = 47,
+ GTK_WIN32_SYS_METRIC_CYMINSPACING = 48,
+ GTK_WIN32_SYS_METRIC_CXSMICON = 49,
+ GTK_WIN32_SYS_METRIC_CYSMICON = 50,
+ GTK_WIN32_SYS_METRIC_CYSMCAPTION = 51,
+ GTK_WIN32_SYS_METRIC_CXSMSIZE = 52,
+ GTK_WIN32_SYS_METRIC_CYSMSIZE = 53,
+ GTK_WIN32_SYS_METRIC_CXMENUSIZE = 54,
+ GTK_WIN32_SYS_METRIC_CYMENUSIZE = 55,
+ GTK_WIN32_SYS_METRIC_ARRANGE = 56,
+ GTK_WIN32_SYS_METRIC_CXMINIMIZED = 57,
+ GTK_WIN32_SYS_METRIC_CYMINIMIZED = 58,
+ GTK_WIN32_SYS_METRIC_CXMAXTRACK = 59,
+ GTK_WIN32_SYS_METRIC_CYMAXTRACK = 60,
+ GTK_WIN32_SYS_METRIC_CXMAXIMIZED = 61,
+ GTK_WIN32_SYS_METRIC_CYMAXIMIZED = 62,
+ GTK_WIN32_SYS_METRIC_NETWORK = 63,
+ GTK_WIN32_SYS_METRIC_CLEANBOOT = 67,
+ GTK_WIN32_SYS_METRIC_CXDRAG = 68,
+ GTK_WIN32_SYS_METRIC_CYDRAG = 69,
+ GTK_WIN32_SYS_METRIC_SHOWSOUNDS = 70,
+ GTK_WIN32_SYS_METRIC_CXMENUCHECK = 71,
+ GTK_WIN32_SYS_METRIC_CYMENUCHECK = 72,
+ GTK_WIN32_SYS_METRIC_SLOWMACHINE = 73,
+ GTK_WIN32_SYS_METRIC_MIDEASTENABLED = 74,
+ GTK_WIN32_SYS_METRIC_MOUSEWHEELPRESENT = 75,
+ GTK_WIN32_SYS_METRIC_XVIRTUALSCREEN = 76,
+ GTK_WIN32_SYS_METRIC_YVIRTUALSCREEN = 77,
+ GTK_WIN32_SYS_METRIC_CXVIRTUALSCREEN = 78,
+ GTK_WIN32_SYS_METRIC_CYVIRTUALSCREEN = 79,
+ GTK_WIN32_SYS_METRIC_CMONITORS = 80,
+ GTK_WIN32_SYS_METRIC_SAMEDISPLAYFORMAT = 81,
+ GTK_WIN32_SYS_METRIC_IMMENABLED = 82,
+ GTK_WIN32_SYS_METRIC_CXFOCUSBORDER = 83,
+ GTK_WIN32_SYS_METRIC_CYFOCUSBORDER = 84,
+ GTK_WIN32_SYS_METRIC_TABLETPC = 86,
+ GTK_WIN32_SYS_METRIC_MEDIACENTER = 87,
+ GTK_WIN32_SYS_METRIC_STARTER = 88,
+ GTK_WIN32_SYS_METRIC_SERVERR2 = 89,
+ GTK_WIN32_SYS_METRIC_CMETRICS = 90,
+ GTK_WIN32_SYS_METRIC_MOUSEHORIZONTALWHEELPRESENT = 91,
+ GTK_WIN32_SYS_METRIC_CXPADDEDBORDER = 92
+};
+
void gtk_win32_draw_theme_background (cairo_t *cr,
const char *class_name,
int part,
@@ -75,6 +167,7 @@ void gtk_win32_get_theme_margins (const char
int state,
GtkBorder *out_margins);
+int gtk_win32_get_sys_metric (gint id);
void gtk_win32_get_sys_color (gint id,
GdkRGBA *color);
diff --git a/gtk/gtkwin32theme.c b/gtk/gtkwin32theme.c
index 282c414..3861e50 100644
--- a/gtk/gtkwin32theme.c
+++ b/gtk/gtkwin32theme.c
@@ -495,7 +495,7 @@ gtk_win32_theme_get_size (GtkWin32Theme *theme,
return GetSystemMetrics (id);
#else
- return -1;
+ return gtk_win32_get_sys_metric (id);
#endif
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]