diff options
author | Emmanuele Bassi <ebassi@linux.intel.com> | 2009-02-26 15:34:52 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@linux.intel.com> | 2009-02-26 15:34:52 +0000 |
commit | fb7ead5985af37c5f3ebd7f5c88a7a939d6e338b (patch) | |
tree | 0f2ffe9992dbff6cc554e443d936b8034e007b05 | |
parent | 9fd57e31fbb19771d7590c22245e15af85f58084 (diff) | |
download | clutter-gtk-fb7ead5985af37c5f3ebd7f5c88a7a939d6e338b.tar.gz |
[embed] Use GTK+ settings
When the style of GtkClutterEmbed changes we need to retrieve all
the settings and screen options used by GTK+.
This is needed because:
- Clutter does not have any internal code to handle changes
in the platform settings
- GtkClutterEmbed "enslaves" Clutter to GTK+ already
By default, we reuse:
- the screen resolution
- the screen font options
- the default font name
- the double click distance and time
This way, a Clutter scene embedded into a GtkClutterEmbed will
look more integrated.
-rw-r--r-- | clutter-gtk/gtk-clutter-embed.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/clutter-gtk/gtk-clutter-embed.c b/clutter-gtk/gtk-clutter-embed.c index 3019a87..d75767e 100644 --- a/clutter-gtk/gtk-clutter-embed.c +++ b/clutter-gtk/gtk-clutter-embed.c @@ -401,6 +401,53 @@ gtk_clutter_embed_scroll_event (GtkWidget *widget, } static void +gtk_clutter_embed_style_set (GtkWidget *widget, + GtkStyle *old_style) +{ + GdkScreen *screen; + GtkSettings *settings; + gdouble dpi; + gchar *font_name; + const cairo_font_options_t *font_options; + gint double_click_time, double_click_distance; + ClutterBackend *backend; + + GTK_WIDGET_CLASS (gtk_clutter_embed_parent_class)->style_set (widget, + old_style); + + if (gtk_widget_has_screen (widget)) + screen = gtk_widget_get_screen (widget); + else + screen = gdk_screen_get_default (); + + dpi = gdk_screen_get_resolution (screen); + if (dpi < 0) + dpi = 96.0; + + font_options = gdk_screen_get_font_options (screen); + + settings = gtk_settings_get_for_screen (screen); + g_object_get (G_OBJECT (settings), + "gtk-font-name", &font_name, + "gtk-double-click-time", &double_click_time, + "gtk-double-click-distance", &double_click_distance, + NULL); + + /* copy all settings and values coming from GTK+ into + * the ClutterBackend; this way, a scene embedded into + * a GtkClutterEmbed will not look completely alien + */ + backend = clutter_get_default_backend (); + clutter_backend_set_resolution (backend, dpi); + clutter_backend_set_font_options (backend, font_options); + clutter_backend_set_font_name (backend, font_name); + clutter_backend_set_double_click_time (backend, double_click_time); + clutter_backend_set_double_click_distance (backend, double_click_distance); + + g_free (font_name); +} + +static void gtk_clutter_embed_class_init (GtkClutterEmbedClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); @@ -410,6 +457,7 @@ gtk_clutter_embed_class_init (GtkClutterEmbedClass *klass) gobject_class->dispose = gtk_clutter_embed_dispose; + widget_class->style_set = gtk_clutter_embed_style_set; widget_class->size_allocate = gtk_clutter_embed_size_allocate; widget_class->realize = gtk_clutter_embed_realize; widget_class->show = gtk_clutter_embed_show; |