void TextBox_Using_StyleTags(LCUI_Widget *widget, BOOL flag) /* 指定文本框是否处理控制符 */ { LCUI_TextLayer *layer; layer = TextBox_Get_TextLayer( widget ); TextLayer_Using_StyleTags( layer, flag ); }
/**************************** 私有函数 **********************************/ static void Label_Init(LCUI_Widget *widget) /* 功能:初始化label部件数据 */ { LCUI_TextLayer *layer; layer = Widget_Create_PrivData( widget, sizeof(LCUI_Label) ); TextLayer_Init( layer ); widget->private_data = layer; Enable_Widget_Auto_Size( widget ); TextLayer_Using_StyleTags( layer, TRUE ); }
/*---------------------------- Private -------------------------------*/ static void Label_Init(LCUI_Widget *widget) /* 功能:初始化label部件数据 */ { LCUI_Label *label; /* label部件不需要焦点 */ widget->focus = FALSE; label = Widget_Create_PrivData( widget, sizeof(LCUI_Label) ); label->auto_size = TRUE; /* 初始化文本图层 */ TextLayer_Init( &label->layer ); /* 启用多行文本显示 */ TextLayer_Multiline( &label->layer, TRUE ); Widget_AutoSize( widget, FALSE, 0 ); /* 启用样式标签的支持 */ TextLayer_Using_StyleTags( &label->layer, TRUE ); }
int TextLayer_Text( LCUI_TextLayer *layer, char *new_text ) /* 设定整个文本图层中需显示的文本,原有选中文本被删除 */ { DEBUG_MSG("enter\n"); uint_t i, rows; LCUI_TextLayer new_layer; TextLayer_Init( &new_layer ); TextLayer_Text_Set_Default_Style( &new_layer, layer->default_data); TextLayer_Using_StyleTags( &new_layer, layer->using_style_tags ); TextLayer_Text_Process( &new_layer, new_text ); /* 合并两个文本图层,记录不同字所在区域,等待处理刷新 */ TextLayer_Merge( layer, &new_layer ); TextLayer_Text_GenerateBMP( layer ); /* 更新每一行文本位图的尺寸 */ rows = Queue_Get_Total( &layer->rows_data ); for(i=0; i<rows; ++i) { TextLayer_Update_RowSize( layer, i ); } Destroy_TextLayer( &new_layer ); DEBUG_MSG("quit\n"); return 0; }
static void TextBox_Init( LCUI_Widget *widget ) /* 初始化文本框相关数据 */ { LCUI_TextBox *textbox; textbox = Widget_Create_PrivData(widget, sizeof(LCUI_TextBox)); textbox->text = Create_Widget( "label" ); textbox->cursor = Create_Widget( NULL ); textbox->scrollbar[0] = Create_Widget( "scrollbar" ); textbox->scrollbar[1] = Create_Widget( "scrollbar" ); /* 不可获得焦点 */ textbox->text->focus = FALSE; textbox->cursor->focus = FALSE; textbox->scrollbar[0]->focus = FALSE; textbox->scrollbar[1]->focus = FALSE; textbox->limit_mode = 0; textbox->block_size = 256; Label_AutoSize( textbox->text, FALSE, 0 ); Set_Widget_Size( textbox->text, "100%", "100%" ); /* 添加至相应的容器 */ Widget_Container_Add( textbox->text, textbox->cursor ); Widget_Container_Add( widget, textbox->text ); Widget_Container_Add( widget, textbox->scrollbar[0] ); Widget_Container_Add( widget, textbox->scrollbar[1] ); /* 设置滚动条的尺寸 */ Set_Widget_Size( textbox->scrollbar[0], "10px", NULL ); Set_Widget_Size( textbox->scrollbar[1], NULL, "10px" ); Set_Widget_Align( textbox->scrollbar[0], ALIGN_TOP_RIGHT, Pos(0,0) ); Set_Widget_Align( textbox->scrollbar[1], ALIGN_BOTTOM_LEFT, Pos(0,0) ); /* 滚动条设为横向 */ ScrollBar_Set_Direction( textbox->scrollbar[1], 1 ); /* 将回调函数与滚动条连接 */ ScrollBar_Connect( textbox->scrollbar[0], TextBox_VertScroll_TextLayer, widget ); ScrollBar_Connect( textbox->scrollbar[1], TextBox_HoriScroll_TextLayer, widget ); Show_Widget( textbox->text ); Queue_Init( &textbox->text_block_buff, sizeof(LCUI_TextBlock), destroy_textblock ); TextLayer_Using_StyleTags( Label_Get_TextLayer(textbox->text), FALSE ); Set_Widget_Padding( widget, Padding(2,2,2,2) ); Set_Widget_Backcolor( textbox->cursor, RGB(0,0,0) ); Set_Widget_BG_Mode( textbox->cursor, BG_MODE_FILL_BACKCOLOR ); Resize_Widget( textbox->cursor, Size(1, 14) ); /* 设置可点击区域的alpha值要满足的条件 */ Set_Widget_ClickableAlpha( textbox->cursor, 0, 1 ); Set_Widget_ClickableAlpha( textbox->text, 0, 1 ); /* 设定定时器,每1秒闪烁一次 */ if( __timer_id == -1 ) { __timer_id = set_timer( 500, blink_cursor, TRUE ); } Widget_Drag_Event_Connect( widget, TextBox_TextLayer_Click ); /* 关联 FOCUS_OUT 和 FOCUS_IN 事件 */ Widget_FocusOut_Event_Connect( widget, hide_textbox_cursor, NULL ); Widget_FocusIn_Event_Connect( widget, _put_textbox_cursor, NULL ); /* 关联按键输入事件 */ Widget_Keyboard_Event_Connect( widget, TextBox_Input ); /* 默认不启用多行文本模式 */ TextBox_Multiline( widget, FALSE ); }