static QStyleOptionSlider* styleOptionSlider(Scrollbar* scrollbar) { static QStyleOptionSlider opt; opt.rect = scrollbar->frameRect(); opt.state = 0; if (scrollbar->enabled()) opt.state |= QStyle::State_Enabled; if (scrollbar->controlSize() != RegularScrollbar) opt.state |= QStyle::State_Mini; opt.orientation = (scrollbar->orientation() == VerticalScrollbar) ? Qt::Vertical : Qt::Horizontal; if (scrollbar->orientation() == HorizontalScrollbar) opt.state |= QStyle::State_Horizontal; opt.sliderValue = scrollbar->value(); opt.sliderPosition = opt.sliderValue; opt.pageStep = scrollbar->visibleSize(); opt.singleStep = scrollbar->lineStep(); opt.minimum = 0; opt.maximum = qMax(0, scrollbar->maximum()); ScrollbarPart pressedPart = scrollbar->pressedPart(); ScrollbarPart hoveredPart = scrollbar->hoveredPart(); if (pressedPart != NoPart) { opt.activeSubControls = scPart(scrollbar->pressedPart()); if (pressedPart == BackButtonStartPart || pressedPart == ForwardButtonStartPart || pressedPart == BackButtonEndPart || pressedPart == ForwardButtonEndPart || pressedPart == ThumbPart) opt.state |= QStyle::State_Sunken; } else opt.activeSubControls = scPart(hoveredPart); if (hoveredPart != NoPart) opt.state |= QStyle::State_MouseOver; return &opt; }
static QStyleFacadeOption initSliderStyleOption(ScrollbarThemeClient* scrollbar, QObject* widget = 0) { QStyleFacadeOption opt; if (widget) { opt.palette = widget->property("palette").value<QPalette>(); opt.rect = widget->property("rect").value<QRect>(); opt.direction = static_cast<Qt::LayoutDirection>(widget->property("layoutDirection").toInt()); } else { opt.state |= QStyleFacade::State_Active; opt.direction = QGuiApplication::layoutDirection(); } opt.state &= ~QStyleFacade::State_HasFocus; opt.rect = scrollbar->frameRect(); if (scrollbar->enabled()) opt.state |= QStyleFacade::State_Enabled; if (scrollbar->controlSize() != RegularScrollbar) opt.state |= QStyleFacade::State_Mini; opt.slider.orientation = (scrollbar->orientation() == VerticalScrollbar) ? Qt::Vertical : Qt::Horizontal; if (scrollbar->orientation() == HorizontalScrollbar) opt.state |= QStyleFacade::State_Horizontal; else opt.state &= ~QStyleFacade::State_Horizontal; opt.slider.value = scrollbar->value(); opt.slider.position = opt.slider.value; opt.slider.pageStep = scrollbar->pageStep(); opt.slider.singleStep = scrollbar->lineStep(); opt.slider.minimum = 0; opt.slider.maximum = qMax(0, scrollbar->maximum()); if (opt.slider.orientation == Qt::Horizontal && opt.direction == Qt::RightToLeft) opt.slider.upsideDown = true; ScrollbarPart pressedPart = scrollbar->pressedPart(); ScrollbarPart hoveredPart = scrollbar->hoveredPart(); if (pressedPart != NoPart) { opt.slider.activeSubControls = scPart(scrollbar->pressedPart()); if (pressedPart == BackButtonStartPart || pressedPart == ForwardButtonStartPart || pressedPart == BackButtonEndPart || pressedPart == ForwardButtonEndPart || pressedPart == ThumbPart) opt.state |= QStyleFacade::State_Sunken; } else opt.slider.activeSubControls = scPart(hoveredPart); if (hoveredPart != NoPart) opt.state |= QStyleFacade::State_MouseOver; return opt; }