diff options
| author | Bernard Xiong <[email protected]> | 2013-02-21 13:11:10 +0800 |
|---|---|---|
| committer | Bernard Xiong <[email protected]> | 2013-02-21 13:11:10 +0800 |
| commit | 385f682d7bfce81ba281faaffb0a250ab94985b8 (patch) | |
| tree | 94fca413db98390d21dc18938067a7a90e470a6f /components/rtgui/widgets/scrollbar.c | |
| parent | c4bd0023f8da136c5788f47f9a0170a77f627be9 (diff) | |
remove RT-Thread GUI from RT-Thread temporary
Diffstat (limited to 'components/rtgui/widgets/scrollbar.c')
| -rw-r--r-- | components/rtgui/widgets/scrollbar.c | 790 |
1 files changed, 0 insertions, 790 deletions
diff --git a/components/rtgui/widgets/scrollbar.c b/components/rtgui/widgets/scrollbar.c deleted file mode 100644 index 9b67c7210c..0000000000 --- a/components/rtgui/widgets/scrollbar.c +++ /dev/null @@ -1,790 +0,0 @@ -/* -* File : scrollbar.c -* This file is part of RT-Thread RTOS -* COPYRIGHT (C) 2006 - 2009, RT-Thread Development Team -* -* The license and distribution terms for this file may be -* found in the file LICENSE in this distribution or at -* http://www.rt-thread.org/license/LICENSE -* -* Change Logs: -* Date Author Notes -* -*/ -#include <stdlib.h> -#include <rtgui/dc.h> -#include <rtgui/widgets/scrollbar.h> - -static void _rtgui_scrollbar_constructor(rtgui_scrollbar_t *bar) -{ - /* set event handler */ - rtgui_object_set_event_handler(RTGUI_OBJECT(bar), rtgui_scrollbar_event_handler); - - bar->status = 0; - bar->value = 0; - - bar->thumb_w = 16; - bar->thumb_len = 16; - - bar->widget_link = RT_NULL; - bar->on_scroll = RT_NULL; - - bar->orient = RTGUI_HORIZONTAL; - /* set gc */ - RTGUI_WIDGET_TEXTALIGN(bar) = RTGUI_ALIGN_CENTER; -} - -static void _rtgui_scrollbar_destructor(rtgui_scrollbar_t *bar) -{ - -} - -rt_uint32_t _rtgui_scrollbar_get_length(rtgui_scrollbar_t *bar) -{ - rtgui_rect_t rect; - rt_uint32_t result; - - rtgui_widget_get_rect(RTGUI_WIDGET(bar), &rect); - - if(bar->orient & RTGUI_VERTICAL) - result = rtgui_rect_height(rect) - 2*rtgui_rect_width(rect) - bar->thumb_len; - else - result = rtgui_rect_width(rect) - 2*rtgui_rect_height(rect) - bar->thumb_len; - - return result; -} - -rt_uint32_t get_scrollbar_pos(rtgui_scrollbar_t* bar) -{ - double pos,ftmp; - rt_uint32_t result; - - /* calculate thumb position */ - pos = bar->value; - ftmp = _rtgui_scrollbar_get_length(bar); - pos *= ftmp; - ftmp = bar->count; - pos /= ftmp; - - result = pos; - return result; -} - -DEFINE_CLASS_TYPE(scrollbar, "scrollbar", - RTGUI_WIDGET_TYPE, - _rtgui_scrollbar_constructor, - _rtgui_scrollbar_destructor, - sizeof(struct rtgui_scrollbar)); - -rtgui_scrollbar_t* rtgui_scrollbar_create(rtgui_container_t *container,int left,int top,int w,int len,int orient) -{ - rtgui_scrollbar_t* bar; - - RT_ASSERT(container != RT_NULL); - - bar = (rtgui_scrollbar_t *)rtgui_widget_create(RTGUI_SCROLLBAR_TYPE); - if(bar != RT_NULL) - { - rtgui_rect_t rect; - - rtgui_widget_get_rect(RTGUI_WIDGET(container), &rect); - rtgui_widget_rect_to_device(RTGUI_WIDGET(container),&rect); - rect.x1 += left; - rect.y1 += top; - - bar->thumb_w = w; - if(orient == RTGUI_VERTICAL) - { - rect.x2 = rect.x1+w; - rect.y2 = rect.y1+len; - } - else - { - rect.x2 = rect.x1+len; - rect.y2 = rect.y1+w; - } - - rtgui_widget_set_rect(RTGUI_WIDGET(bar), &rect); - - bar->orient = orient; - - rtgui_container_add_child(container, RTGUI_WIDGET(bar)); - } - - return bar; -} - -void rtgui_scrollbar_destroy(rtgui_scrollbar_t* bar) -{ - rtgui_widget_destroy(RTGUI_WIDGET(bar)); -} - -const static rt_uint8_t _up_arrow[] = {0x10, 0x38, 0x7C, 0xFE}; -const static rt_uint8_t _down_arrow[] = {0xFE,0x7C, 0x38, 0x10}; -const static rt_uint8_t _left_arrow[] = {0x10, 0x30, 0x70, 0xF0, 0x70, 0x30, 0x10}; -const static rt_uint8_t _right_arrow[] = {0x80, 0xC0, 0xE0, 0xF0, 0xE0, 0xC0, 0x80}; - -void rtgui_scrollbar_ondraw(rtgui_scrollbar_t* bar) -{ - /* draw scroll bar */ - rtgui_rect_t rect, btn_rect, thum_rect, arrow_rect; - struct rtgui_dc* dc; - rtgui_color_t bc; - - RT_ASSERT(bar != RT_NULL); - - /* begin drawing */ - dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(bar)); - if(dc == RT_NULL)return; - - bc = RTGUI_DC_BC(dc); - /* begin drawing */ - rtgui_widget_get_rect(RTGUI_WIDGET(bar), &rect); - RTGUI_DC_BC(dc) = white; - rtgui_dc_fill_rect(dc,&rect); - RTGUI_DC_BC(dc) = bc; - - if(bar->orient == RTGUI_VERTICAL) - { - btn_rect = rect; - btn_rect.y2 = btn_rect.y1 + (rect.x2 - rect.x1); - rtgui_dc_fill_rect(dc,&btn_rect); - /* draw up button */ - if(bar->status & SBS_UPARROW) - rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_SUNKEN); - else - rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_RAISE); - /* draw up arrow */ - arrow_rect.x1 = 0; arrow_rect.y1 = 0; - arrow_rect.x2 = 7; arrow_rect.y2 = 4; - rtgui_rect_moveto_align(&btn_rect, &arrow_rect, RTGUI_ALIGN_CENTER); - rtgui_dc_draw_byte(dc, arrow_rect.x1, arrow_rect.y1, rtgui_rect_height(arrow_rect), _up_arrow); - - /* draw thumb */ - rtgui_scrollbar_get_thumb_rect(bar, &thum_rect); - rtgui_dc_fill_rect(dc,&thum_rect); - rtgui_dc_draw_border(dc, &thum_rect, RTGUI_BORDER_RAISE); - - /* draw down button */ - btn_rect.y1 = rect.y2 - (rect.x2 - rect.x1); - btn_rect.y2 = rect.y2; - rtgui_dc_fill_rect(dc,&btn_rect); - if(bar->status & SBS_DOWNARROW) - rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_SUNKEN); - else - rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_RAISE); - /* draw down arrow */ - arrow_rect.x1 = 0; - arrow_rect.y1 = 0; - arrow_rect.x2 = 7; - arrow_rect.y2 = 4; - rtgui_rect_moveto_align(&btn_rect, &arrow_rect, RTGUI_ALIGN_CENTER); - rtgui_dc_draw_byte(dc, arrow_rect.x1, arrow_rect.y1, rtgui_rect_height(arrow_rect), _down_arrow); - } - else - { - btn_rect = rect; - btn_rect.x2 = btn_rect.x1 + (rect.y2 - rect.y1); - rtgui_dc_fill_rect(dc,&btn_rect); - /* draw left button */ - if(bar->status & SBS_LEFTARROW) - rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_SUNKEN); - else - rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_RAISE); - arrow_rect.x1 = 0; - arrow_rect.y1 = 0; - arrow_rect.x2 = 4; - arrow_rect.y2 = 7; - rtgui_rect_moveto_align(&btn_rect, &arrow_rect, RTGUI_ALIGN_CENTER); - rtgui_dc_draw_byte(dc, arrow_rect.x1, arrow_rect.y1, rtgui_rect_height(arrow_rect), _left_arrow); - - /* draw thumb */ - if(RTGUI_WIDGET_IS_ENABLE(bar)) - { - rtgui_scrollbar_get_thumb_rect(bar, &thum_rect); - rtgui_dc_fill_rect(dc,&thum_rect); - rtgui_dc_draw_border(dc, &thum_rect, RTGUI_BORDER_RAISE); - } - - btn_rect.x1 = rect.x2 - (rect.y2-rect.y1); - btn_rect.x2 = rect.x2; - rtgui_dc_fill_rect(dc,&btn_rect); - /* draw right button */ - if(bar->status & SBS_RIGHTARROW) - rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_SUNKEN); - else - rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_RAISE); - arrow_rect.x1 = 0; - arrow_rect.y1 = 0; - arrow_rect.x2 = 4; - arrow_rect.y2 = 7; - rtgui_rect_moveto_align(&btn_rect, &arrow_rect, RTGUI_ALIGN_CENTER); - rtgui_dc_draw_byte(dc, arrow_rect.x1, arrow_rect.y1, rtgui_rect_height(arrow_rect), _right_arrow); - - } - - rtgui_dc_end_drawing(dc); -} - -void rtgui_scrollbar_get_thumb_rect(rtgui_scrollbar_t *bar, rtgui_rect_t *erect) -{ - rtgui_rect_t rect; - - rtgui_widget_get_rect(RTGUI_WIDGET(bar), &rect); - if(bar->orient & RTGUI_VERTICAL) - { - /* vertical scroll bar */ - erect->x1 = rect.x1; - erect->x2 = rect.x2; - erect->y1 = rect.y1 + rtgui_rect_width(rect) + get_scrollbar_pos(bar); - erect->y2 = erect->y1 + bar->thumb_len; - } - else - { - /* horizontal scroll bar */ - erect->x1 = rect.x1 + rtgui_rect_height(rect) + get_scrollbar_pos(bar); - erect->x2 = erect->x1 + bar->thumb_len; - erect->y1 = rect.y1; - erect->y2 = rect.y2; - } -} - -static rtgui_point_t sbar_mouse_move_size; - -static void _rtgui_scrollbar_on_mouseclick(rtgui_scrollbar_t *bar, rtgui_event_t * event) -{ - rtgui_rect_t btn_rect, bar_rect,rect; - rt_uint32_t pos; - struct rtgui_event_mouse *mouse = (struct rtgui_event_mouse*)event; - - RT_ASSERT(bar != RT_NULL); - - /* get value */ - pos = get_scrollbar_pos(bar); - - rtgui_widget_get_rect(RTGUI_WIDGET(bar), &rect); - rtgui_widget_rect_to_device(RTGUI_WIDGET(bar),&rect); - - if(bar->orient == RTGUI_VERTICAL) - { - /* arrange vertical */ - /* get up arrow button rect */ - btn_rect.x1 = rect.x1; - btn_rect.x2 = rect.x2; - btn_rect.y1 = rect.y1; - btn_rect.y2 = rect.y1 + rtgui_rect_width(rect); - - if(rtgui_rect_contains_point(&btn_rect, mouse->x, mouse->y) == RT_EOK) - { - if((mouse->button & RTGUI_MOUSE_BUTTON_LEFT) && (mouse->button & RTGUI_MOUSE_BUTTON_DOWN)) - { - bar->status |= SBS_UPARROW; - if(bar->value==0) - { - rtgui_scrollbar_ondraw(bar); - return; - } - /* line step */ - bar->value -= bar->line_step; - if(bar->value < 0) bar->value = 0; - } - else if(mouse->button & RTGUI_MOUSE_BUTTON_UP) - { - bar->status = 0; - } - goto __exit; - } - /* click on the thumb chunk, be going to dragging */ - rtgui_scrollbar_get_thumb_rect(bar, &bar_rect); - rtgui_widget_rect_to_device(RTGUI_WIDGET(bar),&bar_rect); - if(rtgui_rect_contains_point(&bar_rect, mouse->x, mouse->y) == RT_EOK) - { - /* on thumb */ - if((mouse->button & RTGUI_MOUSE_BUTTON_LEFT) && (mouse->button & RTGUI_MOUSE_BUTTON_DOWN)) - { - /* changed status into drag */ - bar->status |= SBS_VERTTHUMB; - sbar_mouse_move_size.x = mouse->x; - sbar_mouse_move_size.y = mouse->y; - } - else if(mouse->button & RTGUI_MOUSE_BUTTON_UP) - { - bar->status = 0; - } - goto __exit; - } - else - { - /* click on space without thumb */ - /* get bar rect */ - bar_rect.y1 = rect.y1 + rtgui_rect_width(rect); - bar_rect.y2 = rect.y2 - rtgui_rect_width(rect); - if(rtgui_rect_contains_point(&bar_rect, mouse->x, mouse->y) == RT_EOK) - { - if((mouse->button & RTGUI_MOUSE_BUTTON_LEFT) && (mouse->button & RTGUI_MOUSE_BUTTON_DOWN)) - { - /* page step */ - if(mouse->y < bar_rect.y1 + pos) - { - bar->status |= SBS_UPSPACE; - bar->value -= bar->page_step; - if(bar->value < 0) bar->value = 0; - } - else if(mouse->y > pos + bar->thumb_len) - { - bar->status |= SBS_DOWNSPACE; - bar->value += bar->page_step; - if(bar->value > bar->count) bar->value = bar->count; - } - } - goto __exit; - } - } - /* likewise foregoing */ - /* get down arrow button rect */ - bar_rect.x1 = rect.x1; - bar_rect.x2 = rect.x2; - btn_rect.y1 = rect.y2 - rtgui_rect_width(rect); - btn_rect.y2 = rect.y2; - if(rtgui_rect_contains_point(&btn_rect, mouse->x, mouse->y) == RT_EOK) - { - if((mouse->button & RTGUI_MOUSE_BUTTON_LEFT) && (mouse->button & RTGUI_MOUSE_BUTTON_DOWN)) - { - bar->status |= SBS_DOWNARROW; - if(bar->value==bar->count) - { - rtgui_scrollbar_ondraw(bar); - return; - } - /* line step */ - bar->value += bar->line_step; - if(bar->value > bar->count) bar->value = bar->count; - } - else if(mouse->button & RTGUI_MOUSE_BUTTON_UP) - bar->status = 0; - goto __exit; - } - } - else - { - /* get left arrow button rect */ - btn_rect.x1 = rect.x1; - btn_rect.x2 = rect.x1 + rtgui_rect_height(rect); - btn_rect.y1 = rect.y1; - btn_rect.y2 = rect.y2; - if(rtgui_rect_contains_point(&btn_rect, mouse->x, mouse->y) == RT_EOK) - { - if((mouse->button & RTGUI_MOUSE_BUTTON_LEFT) && (mouse->button & RTGUI_MOUSE_BUTTON_DOWN)) - { - bar->status |= SBS_LEFTARROW; - if(bar->value==0) - { - rtgui_scrollbar_ondraw(bar); - return; - } - /* line step */ - bar->value -= bar->line_step; - if(bar->value < 0) bar->value = 0; - } - else if(mouse->button & RTGUI_MOUSE_BUTTON_UP) - bar->status = 0; - goto __exit; - } - - rtgui_scrollbar_get_thumb_rect(bar, &bar_rect); - rtgui_widget_rect_to_device(RTGUI_WIDGET(bar),&bar_rect); - if(rtgui_rect_contains_point(&bar_rect, mouse->x, mouse->y) == RT_EOK) - { - /* on the thumb */ - if((mouse->button & RTGUI_MOUSE_BUTTON_LEFT) && (mouse->button & RTGUI_MOUSE_BUTTON_DOWN)) - { - bar->status |= SBS_HORZTHUMB; - sbar_mouse_move_size.x = mouse->x; - sbar_mouse_move_size.y = mouse->y; - } - else if(mouse->button & RTGUI_MOUSE_BUTTON_UP) - { - bar->status = 0; - } - goto __exit; - } - else - { - /* get bar rect */ - bar_rect.x1 = rect.x1 + rtgui_rect_height(rect); - bar_rect.x2 = rect.x2 - rtgui_rect_height(rect); - bar_rect.y1 = rect.y1; - bar_rect.y2 = rect.y2; - if(rtgui_rect_contains_point(&bar_rect, mouse->x, mouse->y) == RT_EOK) - { - if((mouse->button & RTGUI_MOUSE_BUTTON_LEFT) && (mouse->button & RTGUI_MOUSE_BUTTON_DOWN)) - { - /* page step */ - if(mouse->x < bar_rect.x1 + pos) - { - bar->status |= SBS_LEFTSPACE; - bar->value -= bar->page_step; - if(bar->value < 0) bar->value = 0; - } - else if(mouse->x > pos + bar->thumb_len) - { - bar->status |= SBS_RIGHTSPACE; - bar->value += bar->page_step; - if(bar->value > bar->count) bar->value = bar->count; - } - } - else if(mouse->button & RTGUI_MOUSE_BUTTON_UP) - { - bar->status = 0; - } - goto __exit; - } - } - /* get right arrow button rect */ - btn_rect.x1 = rect.x2 - rtgui_rect_height(rect); - btn_rect.x2 = rect.x2; - bar_rect.y1 = rect.y1; - bar_rect.y2 = rect.y2; - if(rtgui_rect_contains_point(&btn_rect, mouse->x, mouse->y) == RT_EOK) - { - if((mouse->button & RTGUI_MOUSE_BUTTON_LEFT) && (mouse->button & RTGUI_MOUSE_BUTTON_DOWN)) - { - bar->status |= SBS_RIGHTARROW; - if(bar->value==bar->count) - { - rtgui_scrollbar_ondraw(bar); - return; - } - /* line step */ - bar->value += bar->line_step; - if(bar->value > bar->count) bar->value = bar->count; - } - else if(mouse->button & RTGUI_MOUSE_BUTTON_UP) - bar->status = 0; - goto __exit; - } - } - -__exit: - rtgui_scrollbar_ondraw(bar); - if((mouse->button & RTGUI_MOUSE_BUTTON_LEFT) && (mouse->button & RTGUI_MOUSE_BUTTON_DOWN)) - { - if(bar->widget_link != RT_NULL && bar->on_scroll != RT_NULL) - { - rtgui_widget_focus(bar->widget_link); - bar->on_scroll(RTGUI_OBJECT(bar->widget_link), event); - } - } -} - -/* thumb chunk activity */ -static void _rtgui_scrollbar_on_mousemotion(rtgui_scrollbar_t *bar, rtgui_event_t * event) -{ - float tmppos; - rt_uint32_t pos; - struct rtgui_event_mouse *mouse = (struct rtgui_event_mouse*)event; -rt_kprintf("sbar mouse motion.\n"); - tmppos = _rtgui_scrollbar_get_length(bar); - tmppos /= bar->count; - pos = (rt_uint32_t)tmppos; - - if(bar->orient == RTGUI_VERTICAL) - { - if(bar->status & SBS_VERTTHUMB) - { - /* from then on mouseclick */ - if((mouse->y-sbar_mouse_move_size.y) > 3) - { - bar->status |= SBS_DOWNTHUMB; - } - else if((mouse->y-sbar_mouse_move_size.y) < -3) - { - bar->status |= SBS_UPTHUMB; - } - else bar->status &= ~(SBS_UPTHUMB|SBS_DOWNTHUMB); - - if(abs(mouse->y-sbar_mouse_move_size.y) >= pos) - { - int step = abs(mouse->y-sbar_mouse_move_size.y)/pos; - sbar_mouse_move_size.y = mouse->y; - - if(bar->status & SBS_UPTHUMB) - { - bar->value -= step; - if(bar->value < 0) bar->value = 0; - } - else if(bar->status & SBS_DOWNTHUMB) - { - bar->value += step; - if(bar->value > bar->count) bar->value = bar->count; - } - goto __exit; - } - } - else if(bar->status & SBS_UPARROW) - { - /* on-going push down uparrow button */ - if(bar->value==0)return; - bar->value -= bar->line_step; - if(bar->value < 0) bar->value = 0; - goto __exit; - } - else if(bar->status & SBS_DOWNARROW) - { - /* on-going push down downarrow button */ - if(bar->value==bar->count)return; - bar->value += bar->line_step; - if(bar->value > bar->count) bar->value = bar->count; - goto __exit; - } - /*else if(bar->status & SBS_UPSPACE) - { - bar->value -= bar->page_step; - if(bar->value < 0) bar->value = 0; - goto __exit; - } - else if(bar->status & SBS_DOWNSPACE) - { - bar->value += bar->page_step; - if(bar->value > bar->count) bar->value = bar->count; - goto __exit; - }*/ - return; - } - else - { - if(bar->status & SBS_HORZTHUMB) - {rt_kprintf("HORZTHUMB, move event\n"); - if((mouse->x-sbar_mouse_move_size.x) > 5) - { - bar->status |= SBS_RIGHTTHUMB; - } - else if((mouse->x-sbar_mouse_move_size.x) < -5) - { - bar->status |= SBS_LEFTTHUMB; - } - if(abs(mouse->x-sbar_mouse_move_size.x) > pos) - { - int step = abs(mouse->x-sbar_mouse_move_size.x)/pos; - sbar_mouse_move_size.x = mouse->x; - if(bar->status & SBS_LEFTTHUMB) - { - bar->value -= step; - if(bar->value < 0) bar->value = 0; - } - else if(bar->status & SBS_RIGHTTHUMB) - { - bar->value += step; - if(bar->value > bar->count) bar->value = bar->count; - } - goto __exit; - } - } - else if(bar->status & SBS_LEFTARROW) - { - if(bar->value==0)return; - bar->value -= bar->line_step; - if(bar->value < 0) bar->value = 0; - goto __exit; - } - else if(bar->status & SBS_RIGHTARROW) - { - if(bar->value==bar->count)return; - bar->value += bar->line_step; - if(bar->value > bar->count) bar->value = bar->count; - goto __exit; - } - /*else if(bar->status & SBS_LEFTSPACE) - { - bar->value -= bar->page_step; - if(bar->value < bar->min) bar->value = bar->min; - goto __exit; - } - else if(bar->status & SBS_RIGHTSPACE) - { - bar->value += bar->page_step; - if(bar->value > bar->count-1) bar->value = bar->count-1; - goto __exit; - }*/ - return; - } - -__exit: - rtgui_scrollbar_ondraw(bar); - if(bar->widget_link != RT_NULL && bar->on_scroll != RT_NULL) - { - rtgui_widget_focus(bar->widget_link); - bar->on_scroll(RTGUI_OBJECT(bar->widget_link), event); - } -} - - -rt_bool_t rtgui_scrollbar_event_handler(rtgui_object_t *object, rtgui_event_t *event) -{ - rtgui_widget_t *widget = RTGUI_WIDGET(object); - rtgui_scrollbar_t* bar = RTGUI_SCROLLBAR(object); - - switch(event->type) - { - case RTGUI_EVENT_PAINT: -#ifndef RTGUI_USING_SMALL_SIZE - if(widget->on_draw != RT_NULL) - widget->on_draw(object, event); - else -#endif - { - if(!RTGUI_WIDGET_IS_HIDE(bar)) - rtgui_scrollbar_ondraw(bar); - } - break; - - case RTGUI_EVENT_MOUSE_BUTTON: - if(RTGUI_WIDGET_IS_ENABLE(widget)) - { -#ifndef RTGUI_USING_SMALL_SIZE - if(widget->on_mouseclick != RT_NULL) - { - widget->on_mouseclick(object, event); - } - else -#endif - { - _rtgui_scrollbar_on_mouseclick(bar, event); - } - } - break; - case RTGUI_EVENT_MOUSE_MOTION: - if(RTGUI_WIDGET_IS_ENABLE(widget)) - { - _rtgui_scrollbar_on_mousemotion(bar, event); - } - - default: - return rtgui_widget_event_handler(object, event); - } - - return RT_FALSE; -} - -void rtgui_scrollbar_set_orientation(rtgui_scrollbar_t* bar, int orient) -{ - RT_ASSERT(bar != RT_NULL); - - bar->orient = orient; -} - -/* get active area length */ -rt_uint32_t get_sbar_active_len(rtgui_scrollbar_t *bar) -{ - rtgui_rect_t rect; - - rtgui_widget_get_rect(RTGUI_WIDGET(bar), &rect); - - if(bar->orient & RTGUI_VERTICAL) - return rtgui_rect_height(rect) - 2*rtgui_rect_width(rect); - else - return rtgui_rect_width(rect) - 2*rtgui_rect_height(rect); -} - -void rtgui_scrollbar_set_thumbbar_len(rtgui_scrollbar_t* bar) -{ - double size=0; - rt_uint32_t len,w; - - RT_ASSERT(bar != RT_NULL); - - /* Make sure called rtgui_scrollbar_set_range(),before you use under code. */ - size = bar->page_step; - size /= bar->count+bar->page_step; - size *= get_sbar_active_len(bar); - len = (rt_uint32_t)size ; - - w = bar->thumb_w; - - if(len < w/2) len = w/2; - - bar->thumb_len = len; -} - -/* -* please use them with below step: -* 1.SetLineStep();2.SetPageStep();3.SetRange(); -*/ - -void rtgui_scrollbar_set_line_step(rtgui_scrollbar_t* bar, int step) -{ - RT_ASSERT(bar != RT_NULL); - - bar->line_step = step; -} - -void rtgui_scrollbar_set_page_step(rtgui_scrollbar_t* bar, int step) -{ - RT_ASSERT(bar != RT_NULL); - - bar->page_step = step; -} - -void rtgui_scrollbar_set_range(rtgui_scrollbar_t* bar, int count) -{ - RT_ASSERT(bar != RT_NULL); - - /* disable or enable scrollbar */ - if(bar->page_step >= count) - { - /* disable bar */ - RTGUI_WIDGET_DISABLE(bar); - } - else - { - /* enable bar */ - RTGUI_WIDGET_ENABLE(bar); - } - - /* thumb step count = item_count-item_per_page */ - bar->count = (rt_int16_t)(count-bar->page_step); - rtgui_scrollbar_set_thumbbar_len(bar); -} - -/* use VALUE change be binding widget's frist item. */ -void rtgui_scrollbar_set_value(rtgui_scrollbar_t* bar, rt_int16_t value) -{ - RT_ASSERT(bar != RT_NULL); - - bar->value = value; - - if(bar->value < 0) bar->value = 0; - - rtgui_widget_update(RTGUI_WIDGET(bar)); -} - -void rtgui_scrollbar_set_onscroll(rtgui_scrollbar_t* bar, rtgui_event_handler_ptr handler) -{ - if(bar == RT_NULL || handler == RT_NULL) return; - - bar->on_scroll = handler; -} - -void rtgui_scrollbar_hide(rtgui_scrollbar_t* bar) -{ - rtgui_rect_t rect; - struct rtgui_dc* dc; - - RT_ASSERT(bar != RT_NULL); - - /* begin drawing */ - dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(bar)); - if(dc == RT_NULL)return; - - RTGUI_WIDGET_HIDE(bar); - - /* begin drawing */ - rtgui_widget_get_rect(RTGUI_WIDGET(bar), &rect); - if((RTGUI_WIDGET(bar))->parent != RT_NULL) - RTGUI_DC_BC(dc) = RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(bar)->parent); - else - RTGUI_DC_BC(dc) = RTGUI_RGB(225, 228, 220); - rtgui_dc_fill_rect(dc,&rect); - - rtgui_dc_end_drawing(dc); -} |
