void TextLayer_Init( LCUI_TextLayer *layer ) { layer->max_width = 0; layer->max_height = 0; layer->offset_x = 0; layer->offset_y = 0; layer->new_offset_x = 0; layer->new_offset_y = 0; layer->insert_x = 0; layer->insert_y = 0; layer->is_mulitiline_mode = FALSE; layer->is_autowrap_mode = FALSE; layer->is_using_style_tags = FALSE; layer->is_using_buffer = TRUE; layer->text_align = TEXT_ALIGN_LEFT; layer->row_list.max_rows = 0; layer->row_list.rows = 0; layer->row_list.rowdata = NULL; TextStyle_Init( &layer->text_style ); TaskData_Init( &layer->task ); DirtyRectList_Init( &layer->dirty_rect ); Graph_Init( &layer->graph ); TextRowList_InsertNewRow( &layer->row_list, 0 ); layer->graph.color_type = COLOR_TYPE_ARGB; }
/** 清空文本 */ void TextLayer_ClearText( LCUI_TextLayer layer ) { layer->length = 0; layer->insert_x = 0; layer->insert_y = 0; layer->width = 0; TextLayer_InvalidateRowsRect( layer, 0, -1 ); TextRowList_Destroy( &layer->rowlist ); LinkedList_Clear( &layer->style_cache, (FuncPtr)TextStyle_Destroy ); TextRowList_InsertNewRow( &layer->rowlist, 0 ); layer->task.redraw_all = TRUE; }
/** 对文本行进行断行 */ static void TextLayer_BreakTextRow( LCUI_TextLayer layer, int i_row, int col, EOLChar eol ) { int n; TextRow txtrow, next_txtrow; txtrow = layer->rowlist.rows[i_row]; next_txtrow = TextRowList_InsertNewRow( &layer->rowlist, i_row + 1 ); /* 将本行原有的行尾符转移至下一行 */ next_txtrow->eol = txtrow->eol; txtrow->eol = eol; for( n = txtrow->length - 1; n >= col; --n ) { TextRow_Insert( next_txtrow, 0, txtrow->string[n] ); txtrow->string[n] = NULL; } txtrow->length = col; TextLayer_UpdateRowSize( layer, txtrow ); TextLayer_UpdateRowSize( layer, next_txtrow ); }
/** 对文本行进行断行 */ static void TextLayer_BreakTextRow( LCUI_TextLayer *layer, int i_row, int col, EOLChar eol ) { int n; TextRowData *p_row, *p_next_row; p_row = layer->row_list.rowdata[i_row]; p_next_row = TextRowList_InsertNewRow( &layer->row_list, i_row+1 ); /* 将本行原有的行尾符转移至下一行 */ p_next_row->eol = p_row->eol; p_row->eol = eol; for( n=p_row->string_len-1; n>=col; --n ) { TextRow_Insert( p_next_row, 0, p_row->string[n] ); p_row->string[n] = NULL; } p_row->string_len = col; TextRow_UpdateSize( p_row, layer->text_style.pixel_size ); TextRow_UpdateSize( p_next_row, layer->text_style.pixel_size ); }
/** 新建文本图层 */ LCUI_TextLayer TextLayer_New(void) { LCUI_TextLayer layer; layer = malloc( sizeof( LCUI_TextLayerRec ) ); layer->width = 0; layer->length = 0; layer->offset_x = 0; layer->offset_y = 0; layer->insert_x = 0; layer->insert_y = 0; layer->max_width = 0; layer->max_height = 0; layer->fixed_width = 0; layer->fixed_height = 0; layer->new_offset_x = 0; layer->new_offset_y = 0; layer->rowlist.length = 0; layer->rowlist.rows = NULL; layer->text_align = SV_LEFT; layer->is_using_buffer = FALSE; layer->is_autowrap_mode = FALSE; layer->is_mulitiline_mode = FALSE; layer->is_using_style_tags = FALSE; layer->line_height.scale = 1.428f; layer->line_height.type = SVT_SCALE; TextStyle_Init( &layer->text_style ); LinkedList_Init( &layer->style_cache ); layer->task.typeset_start_row = 0; layer->task.update_typeset = 0; layer->task.update_bitmap = 0; layer->task.redraw_all = 0; Graph_Init( &layer->graph ); LinkedList_Init( &layer->dirty_rect ); layer->graph.color_type = COLOR_TYPE_ARGB; TextRowList_InsertNewRow( &layer->rowlist, 0 ); return layer; }