size_t Widget_GetInvalidArea( LCUI_Widget w, LinkedList *rects ) { LCUI_RectGroup group; if( !w || w == LCUIWidget_GetRoot() ) { LinkedList_Concat( rects, &self.rects ); return (size_t)rects->length; } group = RBTree_CustomGetData( &self.groups, w ); if( group ) { LinkedList_Concat( rects, &group->rects ); } return (size_t)rects->length; }
/** 更新数据 */ void TextLayer_Update( LCUI_TextLayer layer, LinkedList *rect_list ) { if( layer->task.update_bitmap ) { TextLayer_InvalidateRowsRect( layer, 0, -1 ); TextLayer_ReloadCharBitmap( layer ); TextLayer_InvalidateRowsRect( layer, 0, -1 ); layer->task.update_bitmap = FALSE; layer->task.redraw_all = TRUE; } if( layer->task.update_typeset ) { TextLayer_TextTypeset( layer, layer->task.typeset_start_row ); layer->task.update_typeset = FALSE; layer->task.typeset_start_row = 0; } layer->width = TextLayer_GetWidth( layer ); /* 如果坐标偏移量有变化,记录各个文本行区域 */ if( layer->new_offset_x != layer->offset_x || layer->new_offset_y != layer->offset_y ) { TextLayer_InvalidateRowsRect( layer, 0, -1 ); layer->offset_x = layer->new_offset_x; layer->offset_y = layer->new_offset_y; TextLayer_InvalidateRowsRect( layer, 0, -1 ); layer->task.redraw_all = TRUE; } if( rect_list ) { LinkedList_Concat( rect_list, &layer->dirty_rect ); } }