libpayload: cbgfx: Add color mapping functionality

Similar to set_blend(), add set_color_map() for mapping background and
foreground colors of a bitmap. Also add clear_color_map() for clearing
the saved color mappings.

Note that when drawing a bitmap, the color mapping will be applied
before blending.

Also remove unnecessary initialization for static variable 'blend'.

BRANCH=puff
BUG=b:146399181, b:162357639
TEST=emerge-puff libpayload

Change-Id: I640ff3e8455cd4aaa5a41d03a0183dff282648a5
Signed-off-by: Yu-Ping Wu <yupingso@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/44375
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Joel Kitching <kitching@google.com>
Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
Yu-Ping Wu
2020-08-03 12:32:43 +08:00
committed by Julius Werner
parent e7ef6c380d
commit 7b54c15a67
2 changed files with 75 additions and 11 deletions

View File

@ -227,6 +227,24 @@ int draw_bitmap_direct(const void *bitmap, size_t size,
*/
int get_bitmap_dimension(const void *bitmap, size_t sz, struct scale *dim_rel);
/**
* Setup color mappings of background and foreground colors. Black and white
* pixels will be mapped to the background and foreground colors, respectively.
* Call clear_color_map() to disabled color mapping.
*
* @param[in] background Background color.
* @param[in] foreground Foreground color.
*
* @return CBGFX_* error codes
*/
int set_color_map(const struct rgb_color *background,
const struct rgb_color *foreground);
/**
* Clear color mappings.
*/
void clear_color_map(void);
/**
* Setup alpha and rgb values for alpha blending. When alpha is != 0,
* this enables a translucent layer of color (defined by rgb) to be
@ -244,8 +262,6 @@ int set_blend(const struct rgb_color *rgb, uint8_t alpha);
/**
* Clear alpha and rgb values, thus disabling any alpha blending.
*
* @return CBGFX_* error codes
*/
void clear_blend(void);