diff --git a/src/KDDockWidgets.h b/src/KDDockWidgets.h index a9c60490..95493356 100644 --- a/src/KDDockWidgets.h +++ b/src/KDDockWidgets.h @@ -204,6 +204,16 @@ enum class DropIndicatorType }; Q_ENUM_NS(DropIndicatorType) +enum class SizePolicy +{ + Fixed = 0, + Minimum = 1, + Maximum = 4, + Preferred = 5, + Expanding = 7 +}; +Q_ENUM_NS(SizePolicy) + ///@internal enum SuggestedGeometryHint { SuggestedGeometryHint_None, diff --git a/src/View.h b/src/View.h index 7b5ec1d2..d1ab335e 100644 --- a/src/View.h +++ b/src/View.h @@ -12,12 +12,12 @@ #pragma once #include "docks_export.h" +#include "KDDockWidgets.h" #include "Controller.h" -#include // TODO Remove Qt headers, introduce Size and Rect structs +#include // TODOm4 Remove Qt headers, introduce Size and Rect structs #include #include -#include #include "kdbindings/signal.h" @@ -146,8 +146,9 @@ public: virtual QPoint mapToGlobal(QPoint) const = 0; virtual QPoint mapFromGlobal(QPoint) const = 0; virtual QPoint mapTo(View *, QPoint) const = 0; - virtual void setSizePolicy(QSizePolicy) = 0; - virtual QSizePolicy sizePolicy() const = 0; + virtual void setSizePolicy(SizePolicy, SizePolicy) = 0; + virtual SizePolicy verticalSizePolicy() const = 0; + virtual SizePolicy horizontalSizePolicy() const = 0; void closeRootView(); QRect windowGeometry() const; QSize parentSize() const; diff --git a/src/ViewWrapper.cpp b/src/ViewWrapper.cpp index cb335a7f..aae6742c 100644 --- a/src/ViewWrapper.cpp +++ b/src/ViewWrapper.cpp @@ -73,7 +73,7 @@ void ViewWrapper::raise() qFatal("Not implemented"); } -void ViewWrapper::setSizePolicy(QSizePolicy) +void ViewWrapper::setSizePolicy(SizePolicy, SizePolicy) { qFatal("Not implemented"); } diff --git a/src/ViewWrapper.h b/src/ViewWrapper.h index 2278878c..0f86c72a 100644 --- a/src/ViewWrapper.h +++ b/src/ViewWrapper.h @@ -42,7 +42,7 @@ public: void update() override; void raiseAndActivate() override; void raise() override; - void setSizePolicy(QSizePolicy) override; + void setSizePolicy(SizePolicy, SizePolicy) override; void setFlag(Qt::WindowType, bool = true) override; void setAttribute(Qt::WidgetAttribute, bool enable = true) override; Qt::WindowFlags flags() const override; diff --git a/src/controllers/DockWidget.cpp b/src/controllers/DockWidget.cpp index bb4b66cd..25f73c64 100644 --- a/src/controllers/DockWidget.cpp +++ b/src/controllers/DockWidget.cpp @@ -168,7 +168,7 @@ void DockWidget::setGuestView(std::shared_ptr guest) d->guest = guest; if (guest) - view()->setSizePolicy(guest->sizePolicy()); + view()->setSizePolicy(guest->horizontalSizePolicy(), guest->verticalSizePolicy()); Q_EMIT guestViewChanged(); } diff --git a/src/controllers/TitleBar.cpp b/src/controllers/TitleBar.cpp index 6458bf31..1a5588df 100644 --- a/src/controllers/TitleBar.cpp +++ b/src/controllers/TitleBar.cpp @@ -63,7 +63,7 @@ TitleBar::TitleBar(FloatingWindow *parent) void TitleBar::init() { view()->init(); - view()->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + view()->setSizePolicy(SizePolicy::Minimum, SizePolicy::Fixed); connect(this, &TitleBar::isFocusedChanged, this, [this] { // repaint diff --git a/src/qtquick/views/ViewWrapper_qtquick.cpp b/src/qtquick/views/ViewWrapper_qtquick.cpp index 4ed439b1..a4fc75fb 100644 --- a/src/qtquick/views/ViewWrapper_qtquick.cpp +++ b/src/qtquick/views/ViewWrapper_qtquick.cpp @@ -444,10 +444,18 @@ const View *ViewWrapper_qtquick::unwrap() const return qobject_cast(m_item); } -QSizePolicy ViewWrapper_qtquick::sizePolicy() const +SizePolicy ViewWrapper_qtquick::verticalSizePolicy() const { if (auto view = unwrap()) { - return view->sizePolicy(); + return view->verticalSizePolicy(); + } + return {}; +} + +SizePolicy ViewWrapper_qtquick::horizontalSizePolicy() const +{ + if (auto view = unwrap()) { + return view->horizontalSizePolicy(); } return {}; } diff --git a/src/qtquick/views/ViewWrapper_qtquick.h b/src/qtquick/views/ViewWrapper_qtquick.h index c0730465..37f9653a 100644 --- a/src/qtquick/views/ViewWrapper_qtquick.h +++ b/src/qtquick/views/ViewWrapper_qtquick.h @@ -63,7 +63,8 @@ public: bool close() override; Qt::FocusPolicy focusPolicy() const override; bool hasFocus() const override; - QSizePolicy sizePolicy() const override; + SizePolicy verticalSizePolicy() const override; + SizePolicy horizontalSizePolicy() const override; const View *unwrap() const; View *unwrap(); diff --git a/src/qtquick/views/View_qtquick.cpp b/src/qtquick/views/View_qtquick.cpp index df5906fc..269a051d 100644 --- a/src/qtquick/views/View_qtquick.cpp +++ b/src/qtquick/views/View_qtquick.cpp @@ -607,14 +607,20 @@ void View_qtquick::setWindowOpacity(double v) w->setOpacity(v); } -void View_qtquick::setSizePolicy(QSizePolicy sp) +void View_qtquick::setSizePolicy(SizePolicy h, SizePolicy v) { - m_sizePolicy = sp; + m_horizontalSizePolicy = h; + m_verticalSizePolicy = v; } -QSizePolicy View_qtquick::sizePolicy() const +SizePolicy View_qtquick::verticalSizePolicy() const { - return m_sizePolicy; + return m_verticalSizePolicy; +} + +SizePolicy View_qtquick::horizontalSizePolicy() const +{ + return m_horizontalSizePolicy; } void View_qtquick::setWindowTitle(const QString &title) diff --git a/src/qtquick/views/View_qtquick.h b/src/qtquick/views/View_qtquick.h index ca37723c..bb8e89ad 100644 --- a/src/qtquick/views/View_qtquick.h +++ b/src/qtquick/views/View_qtquick.h @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include @@ -115,8 +114,9 @@ public: QPoint mapFromGlobal(QPoint globalPt) const override; QPoint mapTo(View *parent, QPoint pos) const override; void setWindowOpacity(double v) override; - void setSizePolicy(QSizePolicy sp) override; - QSizePolicy sizePolicy() const override; + void setSizePolicy(SizePolicy, SizePolicy) override; + SizePolicy verticalSizePolicy() const override; + SizePolicy horizontalSizePolicy() const override; static bool close(QQuickItem *); bool close() override; @@ -186,7 +186,8 @@ private: void updateNormalGeometry(); bool m_inSetParent = false; QSize m_sizeHint; - QSizePolicy m_sizePolicy = QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + SizePolicy m_verticalSizePolicy = SizePolicy::Preferred; + SizePolicy m_horizontalSizePolicy = SizePolicy::Preferred; Qt::WindowFlags m_windowFlags; int m_widgetAttributes = 0; // Qt::WidgetAttribute Qt::FocusPolicy m_focusPolicy = Qt::NoFocus; diff --git a/src/qtwidgets/Platform_qtwidgets.cpp b/src/qtwidgets/Platform_qtwidgets.cpp index f9a537e6..061b7463 100644 --- a/src/qtwidgets/Platform_qtwidgets.cpp +++ b/src/qtwidgets/Platform_qtwidgets.cpp @@ -29,6 +29,13 @@ using namespace KDDockWidgets; +static_assert(SizePolicy::Fixed == SizePolicy(QSizePolicy::Fixed), "Enums dont match"); +static_assert(SizePolicy::Minimum == SizePolicy(QSizePolicy::Minimum), "Enums dont match"); +static_assert(SizePolicy::Maximum == SizePolicy(QSizePolicy::Maximum), "Enums dont match"); +static_assert(SizePolicy::Preferred == SizePolicy(QSizePolicy::Preferred), "Enums dont match"); +static_assert(SizePolicy::Expanding == SizePolicy(QSizePolicy::Expanding), "Enums dont match"); + + Platform_qtwidgets::Platform_qtwidgets() { init(); diff --git a/src/qtwidgets/TestHelpers_qtwidgets.cpp b/src/qtwidgets/TestHelpers_qtwidgets.cpp index 364d66f8..8bb39f07 100644 --- a/src/qtwidgets/TestHelpers_qtwidgets.cpp +++ b/src/qtwidgets/TestHelpers_qtwidgets.cpp @@ -62,7 +62,7 @@ public: { create(); setMinimumSize(opts.minSize.boundedTo(opts.maxSize)); - setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred)); + setSizePolicy(SizePolicy::Preferred, SizePolicy::Preferred); } QSize sizeHint() const override diff --git a/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp b/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp index e3b71f81..e6c6bbef 100644 --- a/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp +++ b/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp @@ -358,7 +358,12 @@ bool ViewWrapper_qtwidgets::hasFocus() const return m_widget->hasFocus(); } -QSizePolicy ViewWrapper_qtwidgets::sizePolicy() const +SizePolicy ViewWrapper_qtwidgets::horizontalSizePolicy() const { - return m_widget->sizePolicy(); + return SizePolicy(m_widget->sizePolicy().horizontalPolicy()); +} + +SizePolicy ViewWrapper_qtwidgets::verticalSizePolicy() const +{ + return SizePolicy(m_widget->sizePolicy().verticalPolicy()); } diff --git a/src/qtwidgets/views/ViewWrapper_qtwidgets.h b/src/qtwidgets/views/ViewWrapper_qtwidgets.h index 54fdfb66..e359265b 100644 --- a/src/qtwidgets/views/ViewWrapper_qtwidgets.h +++ b/src/qtwidgets/views/ViewWrapper_qtwidgets.h @@ -63,7 +63,8 @@ public: Qt::FocusPolicy focusPolicy() const override; void setFocusPolicy(Qt::FocusPolicy) override; bool hasFocus() const override; - QSizePolicy sizePolicy() const override; + SizePolicy horizontalSizePolicy() const override; + SizePolicy verticalSizePolicy() const override; QWidget *widget() const; private: diff --git a/src/qtwidgets/views/View_qtwidgets.h b/src/qtwidgets/views/View_qtwidgets.h index 5d05f142..f5304ecd 100644 --- a/src/qtwidgets/views/View_qtwidgets.h +++ b/src/qtwidgets/views/View_qtwidgets.h @@ -89,11 +89,12 @@ public: QSize max = maximumSize(); max = boundedMaxSize(min, max); // for safety against weird values - const QSizePolicy policy = sizePolicy(); + const SizePolicy vPolicy = verticalSizePolicy(); + const SizePolicy hPolicy = horizontalSizePolicy(); - if (policy.verticalPolicy() == QSizePolicy::Fixed || policy.verticalPolicy() == QSizePolicy::Maximum) + if (vPolicy == SizePolicy::Fixed || vPolicy == SizePolicy::Maximum) max.setHeight(qMin(max.height(), sizeHint().height())); - if (policy.horizontalPolicy() == QSizePolicy::Fixed || policy.horizontalPolicy() == QSizePolicy::Maximum) + if (hPolicy == SizePolicy::Fixed || hPolicy == SizePolicy::Maximum) max.setWidth(qMin(max.width(), sizeHint().width())); max = View::boundedMaxSize(min, max); // for safety against weird values @@ -246,14 +247,19 @@ public: return QWidget::mapTo(qobject_cast(someAncestor->asQObject()), pos); } - void setSizePolicy(QSizePolicy policy) override + void setSizePolicy(SizePolicy h, SizePolicy v) override { - Base::setSizePolicy(policy); + Base::setSizePolicy(QSizePolicy(QSizePolicy::Policy(h), QSizePolicy::Policy(v))); } - QSizePolicy sizePolicy() const override + SizePolicy verticalSizePolicy() const override { - return QWidget::sizePolicy(); + return SizePolicy(Base::sizePolicy().verticalPolicy()); + } + + SizePolicy horizontalSizePolicy() const override + { + return SizePolicy(Base::sizePolicy().horizontalPolicy()); } void setWindowOpacity(double v) override diff --git a/tests/qtwidgets/tst_qtwidgets.cpp b/tests/qtwidgets/tst_qtwidgets.cpp index d649870e..f41c885d 100644 --- a/tests/qtwidgets/tst_qtwidgets.cpp +++ b/tests/qtwidgets/tst_qtwidgets.cpp @@ -1048,7 +1048,7 @@ void TestQtWidgets::tst_maximumSizePolicy() const int maxHeight = 250; auto widget = Platform::instance()->tests_createView({ true, QSize(250, maxHeight), QSize(200, 200) }); - widget->setSizePolicy({ QSizePolicy::Preferred, QSizePolicy::Maximum }); + widget->setSizePolicy(SizePolicy::Preferred, SizePolicy::Maximum); auto dock1 = createDockWidget("dock1", widget); dock1->show(); @@ -1338,8 +1338,8 @@ void TestQtWidgets::tst_fixedSizePolicy() const int buttonMaxHeight = button->sizeHint().height(); QCOMPARE(dock1->view()->sizeHint(), button->sizeHint()); - QCOMPARE(dock1->view()->sizePolicy().verticalPolicy(), button->sizePolicy().verticalPolicy()); - QCOMPARE(dock1->view()->sizePolicy().horizontalPolicy(), button->sizePolicy().horizontalPolicy()); + QCOMPARE(dock1->view()->verticalSizePolicy(), SizePolicy(button->sizePolicy().verticalPolicy())); + QCOMPARE(dock1->view()->horizontalSizePolicy(), SizePolicy(button->sizePolicy().horizontalPolicy())); QCOMPARE(frame->view()->maxSizeHint().height(), qMax(buttonMaxHeight, Layouting::Item::hardcodedMinimumSize.height())); } diff --git a/tests/tst_docks.cpp b/tests/tst_docks.cpp index 4f0e7713..dc1fb1d0 100644 --- a/tests/tst_docks.cpp +++ b/tests/tst_docks.cpp @@ -2685,7 +2685,7 @@ void TestDocks::tst_honourGeometryOfHiddenWindow() auto d1 = newDockWidget("1"); auto guest = Platform::instance()->tests_createFocusableView({ true }); - guest->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); + guest->setSizePolicy(SizePolicy::Expanding, SizePolicy::Expanding); d1->setGuestView(guest->asWrapper()); QVERIFY(!d1->isVisible()); diff --git a/tests/tst_viewwrapper.cpp b/tests/tst_viewwrapper.cpp index 90f8a788..772df0fd 100644 --- a/tests/tst_viewwrapper.cpp +++ b/tests/tst_viewwrapper.cpp @@ -88,6 +88,6 @@ TEST_CASE("ViewWrapper::focusPolicy") TEST_CASE("ViewWrapper::sizePolicy") { auto rootView = createViewAndWindow({}); - CHECK_EQ(rootView->asWrapper()->sizePolicy().horizontalPolicy(), QSizePolicy::Preferred); - CHECK_EQ(rootView->asWrapper()->sizePolicy().verticalPolicy(), QSizePolicy::Preferred); + CHECK_EQ(rootView->asWrapper()->horizontalSizePolicy(), SizePolicy::Preferred); + CHECK_EQ(rootView->asWrapper()->verticalSizePolicy(), SizePolicy::Preferred); }