/** 清除已记录的无效矩形 */ 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 ); }
/** 销毁TextLayer */ void TextLayer_Destroy( LCUI_TextLayer layer ) { RectList_Clear( &layer->dirty_rect ); Graph_Free( &layer->graph ); TextRowList_Destroy( &layer->rowlist ); free( layer ); }
/** 更新各种图形元素的显示 */ 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 ); }
void LCUIWidget_FreeRenderer( void ) { self.active = FALSE; RectList_Clear( &self.rects ); RBTree_Destroy( &self.groups ); }
static void OnDestroyGroup( void *data ) { LCUI_RectGroup group = data; RectList_Clear( &group->rects ); group->widget = NULL; }