RadialMenu.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. * RadialMenu.h, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #pragma once
  11. #include "../gui/CIntObject.h"
  12. class IImage;
  13. class CGarrisonInt;
  14. class CGarrisonSlot;
  15. class CFilledTexture;
  16. class CGStatusBar;
  17. class RadialMenuItem : public CIntObject
  18. {
  19. std::shared_ptr<IImage> image;
  20. std::shared_ptr<CPicture> picture;
  21. public:
  22. std::function<void()> callback;
  23. RadialMenuItem(const std::string& imageName, const std::function<void()>& callback);
  24. bool isInside(const Point & position);
  25. void gesturePanning(const Point & initialPosition, const Point & currentPosition, const Point & lastUpdateDistance) override;
  26. void gesture(bool on, const Point & initialPosition, const Point & finalPosition) override;
  27. };
  28. class RadialMenu : public CIntObject
  29. {
  30. static constexpr Point ITEM_NW = Point( -40, -70);
  31. static constexpr Point ITEM_NE = Point( +40, -70);
  32. static constexpr Point ITEM_WW = Point( -80, 0);
  33. static constexpr Point ITEM_EE = Point( +80, 0);
  34. static constexpr Point ITEM_SW = Point( -40, +70);
  35. static constexpr Point ITEM_SE = Point( +40, +70);
  36. std::vector<std::shared_ptr<RadialMenuItem>> items;
  37. std::shared_ptr<CFilledTexture> statusBarBackground;
  38. std::shared_ptr<CGStatusBar> statusBar;
  39. void addItem(const Point & offset, const std::string & path, const std::function<void()>& callback );
  40. public:
  41. RadialMenu(const Point & positionToCenter, CGarrisonInt * army, CGarrisonSlot * slot);
  42. void gesturePanning(const Point & initialPosition, const Point & currentPosition, const Point & lastUpdateDistance) override;
  43. void gesture(bool on, const Point & initialPosition, const Point & finalPosition) override;
  44. void show(Canvas & to) override;
  45. };