[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