progressbar.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #include <rtgui/dc.h>
  2. #include <rtgui/rtgui_theme.h>
  3. #include <rtgui/widgets/progressbar.h>
  4. #define RTGUI_PROGRESSBAR_DEFAULT_RANGE 100
  5. static void _rtgui_progressbar_constructor(rtgui_progressbar_t *bar)
  6. {
  7. rtgui_rect_t rect = {0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT};
  8. rtgui_widget_set_event_handler(RTGUI_WIDGET(bar), rtgui_progressbar_event_handler);
  9. rtgui_widget_set_rect(RTGUI_WIDGET(bar), &rect);
  10. bar->orient = RTGUI_HORIZONTAL;
  11. bar->range = RTGUI_PROGRESSBAR_DEFAULT_RANGE;
  12. bar->position = 0;
  13. /* set gc */
  14. RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(bar)) = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL;
  15. }
  16. rtgui_type_t *rtgui_progressbar_type_get(void)
  17. {
  18. static rtgui_type_t *progressbar_type = RT_NULL;
  19. if (!progressbar_type)
  20. {
  21. progressbar_type = rtgui_type_create("progressbar", RTGUI_WIDGET_TYPE,
  22. sizeof(rtgui_progressbar_t), RTGUI_CONSTRUCTOR(_rtgui_progressbar_constructor), RT_NULL);
  23. }
  24. return progressbar_type;
  25. }
  26. rt_bool_t rtgui_progressbar_event_handler(struct rtgui_widget* widget,
  27. struct rtgui_event* event)
  28. {
  29. struct rtgui_progressbar* bar = (struct rtgui_progressbar*)widget;
  30. switch (event->type)
  31. {
  32. case RTGUI_EVENT_PAINT:
  33. #ifndef RTGUI_USING_SMALL_SIZE
  34. if (widget->on_draw != RT_NULL) widget->on_draw(widget, event);
  35. else
  36. #endif
  37. {
  38. rtgui_theme_draw_progressbar(bar);
  39. }
  40. break;
  41. }
  42. return RT_FALSE;
  43. }
  44. struct rtgui_progressbar* rtgui_progressbar_create(int orientation, int range,
  45. rtgui_rect_t* r)
  46. {
  47. struct rtgui_progressbar* bar;
  48. bar = (struct rtgui_progressbar*) rtgui_widget_create (RTGUI_PROGRESSBAR_TYPE);
  49. if (bar != RT_NULL)
  50. {
  51. if (r != RT_NULL)
  52. rtgui_widget_set_rect(RTGUI_WIDGET(bar), r);
  53. bar->orient = orientation;
  54. bar->range = range;
  55. }
  56. return bar;
  57. }
  58. void rtgui_progressbar_destroy(struct rtgui_progressbar* bar)
  59. {
  60. rtgui_widget_destroy(RTGUI_WIDGET(bar));
  61. }
  62. void rtgui_progressbar_set_value(struct rtgui_progressbar *bar, int value)
  63. {
  64. RT_ASSERT(bar != RT_NULL);
  65. if (!RTGUI_WIDGET_IS_ENABLE(RTGUI_WIDGET(bar))) return;
  66. bar->position = value;
  67. rtgui_theme_draw_progressbar(bar);
  68. return;
  69. }
  70. int rtgui_progressbar_get_value(struct rtgui_progressbar *bar)
  71. {
  72. RT_ASSERT(bar != RT_NULL);
  73. return bar->position;
  74. }
  75. void rtgui_progressbar_set_range(struct rtgui_progressbar *bar, int range)
  76. {
  77. RT_ASSERT(bar != RT_NULL);
  78. bar->range = range;
  79. rtgui_theme_draw_progressbar(bar);
  80. return;
  81. }
  82. int rtgui_progressbar_get_range(struct rtgui_progressbar *bar)
  83. {
  84. RT_ASSERT(bar != RT_NULL);
  85. return bar->range;
  86. }