22void QQuickStyleItemScrollBar::connectToControl()
const
24 QQuickStyleItem::connectToControl();
25 auto scrollBar = control<QQuickScrollBar>();
26 connect(scrollBar, &QQuickScrollBar::orientationChanged,
this, &QQuickStyleItem::markImageDirty);
27 connect(scrollBar, &QQuickScrollBar::pressedChanged,
this, &QQuickStyleItem::markImageDirty);
30StyleItemGeometry QQuickStyleItemScrollBar::calculateGeometry()
32 QStyleOptionSlider styleOption;
33 initStyleOption(styleOption);
35 StyleItemGeometry geometry;
36 geometry.minimumSize = style()->sizeFromContents(QStyle::CT_ScrollBar, &styleOption, QSize(0, 0));
37 if (m_subControl == SubLine || m_subControl == AddLine) {
41 if (styleOption.orientation == Qt::Vertical)
43 geometry.minimumSize = sz;
45 geometry.implicitSize = geometry.minimumSize;
46 styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize);
47 geometry.layoutRect = style()->subElementRect(QStyle::SE_ScrollBarLayoutItem, &styleOption);
48 geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_ScrollBar, &styleOption, geometry.minimumSize);
53void QQuickStyleItemScrollBar::paintEvent(QPainter *painter)
const
55 QStyleOptionSlider styleOption;
56 initStyleOption(styleOption);
57 if (m_subControl == SubLine || m_subControl == AddLine) {
58 QStyle::SubControl sc = m_subControl == SubLine ? QStyle::SC_ScrollBarSubLine : QStyle::SC_ScrollBarAddLine;
59 QStyleOptionSlider opt = styleOption;
60 opt.subControls = QStyle::SC_ScrollBarAddLine
61 | QStyle::SC_ScrollBarSubLine
62 | QStyle::SC_ScrollBarGroove;
64 const qreal scale = window()->effectiveDevicePixelRatio();
65 const QSize scrollBarMinSize = style()->sizeFromContents(QStyle::CT_ScrollBar, &opt, QSize(0, 0));
66 const QSize sz = scrollBarMinSize * scale;
67 QImage scrollBarImage(sz, QImage::Format_ARGB32_Premultiplied);
68 scrollBarImage.setDevicePixelRatio(scale);
69 QPainter p(&scrollBarImage);
70 opt.rect = QRect(QPoint(0, 0), scrollBarMinSize);
71 style()->drawComplexControl(QStyle::CC_ScrollBar, &opt, &p);
72 QRect sourceImageRect = style()->subControlRect(QStyle::CC_ScrollBar, &opt, sc);
73 sourceImageRect = QRect(sourceImageRect.topLeft() * scale, sourceImageRect.size() * scale);
74 painter->drawImage(QPoint(0, 0), scrollBarImage, sourceImageRect);
76 style()->drawComplexControl(QStyle::CC_ScrollBar, &styleOption, painter);