X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/6e5460697bd5686d0bc67a3870898d1113f9109b..1e5bc5b3d6ba344da09369802d822f6cd6da7c4c:/src/kitemviews/kitemlistwidget.cpp diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp index 1d6b9641a..dac5ac296 100644 --- a/src/kitemviews/kitemlistwidget.cpp +++ b/src/kitemviews/kitemlistwidget.cpp @@ -40,16 +40,16 @@ KItemListWidget::KItemListWidget(KItemListWidgetInformant *informant, QGraphicsI , m_data() , m_visibleRoles() , m_columnWidths() + , m_leftPadding(0) + , m_rightPadding(0) , m_styleOption() , m_siblingsInfo() , m_hoverOpacity(0) , m_hoverCache(nullptr) - , m_hoverAnimation(nullptr) , m_hoverSequenceIndex(0) , m_selectionToggle(nullptr) , m_editedRole() , m_iconSize(-1) - , m_sidePadding(0) { connect(&m_hoverSequenceTimer, &QTimer::timeout, this, &KItemListWidget::slotHoverSequenceTimerTimeout); } @@ -65,10 +65,8 @@ void KItemListWidget::setIndex(int index) delete m_selectionToggle; m_selectionToggle = nullptr; - if (m_hoverAnimation) { - m_hoverAnimation->stop(); - m_hoverOpacity = 0; - } + m_hoverOpacity = 0; + clearHoverCache(); m_index = index; @@ -105,13 +103,24 @@ void KItemListWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *o Q_UNUSED(option) if (m_alternateBackground) { - const QColor backgroundColor = m_styleOption.palette.color(QPalette::AlternateBase); + QColor backgroundColor = m_styleOption.palette.color(QPalette::AlternateBase); + if (!widget->hasFocus()) { + QColor baseColor = m_styleOption.palette.color(QPalette::Base); + if (baseColor.lightnessF() > 0.5) { + // theme seems light + backgroundColor = backgroundColor.lighter(101); + } else { + // theme seems dark + backgroundColor = backgroundColor.darker(101); + } + } + const QRectF backgroundRect(0, 0, size().width(), size().height()); painter->fillRect(backgroundRect, backgroundColor); } if (m_selected && m_editedRole.isEmpty()) { - const QStyle::State activeState(isActiveWindow() ? QStyle::State_Active : 0); + const QStyle::State activeState(isActiveWindow() && widget->hasFocus() ? QStyle::State_Active : 0); drawItemStyleOption(painter, widget, activeState | QStyle::State_Enabled | QStyle::State_Selected | QStyle::State_Item); } @@ -120,7 +129,7 @@ void KItemListWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *o initStyleOption(&focusRectOption); focusRectOption.rect = textFocusRect().toRect(); focusRectOption.state = QStyle::State_Enabled | QStyle::State_Item | QStyle::State_KeyboardFocusChange; - if (m_selected) { + if (m_selected && widget->hasFocus()) { focusRectOption.state |= QStyle::State_Selected; } @@ -135,8 +144,8 @@ void KItemListWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *o m_hoverCache->fill(Qt::transparent); QPainter pixmapPainter(m_hoverCache); - const QStyle::State activeState(isActiveWindow() ? QStyle::State_Active : 0); - drawItemStyleOption(&pixmapPainter, widget, activeState | QStyle::State_Enabled | QStyle::State_MouseOver | QStyle::State_Item); + const QStyle::State activeState(isActiveWindow() && widget->hasFocus() ? QStyle::State_Active | QStyle::State_Enabled : 0); + drawItemStyleOption(&pixmapPainter, widget, activeState | QStyle::State_MouseOver | QStyle::State_Item); } const qreal opacity = painter->opacity(); @@ -175,18 +184,35 @@ qreal KItemListWidget::columnWidth(const QByteArray &role) const return m_columnWidths.value(role); } -qreal KItemListWidget::sidePadding() const +void KItemListWidget::setSidePadding(qreal leftPaddingWidth, qreal rightPaddingWidth) +{ + bool changed = false; + if (m_leftPadding != leftPaddingWidth) { + m_leftPadding = leftPaddingWidth; + changed = true; + } + + if (m_rightPadding != rightPaddingWidth) { + m_rightPadding = rightPaddingWidth; + changed = true; + } + + if (!changed) { + return; + } + + sidePaddingChanged(leftPaddingWidth, rightPaddingWidth); + update(); +} + +qreal KItemListWidget::leftPadding() const { - return m_sidePadding; + return m_leftPadding; } -void KItemListWidget::setSidePadding(qreal width) +qreal KItemListWidget::rightPadding() const { - if (m_sidePadding != width) { - m_sidePadding = width; - sidePaddingChanged(width); - update(); - } + return m_rightPadding; } void KItemListWidget::setStyleOption(const KItemListStyleOption &option) @@ -246,40 +272,33 @@ void KItemListWidget::setHovered(bool hovered) m_hovered = hovered; - if (!m_hoverAnimation) { - m_hoverAnimation = new QPropertyAnimation(this, "hoverOpacity", this); - const int duration = style()->styleHint(QStyle::SH_Widget_Animate) ? 200 : 1; - m_hoverAnimation->setDuration(duration); - connect(m_hoverAnimation, &QPropertyAnimation::finished, this, &KItemListWidget::slotHoverAnimationFinished); - } - m_hoverAnimation->stop(); - m_hoverSequenceIndex = 0; if (hovered) { - const qreal startValue = qMax(hoverOpacity(), qreal(0.1)); - m_hoverAnimation->setStartValue(startValue); - m_hoverAnimation->setEndValue(1.0); + setHoverOpacity(1.0); + if (m_enabledSelectionToggle && !(QApplication::mouseButtons() & Qt::LeftButton)) { initializeSelectionToggle(); } hoverSequenceStarted(); - const KConfigGroup globalConfig(KSharedConfig::openConfig(), "PreviewSettings"); + const KConfigGroup globalConfig(KSharedConfig::openConfig(), QStringLiteral("PreviewSettings")); const int interval = globalConfig.readEntry("HoverSequenceInterval", 700); m_hoverSequenceTimer.start(interval); } else { - m_hoverAnimation->setStartValue(hoverOpacity()); - m_hoverAnimation->setEndValue(0.0); + setHoverOpacity(0.0); + + if (m_selectionToggle) { + m_selectionToggle->deleteLater(); + m_selectionToggle = nullptr; + } hoverSequenceEnded(); m_hoverSequenceTimer.stop(); } - m_hoverAnimation->start(); - hoveredChanged(hovered); update(); } @@ -437,6 +456,11 @@ QPixmap KItemListWidget::createDragPixmap(const QStyleOptionGraphicsItem *option return pixmap; } +void KItemListWidget::startActivateSoonAnimation(int timeUntilActivation) +{ + Q_UNUSED(timeUntilActivation) +} + void KItemListWidget::dataChanged(const QHash ¤t, const QSet &roles) { Q_UNUSED(current) @@ -456,9 +480,10 @@ void KItemListWidget::columnWidthChanged(const QByteArray &role, qreal current, Q_UNUSED(previous) } -void KItemListWidget::sidePaddingChanged(qreal width) +void KItemListWidget::sidePaddingChanged(qreal leftPaddingWidth, qreal rightPaddingWidth) { - Q_UNUSED(width) + Q_UNUSED(leftPaddingWidth) + Q_UNUSED(rightPaddingWidth) } void KItemListWidget::styleOptionChanged(const KItemListStyleOption ¤t, const KItemListStyleOption &previous) @@ -544,14 +569,6 @@ int KItemListWidget::hoverSequenceIndex() const return m_hoverSequenceIndex; } -void KItemListWidget::slotHoverAnimationFinished() -{ - if (!m_hovered && m_selectionToggle) { - m_selectionToggle->deleteLater(); - m_selectionToggle = nullptr; - } -} - void KItemListWidget::slotHoverSequenceTimerTimeout() { m_hoverSequenceIndex++; @@ -604,3 +621,5 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS viewItemOption.rect = selectionRect().toRect(); style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &viewItemOption, painter, widget); } + +#include "moc_kitemlistwidget.cpp"