File indexing completed on 2024-04-28 17:06:04

0001 /*
0002     SPDX-FileCopyrightText: 2008 Csaba Karai <krusader@users.sourceforge.net>
0003     SPDX-FileCopyrightText: 2008-2022 Krusader Krew <https://krusader.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "krstyleproxy.h"
0009 
0010 // QtGui
0011 #include <QPainter>
0012 #include <QPen>
0013 // QtWidgets
0014 #include <QStyleOptionViewItem>
0015 
0016 #include <KConfigCore/KSharedConfig>
0017 
0018 #include "../krglobal.h"
0019 
0020 void KrStyleProxy::drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
0021 {
0022     if (element == QStyle::PE_FrameFocusRect) {
0023         if (const auto *fropt = qstyleoption_cast<const QStyleOptionFocusRect *>(option)) {
0024             QColor bg = fropt->backgroundColor;
0025             QPen oldPen = painter->pen();
0026             QPen newPen;
0027             if (bg.isValid()) {
0028                 int h, s, v;
0029                 bg.getHsv(&h, &s, &v);
0030                 if (v >= 128)
0031                     newPen.setColor(Qt::black);
0032                 else
0033                     newPen.setColor(Qt::white);
0034             } else {
0035                 newPen.setColor(option->palette.windowText().color());
0036             }
0037             newPen.setWidth(0);
0038             newPen.setStyle(Qt::DotLine);
0039             painter->setPen(newPen);
0040             QRect focusRect = option->rect /*.adjusted(1, 1, -1, -1) */;
0041             painter->drawRect(focusRect.adjusted(0, 0, -1, -1)); // draw pen inclusive
0042             painter->setPen(oldPen);
0043         }
0044     } else
0045         QProxyStyle::drawPrimitive(element, option, painter, widget);
0046 }
0047 
0048 int KrStyleProxy::styleHint(QStyle::StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const
0049 {
0050     if (hint == QStyle::SH_ToolTip_WakeUpDelay) {
0051         KConfigGroup group(krConfig, "Look&Feel");
0052         const int delay = group.readEntry("Panel Tooltip Delay", 1000);
0053         return delay < 0 ? INT_MAX : delay;
0054     }
0055 
0056     // disable instant consecutive tooltips
0057     if (hint == QStyle::SH_ToolTip_FallAsleepDelay) {
0058         return 0;
0059     }
0060 
0061     return QProxyStyle::styleHint(hint, option, widget, returnData);
0062 }