Don't depend directly on QSizePolicy, as that's QtWidgets

Introduce our own enum. Soon our qtquick frontend won't link
against QtWidgets
This commit is contained in:
Sergio Martins
2022-06-11 18:22:38 +01:00
parent e120f6f318
commit 1acbf48786
18 changed files with 82 additions and 36 deletions

View File

@@ -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,

View File

@@ -12,12 +12,12 @@
#pragma once
#include "docks_export.h"
#include "KDDockWidgets.h"
#include "Controller.h"
#include <QSize> // TODO Remove Qt headers, introduce Size and Rect structs
#include <QSize> // TODOm4 Remove Qt headers, introduce Size and Rect structs
#include <QRect>
#include <QObject>
#include <QSizePolicy>
#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;

View File

@@ -73,7 +73,7 @@ void ViewWrapper::raise()
qFatal("Not implemented");
}
void ViewWrapper::setSizePolicy(QSizePolicy)
void ViewWrapper::setSizePolicy(SizePolicy, SizePolicy)
{
qFatal("Not implemented");
}

View File

@@ -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;

View File

@@ -168,7 +168,7 @@ void DockWidget::setGuestView(std::shared_ptr<ViewWrapper> guest)
d->guest = guest;
if (guest)
view()->setSizePolicy(guest->sizePolicy());
view()->setSizePolicy(guest->horizontalSizePolicy(), guest->verticalSizePolicy());
Q_EMIT guestViewChanged();
}

View File

@@ -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

View File

@@ -444,10 +444,18 @@ const View *ViewWrapper_qtquick::unwrap() const
return qobject_cast<const View_qtquick *>(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 {};
}

View File

@@ -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();

View File

@@ -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)

View File

@@ -20,7 +20,6 @@
#include <QDebug>
#include <QEvent>
#include <QResizeEvent>
#include <QSizePolicy>
#include <QQuickItem>
#include <QQuickWindow>
#include <QScopedValueRollback>
@@ -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;

View File

@@ -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();

View File

@@ -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

View File

@@ -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());
}

View File

@@ -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:

View File

@@ -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<QWidget *>(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

View File

@@ -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()));
}

View File

@@ -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());

View File

@@ -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);
}