padding_wrap.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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 "ui/wrap/wrap.h"
  9. namespace Ui {
  10. template <typename Widget = RpWidget>
  11. class PaddingWrap;
  12. template <>
  13. class PaddingWrap<RpWidget> : public Wrap<RpWidget> {
  14. using Parent = Wrap<RpWidget>;
  15. public:
  16. PaddingWrap(
  17. QWidget *parent,
  18. object_ptr<RpWidget> &&child,
  19. const style::margins &padding);
  20. style::margins padding() const {
  21. return _padding;
  22. }
  23. void setPadding(const style::margins &padding);
  24. int naturalWidth() const override;
  25. protected:
  26. int resizeGetHeight(int newWidth) override;
  27. void wrappedSizeUpdated(QSize size) override;
  28. private:
  29. style::margins _padding;
  30. };
  31. template <typename Widget>
  32. class PaddingWrap : public Wrap<Widget, PaddingWrap<RpWidget>> {
  33. using Parent = Wrap<Widget, PaddingWrap<RpWidget>>;
  34. public:
  35. PaddingWrap(
  36. QWidget *parent,
  37. object_ptr<Widget> &&child,
  38. const style::margins &padding)
  39. : Parent(parent, std::move(child), padding) {
  40. }
  41. };
  42. template <typename Widget = RpWidget>
  43. class CenterWrap;
  44. template <>
  45. class CenterWrap<RpWidget> : public Wrap<RpWidget> {
  46. using Parent = Wrap<RpWidget>;
  47. public:
  48. CenterWrap(
  49. QWidget *parent,
  50. object_ptr<RpWidget> &&child);
  51. int naturalWidth() const override;
  52. protected:
  53. int resizeGetHeight(int newWidth) override;
  54. void wrappedSizeUpdated(QSize size) override;
  55. private:
  56. void updateWrappedPosition(int forWidth);
  57. };
  58. template <typename Widget>
  59. class CenterWrap : public Wrap<Widget, CenterWrap<RpWidget>> {
  60. using Parent = Wrap<Widget, CenterWrap<RpWidget>>;
  61. public:
  62. CenterWrap(
  63. QWidget *parent,
  64. object_ptr<Widget> &&child)
  65. : Parent(parent, std::move(child)) {
  66. }
  67. };
  68. class FixedHeightWidget : public RpWidget {
  69. public:
  70. explicit FixedHeightWidget(QWidget *parent, int height = 0)
  71. : RpWidget(parent) {
  72. resize(width(), height);
  73. }
  74. };
  75. inline object_ptr<FixedHeightWidget> CreateSkipWidget(
  76. QWidget *parent,
  77. int skip) {
  78. return object_ptr<FixedHeightWidget>(
  79. parent,
  80. skip);
  81. }
  82. } // namespace Ui