/* SPDX-FileCopyrightText: 2006-2010 Peter Penz SPDX-FileCopyrightText: 2006 Aaron J. Seigo SPDX-License-Identifier: LGPL-2.0-or-later */ #include "kurlnavigatorbuttonbase_p.h" #include #include #include #include namespace KDEPrivate { KUrlNavigatorButtonBase::KUrlNavigatorButtonBase(KUrlNavigator *parent) : QPushButton(parent) , m_active(true) , m_displayHint(0) { setFocusPolicy(Qt::TabFocus); setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed); setMinimumHeight(parent->minimumHeight()); setAttribute(Qt::WA_LayoutUsesWidgetRect); connect(this, &KUrlNavigatorButtonBase::pressed, parent, &KUrlNavigator::requestActivation); } KUrlNavigatorButtonBase::~KUrlNavigatorButtonBase() { } void KUrlNavigatorButtonBase::setActive(bool active) { if (m_active != active) { m_active = active; update(); } } bool KUrlNavigatorButtonBase::isActive() const { return m_active; } void KUrlNavigatorButtonBase::setDisplayHintEnabled(DisplayHint hint, bool enable) { if (enable) { m_displayHint = m_displayHint | hint; } else { m_displayHint = m_displayHint & ~hint; } update(); } bool KUrlNavigatorButtonBase::isDisplayHintEnabled(DisplayHint hint) const { return (m_displayHint & hint) > 0; } void KUrlNavigatorButtonBase::focusInEvent(QFocusEvent *event) { setDisplayHintEnabled(EnteredHint, true); QPushButton::focusInEvent(event); } void KUrlNavigatorButtonBase::focusOutEvent(QFocusEvent *event) { setDisplayHintEnabled(EnteredHint, false); QPushButton::focusOutEvent(event); } void KUrlNavigatorButtonBase::enterEvent(QEnterEvent *event) { QPushButton::enterEvent(event); setDisplayHintEnabled(EnteredHint, true); update(); } void KUrlNavigatorButtonBase::leaveEvent(QEvent *event) { QPushButton::leaveEvent(event); setDisplayHintEnabled(EnteredHint, false); update(); } void KUrlNavigatorButtonBase::drawHoverBackground(QPainter *painter) { const bool isHighlighted = isDisplayHintEnabled(EnteredHint) || isDisplayHintEnabled(DraggedHint) || isDisplayHintEnabled(PopupActiveHint); QColor backgroundColor = isHighlighted ? palette().color(QPalette::Highlight) : Qt::transparent; if (!m_active && isHighlighted) { backgroundColor.setAlpha(128); } if (backgroundColor != Qt::transparent) { // TODO: the backgroundColor should be applied to the style QStyleOptionViewItem option; option.initFrom(this); option.state = QStyle::State_Enabled | QStyle::State_MouseOver; option.viewItemPosition = QStyleOptionViewItem::OnlyOne; style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, this); } } QColor KUrlNavigatorButtonBase::foregroundColor() const { const bool isHighlighted = isDisplayHintEnabled(EnteredHint) || isDisplayHintEnabled(DraggedHint) || isDisplayHintEnabled(PopupActiveHint); QColor foregroundColor = palette().color(foregroundRole()); int alpha = m_active ? 255 : 128; if (!m_active && !isHighlighted) { alpha -= alpha / 4; } foregroundColor.setAlpha(alpha); return foregroundColor; } void KUrlNavigatorButtonBase::activate() { setActive(true); } } // namespace KDEPrivate #include "moc_kurlnavigatorbuttonbase_p.cpp"