diff options
-rw-r--r-- | src/imports/nativestyle/controls/DefaultScrollBar.qml | 6 | ||||
-rw-r--r-- | src/imports/nativestyle/items/qquickstyleitem.cpp | 10 | ||||
-rw-r--r-- | src/imports/nativestyle/items/qquickstyleitem.h | 3 |
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; |