aboutsummaryrefslogtreecommitdiffstats
path: root/render.c
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2017-04-13 00:56:27 +0200
committerGerd Hoffmann <kraxel@redhat.com>2017-04-13 00:56:27 +0200
commitec2fd3af076bacdfa90185b3e3bc26dd76f964c7 (patch)
tree78dfa2f63c3379b5360f8ab7a9521f8ebbf7503f /render.c
parentc9b7dad013c6679fc9b78acef049e96258e2b786 (diff)
downloaddrminfo-ec2fd3af076bacdfa90185b3e3bc26dd76f964c7.tar.gz
image laoder
Diffstat (limited to 'render.c')
-rw-r--r--render.c54
1 files changed, 43 insertions, 11 deletions
diff --git a/render.c b/render.c
index 70f02af..9aac29c 100644
--- a/render.c
+++ b/render.c
@@ -1,3 +1,4 @@
+#include <stdio.h>
#include <stddef.h>
#include <cairo.h>
@@ -15,9 +16,9 @@ static void render_color_bar(cairo_t *cr, int x, int y, int w, int h,
gr = cairo_pattern_create_linear(x, y+h/2, w, y+h/2);
cairo_pattern_add_color_stop_rgb(gr, 0, 0, 0, 0);
cairo_pattern_add_color_stop_rgb(gr, 1, r, g, b);
- cairo_rectangle (cr, x, y, w, h);
- cairo_set_source (cr, gr);
- cairo_fill (cr);
+ cairo_rectangle(cr, x, y, w, h);
+ cairo_set_source(cr, gr);
+ cairo_fill(cr);
cairo_pattern_destroy(gr);
cairo_select_font_face(cr, "mono",
@@ -26,7 +27,7 @@ static void render_color_bar(cairo_t *cr, int x, int y, int w, int h,
if (l2) {
cairo_set_source_rgb(cr, 1, 1, 1);
cairo_set_font_size(cr, h/2 - pad);
- cairo_font_extents (cr, &ext);
+ cairo_font_extents(cr, &ext);
cairo_move_to(cr, x + pad, y + pad + ext.ascent);
cairo_show_text(cr, l1);
cairo_move_to(cr, x + pad, y + pad + ext.ascent + ext.height);
@@ -34,7 +35,7 @@ static void render_color_bar(cairo_t *cr, int x, int y, int w, int h,
} else {
cairo_set_source_rgb(cr, r, g, b);
cairo_set_font_size(cr, h - 2*pad);
- cairo_font_extents (cr, &ext);
+ cairo_font_extents(cr, &ext);
cairo_move_to(cr, x + pad, y + pad + ext.ascent);
cairo_show_text(cr, l1);
}
@@ -49,13 +50,13 @@ void render_test(cairo_t *cr, int width, int height, const char *l1, const char
bar -= 10;
cairo_set_source_rgb(cr, 0, 0, 0);
- cairo_rectangle (cr, 0, 0, width, height);
- cairo_fill (cr);
+ cairo_rectangle(cr, 0, 0, width, height);
+ cairo_fill(cr);
- cairo_set_line_width (cr, 1);
- cairo_set_source_rgb (cr, 1, 1, 1);
- cairo_rectangle (cr, pad - 0.5, pad - 0.5, width - 2*pad + 1, 7*bar + 1);
- cairo_stroke (cr);
+ cairo_set_line_width(cr, 2);
+ cairo_set_source_rgb(cr, 1, 1, 1);
+ cairo_rectangle(cr, pad - 1, pad - 1, width - 2*pad + 2, 7*bar + 2);
+ cairo_stroke(cr);
render_color_bar(cr, pad, bar * 0 + pad, width - 2*pad, bar,
0.6, 0.6, 0.6, l1, l2);
@@ -69,4 +70,35 @@ void render_test(cairo_t *cr, int width, int height, const char *l1, const char
cairo_show_page(cr);
}
+void render_image(cairo_t *cr, int width, int height, cairo_surface_t *image)
+{
+ double xs, ys, dx, dy;
+ int iw, ih;
+
+ cairo_set_source_rgb(cr, 0, 0, 0);
+ cairo_rectangle(cr, 0, 0, width, height);
+ cairo_fill(cr);
+
+ iw = cairo_image_surface_get_width(image);
+ ih = cairo_image_surface_get_height(image);
+ xs = (double)width / iw;
+ ys = (double)height / ih;
+
+ if (xs > ys) {
+ xs = ys;
+ dx = (width - xs * iw) / 2;
+ dy = 0;
+ } else {
+ ys = xs;
+ dx = 0;
+ dy = (height - ys * ih) / 2;
+ }
+
+ cairo_translate(cr, dx, dy);
+ cairo_scale(cr, xs, ys);
+ cairo_set_source_surface(cr, image, 0, 0);
+ cairo_rectangle(cr, 0, 0, iw, ih);
+ cairo_fill(cr);
+ cairo_show_page(cr);
+}