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_blend.c | |
| parent | 44e17aa2772a48697604ba1122da4a0bb9015414 (diff) | |
gui 引擎代码更新;
Diffstat (limited to 'components/gui/src/dc_blend.c')
| -rw-r--r-- | components/gui/src/dc_blend.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/components/gui/src/dc_blend.c b/components/gui/src/dc_blend.c index 83081f495b..1bf572ede1 100644 --- a/components/gui/src/dc_blend.c +++ b/components/gui/src/dc_blend.c @@ -1651,7 +1651,7 @@ rtgui_dc_blend_fill_rect(struct rtgui_dc* dst, const rtgui_rect_t *rect, /* convert logic to device */ draw_rect = *rect; - rtgui_rect_moveto(&draw_rect,owner->extent.x1, owner->extent.y1); + rtgui_rect_move(&draw_rect,owner->extent.x1, owner->extent.y1); /* calculate rect intersect */ if (prect->y1 > draw_rect.y2 || prect->y2 <= draw_rect.y1) return ; @@ -1669,7 +1669,7 @@ rtgui_dc_blend_fill_rect(struct rtgui_dc* dst, const rtgui_rect_t *rect, prect = ((rtgui_rect_t *)(owner->clip.data + index + 1)); draw_rect = *rect; - rtgui_rect_moveto(&draw_rect,owner->extent.x1, owner->extent.y1); + rtgui_rect_move(&draw_rect,owner->extent.x1, owner->extent.y1); /* calculate rect intersect */ if (prect->y1 > draw_rect.y2 || prect->y2 <= draw_rect.y1) continue; @@ -1680,6 +1680,21 @@ rtgui_dc_blend_fill_rect(struct rtgui_dc* dst, const rtgui_rect_t *rect, } } } + else if (dst->type == RTGUI_DC_HW) + { + rtgui_rect_t draw_rect = *rect; + struct rtgui_dc_hw *dc = (struct rtgui_dc_hw *) dst; + + draw_rect.x2 = dc->owner->extent.x1 + draw_rect.x2 - draw_rect.x1; + draw_rect.y2 = dc->owner->extent.y1 + draw_rect.y2 - draw_rect.y1; + + draw_rect.x1 = dc->owner->extent.x1 > 0 ? dc->owner->extent.x1 : 0; + draw_rect.y1 = dc->owner->extent.y1 > 0 ? dc->owner->extent.y1 : 0; + draw_rect.x2 = draw_rect.x2 > hw_driver->width ? hw_driver->width : draw_rect.x2; + draw_rect.y2 = draw_rect.y2 > hw_driver->height ? hw_driver->height : draw_rect.y2; + + func(dst, &draw_rect, blendMode, r, g, b, a); + } else { func(dst, rect, blendMode, r, g, b, a); @@ -1764,7 +1779,7 @@ rtgui_dc_blend_fill_rects(struct rtgui_dc * dst, const rtgui_rect_t *rects, int /* convert logic to device */ draw_rect = rect; - rtgui_rect_moveto(&draw_rect,owner->extent.x1, owner->extent.y1); + rtgui_rect_move(&draw_rect,owner->extent.x1, owner->extent.y1); /* calculate rect intersect */ if (prect->y1 > draw_rect.y2 || prect->y2 <= draw_rect.y1) return ; @@ -1782,7 +1797,7 @@ rtgui_dc_blend_fill_rects(struct rtgui_dc * dst, const rtgui_rect_t *rects, int prect = ((rtgui_rect_t *)(owner->clip.data + index + 1)); draw_rect = rect; - rtgui_rect_moveto(&draw_rect,owner->extent.x1, owner->extent.y1); + rtgui_rect_move(&draw_rect,owner->extent.x1, owner->extent.y1); /* calculate rect intersect */ if (prect->y1 > draw_rect.y2 || prect->y2 <= draw_rect.y1) continue; |
