From ec2fd3af076bacdfa90185b3e3bc26dd76f964c7 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Thu, 13 Apr 2017 00:56:27 +0200 Subject: image laoder --- render.c | 54 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 11 deletions(-) (limited to 'render.c') diff --git a/render.c b/render.c index 70f02af..9aac29c 100644 --- a/render.c +++ b/render.c @@ -1,3 +1,4 @@ +#include #include #include @@ -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); +} -- cgit