Files
create/src/Gui/QSint/actionpanel/actionpanelscheme.cpp
Alfredo Monclus 548af02619 Gui: fix light/dark switch when on classic (#21049)
* Gui: fix: taskpanel light/dark switch when on classic

* Gui: fix: taskpanel double icon

* Apply suggestions from code review

---------

Co-authored-by: Kacper Donat <kadet1090@gmail.com>
2025-05-21 14:00:54 +00:00

118 lines
3.4 KiB
C++

/***************************************************************************
* *
* Copyright: https://code.google.com/p/qsint/ *
* License: LGPL *
* *
***************************************************************************/
#include "actionpanelscheme.h"
namespace QSint
{
QPixmap ActionPanelScheme::drawFoldIcon(const QPalette& palette, bool fold, bool hover) const
{
QSize bSize = headerButtonSize;
QImage img(bSize.width(), bSize.height(), QImage::Format_ARGB32_Premultiplied);
img.fill(Qt::transparent);
QPainter painter(&img);
painter.setRenderHint(QPainter::Antialiasing);
qreal penWidth = bSize.width() / 14.0;
qreal lef_X = 0.25 * bSize.width();
qreal mid_X = 0.50 * bSize.width();
qreal rig_X = 0.75 * bSize.width();
qreal bot_Y = 0.40 * bSize.height();
qreal top_Y = 0.64 * bSize.height();
QPolygon chevron;
if (fold) {
// Upward
chevron << QPoint(lef_X, top_Y)
<< QPoint(mid_X, bot_Y)
<< QPoint(rig_X, top_Y);
} else {
// Downward
chevron << QPoint(lef_X, bot_Y)
<< QPoint(mid_X, top_Y)
<< QPoint(rig_X, bot_Y);
}
painter.setBrush(Qt::NoBrush);
// Outline
QColor outlineColor = palette.color(QPalette::Button);
painter.setPen(QPen(outlineColor, penWidth * 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
painter.drawPolyline(chevron);
// Chevron
if (hover) {
penWidth *= 1.8;
}
QColor mainColor = palette.color(QPalette::Text);
painter.setPen(QPen(mainColor, penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
painter.drawPolyline(chevron);
painter.end();
return QPixmap::fromImage(img);
}
ActionPanelScheme::ActionPanelScheme()
{
QFontMetrics fm(QApplication::font());
headerSize = fm.height() + 10;
headerAnimation = true;
QPalette p = QApplication::palette();
int iconSize = fm.height();
headerButtonSize = QSize(iconSize, iconSize);
builtinFold = drawFoldIcon(p, true, false);
builtinFoldOver = drawFoldIcon(p, true, true);
builtinUnfold = drawFoldIcon(p, false, false);
builtinUnfoldOver = drawFoldIcon(p, false, true);
if (qApp->styleSheet().isEmpty()) {
headerButtonFold = builtinFold;
headerButtonFoldOver = builtinFoldOver;
headerButtonUnfold = builtinUnfold;
headerButtonUnfoldOver = builtinUnfoldOver;
} else {
headerButtonFold = QPixmap();
headerButtonFoldOver = QPixmap();
headerButtonUnfold = QPixmap();
headerButtonUnfoldOver = QPixmap();
}
groupFoldSteps = 20;
groupFoldDelay = 15;
groupFoldEffect = NoFolding;
groupFoldThaw = true;
}
ActionPanelScheme* ActionPanelScheme::defaultScheme()
{
static ActionPanelScheme scheme;
return &scheme;
}
void ActionPanelScheme::clearActionStyle()
{
headerButtonFold = QPixmap();
headerButtonFoldOver = QPixmap();
headerButtonUnfold = QPixmap();
headerButtonUnfoldOver = QPixmap();
}
void ActionPanelScheme::restoreActionStyle()
{
headerButtonFold = builtinFold;
headerButtonFoldOver = builtinFoldOver;
headerButtonUnfold = builtinUnfold;
headerButtonUnfoldOver = builtinUnfoldOver;
}
} // namespace QSint