aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Moe Gustavsen <richard.gustavsen@qt.io>2020-10-02 21:09:09 +0200
committerRichard Moe Gustavsen <richard.gustavsen@qt.io>2020-10-06 14:31:09 +0200
commit5ca072446a89d89e4017b6a04cc1ea14853a9f65 (patch)
tree4ded81113fd39bcd45b2b404b51a3f7671d7534d
parentb68a83595d77d9967b5296858865c6a11d1022de (diff)
Native style, StyleItem: add property 'minimumSize'
Some items, like the scrollbar handle, can scale the handle down to 0 if no minimumSize is set. This will truncate the image drawn by QStyle. This patch will expose the minimum size read from QStyle to the QML control. We can then set ScrollBar.minimumSize to the correct value. Change-Id: Ib87e3ca7ea661bf41ab8057941fec7364b606177 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
-rw-r--r--src/imports/nativestyle/controls/DefaultScrollBar.qml6
-rw-r--r--src/imports/nativestyle/items/qquickstyleitem.cpp10
-rw-r--r--src/imports/nativestyle/items/qquickstyleitem.h3
3 files changed, 17 insertions, 2 deletions
diff --git a/src/imports/nativestyle/controls/DefaultScrollBar.qml b/src/imports/nativestyle/controls/DefaultScrollBar.qml
index 9965b8cb..4ba4f80c 100644
--- a/src/imports/nativestyle/controls/DefaultScrollBar.qml
+++ b/src/imports/nativestyle/controls/DefaultScrollBar.qml
@@ -42,16 +42,18 @@ import QtQuick.NativeStyle as NativeStyle
T.ScrollBar {
id: control
- readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem
+ readonly property bool __nativeContentItem: contentItem instanceof NativeStyle.StyleItem
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
- font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined
+ font.pixelSize: __nativeContentItem ? contentItem.styleFont(control).pixelSize : undefined
visible: policy === T.ScrollBar.AlwaysOn || size < 1.0
+ minimumSize: !__nativeContentItem ? 10 : orientation === Qt.Vertical ?
+ contentItem.minimumSize.height / height : contentItem.minimumSize.width / width
background: NativeStyle.ScrollBar {
control: control
diff --git a/src/imports/nativestyle/items/qquickstyleitem.cpp b/src/imports/nativestyle/items/qquickstyleitem.cpp
index 4c84bf9a..643b190e 100644
--- a/src/imports/nativestyle/items/qquickstyleitem.cpp
+++ b/src/imports/nativestyle/items/qquickstyleitem.cpp
@@ -226,6 +226,7 @@ void QQuickStyleItem::updateGeometry()
const QQuickStyleMargins oldContentPadding = contentPadding();
const QQuickStyleMargins oldLayoutMargins = layoutMargins();
+ const QSize oldMinimumSize = minimumSize();
m_styleItemGeometry = calculateGeometry();
@@ -245,6 +246,8 @@ void QQuickStyleItem::updateGeometry()
emit contentPaddingChanged();
if (layoutMargins() != oldLayoutMargins)
emit layoutMarginsChanged();
+ if (minimumSize() != oldMinimumSize)
+ emit minimumSizeChanged();
setImplicitSize(m_styleItemGeometry.implicitSize.width(), m_styleItemGeometry.implicitSize.height());
@@ -437,6 +440,13 @@ QQuickStyleMargins QQuickStyleItem::layoutMargins() const
return QQuickStyleMargins(outerRect, m_styleItemGeometry.layoutRect);
}
+QSize QQuickStyleItem::minimumSize()
+{
+ // The style item should not be scaled below this size.
+ // Otherwise the image will be truncated.
+ return m_styleItemGeometry.minimumSize;
+}
+
qreal QQuickStyleItem::focusFrameRadius() const
{
return m_styleItemGeometry.focusFrameRadius;
diff --git a/src/imports/nativestyle/items/qquickstyleitem.h b/src/imports/nativestyle/items/qquickstyleitem.h
index bfdabb79..ece2572d 100644
--- a/src/imports/nativestyle/items/qquickstyleitem.h
+++ b/src/imports/nativestyle/items/qquickstyleitem.h
@@ -167,6 +167,7 @@ class QQuickStyleItem : public QQuickItem
// Output
Q_PROPERTY(QQuickStyleMargins contentPadding READ contentPadding() NOTIFY contentPaddingChanged)
Q_PROPERTY(QQuickStyleMargins layoutMargins READ layoutMargins() NOTIFY layoutMarginsChanged)
+ Q_PROPERTY(QSize minimumSize READ minimumSize() NOTIFY minimumSizeChanged)
QML_NAMED_ELEMENT(StyleItem)
QML_UNCREATABLE("StyleItem is an abstract base class.")
@@ -214,6 +215,7 @@ public:
QQuickStyleMargins contentPadding() const;
QQuickStyleMargins layoutMargins() const;
+ QSize minimumSize();
qreal focusFrameRadius() const;
Q_INVOKABLE virtual QFont styleFont(QQuickItem *control);
@@ -226,6 +228,7 @@ signals:
void contentPaddingChanged();
void layoutMarginsChanged();
void fontChanged();
+ void minimumSizeChanged();
protected:
void componentComplete() override;