Margins.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. namespace GUI {
  8. class Margins {
  9. public:
  10. Margins() { }
  11. Margins(int left, int top, int right, int bottom)
  12. : m_left(left)
  13. , m_top(top)
  14. , m_right(right)
  15. , m_bottom(bottom)
  16. {
  17. }
  18. ~Margins() { }
  19. bool is_null() const { return !m_left && !m_top && !m_right && !m_bottom; }
  20. int left() const { return m_left; }
  21. int top() const { return m_top; }
  22. int right() const { return m_right; }
  23. int bottom() const { return m_bottom; }
  24. void set_left(int value) { m_left = value; }
  25. void set_top(int value) { m_top = value; }
  26. void set_right(int value) { m_right = value; }
  27. void set_bottom(int value) { m_bottom = value; }
  28. bool operator==(const Margins& other) const
  29. {
  30. return m_left == other.m_left
  31. && m_top == other.m_top
  32. && m_right == other.m_right
  33. && m_bottom == other.m_bottom;
  34. }
  35. private:
  36. int m_left { 0 };
  37. int m_top { 0 };
  38. int m_right { 0 };
  39. int m_bottom { 0 };
  40. };
  41. }
  42. #define REGISTER_MARGINS_PROPERTY(property_name, getter, setter) \
  43. register_property( \
  44. property_name, [this]() { \
  45. auto m = getter(); \
  46. JsonObject margins_object; \
  47. margins_object.set("left", m.left()); \
  48. margins_object.set("right", m.right()); \
  49. margins_object.set("top", m.top()); \
  50. margins_object.set("bottom", m.bottom()); \
  51. return margins_object; }, \
  52. [this](auto& value) { \
  53. if (!value.is_array() || value.as_array().size() != 4) \
  54. return false; \
  55. int m[4]; \
  56. for (size_t i = 0; i < 4; ++i) \
  57. m[i] = value.as_array().at(i).to_i32(); \
  58. setter({ m[0], m[1], m[2], m[3] }); \
  59. return true; \
  60. });