rect.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. // This file is part of Desktop App Toolkit,
  2. // a set of libraries for developing nice desktop applications.
  3. //
  4. // For license and copyright information please follow this link:
  5. // https://github.com/desktop-app/legal/blob/master/LEGAL
  6. //
  7. #pragma once
  8. #include <QtCore/QRect>
  9. namespace rect {
  10. // Margins.
  11. namespace m {
  12. namespace sum {
  13. /*
  14. Horizontal.
  15. rect::m::sum::h(mypadding);
  16. */
  17. [[nodiscard]] inline int h(const QMargins &margins) {
  18. return margins.left() + margins.right();
  19. }
  20. [[nodiscard]] inline float64 h(const QMarginsF &margins) {
  21. return margins.left() + margins.right();
  22. }
  23. /*
  24. Vertical.
  25. rect::m::sum::v(mypadding);
  26. */
  27. [[nodiscard]] inline int v(const QMargins &margins) {
  28. return margins.top() + margins.bottom();
  29. }
  30. [[nodiscard]] inline float64 v(const QMarginsF &margins) {
  31. return margins.top() + margins.bottom();
  32. }
  33. } // namespace sum
  34. namespace pos {
  35. /*
  36. Top-left.
  37. rect::m::pos::tl(mypadding);
  38. */
  39. [[nodiscard]] inline QPoint tl(const QMargins &margins) {
  40. return { margins.left(), margins.top() };
  41. }
  42. [[nodiscard]] inline QPointF tl(const QMarginsF &margins) {
  43. return { margins.left(), margins.top() };
  44. }
  45. } // namespace pos
  46. } // namespace m
  47. /*
  48. rect::right(mywidget);
  49. */
  50. [[nodiscard]] inline int right(const QRect &r) {
  51. return r.left() + r.width();
  52. }
  53. [[nodiscard]] inline float64 right(const QRectF &r) {
  54. return r.left() + r.width();
  55. }
  56. [[nodiscard]] inline int right(not_null<QWidget*> w) {
  57. return w->x() + w->width();
  58. }
  59. /*
  60. rect::bottom(mywidget);
  61. */
  62. [[nodiscard]] inline int bottom(const QRect &r) {
  63. return r.top() + r.height();
  64. }
  65. [[nodiscard]] inline float64 bottom(const QRectF &r) {
  66. return r.top() + r.height();
  67. }
  68. [[nodiscard]] inline int bottom(not_null<const QWidget*> w) {
  69. return w->y() + w->height();
  70. }
  71. /*
  72. rect::center(mywidget);
  73. */
  74. [[nodiscard]] inline QPoint center(const QRect &r) {
  75. return { r.left() + r.width() / 2, r.top() + r.height() / 2 };
  76. }
  77. [[nodiscard]] inline QPointF center(const QRectF &r) {
  78. return { r.left() + r.width() / 2, r.top() + r.height() / 2 };
  79. }
  80. [[nodiscard]] inline QPoint center(not_null<const QWidget*> w) {
  81. return { w->x() + w->width() / 2, w->y() + w->height() / 2 };
  82. }
  83. } // namespace rect
  84. /*
  85. Rect(mysize);
  86. */
  87. [[nodiscard]] inline QRect Rect(const QSize &s) {
  88. return QRect(QPoint(), s);
  89. }
  90. [[nodiscard]] inline QRectF Rect(const QSizeF &s) {
  91. return QRectF(QPointF(), s);
  92. }
  93. /*
  94. Rect(x, y, mysize);
  95. */
  96. [[nodiscard]] inline QRect Rect(int x, int y, const QSize &s) {
  97. return QRect(QPoint(x, y), s);
  98. }
  99. [[nodiscard]] inline QRectF Rect(float64 x, float64 y, const QSizeF &s) {
  100. return QRectF(QPointF(x, y), s);
  101. }
  102. /*
  103. Size(myside);
  104. */
  105. [[nodiscard]] inline QSize Size(int side) {
  106. return QSize(side, side);
  107. }
  108. [[nodiscard]] inline QSizeF Size(float64 side) {
  109. return QSizeF(side, side);
  110. }
  111. /*
  112. Margins(myvalue);
  113. */
  114. [[nodiscard]] inline QMargins Margins(int side) {
  115. return QMargins{ side, side, side, side };
  116. }
  117. [[nodiscard]] inline QMarginsF Margins(float64 side) {
  118. return QMarginsF{ side, side, side, side };
  119. }