rt_bool_t rtgui_slider_event_handler(struct rtgui_object *object, struct rtgui_event *event) { struct rtgui_widget *widget; struct rtgui_slider* slider; RT_ASSERT(object != RT_NULL); RT_ASSERT(event != RT_NULL); widget = RTGUI_WIDGET(object); slider = RTGUI_SLIDER(object); switch (event->type) { case RTGUI_EVENT_PAINT: #ifndef RTGUI_USING_SMALL_SIZE if (widget->on_draw != RT_NULL) widget->on_draw(RTGUI_OBJECT(widget), event); else #endif { rtgui_theme_draw_slider(slider); } break; case RTGUI_EVENT_KBD: if (!RTGUI_WIDGET_IS_ENABLE(widget) || RTGUI_WIDGET_IS_HIDE(widget)) return RT_FALSE; #ifndef RTGUI_USING_SMALL_SIZE if (widget->on_key != RT_NULL) widget->on_key(RTGUI_OBJECT(widget), event); else #endif { return rtgui_slider_onkey(slider, (struct rtgui_event_kbd *)event); } break; case RTGUI_EVENT_MOUSE_BUTTON: if (!RTGUI_WIDGET_IS_ENABLE(widget) || RTGUI_WIDGET_IS_HIDE(widget)) return RT_FALSE; #ifndef RTGUI_USING_SMALL_SIZE if (widget->on_mouseclick != RT_NULL) widget->on_mouseclick(RTGUI_OBJECT(widget), event); else #endif { rtgui_slider_onmouse(slider, (struct rtgui_event_mouse*)event); } break; } return RT_FALSE; }
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_progressbar_set_value(struct rtgui_progressbar *bar, int value) { RT_ASSERT(bar != RT_NULL); if (!RTGUI_WIDGET_IS_ENABLE(RTGUI_WIDGET(bar))) return; bar->position = value; rtgui_theme_draw_progressbar(bar); return; }
rt_bool_t rtgui_checkbox_event_handler(struct rtgui_widget* widget, struct rtgui_event* event) { struct rtgui_checkbox* box = (struct rtgui_checkbox*)widget; switch (event->type) { case RTGUI_EVENT_PAINT: #ifndef RTGUI_USING_SMALL_SIZE if (widget->on_draw != RT_NULL) { return widget->on_draw(widget, event); } else #endif rtgui_theme_draw_checkbox(box); break; case RTGUI_EVENT_MOUSE_BUTTON: { if (RTGUI_WIDGET_IS_ENABLE(widget) && !RTGUI_WIDGET_IS_HIDE(widget)) { struct rtgui_event_mouse* emouse = (struct rtgui_event_mouse*)event; if (emouse->button & RTGUI_MOUSE_BUTTON_LEFT && emouse->button & RTGUI_MOUSE_BUTTON_UP) { /* set focus */ rtgui_widget_focus(widget); if (box->status_down & RTGUI_CHECKBOX_STATUS_UNCHECKED) { /* check it */ box->status_down = RTGUI_CHECKBOX_STATUS_CHECKED; } else { /* un-check it */ box->status_down = RTGUI_CHECKBOX_STATUS_UNCHECKED; } } /* draw checkbox */ rtgui_theme_draw_checkbox(box); #ifndef RTGUI_USING_SMALL_SIZE /* call user callback */ if (widget->on_mouseclick != RT_NULL) { return widget->on_mouseclick(widget, event); } #endif if (box->on_button != RT_NULL) { box->on_button(widget, event); return RT_TRUE; } } return RT_TRUE; } } return RT_FALSE; }
rt_bool_t rtgui_textbox_event_handler(struct rtgui_object* object, struct rtgui_event* event) { struct rtgui_textbox* box; RTGUI_WIDGET_EVENT_HANDLER_PREPARE box = RTGUI_TEXTBOX(object); switch (event->type) { case RTGUI_EVENT_PAINT: #ifndef RTGUI_USING_SMALL_SIZE if (widget->on_draw != RT_NULL) widget->on_draw(widget, event); else #endif rtgui_theme_draw_textbox(box); break; case RTGUI_EVENT_MOUSE_BUTTON: if (!RTGUI_WIDGET_IS_ENABLE(widget) || RTGUI_WIDGET_IS_HIDE(widget)) return RT_FALSE; #ifndef RTGUI_USING_SMALL_SIZE if (widget->on_mouseclick != RT_NULL) widget->on_mouseclick(widget, event); else #endif rtgui_textbox_onmouse(box, (struct rtgui_event_mouse*)event); return RT_TRUE; case RTGUI_EVENT_KBD: if (!RTGUI_WIDGET_IS_ENABLE(widget) || RTGUI_WIDGET_IS_HIDE(widget)) return RT_FALSE; #ifndef RTGUI_USING_SMALL_SIZE if (widget->on_key != RT_NULL) widget->on_key(widget, event); else #endif rtgui_textbox_onkey(box, (struct rtgui_event_kbd*)event); return RT_TRUE; } return RT_FALSE; }
void rtgui_combo_ondraw(rtgui_combo_t *cbo) { rtgui_rect_t rect; rtgui_dc_t* dc; RT_ASSERT(cbo != RT_NULL); /* begin drawing */ dc = rtgui_dc_begin_drawing(cbo); if(dc == RT_NULL)return; rtgui_widget_get_rect(cbo, &rect); rtgui_rect_inflate(&rect,-RTGUI_WIDGET_BORDER_SIZE(cbo)); if(RTGUI_WIDGET_IS_ENABLE(cbo)) RTGUI_DC_BC(dc) = theme.blankspace; else RTGUI_DC_BC(dc) = theme.background; rtgui_dc_fill_rect(dc, &rect); rtgui_rect_inflate(&rect,RTGUI_WIDGET_BORDER_SIZE(cbo)); rtgui_dc_draw_border(dc, &rect,RTGUI_WIDGET_BORDER_STYLE(cbo)); if(RC_H(rect)<RTGUI_COMBO_HEIGHT)return; /* draw downarrow button */ rect.x1 = rect.x2-RTGUI_COMBO_BUTTON_WIDTH; RTGUI_DC_BC(dc) = theme.background; rtgui_dc_fill_rect(dc, &rect); if(cbo->style & RTGUI_COMBO_STYLE_DOWNARROW_UP) { rtgui_dc_draw_border(dc, &rect, theme.style); rtgui_dc_draw_byte(dc,rect.x1+(rect.x2-rect.x1-7)/2, rect.y1+(rect.y2-rect.y1-4)/2, 4, combo_down_bmp); } else if(cbo->style & RTGUI_COMBO_STYLE_DOWNARROW_DOWN) { rtgui_dc_draw_border(dc, &rect, theme.style); rtgui_dc_draw_byte(dc,rect.x1+(rect.x2-rect.x1-7)/2+1, rect.y1+(rect.y2-rect.y1-4)/2+1, 4, combo_down_bmp); } if(cbo->tbox != RT_NULL) { RTGUI_DC_FC(dc) = theme.foreground; rtgui_textbox_ondraw(cbo->tbox); } rtgui_dc_end_drawing(dc); }
void rtgui_slider_set_value(struct rtgui_slider* slider, rt_size_t value) { RT_ASSERT(slider != RT_NULL); if (RTGUI_WIDGET_IS_ENABLE(RTGUI_WIDGET(slider))) { if (value < slider->min) value = slider->min; if (value > slider->max) value = slider->max; if (slider->value != value) { slider->value = value; rtgui_theme_draw_slider(slider); } } }
static void rtgui_radiobox_onmouse(struct rtgui_radiobox *radiobox, struct rtgui_event_mouse *event) { RT_ASSERT(radiobox != RT_NULL); RT_ASSERT(event != RT_NULL); /* widget is hide, return */ if (RTGUI_WIDGET_IS_HIDE(radiobox) || !RTGUI_WIDGET_IS_ENABLE(radiobox)) return; if (event->button & RTGUI_MOUSE_BUTTON_DOWN && event->button & RTGUI_MOUSE_BUTTON_LEFT) { int bord_size; struct rtgui_rect rect; /* focus widgets */ rtgui_widget_focus(RTGUI_WIDGET(radiobox)); /* get widget physical rect */ rtgui_widget_get_rect(RTGUI_WIDGET(radiobox), &rect); rtgui_widget_rect_to_device(RTGUI_WIDGET(radiobox), &rect); /* get board size */ if (radiobox->orient == RTGUI_VERTICAL) bord_size = radiobox->item_size; else { struct rtgui_rect bord_rect; rtgui_font_get_metrics(RTGUI_WIDGET_FONT(radiobox), "H", &bord_rect); bord_size = rtgui_rect_height(bord_rect); } rtgui_rect_inflate(&rect, - bord_size); if (rtgui_rect_contains_point(&rect, event->x, event->y) != RT_EOK) return; if (radiobox->orient == RTGUI_VERTICAL) { int delta_y = event->y - rect.y1; rtgui_radiobox_set_selection(radiobox, delta_y / radiobox->item_size); } else { int delta_x = event->x - rect.x1; rtgui_radiobox_set_selection(radiobox, delta_x / radiobox->item_size); } } }
rt_bool_t rtgui_scrollbar_event_handler(struct rtgui_widget * widget, struct rtgui_event * event) { struct rtgui_scrollbar* bar = (struct rtgui_scrollbar*)widget; switch (event->type) { case RTGUI_EVENT_PAINT: #ifndef RTGUI_USING_SMALL_SIZE if (widget->on_draw != RT_NULL) widget->on_draw(widget, event); else #endif { rtgui_theme_draw_scrollbar(bar); } break; case RTGUI_EVENT_MOUSE_BUTTON: if (RTGUI_WIDGET_IS_ENABLE(widget) && !RTGUI_WIDGET_IS_HIDE(widget)) { #ifndef RTGUI_USING_SMALL_SIZE if (widget->on_mouseclick != RT_NULL) { widget->on_mouseclick(widget, event); } else #endif { _rtgui_scrollbar_on_mouseclick(widget, event); } } break; default: break; } return RT_FALSE; }
rt_bool_t rtgui_combo_event_handler(pvoid wdt, rtgui_event_t* event) { rtgui_widget_t *widget = RTGUI_WIDGET(wdt); rtgui_combo_t* cbo = RTGUI_COMBO(wdt); RT_ASSERT(widget != RT_NULL); switch(event->type) { case RTGUI_EVENT_PAINT: if(widget->on_draw != RT_NULL) widget->on_draw(widget, event); else rtgui_combo_ondraw(cbo); break; case RTGUI_EVENT_KBD: if(widget->on_key != RT_NULL) widget->on_key(widget, event); return RT_TRUE; case RTGUI_EVENT_MOUSE_BUTTON: { rtgui_rect_t rect; struct rtgui_event_mouse* emouse = (struct rtgui_event_mouse*)event; rt_bool_t inclip=RT_EOK; if(!RTGUI_WIDGET_IS_ENABLE(cbo)) break; if(cbo->tbox->isedit == RT_TRUE) { /* only detect textbox area */ inclip = rtgui_region_contains_point(&RTGUI_WIDGET_CLIP(cbo),emouse->x,emouse->y,&rect); } else { /* detect all area */ inclip = (rtgui_region_contains_point(&RTGUI_WIDGET_CLIP(cbo),emouse->x,emouse->y,&rect) && rtgui_region_contains_point(&RTGUI_WIDGET_CLIP(cbo->tbox),emouse->x,emouse->y,&rect)); } if(inclip == RT_EOK) { rtgui_combo_get_downarrow_rect(cbo,&rect); if(emouse->button & RTGUI_MOUSE_BUTTON_DOWN) { if(rtgui_rect_contains_point(&rect,emouse->x,emouse->y) == RT_EOK) { /* on pull-down button */ cbo->style = RTGUI_COMBO_STYLE_DOWNARROW_DOWN; rtgui_combo_draw_downarrow(cbo); } if(cbo->lbox != RT_NULL) { if(RTGUI_WIDGET_IS_HIDE(cbo->lbox)) { /* display pupup listbox */ RTGUI_WIDGET_SHOW(cbo->lbox); rtgui_widget_focus(cbo->lbox); rtgui_widget_update_clip_pirate(RTGUI_WIDGET_PARENT(cbo->lbox),cbo->lbox); /* set listbox location is 0 */ cbo->lbox->first_item=0; cbo->lbox->now_item = 0; if(cbo->lbox->scroll != RT_NULL) { if(!RTGUI_WIDGET_IS_HIDE(cbo->lbox->scroll)) { rtgui_scrollbar_set_value(cbo->lbox->scroll,cbo->lbox->first_item); } } rtgui_widget_update(RTGUI_WIDGET_PARENT(cbo->lbox)); } else { /* hide it */ rtgui_widget_hide(cbo->lbox); } } } else if(emouse->button & RTGUI_MOUSE_BUTTON_UP) { if(rtgui_region_contains_point(&RTGUI_WIDGET_CLIP(cbo),emouse->x,emouse->y,&rect) == RT_EOK) { /* on upriver button */ cbo->style = RTGUI_COMBO_STYLE_DOWNARROW_UP; rtgui_combo_draw_downarrow(cbo); } } } else rtgui_view_event_handler(widget,event); return RT_TRUE; } default: return rtgui_view_event_handler(widget,event); } return RT_FALSE; }
void rtgui_theme_draw_scrollbar(struct rtgui_scrollbar* bar) { /* draw scroll bar */ struct rtgui_dc* dc; rtgui_rect_t rect, btn_rect, thum_rect, arrow_rect; rtgui_color_t bc, fc; /* begin drawing */ dc = rtgui_dc_begin_drawing(&(bar->parent)); if (dc == RT_NULL) return; rtgui_widget_get_rect(RTGUI_WIDGET(bar), &rect); /* draw background */ fc = RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(bar)); if (!RTGUI_WIDGET_IS_ENABLE(RTGUI_WIDGET(bar))) RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(bar)) = RTGUI_RGB(128, 128, 128); bc = RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(bar)); RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(bar)) = white; rtgui_dc_fill_rect(dc, &rect); RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(bar)) = bc; if (bar->orient == RTGUI_VERTICAL) { btn_rect = rect; btn_rect.y2 = btn_rect.y1 + (rect.x2 - rect.x1); /* draw up button */ rtgui_dc_fill_rect(dc, &btn_rect); 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 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_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); rtgui_dc_draw_byte(dc, arrow_rect.x1, arrow_rect.y1, rtgui_rect_height(arrow_rect), _up_arrow); /* draw thumb */ if (RTGUI_WIDGET_IS_ENABLE(RTGUI_WIDGET(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); } /* 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); 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_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); rtgui_dc_draw_byte(dc, arrow_rect.x1, arrow_rect.y1, rtgui_rect_height(arrow_rect), _down_arrow); } else { btn_rect.x1 = rect.x1; btn_rect.y1 = rect.y1; btn_rect.x2 = rect.y2; btn_rect.y2 = rect.y2; /* draw left button */ rtgui_dc_fill_rect(dc, &btn_rect); 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_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); 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(RTGUI_WIDGET(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; btn_rect.x2 = rect.x2; /* draw right button */ rtgui_dc_fill_rect(dc, &btn_rect); 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_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); rtgui_dc_draw_byte(dc, arrow_rect.x1, arrow_rect.y1, rtgui_rect_height(arrow_rect), _right_arrow); } /* end drawing */ rtgui_dc_end_drawing(dc); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(bar)) = fc; return; }
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); }