예제 #1
0
/** 清除已记录的无效矩形 */
void TextLayer_ClearInvalidRect( LCUI_TextLayer layer )
{
	LinkedListNode *node;
	LCUI_Graph invalid_graph;

	if( !layer->is_using_buffer ) {
		RectList_Clear( &layer->dirty_rect );
		return;
	}
	for( LinkedList_Each( node, &layer->dirty_rect ) ) {
		Graph_Quote( &invalid_graph, &layer->graph, node->data );
		Graph_FillAlpha( &invalid_graph, 0 );
	}
	RectList_Clear( &layer->dirty_rect );
}
예제 #2
0
/** 销毁TextLayer */
void TextLayer_Destroy( LCUI_TextLayer layer )
{
	RectList_Clear( &layer->dirty_rect );
	Graph_Free( &layer->graph );
	TextRowList_Destroy( &layer->rowlist );
	free( layer );
}
예제 #3
0
/** 更新各种图形元素的显示 */
static void LCUIDisplay_Update(void)
{
	LinkedList rlist;
	SurfaceRecord *p_sr;
	LinkedListNode *sn, *rn;
	LCUI_PaintContext paint;
	LinkedList_Init( &rlist );
	/* 遍历当前的 surface 记录列表 */
	for( LinkedList_Each( sn, &display.surfaces ) ) {
		p_sr = sn->data;
		if( !p_sr->widget || !p_sr->surface
		 || !Surface_IsReady(p_sr->surface) ) {
			continue;
		}
		Surface_Update( p_sr->surface );
		/* 收集无效区域记录 */
		Widget_ProcInvalidArea( p_sr->widget, &rlist );
		/* 在 surface 上逐个重绘无效区域 */
		for( LinkedList_Each( rn, &rlist ) ) {
			paint = Surface_BeginPaint( p_sr->surface, rn->data );
			if( !paint ) {
				continue;
			}
			DEBUG_MSG( "[%s]: render rect: (%d,%d,%d,%d)\n",
				p_sr->widget->type, paint->rect.left,
				paint->rect.top, paint->rect.w, paint->rect.h );
			Widget_Render( p_sr->widget, paint );
			if( display.show_rect_border ) {
				DrawBorder( paint );
			}
			Surface_EndPaint( p_sr->surface, paint );
		}
		if( rlist.length > 0 ) {
			Surface_Present( p_sr->surface );
		}
		RectList_Clear( &rlist );
	}
	RectList_Clear( &rlist );
}
예제 #4
0
void LCUIWidget_FreeRenderer( void )
{
	self.active = FALSE;
	RectList_Clear( &self.rects );
	RBTree_Destroy( &self.groups );
}
예제 #5
0
static void OnDestroyGroup( void *data )
{
	LCUI_RectGroup group = data;
	RectList_Clear( &group->rects );
	group->widget = NULL;
}