Ejemplo n.º 1
0
void lcd_clearui( u32 color )
{
	u32 x, y;
	u32 height = screen_get_height();
	u32	width = screen_get_width();
	u32 *dst = lcd_bufferui();
	for( y = 0; y < height; y++ )
	{
		for( x = 0; x < width; x+=8 )
		{
			dst[0] = color;
			dst[1] = color;
			dst[2] = color;
			dst[3] = color;
			dst[4] = color;
			dst[5] = color;
			dst[6] = color;
			dst[7] = color;
			dst += 8;
		}
	}
}
Ejemplo n.º 2
0
static si_t _server_lib_handle_graphics_ops(addr_t body, si_t detail_type, union respond* respond_ptr, addr_t app_addr)
{
    /** 存储调用实际操作函数结果的变量 **/
    si_t func_ret = 0;
    /** 存储_server_lib_handle_request()返回值的变量 **/
    si_t handler_ret = SELECTER_RETURN_TYPE_CONTINUE;
    switch(detail_type)
    {
    case REQUEST_TYPE_CLEAR:
        func_ret = request_call_by_clear(body, engine_clear);
        respond_set_normal(respond_ptr, RESPOND_TYPE_CLEAR, func_ret);
        break;
    case REQUEST_TYPE_CLEAR_WHITE:
        func_ret = request_call_by_clear_white(body, engine_clear_white);
        respond_set_normal(respond_ptr, RESPOND_TYPE_CLEAR_WHITE, func_ret);
        break;
    case REQUEST_TYPE_CLEAR_BLACK:
        func_ret = request_call_by_clear_black(body, engine_clear_black);
        respond_set_normal(respond_ptr, RESPOND_TYPE_CLEAR_BLACK, func_ret);
        break;
    case REQUEST_TYPE_CPY_AREA:
        func_ret = request_call_by_cpy_area(body, engine_cpy_area);
        respond_set_normal(respond_ptr, RESPOND_TYPE_CPY_AREA, func_ret);
        break;
    case REQUEST_TYPE_DRAW_ARROW:
        func_ret = request_call_by_draw_arrow(body, engine_draw_arrow);
        respond_set_normal(respond_ptr, RESPOND_TYPE_DRAW_ARROW, func_ret);
        break;
    case REQUEST_TYPE_DRAW_BITMAP:
        func_ret = request_call_by_draw_bitmap(body, engine_draw_bitmap);
        respond_set_normal(respond_ptr, RESPOND_TYPE_DRAW_BITMAP, func_ret);
        break;
    case REQUEST_TYPE_DRAW_CIRCLE:
        func_ret = request_call_by_draw_circle(body, engine_draw_circle);
        respond_set_normal(respond_ptr, RESPOND_TYPE_DRAW_CIRCLE, func_ret);
        break;
    case REQUEST_TYPE_DRAW_ELLIPSE:
        func_ret = request_call_by_draw_ellipse(body, engine_draw_ellipse);
        respond_set_normal(respond_ptr, RESPOND_TYPE_DRAW_ELLIPSE, func_ret);
        break;
    case REQUEST_TYPE_DRAW_IMG:
        func_ret = request_call_by_draw_img(body, engine_draw_img);
        respond_set_normal(respond_ptr, RESPOND_TYPE_DRAW_IMG, func_ret);
        break;
    case REQUEST_TYPE_DRAW_LINE:
        func_ret = request_call_by_draw_line(body, engine_draw_line);
        respond_set_normal(respond_ptr, RESPOND_TYPE_DRAW_LINE, func_ret);
        break;
    case REQUEST_TYPE_DRAW_POINT:
        func_ret = request_call_by_draw_point(body, engine_draw_point);
        respond_set_normal(respond_ptr, RESPOND_TYPE_DRAW_POINT, func_ret);
        break;
    case REQUEST_TYPE_DRAW_POLYGON:
        func_ret = request_call_by_draw_polygon(body, engine_draw_polygon);
        respond_set_normal(respond_ptr, RESPOND_TYPE_DRAW_POLYGON, func_ret);
        break;
    case REQUEST_TYPE_DRAW_RECTANGLE:
        func_ret = request_call_by_draw_rectangle(body, engine_draw_rectangle);
        respond_set_normal(respond_ptr, RESPOND_TYPE_DRAW_RECTANGLE, func_ret);
        break;
    case REQUEST_TYPE_DRAW_X:
        func_ret = request_call_by_draw_x(body, engine_draw_x);
        respond_set_normal(respond_ptr, RESPOND_TYPE_DRAW_X, func_ret);
        break;
    case REQUEST_TYPE_FILL_ARROW:
        func_ret = request_call_by_fill_arrow(body, engine_fill_arrow);
        respond_set_normal(respond_ptr, RESPOND_TYPE_FILL_ARROW, func_ret);
        break;
    case REQUEST_TYPE_FILL_CIRCLE:
        func_ret = request_call_by_fill_circle(body, engine_fill_circle);
        respond_set_normal(respond_ptr, RESPOND_TYPE_FILL_CIRCLE, func_ret);
        break;
    case REQUEST_TYPE_FILL_ELLIPSE:
        func_ret = request_call_by_fill_ellipse(body, engine_fill_ellipse);
        respond_set_normal(respond_ptr, RESPOND_TYPE_FILL_ELLIPSE, func_ret);
        break;
    case REQUEST_TYPE_FILL_RECTANGLE:
        func_ret = request_call_by_fill_rectangle(body, engine_fill_rectangle);
        respond_set_normal(respond_ptr, RESPOND_TYPE_FILL_RECTANGLE, func_ret);
        break;
    case REQUEST_TYPE_FILL_X:
        func_ret = request_call_by_fill_x(body, engine_fill_x);
        respond_set_normal(respond_ptr, RESPOND_TYPE_FILL_X, func_ret);
        break;
    case REQUEST_TYPE_GET_COLOR_LIMIT:
    {
        struct color_limit func_ret = {0};
        engine_get_color_limit(&func_ret);
        respond_set_color_limit(respond_ptr, RESPOND_TYPE_GET_COLOR_LIMIT, &func_ret);
    }
    break;
    case REQUEST_TYPE_GET_SCREEN_WIDTH:
        func_ret = screen_get_width();
        respond_set_normal(respond_ptr, RESPOND_TYPE_GET_SCREEN_WIDTH, func_ret);
        break;
    case REQUEST_TYPE_GET_SCREEN_HEIGHT:
        func_ret = screen_get_height();
        respond_set_normal(respond_ptr, RESPOND_TYPE_GET_SCREEN_HEIGHT, func_ret);
        break;
    case REQUEST_TYPE_GET_COLOR:
    {
        struct color* func_ret_ptr = request_call_by_get_color(body, engine_get_color);
        respond_set_color(respond_ptr, RESPOND_TYPE_GET_COLOR, func_ret_ptr);
    }
    break;
    case REQUEST_TYPE_GET_AREA:
    {
        struct rectangle* func_ret_ptr = request_call_by_get_area(body, engine_get_area);
        respond_set_rectangle(respond_ptr, RESPOND_TYPE_GET_AREA, func_ret_ptr);
    }
    break;
    case REQUEST_TYPE_GET_FONT_WIDTH:
        func_ret = request_call_by_get_font_width(body, engine_get_font_width);
        respond_set_normal(respond_ptr, RESPOND_TYPE_GET_FONT_WIDTH, func_ret);
        break;
    case REQUEST_TYPE_GET_FONT_HEIGHT:
        func_ret = request_call_by_get_font_height(body, engine_get_font_height);
        respond_set_normal(respond_ptr, RESPOND_TYPE_GET_FONT_HEIGHT, func_ret);
        break;
    case REQUEST_TYPE_SET_AREA:
        func_ret = request_call_by_set_area(body, engine_set_area);
        respond_set_normal(respond_ptr, RESPOND_TYPE_SET_AREA, func_ret);
        break;
    case REQUEST_TYPE_SET_COLOR:
        func_ret = request_call_by_set_color(body, engine_set_color);
        respond_set_normal(respond_ptr, RESPOND_TYPE_SET_COLOR, func_ret);
        break;
    case REQUEST_TYPE_SET_FONT:
        func_ret = request_call_by_set_font(body, engine_set_font);
        respond_set_normal(respond_ptr, RESPOND_TYPE_SET_FONT, func_ret);
        break;
    case REQUEST_TYPE_SHOW_TEXT:
        func_ret = request_call_by_show_text(body, engine_show_text);
        respond_set_normal(respond_ptr, RESPOND_TYPE_SHOW_TEXT, func_ret);
        break;
    default:
        /**
         * 不是绘制图形类的请求,接下来查看是否为窗口管理类请求
         **/
        handler_ret = -1;
        break;
    }
    return handler_ret;
}
Ejemplo n.º 3
0
ERRCODE RootCallBack( struct XGUI_WND * hWnd , XGUI_MSG * msg )
{
	static u32 * bg = NULL;
	int x, y;
	
	int pitch = screen_get_width();
	
	switch( msg->type )
	{
		case XGUI_MSG_DRAW:
		{
			u32 * dst = lcd_bufferui();
			u32 * src = bg;
			int max_x = screen_get_width();
			int max_y = screen_get_height();
			
			XGUI_RECT *rect = (XGUI_RECT *)msg->data;
			if( src == NULL )
			{
				XGUI_RectFill( hWnd, rect, 0x000000 );
				break;
			}
			
			max_x = (rect->right - rect->left);
			max_y = (rect->bottom - rect->top);
			for( y = 0; y < max_y; y+=4 )
			{
				src = bg + rect->left/4 + (screen_get_width()/4) * ((rect->top+y)/4);
				//src += 
				dst = lcd_bufferui() + rect->left + screen_get_width() * (rect->top+y);
				
				for( x = 0; x < max_x; x+=4 )
				{
					dst[0] = *src;
					dst[1] = *src;
					dst[2] = *src;
					dst[3] = *src;
					dst[pitch+0] = *src;
					dst[pitch+1] = *src;
					dst[pitch+2] = *src;
					dst[pitch+3] = *src;
					dst[pitch*2+0] = *src;
					dst[pitch*2+1] = *src;
					dst[pitch*2+2] = *src;
					dst[pitch*2+3] = *src;
					dst[pitch*3+0] = *src;
					dst[pitch*3+1] = *src;
					dst[pitch*3+2] = *src;
					dst[pitch*3+3] = *src;
					dst += 4;
					src ++;
				}
				dst += pitch*3;
			}
			break;
		}
		case XGUI_MSG_INIT:
		{	//缩略图显示背景
			u32 * src = lcd_bufferui();
			u32 * dst;
			int max_x = screen_get_width()/4;
			int max_y = screen_get_height()/4;
			
			bg = malloc( max_x*max_y*4 );
			if( bg == NULL )
			{
				TRACE_LOG("malloc error");
				break;
			}
			dst = bg;
			for( y = 0; y < max_y; y++ )
			{
				for( x = 0; x < max_x; x++ )
				{
					*dst =(	(src[0]&0xF0F0F0)+
							(src[1]&0xF0F0F0)+
							(src[2]&0xF0F0F0)+
							(src[3]&0xF0F0F0)+
							(src[pitch+0]&0xF0F0F0)+
							(src[pitch+1]&0xF0F0F0)+
							(src[pitch+2]&0xF0F0F0)+
							(src[pitch+3]&0xF0F0F0)+
							(src[pitch*2+0]&0xF0F0F0)+
							(src[pitch*2+1]&0xF0F0F0)+
							(src[pitch*2+2]&0xF0F0F0)+
							(src[pitch*2+3]&0xF0F0F0)+
							(src[pitch*3+0]&0xF0F0F0)+
							(src[pitch*3+1]&0xF0F0F0)+
							(src[pitch*3+2]&0xF0F0F0)+
							(src[pitch*3+3]&0xF0F0F0)
							)>>4;
					src += 4;
					dst ++;
				}
				src += pitch*3;
			}
			break;
		}
		case XGUI_MSG_DESTROY:
		{
			if(bg)
				free(bg);
			break;
		}
	}
	return ERRCODE_NONE;
}
Ejemplo n.º 4
0
void lcd_clear32( u32 color )
{
	memset( lcd_get_cframe() , color , screen_get_width() * screen_get_height()* 4 );
}