summaryrefslogtreecommitdiff
path: root/src/images/renderedText.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/images/renderedText.vala')
-rw-r--r--src/images/renderedText.vala75
1 files changed, 67 insertions, 8 deletions
diff --git a/src/images/renderedText.vala b/src/images/renderedText.vala
index 924742a..e4bb4cb 100644
--- a/src/images/renderedText.vala
+++ b/src/images/renderedText.vala
@@ -55,12 +55,36 @@ public class RenderedText : Image {
/// C'tor, creates a new image representation of a string.
/////////////////////////////////////////////////////////////////////
- public RenderedText(string text, int width, int height, string font) {
- var cached = this.cache.get("%s@%ux%u:%s".printf(text, width, height, font));
+ public RenderedText(string text, int width, int height, string font,
+ Color color, double scale) {
+
+ var cached = this.cache.get("%s@%ux%u@%f:%s:%f:%f:%f:%f".printf(text, width, height, scale, font,
+ color.r, color.g, color.b, color.a));
if (cached == null) {
- this.render_text(text, width, height, font);
- this.cache.set("%s@%ux%u:%s".printf(text, width, height, font), this.surface);
+ this.render_text(text, width, height, font, color, scale);
+ this.cache.set("%s@%ux%u@%f:%s:%f:%f:%f:%f".printf(text, width, height, scale, font,
+ color.r, color.g, color.b, color.a), this.surface);
+ } else {
+ this.surface = cached;
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////
+ /// C'tor, creates a new image representation of a string. This
+ /// string may contain markup information.
+ /////////////////////////////////////////////////////////////////////
+
+ public RenderedText.with_markup(string text, int width, int height, string font,
+ Color color, double scale) {
+
+ var cached = this.cache.get("%s@%ux%u@%f:%s:%f:%f:%f:%f".printf(text, width, height, scale, font,
+ color.r, color.g, color.b, color.a));
+
+ if (cached == null) {
+ this.render_markup(text, width, height, font, color, scale);
+ this.cache.set("%s@%ux%u@%f:%s:%f:%f:%f:%f".printf(text, width, height, scale, font,
+ color.r, color.g, color.b, color.a), this.surface);
} else {
this.surface = cached;
}
@@ -70,20 +94,21 @@ public class RenderedText : Image {
/// Creates a new transparent image, with text written onto.
/////////////////////////////////////////////////////////////////////
- public void render_text(string text, int width, int height, string font) {
+ public void render_text(string text, int width, int height, string font,
+ Color color, double scale) {
+
this.surface = new Cairo.ImageSurface(Cairo.Format.ARGB32, width, height);
var ctx = this.context();
- // set the color as specified in the current theme
- Color color = Config.global.theme.caption_color;
+ // set the color
ctx.set_source_rgb(color.r, color.g, color.g);
var layout = Pango.cairo_create_layout(ctx);
layout.set_width(Pango.units_from_double(width));
var font_description = Pango.FontDescription.from_string(font);
- font_description.set_size((int)(font_description.get_size() * Config.global.global_scale));
+ font_description.set_size((int)(font_description.get_size() * scale));
layout.set_font_description(font_description);
layout.set_text(text, -1);
@@ -105,6 +130,40 @@ public class RenderedText : Image {
Pango.cairo_update_layout(ctx, layout);
Pango.cairo_show_layout(ctx, layout);
}
+
+ /////////////////////////////////////////////////////////////////////
+ /// Creates a new transparent image, with text written onto.
+ /////////////////////////////////////////////////////////////////////
+
+ public void render_markup(string text, int width, int height, string font,
+ Color color, double scale) {
+
+ this.surface = new Cairo.ImageSurface(Cairo.Format.ARGB32, width, height);
+
+ var ctx = this.context();
+
+ // set the color
+ ctx.set_source_rgb(color.r, color.g, color.g);
+
+ var layout = Pango.cairo_create_layout(ctx);
+ layout.set_width(Pango.units_from_double(width));
+
+ var font_description = Pango.FontDescription.from_string(font);
+ font_description.set_size((int)(font_description.get_size() * scale));
+
+ layout.set_font_description(font_description);
+ layout.set_markup(text, -1);
+
+ layout.set_ellipsize(Pango.EllipsizeMode.END);
+ layout.set_alignment(Pango.Alignment.CENTER);
+
+ Pango.Rectangle extents;
+ layout.get_pixel_extents(null, out extents);
+ ctx.move_to(0, (int)(0.5*(height - extents.height)));
+
+ Pango.cairo_update_layout(ctx, layout);
+ Pango.cairo_show_layout(ctx, layout);
+ }
}
}