From dd49eccb50b99ca34d3cecc844e38266a0f6a6cf Mon Sep 17 00:00:00 2001 From: Daisuke Nojiri Date: Wed, 26 Aug 2015 14:47:06 -0700 Subject: cbgfx: allow draw_bitmap to render outside canvas This change allows draw_bitmap to draw an image outside the canvas with the original size if the scale parameter is zero. This is used for example when drawing a splash screen which has to be positioned at a pixel perfect location. BUG=none BRANCH=master TEST=Draw pictures and boxes on Samus and Ryu Change-Id: Ia2d8799184d1aa192e2c50850e248bee8f234006 Signed-off-by: Patrick Georgi Original-Commit-Id: 45d4717fe5c3e3554bd79b63ade490d88cf00bbe Original-Change-Id: I48aa21122cfc2ee43bcb1b8f87b00c66abdc230e Original-Signed-off-by: Daisuke Nojiri Original-Reviewed-on: https://chromium-review.googlesource.com/295961 Original-Reviewed-by: Aaron Durbin Reviewed-on: http://review.coreboot.org/11923 Tested-by: build bot (Jenkins) --- payloads/libpayload/include/cbgfx.h | 50 +++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 16 deletions(-) (limited to 'payloads/libpayload/include/cbgfx.h') diff --git a/payloads/libpayload/include/cbgfx.h b/payloads/libpayload/include/cbgfx.h index 074a42d408..2d6b6e938a 100644 --- a/payloads/libpayload/include/cbgfx.h +++ b/payloads/libpayload/include/cbgfx.h @@ -11,13 +11,15 @@ /* * API error codes */ -#define CBGFX_SUCCESS 0 +#define CBGFX_SUCCESS 0 /* unknown error */ -#define CBGFX_ERROR_UNKNOWN 1 +#define CBGFX_ERROR_UNKNOWN 1 /* failed to initialize cbgfx library */ -#define CBGFX_ERROR_INIT 2 +#define CBGFX_ERROR_INIT 2 +/* drawing beyond screen boundary */ +#define CBGFX_ERROR_SCREEN_BOUNDARY 3 /* drawing beyond canvas boundary */ -#define CBGFX_ERROR_BOUNDARY 3 +#define CBGFX_ERROR_CANVAS_BOUNDARY 4 /* bitmap error: signature mismatch */ #define CBGFX_ERROR_BITMAP_SIGNATURE 0x10 /* bitmap error: unsupported format */ @@ -27,17 +29,32 @@ /* bitmap error: scaling out of range */ #define CBGFX_ERROR_SCALE_OUT_OF_RANGE 0x13 +struct fraction { + int32_t nume; + int32_t deno; +}; + +struct scale { + struct fraction x; + struct fraction y; +}; + struct vector { union { - uint32_t x; - uint32_t width; + int32_t x; + int32_t width; }; union { - uint32_t y; - uint32_t height; + int32_t y; + int32_t height; }; }; +struct rect { + struct vector offset; + struct vector size; +}; + struct rgb_color { uint8_t red; uint8_t green; @@ -59,16 +76,14 @@ struct rgb_color { /* * draw a box filled with a color on screen * - * top_left_rel: coordinate of top left corner of the box, relative to canvas. - * (0 - CANVAS_SCALE). - * size_rel: width and height of the box, relative to canvas. (0 - CANVAS_SCALE) + * box: .offset points the coordinate of the top left corner and .size specifies + * width and height of the box. Both are relative to the canvas size thus scale + * from 0 to CANVAS_SCALE (0 to 100%). * rgb: RGB color of the box. * * return: CBGFX_* error codes */ -int draw_box(const struct vector *top_left_rel, - const struct vector *size_rel, - const struct rgb_color *rgb); +int draw_box(const struct rect *box, const struct rgb_color *rgb); /* * Clear the canvas @@ -79,8 +94,11 @@ int clear_canvas(struct rgb_color *rgb); * Draw a bitmap image on screen. * * top_left_rel: coordinate of the top left corner of the image relative to the - * canvas (0 - CANVAS_SCALE). - * scale_rel: scale factor relative to the canvas width (0 - CANVAS_SCALE). + * canvas (0 - CANVAS_SCALE). If scale_rel is zero, this is treated as absolute + * coordinate. + * scale_rel: scale factor relative to the canvas width (0 - CANVAS_SCALE). If + * this is zero, scaling is turned off and the image is rendered with the + * original size. * bitmap: pointer to the bitmap data, starting from the file header. * size: size of the bitmap data * -- cgit v1.2.3