Add signals for Backend options
authorEmmanuele Bassi <ebassi@linux.intel.com>
Tue, 23 Dec 2008 13:55:51 +0000 (13:55 +0000)
committerEmmanuele Bassi <ebassi@linux.intel.com>
Tue, 23 Dec 2008 13:55:51 +0000 (13:55 +0000)
The ClutterBackend instance at the moment lacks the ability to
notify runtime changes of the font options and the resolution.

For this reason, this commit adds a ::resolution-changed and a
::font-changed signals to the Backend class.

The ::resolution-changed signal is emitted when set_resolution()
is called with a different DPI; ::font-changed is emitted when the
cairo_font_options_t* changes from the default.

clutter/clutter-backend.c
clutter/clutter-backend.h

index 9a599c1..086f274 100644 (file)
@@ -44,6 +44,7 @@
 #include "clutter-backend.h"
 #include "clutter-debug.h"
 #include "clutter-fixed.h"
+#include "clutter-marshal.h"
 #include "clutter-private.h"
 
 G_DEFINE_ABSTRACT_TYPE (ClutterBackend, clutter_backend, G_TYPE_OBJECT);
@@ -62,6 +63,16 @@ struct _ClutterBackendPrivate
   cairo_font_options_t *font_options;
 };
 
+enum
+{
+  RESOLUTION_CHANGED,
+  FONT_CHANGED,
+
+  LAST_SIGNAL
+};
+
+static guint backend_signals[LAST_SIGNAL] = { 0, };
+
 static void
 clutter_backend_dispose (GObject *gobject)
 {
@@ -89,6 +100,24 @@ clutter_backend_class_init (ClutterBackendClass *klass)
   gobject_class->dispose = clutter_backend_dispose;
 
   g_type_class_add_private (gobject_class, sizeof (ClutterBackendPrivate));
+
+  backend_signals[RESOLUTION_CHANGED] =
+    g_signal_new (I_("resolution-changed"),
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (ClutterBackendClass, resolution_changed),
+                  NULL, NULL,
+                  clutter_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
+
+  backend_signals[FONT_CHANGED] =
+    g_signal_new (I_("font-changed"),
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (ClutterBackendClass, font_changed),
+                  NULL, NULL,
+                  clutter_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
 }
 
 static void
@@ -388,8 +417,9 @@ clutter_backend_set_resolution (ClutterBackend *backend,
     priv->resolution = fixed_dpi;
 
   if (CLUTTER_CONTEXT ()->font_map)
-    cogl_pango_font_map_set_resolution (CLUTTER_CONTEXT ()->font_map,
-                                       COGL_FIXED_TO_FLOAT (fixed_dpi));
+    cogl_pango_font_map_set_resolution (CLUTTER_CONTEXT ()->font_map, dpi);
+
+  g_signal_emit (backend, backend_signals[RESOLUTION_CHANGED], 0);
 }
 
 /**
@@ -445,6 +475,8 @@ clutter_backend_set_font_options (ClutterBackend       *backend,
         priv->font_options = cairo_font_options_copy (options);
       else
         priv->font_options = NULL;
+
+      g_signal_emit (backend, backend_signals[FONT_CHANGED], 0);
     }
 }
 
index 27f49c4..0669d4f 100644 (file)
@@ -77,6 +77,10 @@ struct _ClutterBackendClass
                                             ClutterStage    *stage);
   void                (* ensure_context)   (ClutterBackend  *backend,
                                             ClutterStage    *stage);
+
+  /* signals */
+  void (* resolution_changed) (ClutterBackend *backend);
+  void (* font_changed)       (ClutterBackend *backend);
 };
 
 GType clutter_backend_get_type    (void) G_GNUC_CONST;