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:
@@ -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);
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user