Light mode: Use the same style of scrollbar as in dark mode

Unifies the look and feel between light and dark modes and improves the contrast of the slider.
This commit is contained in:
Kovid Goyal 2025-05-21 19:26:01 +05:30
parent c2a525ef97
commit 053b937bc8
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -141,10 +141,15 @@ draw_arrow(Qt::ArrowType type, QPainter *painter, const QStyleOption *option, co
// scrollbar {{{
void
CalibreStyle::draw_scrollbar(const QStyleOptionSlider *scroll_bar, QPainter * painter, const QWidget * widget) const {
bool is_dark = is_color_dark(scroll_bar->palette.color(QPalette::Window));
bool horizontal = scroll_bar->orientation == Qt::Horizontal;
QColor outline = scroll_bar->palette.window().color().darker(140);
QColor alphaOutline = outline;
QColor alphaOutline = scroll_bar->palette.window().color();
if (is_dark) {
alphaOutline = alphaOutline.darker(140);
} else {
alphaOutline = alphaOutline.lighter(180);
}
alphaOutline.setAlpha(180);
QRect scrollBarSubLine = subControlRect(CC_ScrollBar, scroll_bar, SC_ScrollBarSubLine, widget);
@ -158,10 +163,17 @@ CalibreStyle::draw_scrollbar(const QStyleOptionSlider *scroll_bar, QPainter * pa
QLinearGradient gradient(rect.center().x(), rect.top(), rect.center().x(), rect.bottom());
if (!horizontal) gradient = QLinearGradient(rect.left(), rect.center().y(), rect.right(), rect.center().y());
QColor buttonColor = scroll_bar->palette.color(QPalette::Button);
if (is_dark) {
gradient.setColorAt(0, buttonColor.darker(107));
gradient.setColorAt(0.1, buttonColor.darker(105));
gradient.setColorAt(0.9, buttonColor.darker(105));
gradient.setColorAt(1, buttonColor.darker(107));
} else {
gradient.setColorAt(0, buttonColor.darker(105));
gradient.setColorAt(0.1, buttonColor.darker(103));
gradient.setColorAt(0.9, buttonColor.darker(103));
gradient.setColorAt(1, buttonColor.darker(105));
}
painter->save();
painter->setPen(Qt::NoPen);
painter->fillRect(rect, gradient);
@ -177,11 +189,12 @@ CalibreStyle::draw_scrollbar(const QStyleOptionSlider *scroll_bar, QPainter * pa
// Paint slider
gradient = QLinearGradient(scrollBarSlider.center().x(), scrollBarSlider.top(), scrollBarSlider.center().x(), scrollBarSlider.bottom());
if (!horizontal) gradient = QLinearGradient(scrollBarSlider.left(), scrollBarSlider.center().y(), scrollBarSlider.right(), scrollBarSlider.center().y());
QColor m = scroll_bar->palette.window().color().lighter(130);
QColor m = scroll_bar->palette.window().color();
m = is_dark ? m.lighter(130) : m.darker(115);
if (scroll_bar->state & State_MouseOver) {
gradient.setColorAt(0, m.lighter()); gradient.setColorAt(1, m.lighter(175));
gradient.setColorAt(0, is_dark ? m.lighter() : m.darker(115)); gradient.setColorAt(1, is_dark ? m.lighter(175) : m.darker(145));
} else {
gradient.setColorAt(0, m); gradient.setColorAt(1, m.lighter());
gradient.setColorAt(0, m); gradient.setColorAt(1, is_dark ? m.lighter() : m.darker(135));
}
painter->save();
painter->setRenderHint(QPainter::Antialiasing, true);
@ -277,7 +290,7 @@ void CalibreStyle::drawComplexControl(ComplexControl control, const QStyleOption
case CC_ScrollBar: {
const QStyleOptionSlider *scroll_bar = qstyleoption_cast<const QStyleOptionSlider *>(option);
if (!transient_scroller && scroll_bar && is_color_dark(option->palette.color(QPalette::Window))) {
if (!transient_scroller && scroll_bar) {
this->draw_scrollbar(scroll_bar, painter, widget);
return;
}} break;