diff options
Diffstat (limited to 'components/rtgui/widgets/iconbox.c')
| -rw-r--r-- | components/rtgui/widgets/iconbox.c | 186 |
1 files changed, 0 insertions, 186 deletions
diff --git a/components/rtgui/widgets/iconbox.c b/components/rtgui/widgets/iconbox.c deleted file mode 100644 index a5807347fd..0000000000 --- a/components/rtgui/widgets/iconbox.c +++ /dev/null @@ -1,186 +0,0 @@ -/* - * File : iconbox.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 - * 2009-10-16 Bernard first version - */ -#include <rtgui/dc.h> -#include <rtgui/widgets/iconbox.h> -#include <rtgui/rtgui_theme.h> - -static void _rtgui_iconbox_constructor(rtgui_iconbox_t *iconbox) -{ - /* init widget and set event handler */ - RTGUI_WIDGET(iconbox)->flag |= (RTGUI_WIDGET_FLAG_TRANSPARENT | RTGUI_WIDGET_FLAG_FOCUSABLE); - rtgui_object_set_event_handler(RTGUI_OBJECT(iconbox), rtgui_iconbox_event_handler); - - /* set proper of control */ - iconbox->image = RT_NULL; - iconbox->selected = RT_FALSE; - iconbox->text = RT_NULL; - iconbox->text_position = RTGUI_ICONBOX_TEXT_BELOW; -} - -static void _rtgui_iconbox_destructor(rtgui_iconbox_t *iconbox) -{ - if (iconbox->image != RT_NULL) - { - rtgui_image_destroy(iconbox->image); - iconbox->image = RT_NULL; - } - - if (iconbox->text != RT_NULL) - { - rt_free(iconbox->text); - iconbox->text = RT_NULL; - } -} - -DEFINE_CLASS_TYPE(iconbox, "iconbox", - RTGUI_WIDGET_TYPE, - _rtgui_iconbox_constructor, - _rtgui_iconbox_destructor, - sizeof(struct rtgui_iconbox)); - -rt_bool_t rtgui_iconbox_event_handler(struct rtgui_object *object, struct rtgui_event *event) -{ - struct rtgui_iconbox *iconbox; - - iconbox = RTGUI_ICONBOX(object); - - switch (event->type) - { - case RTGUI_EVENT_PAINT: - rtgui_theme_draw_iconbox(iconbox); - break; - - case RTGUI_EVENT_MOUSE_BUTTON: - if (RTGUI_WIDGET_IS_HIDE(object)) return RT_FALSE; - - { - struct rtgui_event_mouse *emouse = (struct rtgui_event_mouse *)event; - - /* it's not this widget event, clean status */ - if (rtgui_rect_contains_point(&(RTGUI_WIDGET(iconbox)->extent), - emouse->x, emouse->y) != RT_EOK) - { - if (iconbox->selected != RT_TRUE) - { - rtgui_iconbox_set_selected(iconbox, RT_TRUE); - rtgui_widget_focus(RTGUI_WIDGET(iconbox)); - } - break; - } - } - return RT_TRUE; - - default: - return rtgui_widget_event_handler(object, event); - } - - return RT_FALSE; -} - -struct rtgui_iconbox *rtgui_iconbox_create(struct rtgui_image *image, - const char *text, - int position) -{ - struct rtgui_iconbox *iconbox; - - iconbox = (struct rtgui_iconbox *)rtgui_widget_create(RTGUI_ICONBOX_TYPE); - if (iconbox != RT_NULL) - { - rtgui_rect_t rect = {0, 0, 0, 0}, text_rect; - - rect.x2 = image->w; - rect.y2 = image->h; - - /* get text rect */ - rtgui_font_get_metrics(rtgui_font_default(), text, &text_rect); - if (position == RTGUI_ICONBOX_TEXT_BELOW) - { - rect.y2 += RTGUI_WIDGET_DEFAULT_MARGIN; - if (text_rect.x2 > rect.x2) - { - rect.x2 = text_rect.x2; - } - rect.y2 += text_rect.y2; - } - else if (position == RTGUI_ICONBOX_TEXT_RIGHT) - { - rect.x2 += RTGUI_WIDGET_DEFAULT_MARGIN; - if (text_rect.y2 > rect.y2) - { - rect.y2 = text_rect.y2; - } - rect.x2 += text_rect.x2; - } - - /* set widget rect */ - rtgui_widget_set_rect(RTGUI_WIDGET(iconbox), &rect); - - /* set image and text position */ - iconbox->image = image; - iconbox->text = (char *)rt_strdup((const char *)text); - iconbox->text_position = position; - } - - return iconbox; -} - -void rtgui_iconbox_destroy(struct rtgui_iconbox *iconbox) -{ - rtgui_widget_destroy(RTGUI_WIDGET(iconbox)); -} - -void rtgui_iconbox_set_text_position(struct rtgui_iconbox *iconbox, int position) -{ - struct rtgui_rect rect = {0, 0, 0, 0}, text_rect; - - RT_ASSERT(iconbox != RT_NULL); - - iconbox->text_position = position; - - /* set mini width and height */ - rect.x2 = iconbox->image->w; - rect.y2 = iconbox->image->h; - - /* get text rect */ - if (iconbox->text != RT_NULL) - { - rtgui_font_get_metrics(rtgui_font_default(), - iconbox->text, &text_rect); - if (position == RTGUI_ICONBOX_TEXT_BELOW) - { - rect.y2 += RTGUI_WIDGET_DEFAULT_MARGIN; - if (text_rect.x2 > rect.x2) - { - rect.x2 = text_rect.x2; - } - rect.y2 += text_rect.y2; - } - else if (position == RTGUI_ICONBOX_TEXT_RIGHT) - { - rect.x2 += RTGUI_WIDGET_DEFAULT_MARGIN; - if (text_rect.y2 > rect.y2) - { - rect.y2 = text_rect.y2; - } - rect.x2 += text_rect.x2; - } - } -} - -void rtgui_iconbox_set_selected(struct rtgui_iconbox *iconbox, rt_bool_t selected) -{ - RT_ASSERT(iconbox != RT_NULL); - - iconbox->selected = selected; -} |
