pm_container.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * File : pm_container.h
  3. * COPYRIGHT (C) 2012-2017, Shanghai Real-Thread Technology Co., Ltd
  4. *
  5. * Change Logs:
  6. * Date Author Notes
  7. * 2017-11-05 realthread the first version
  8. */
  9. #pragma once
  10. #include <pm_widget.h>
  11. #include <rtgui/widgets/widget.h>
  12. #include <rtgui/widgets/container.h>
  13. #include "sigslot.h"
  14. #include <vector>
  15. namespace Persimmon
  16. {
  17. class Container : public Widget
  18. {
  19. typedef Widget super;
  20. public:
  21. Container();
  22. Container(const rtgui_type_t* type);
  23. Container(const Rect &rect);
  24. virtual ~Container();
  25. virtual void addChild(Widget* widget);
  26. virtual void removeChild(Widget* widget);
  27. int getChildIndex(Widget* widget);
  28. void empty();
  29. void saveClip(struct rtgui_region &region);
  30. void restoreClip(struct rtgui_region &region);
  31. virtual void setRect(const Rect &rect);
  32. void setBox(struct rtgui_box *box);
  33. void layout();
  34. virtual void render(struct rtgui_dc* dc, const Point &dcPoint = Point(),
  35. const Rect &srcRect = Rect(),
  36. RenderFlag flags = DrawNormal);
  37. virtual rt_bool_t eventHandler(struct rtgui_event *event);
  38. virtual Widget* getMouseOwner(int x, int y);
  39. protected:
  40. /* C++ children object under this window */
  41. std::vector<Widget*> children;
  42. void handleEventInChildren(struct rtgui_event *event);
  43. };
  44. class TapContainer: public Container
  45. {
  46. public:
  47. TapContainer(const Rect &rect, int value = 0);
  48. virtual ~TapContainer() {}
  49. Signal<int> touch;
  50. virtual bool handleGestureEvent(struct rtgui_event_gesture *, const struct rtgui_gesture *);
  51. private:
  52. int baseValue;
  53. };
  54. }