diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2017-04-13 00:56:27 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2017-04-13 00:56:27 +0200 |
commit | ec2fd3af076bacdfa90185b3e3bc26dd76f964c7 (patch) | |
tree | 78dfa2f63c3379b5360f8ab7a9521f8ebbf7503f /render.c | |
parent | c9b7dad013c6679fc9b78acef049e96258e2b786 (diff) | |
download | drminfo-ec2fd3af076bacdfa90185b3e3bc26dd76f964c7.tar.gz |
image laoder
Diffstat (limited to 'render.c')
-rw-r--r-- | render.c | 54 |
1 files changed, 43 insertions, 11 deletions
@@ -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); +} |