/* * 创建一个部件,作为滚动条的容器 * 再创建一个部件,作为滚动条 * 限制滚动条的移动范围 * */ static void ScrollBar_Init( LCUI_Widget *widget ) { LCUI_ScrollBar *scrollbar; scrollbar = WidgetPrivData_New(widget, sizeof(LCUI_ScrollBar)); scrollbar->data.max_num = 100; scrollbar->data.current_num = 100; scrollbar->data.max_size = 100; scrollbar->data.current_size = 100; scrollbar->direction = 0; scrollbar->callback_func = NULL; scrollbar->widget = Widget_New("button"); /* 禁用部件的自动尺寸调整 */ Widget_SetAutoSize( scrollbar->widget, FALSE, 0 ); Widget_Container_Add( widget, scrollbar->widget ); Widget_SetSize( scrollbar->widget, "100%", "100%" ); Widget_LimitPos( scrollbar->widget, Pos(0,0), Pos(0,0) ); Widget_SetBorder( widget, Border(1, BORDER_STYLE_SOLID, RGB(100,100,100)) ); Widget_SetPadding( widget, Padding(1,1,1,1) ); Widget_SetBackgroundColor( widget, RGB(200,200,200) ); Widget_SetBackgroundTransparent( widget, FALSE ); Widget_Show( scrollbar->widget ); Widget_Event_Connect( scrollbar->widget, EVENT_DRAG, ScrollBar_Drag ); }
/* 初始化按钮部件的数据 */ static void Button_Init( LCUI_Widget *widget ) { int valid_state; LCUI_Button *button; button = WidgetPrivData_New(widget, sizeof(LCUI_Button)); /* 初始化图像数据 */ Graph_Init(&button->btn_disable); Graph_Init(&button->btn_normal); Graph_Init(&button->btn_focus); Graph_Init(&button->btn_down); Graph_Init(&button->btn_over); valid_state = (WIDGET_STATE_NORMAL | WIDGET_STATE_ACTIVE); valid_state |= (WIDGET_STATE_DISABLE | WIDGET_STATE_OVERLAY); Widget_SetValidState( widget, valid_state ); button->label = Widget_New("label");/* 创建label部件 */ /* 将按钮部件作为label部件的容器 */ Widget_Container_Add(widget, button->label); /* label部件居中显示 */ Widget_SetAlign(button->label, ALIGN_MIDDLE_CENTER, Pos(0,0)); Widget_Show(button->label); /* 显示label部件 */ /* 启用自动尺寸调整,以适应内容 */ Widget_SetAutoSize( widget, TRUE, AUTOSIZE_MODE_GROW_AND_SHRINK); Widget_SetStyleID( widget, BUTTON_STYLE_DEFAULT ); /* 关联EVENT_FOCUSOUT事件,以在按钮失去焦点时重绘按钮 */ Widget_Event_Connect( widget, EVENT_FOCUSOUT, Button_ProcFocusOut ); }
static void ActiveBox_Init(LCUI_Widget *widget) /* 功能:初始化ActiveBox部件 */ { LCUI_ActiveBox *actbox; actbox = WidgetPrivData_New(widget, sizeof(LCUI_ActiveBox)); actbox->frames = Create_Frames(Size(50,50)); Frames_AddFunc( actbox->frames, ActiveBox_RefreshFrame, widget ); }
static void TextBox_Init( LCUI_Widget *widget ) /* 初始化文本框相关数据 */ { LCUI_TextBox *textbox; widget->valid_state = WIDGET_STATE_ACTIVE | WIDGET_STATE_OVERLAY; widget->valid_state |= (WIDGET_STATE_NORMAL | WIDGET_STATE_DISABLE); textbox = WidgetPrivData_New(widget, sizeof(LCUI_TextBox)); textbox->text = Widget_New( "label" ); textbox->cursor = Widget_New( NULL ); textbox->scrollbar[0] = Widget_New( "scrollbar" ); textbox->scrollbar[1] = Widget_New( "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; textbox->show_placeholder = FALSE; LCUIWString_Init( &textbox->placeholder ); TextStyle_Init( &textbox->placeholder_style ); TextStyle_FontColor( &textbox->placeholder_style, RGB(100,100,100) ); Label_AutoSize( textbox->text, FALSE, 0 ); Widget_SetSize( 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] ); /* 设置滚动条的尺寸 */ Widget_SetSize( textbox->scrollbar[0], "10px", NULL ); Widget_SetSize( textbox->scrollbar[1], NULL, "10px" ); Widget_SetAlign( textbox->scrollbar[0], ALIGN_TOP_RIGHT, Pos(0,0) ); Widget_SetAlign( textbox->scrollbar[1], ALIGN_BOTTOM_LEFT, Pos(0,0) ); /* 滚动条设为横向 */ ScrollBar_SetDirection( textbox->scrollbar[1], 1 ); /* 将回调函数与滚动条连接 */ ScrollBar_Connect( textbox->scrollbar[0], TextBox_TextLayer_VertScroll, widget ); ScrollBar_Connect( textbox->scrollbar[1], TextBox_HoriScroll_TextLayer, widget ); Widget_Show( textbox->text ); Queue_Init( &textbox->text_block_buff, sizeof(LCUI_TextBlock), destroy_textblock ); TextLayer_UsingStyleTags( Label_GetTextLayer(textbox->text), FALSE ); Widget_SetPadding( widget, Padding(2,2,2,2) ); Widget_SetBackgroundColor( textbox->cursor, RGB(0,0,0) ); Widget_SetBackgroundTransparent( textbox->cursor, FALSE ); Widget_SetBackgroundTransparent( widget, FALSE ); Widget_Resize( 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_Event_Connect( widget, EVENT_DRAG, TextBox_TextLayer_Click ); /* 关联 FOCUS_OUT 和 FOCUS_IN 事件 */ Widget_Event_Connect( widget, EVENT_FOCUSOUT, _putout_textbox_cursor ); Widget_Event_Connect( widget, EVENT_FOCUSIN, _putin_textbox_cursor ); /* 关联按键输入事件 */ Widget_Event_Connect( widget, EVENT_KEYBOARD, TextBox_Input ); /* 默认不启用多行文本模式 */ TextBox_Multiline( widget, FALSE ); }