progressbar.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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(bar, rtgui_progressbar_event_handler);
  9. rtgui_widget_set_rect(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(bar) = RTGUI_ALIGN_CENTER_HORIZONTAL|RTGUI_ALIGN_CENTER_VERTICAL;
  15. }
  16. static void _rtgui_progressbar_destructor(rtgui_progressbar_t *bar)
  17. {
  18. }
  19. rtgui_type_t *rtgui_progressbar_type_get(void)
  20. {
  21. static rtgui_type_t *progressbar_type = RT_NULL;
  22. if(!progressbar_type)
  23. {
  24. progressbar_type = rtgui_type_create("progressbar", RTGUI_WIDGET_TYPE,
  25. sizeof(rtgui_progressbar_t),
  26. RTGUI_CONSTRUCTOR(_rtgui_progressbar_constructor),
  27. RTGUI_DESTRUCTOR(_rtgui_progressbar_destructor));
  28. }
  29. return progressbar_type;
  30. }
  31. rt_bool_t rtgui_progressbar_event_handler(PVOID wdt, rtgui_event_t* event)
  32. {
  33. rtgui_widget_t *widget = (rtgui_widget_t*)wdt;
  34. rtgui_progressbar_t* bar = (rtgui_progressbar_t*)widget;
  35. switch (event->type)
  36. {
  37. case RTGUI_EVENT_PAINT:
  38. if(widget->on_draw != RT_NULL)
  39. widget->on_draw(widget, event);
  40. else
  41. {
  42. rtgui_theme_draw_progressbar(bar);
  43. }
  44. break;
  45. }
  46. return RT_FALSE;
  47. }
  48. rtgui_progressbar_t* rtgui_progressbar_create(PVOID parent, int orient, int range, int left, int top, int w, int h)
  49. {
  50. rtgui_progressbar_t* bar;
  51. RT_ASSERT(parent != RT_NULL);
  52. bar = rtgui_widget_create (RTGUI_PROGRESSBAR_TYPE);
  53. if(bar != RT_NULL)
  54. {
  55. rtgui_rect_t rect;
  56. rtgui_widget_get_rect(bar, &rect);
  57. rtgui_widget_rect_to_device(parent,&rect);
  58. rect.x1 += left;
  59. rect.y1 += top;
  60. rect.x2 = rect.x1+w;
  61. rect.y2 = rect.y1+h;
  62. rtgui_widget_set_rect(bar, &rect);
  63. bar->orient = orient;
  64. bar->range = range;
  65. rtgui_container_add_child(parent, bar);
  66. }
  67. return bar;
  68. }
  69. void rtgui_progressbar_destroy(rtgui_progressbar_t* bar)
  70. {
  71. rtgui_widget_destroy(bar);
  72. }
  73. void rtgui_progressbar_set_value(rtgui_progressbar_t *bar, int value)
  74. {
  75. RT_ASSERT(bar != RT_NULL);
  76. bar->position = value;
  77. rtgui_theme_draw_progressbar(bar);
  78. return;
  79. }
  80. int rtgui_progressbar_get_value(rtgui_progressbar_t *bar)
  81. {
  82. RT_ASSERT(bar != RT_NULL);
  83. return bar->position;
  84. }
  85. void rtgui_progressbar_set_range(rtgui_progressbar_t *bar, int range)
  86. {
  87. RT_ASSERT(bar != RT_NULL);
  88. bar->range = range;
  89. rtgui_theme_draw_progressbar(bar);
  90. return;
  91. }
  92. int rtgui_progressbar_get_range(rtgui_progressbar_t *bar)
  93. {
  94. RT_ASSERT(bar != RT_NULL);
  95. return bar->range;
  96. }