diff options
| author | yangfasheng <[email protected]> | 2017-12-12 19:46:38 +0800 |
|---|---|---|
| committer | yangfasheng <[email protected]> | 2017-12-12 19:46:38 +0800 |
| commit | 2d98c0e7be8e0803de4b4e8e9ba03635bcef91c8 (patch) | |
| tree | 2369b56b2cb936de281b8e8b335da94828298af3 /components/gui/src/dc_buffer.c | |
| parent | 44e17aa2772a48697604ba1122da4a0bb9015414 (diff) | |
gui 引擎代码更新;
Diffstat (limited to 'components/gui/src/dc_buffer.c')
| -rw-r--r-- | components/gui/src/dc_buffer.c | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/components/gui/src/dc_buffer.c b/components/gui/src/dc_buffer.c index 196184e1ad..00cead4abc 100644 --- a/components/gui/src/dc_buffer.c +++ b/components/gui/src/dc_buffer.c @@ -88,6 +88,7 @@ struct rtgui_dc *rtgui_dc_buffer_create_pixformat(rt_uint8_t pixel_format, int w dc->gc.font = rtgui_font_default(); dc->gc.textalign = RTGUI_ALIGN_LEFT | RTGUI_ALIGN_TOP; dc->pixel_format = pixel_format; + dc->pixel_alpha = 255; dc->width = w; dc->height = h; @@ -127,6 +128,7 @@ struct rtgui_dc *rtgui_img_dc_create_pixformat(rt_uint8_t pixel_format, dc->gc.font = rtgui_font_default(); dc->gc.textalign = RTGUI_ALIGN_LEFT | RTGUI_ALIGN_TOP; dc->pixel_format = pixel_format; + dc->pixel_alpha = 255; dc->width = image_item->image->w; dc->height = image_item->image->h; @@ -160,7 +162,8 @@ struct rtgui_dc *rtgui_dc_buffer_create_from_dc(struct rtgui_dc* dc) d->height); if (buffer != RT_NULL) { - rt_memcpy(buffer->pixel, d->pixel, d->pitch * d->height); + memcpy(buffer->pixel, d->pixel, d->pitch * d->height); + d->pixel_alpha = 255; return RTGUI_DC(buffer); } @@ -170,6 +173,15 @@ struct rtgui_dc *rtgui_dc_buffer_create_from_dc(struct rtgui_dc* dc) } RTM_EXPORT(rtgui_dc_buffer_create_from_dc); +void rtgui_dc_buffer_set_alpha(struct rtgui_dc* dc, rt_uint8_t pixel_alpha) +{ + struct rtgui_dc_buffer *d = (struct rtgui_dc_buffer*) dc; + if (d) + { + d->pixel_alpha = pixel_alpha; + } +} + rt_uint8_t *rtgui_dc_buffer_get_pixel(struct rtgui_dc *dc) { struct rtgui_dc_buffer *dc_buffer; @@ -465,10 +477,13 @@ static void rtgui_dc_buffer_blit(struct rtgui_dc *self, { /* use rtgui_blit */ - struct rtgui_blit_info info; + struct rtgui_blit_info info = { 0 }; struct rtgui_widget *owner; - info.a = 255; + if (self->type == RTGUI_DC_BUFFER) + info.a = dc->pixel_alpha; + else + info.a = 255; /* blit source */ info.src = _dc_get_pixel(dc, dc_point.x, dc_point.y); @@ -496,7 +511,7 @@ static void rtgui_dc_buffer_blit(struct rtgui_dc *self, { /* use rtgui_blit */ rt_uint8_t bpp, hw_bpp; - struct rtgui_blit_info info; + struct rtgui_blit_info info = { 0 }; struct rtgui_widget *owner; struct rtgui_region dest_region; struct rtgui_rect dest_extent; @@ -518,7 +533,10 @@ static void rtgui_dc_buffer_blit(struct rtgui_dc *self, rects = rtgui_region_rects(&dest_region); /* common info */ - info.a = 255; + if (self->type == RTGUI_DC_BUFFER) + info.a = dc->pixel_alpha; + else + info.a = 255; info.src_fmt = dc->pixel_format; info.src_pitch = dc->pitch; @@ -564,7 +582,7 @@ static void rtgui_dc_buffer_blit(struct rtgui_dc *self, else RT_ASSERT(0); /* change the logic coordinate to the device coordinate */ - rtgui_rect_moveto(dest_rect, owner->extent.x1, owner->extent.y1); + rtgui_rect_move(dest_rect, owner->extent.x1, owner->extent.y1); for (index = dest_rect->y1; index < dest_rect->y1 + rect_height; index ++) { @@ -602,9 +620,12 @@ static void rtgui_dc_buffer_blit(struct rtgui_dc *self, struct rtgui_dc_buffer *dest_dc = (struct rtgui_dc_buffer*)dest; /* use rtgui_blit to handle buffer blit */ - struct rtgui_blit_info info; + struct rtgui_blit_info info = { 0 }; - info.a = 255; + if (self->type == RTGUI_DC_BUFFER) + info.a = dc->pixel_alpha; + else + info.a = 255; /* blit source */ info.src = _dc_get_pixel(dc, dc_point.x, dc_point.y); @@ -645,7 +666,7 @@ static void rtgui_dc_buffer_blit_line(struct rtgui_dc *self, int x1, int x2, int x2 = dc->width-1; pixel = _dc_get_pixel(dc,x1,y); - rt_memcpy(pixel, line_data, (x2 - x1) * rtgui_color_get_bpp(dc->pixel_format)); + memcpy(pixel, line_data, (x2 - x1) * rtgui_color_get_bpp(dc->pixel_format)); } #ifdef RT_USING_DFS |
