progressbar.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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_object_set_event_handler(RTGUI_OBJECT(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. DEFINE_CLASS_TYPE(progressbar, "progressbar",
  17. RTGUI_WIDGET_TYPE,
  18. _rtgui_progressbar_constructor,
  19. RT_NULL,
  20. sizeof(struct rtgui_progressbar));
  21. rt_bool_t rtgui_progressbar_event_handler(struct rtgui_object* object,
  22. struct rtgui_event* event)
  23. {
  24. struct rtgui_progressbar* bar;
  25. RTGUI_WIDGET_EVENT_HANDLER_PREPARE
  26. bar = RTGUI_PROGRESSBAR(object);
  27. switch (event->type)
  28. {
  29. case RTGUI_EVENT_PAINT:
  30. rtgui_theme_draw_progressbar(bar);
  31. break;
  32. }
  33. return RT_FALSE;
  34. }
  35. struct rtgui_progressbar* rtgui_progressbar_create(int orientation, int range,
  36. rtgui_rect_t* r)
  37. {
  38. struct rtgui_progressbar* bar;
  39. bar = (struct rtgui_progressbar*) rtgui_widget_create (RTGUI_PROGRESSBAR_TYPE);
  40. if (bar != RT_NULL)
  41. {
  42. if (r != RT_NULL)
  43. rtgui_widget_set_rect(RTGUI_WIDGET(bar), r);
  44. bar->orient = orientation;
  45. bar->range = range;
  46. }
  47. return bar;
  48. }
  49. void rtgui_progressbar_destroy(struct rtgui_progressbar* bar)
  50. {
  51. rtgui_widget_destroy(RTGUI_WIDGET(bar));
  52. }
  53. void rtgui_progressbar_set_value(struct rtgui_progressbar *bar, int value)
  54. {
  55. RT_ASSERT(bar != RT_NULL);
  56. if (!RTGUI_WIDGET_IS_ENABLE(RTGUI_WIDGET(bar))) return;
  57. bar->position = value;
  58. rtgui_theme_draw_progressbar(bar);
  59. return;
  60. }
  61. int rtgui_progressbar_get_value(struct rtgui_progressbar *bar)
  62. {
  63. RT_ASSERT(bar != RT_NULL);
  64. return bar->position;
  65. }
  66. void rtgui_progressbar_set_range(struct rtgui_progressbar *bar, int range)
  67. {
  68. RT_ASSERT(bar != RT_NULL);
  69. bar->range = range;
  70. rtgui_theme_draw_progressbar(bar);
  71. return;
  72. }
  73. int rtgui_progressbar_get_range(struct rtgui_progressbar *bar)
  74. {
  75. RT_ASSERT(bar != RT_NULL);
  76. return bar->range;
  77. }