qml: Move widgetMaxSize to the base class

The logic is not specific to QWidget. It will be reused for QtQuick
This commit is contained in:
Sergio Martins
2020-07-26 20:24:24 +01:00
parent e4c87f60e9
commit a84fea36fe
3 changed files with 35 additions and 33 deletions

View File

@@ -15,12 +15,14 @@
#pragma once
#include "multisplitter_export.h"
#include "Item_p.h"
#include <QRect>
#include <QSize>
#include <QDebug>
#include <QObject>
#include <qglobal.h>
#include <QSizePolicy>
#include <memory>
@@ -98,6 +100,39 @@ public:
///@brief returns an id for corelation purposes for saving layouts
QString id() const;
template <typename T>
static QSize widgetMinSize(const T *w)
{
const int minW = w->minimumWidth() > 0 ? w->minimumWidth()
: w->minimumSizeHint().width();
const int minH = w->minimumHeight() > 0 ? w->minimumHeight()
: w->minimumSizeHint().height();
return QSize(minW, minH).expandedTo(Item::hardcodedMinimumSize);
}
template <typename T>
static QSize widgetMaxSize(const T *w)
{
// The max size is usually QWidget::maximumSize(), but we also honour the QSizePolicy::Fixed+sizeHint() case
// as widgets don't need to have QWidget::maximumSize() to have a max size honoured
const QSize min = widgetMinSize(w);
QSize max = w->maximumSize();
max = boundedMaxSize(min, max); // for safety against weird values
const QSizePolicy policy = w->sizePolicy();
if (policy.verticalPolicy() == QSizePolicy::Fixed || policy.verticalPolicy() == QSizePolicy::Maximum)
max.setHeight(qMin(max.height(), w->sizeHint().height()));
if (policy.horizontalPolicy() == QSizePolicy::Fixed || policy.horizontalPolicy() == QSizePolicy::Maximum)
max.setWidth(qMin(max.width(), w->sizeHint().width()));
max = boundedMaxSize(min, max); // for safety against weird values
return max;
}
protected:
static QSize boundedMaxSize(QSize min, QSize max);

View File

@@ -111,37 +111,6 @@ void Widget_qwidget::move(int x, int y)
m_thisWidget->move(x, y);
}
QSize Widget_qwidget::widgetMinSize(const QWidget *w)
{
const int minW = w->minimumWidth() > 0 ? w->minimumWidth()
: w->minimumSizeHint().width();
const int minH = w->minimumHeight() > 0 ? w->minimumHeight()
: w->minimumSizeHint().height();
return QSize(minW, minH).expandedTo(Item::hardcodedMinimumSize);
}
QSize Widget_qwidget::widgetMaxSize(const QWidget *w)
{
// The max size is usually QWidget::maximumSize(), but we also honour the QSizePolicy::Fixed+sizeHint() case
// as widgets don't need to have QWidget::maximumSize() to have a max size honoured
const QSize min = widgetMinSize(w);
QSize max = w->maximumSize();
max = boundedMaxSize(min, max); // for safety against weird values
const QSizePolicy policy = w->sizePolicy();
if (policy.verticalPolicy() == QSizePolicy::Fixed || policy.verticalPolicy() == QSizePolicy::Maximum)
max.setHeight(qMin(max.height(), w->sizeHint().height()));
if (policy.horizontalPolicy() == QSizePolicy::Fixed || policy.horizontalPolicy() == QSizePolicy::Maximum)
max.setWidth(qMin(max.width(), w->sizeHint().width()));
max = boundedMaxSize(min, max); // for safety against weird values
return max;
}
void Widget_qwidget::setSize(int width, int height)
{
m_thisWidget->resize(QSize(width, height));

View File

@@ -59,8 +59,6 @@ public:
QPoint mapFromGlobal(QPoint p) const override;
QPoint mapToGlobal(QPoint p) const override;
static QSize widgetMinSize(const QWidget *w);
static QSize widgetMaxSize(const QWidget *w);
private:
QWidget *const m_thisWidget;
Q_DISABLE_COPY(Widget_qwidget)