[PATCH 2/3] [label] Add font control

Anisse Astier anisse at astier.eu
Thu Sep 2 07:59:37 PDT 2010


---
 src/libply-splash-graphics/ply-label-plugin.h |    2 +
 src/libply-splash-graphics/ply-label.c        |   27 +++++++++++++++++++++++
 src/libply-splash-graphics/ply-label.h        |    2 +
 src/plugins/controls/label/plugin.c           |   29 +++++++++++++++++++++++-
 4 files changed, 58 insertions(+), 2 deletions(-)

diff --git a/src/libply-splash-graphics/ply-label-plugin.h b/src/libply-splash-graphics/ply-label-plugin.h
index bd3bae9..cf3cedd 100644
--- a/src/libply-splash-graphics/ply-label-plugin.h
+++ b/src/libply-splash-graphics/ply-label-plugin.h
@@ -52,6 +52,8 @@ typedef struct
 
   void (* set_text_for_control) (ply_label_plugin_control_t *label,
                                  const char                 *text);
+  void (* set_font_for_control) (ply_label_plugin_control_t *label,
+                                 const char                 *fontdesc);
   void (* set_color_for_control) (ply_label_plugin_control_t *label,
                                   float                       red,
                                   float                       green,
diff --git a/src/libply-splash-graphics/ply-label.c b/src/libply-splash-graphics/ply-label.c
index b00874c..b97bb62 100644
--- a/src/libply-splash-graphics/ply-label.c
+++ b/src/libply-splash-graphics/ply-label.c
@@ -46,6 +46,7 @@ struct _ply_label
   ply_label_plugin_control_t *control;
 
   char *text;
+  char *fontdesc;
   float red;
   float green;
   float blue;
@@ -127,6 +128,9 @@ ply_label_load_plugin (ply_label_t *label)
   if (label->text != NULL)
     label->plugin_interface->set_text_for_control (label->control,
                                                    label->text);
+  if (label->fontdesc != NULL)
+    label->plugin_interface->set_font_for_control (label->control,
+                                                   label->fontdesc);
 
   label->plugin_interface->set_color_for_control (label->control,
                                                   label->red,
@@ -220,6 +224,29 @@ ply_label_set_text (ply_label_t *label,
                                                  text);
 }
 
+/*
+ * Please see pango documentation, for fontdesc format:
+ * http://library.gnome.org/devel/pango/stable/pango-Fonts.html#pango-font-description-from-string
+ * If you pass NULL, it will use default font.
+ */
+void
+ply_label_set_font (ply_label_t *label,
+                    const char  *fontdesc)
+{
+
+  free (label->fontdesc);
+  if (fontdesc)
+    label->fontdesc = strdup (fontdesc);
+  else
+    label->fontdesc = NULL;
+
+  if (label->plugin_interface == NULL)
+    return;
+
+  label->plugin_interface->set_font_for_control (label->control,
+                                                 fontdesc);
+}
+
 void
 ply_label_set_color (ply_label_t *label,
                      float        red,
diff --git a/src/libply-splash-graphics/ply-label.h b/src/libply-splash-graphics/ply-label.h
index bca9b7b..d79b996 100644
--- a/src/libply-splash-graphics/ply-label.h
+++ b/src/libply-splash-graphics/ply-label.h
@@ -53,6 +53,8 @@ bool ply_label_is_hidden (ply_label_t *label);
 
 void ply_label_set_text (ply_label_t *label,
                          const char  *text);
+void ply_label_set_font (ply_label_t *label,
+                         const char  *fontdesc);
 void ply_label_set_color (ply_label_t *label,
                           float        red,
                           float        green,
diff --git a/src/plugins/controls/label/plugin.c b/src/plugins/controls/label/plugin.c
index c9c744e..2cfab3b 100644
--- a/src/plugins/controls/label/plugin.c
+++ b/src/plugins/controls/label/plugin.c
@@ -56,6 +56,7 @@ struct _ply_label_plugin_control
   ply_rectangle_t     area;
 
   char               *text;
+  char               *fontdesc;
   float               red;
   float               green;
   float               blue;
@@ -173,7 +174,7 @@ size_control (ply_label_plugin_control_t *label)
 
   cairo_context = get_cairo_context_for_sizing (label);
 
-  pango_layout = init_pango_text_layout(cairo_context, label->text, "Sans 12");
+  pango_layout = init_pango_text_layout(cairo_context, label->text, label->fontdesc);
 
   pango_layout_get_size (pango_layout, &text_width, &text_height);
   label->area.width = (long) ((double) text_width / PANGO_SCALE);
@@ -202,7 +203,7 @@ draw_control (ply_label_plugin_control_t *label,
 
   cairo_context = get_cairo_context_for_pixel_buffer (label, pixel_buffer);
 
-  pango_layout = init_pango_text_layout(cairo_context, label->text, "Sans 12");
+  pango_layout = init_pango_text_layout(cairo_context, label->text, label->fontdesc);
 
   pango_layout_get_size (pango_layout, &text_width, &text_height);
   label->area.width = (long) ((double) text_width / PANGO_SCALE);
@@ -246,6 +247,29 @@ set_text_for_control (ply_label_plugin_control_t *label,
 }
 
 static void
+set_font_for_control (ply_label_plugin_control_t *label,
+                      const char                 *fontdesc)
+{
+  ply_rectangle_t dirty_area;
+
+  if (label->fontdesc != fontdesc)
+    {
+      dirty_area = label->area;
+      free (label->fontdesc);
+      if (fontdesc)
+        label->fontdesc = strdup (fontdesc);
+      else
+        label->fontdesc = NULL;
+      size_control (label);
+      if (!label->is_hidden && label->display != NULL)
+        ply_pixel_display_draw_area (label->display,
+                                     dirty_area.x, dirty_area.y,
+                                     dirty_area.width, dirty_area.height);
+
+    }
+}
+
+static void
 set_color_for_control (ply_label_plugin_control_t *label,
                        float                       red,
                        float                       green,
@@ -321,6 +345,7 @@ ply_label_plugin_get_interface (void)
       .draw_control = draw_control,
       .is_control_hidden = is_control_hidden,
       .set_text_for_control = set_text_for_control,
+      .set_font_for_control = set_font_for_control,
       .set_color_for_control = set_color_for_control,
       .get_width_of_control = get_width_of_control,
       .get_height_of_control = get_height_of_control
-- 
1.7.0.6



More information about the plymouth mailing list