提交 c89ea761 编写于 作者: B bernard.xiong

fix vline and hline coordinate issue

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@911 bbd45198-f89e-11dd-88c7-29a3b14d5316
上级 37b79104
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
* 2010-08-09 Bernard rename hardware dc to client dc * 2010-08-09 Bernard rename hardware dc to client dc
* 2010-09-13 Bernard fix rtgui_dc_client_blit_line issue, which found * 2010-09-13 Bernard fix rtgui_dc_client_blit_line issue, which found
* by appele * by appele
* 2010-09-14 Bernard fix vline and hline coordinate issue
*/ */
#include <rtgui/dc.h> #include <rtgui/dc.h>
#include <rtgui/dc_hw.h> #include <rtgui/dc_hw.h>
...@@ -41,6 +42,7 @@ static void rtgui_dc_client_get_rect(struct rtgui_dc* dc, rtgui_rect_t* rect); ...@@ -41,6 +42,7 @@ static void rtgui_dc_client_get_rect(struct rtgui_dc* dc, rtgui_rect_t* rect);
#define hw_driver (rtgui_graphic_driver_get_default()) #define hw_driver (rtgui_graphic_driver_get_default())
#define dc_set_foreground(c) dc->gc.foreground = c #define dc_set_foreground(c) dc->gc.foreground = c
#define dc_set_background(c) dc->gc.background = c #define dc_set_background(c) dc->gc.background = c
#define _int_swap(x, y) do {x ^= y; y ^= x; x ^= y;} while (0)
struct rtgui_dc* rtgui_dc_begin_drawing(rtgui_widget_t* owner) struct rtgui_dc* rtgui_dc_begin_drawing(rtgui_widget_t* owner)
{ {
...@@ -298,6 +300,7 @@ static void rtgui_dc_client_draw_vline(struct rtgui_dc* self, int x, int y1, int ...@@ -298,6 +300,7 @@ static void rtgui_dc_client_draw_vline(struct rtgui_dc* self, int x, int y1, int
x = x + owner->extent.x1; x = x + owner->extent.x1;
y1 = y1 + owner->extent.y1; y1 = y1 + owner->extent.y1;
y2 = y2 + owner->extent.y1; y2 = y2 + owner->extent.y1;
if (y1 > y2) _int_swap(y1, y2);
if (owner->clip.data == RT_NULL) if (owner->clip.data == RT_NULL)
{ {
...@@ -353,6 +356,7 @@ static void rtgui_dc_client_draw_hline(struct rtgui_dc* self, int x1, int x2, in ...@@ -353,6 +356,7 @@ static void rtgui_dc_client_draw_hline(struct rtgui_dc* self, int x1, int x2, in
/* convert logic to device */ /* convert logic to device */
x1 = x1 + owner->extent.x1; x1 = x1 + owner->extent.x1;
x2 = x2 + owner->extent.x1; x2 = x2 + owner->extent.x1;
if (x1 > x2) _int_swap(x1, x2);
y = y + owner->extent.y1; y = y + owner->extent.y1;
if (owner->clip.data == RT_NULL) if (owner->clip.data == RT_NULL)
...@@ -434,6 +438,7 @@ static void rtgui_dc_client_blit_line (struct rtgui_dc* self, int x1, int x2, in ...@@ -434,6 +438,7 @@ static void rtgui_dc_client_blit_line (struct rtgui_dc* self, int x1, int x2, in
/* convert logic to device */ /* convert logic to device */
x1 = x1 + owner->extent.x1; x1 = x1 + owner->extent.x1;
x2 = x2 + owner->extent.x1; x2 = x2 + owner->extent.x1;
if (x1 > x2) _int_swap(x1, x2);
y = y + owner->extent.y1; y = y + owner->extent.y1;
if (rtgui_region_is_flat(&(owner->clip)) == RT_EOK) if (rtgui_region_is_flat(&(owner->clip)) == RT_EOK)
...@@ -494,11 +499,7 @@ static rtgui_gc_t* rtgui_dc_client_get_gc(struct rtgui_dc* self) ...@@ -494,11 +499,7 @@ static rtgui_gc_t* rtgui_dc_client_get_gc(struct rtgui_dc* self)
{ {
rtgui_widget_t *owner; rtgui_widget_t *owner;
if (self == RT_NULL) RT_ASSERT(self != RT_NULL);
{
rt_kprintf("why!!\n");
return RT_NULL;
}
/* get owner */ /* get owner */
owner = RTGUI_CONTAINER_OF(self, struct rtgui_widget, dc_type); owner = RTGUI_CONTAINER_OF(self, struct rtgui_widget, dc_type);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册