Krita Source Code Documentation
Loading...
Searching...
No Matches
KisMemoryReportButton.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2019 Wolthera van Hövell tot Westerflier <griffinvalley@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
7#include <QPaintEvent>
8#include <QPalette>
9#include <QDebug>
10#include <QStyleOptionButton>
11#include <QStylePainter>
12
14 QPushButton(parent)
15 , m_maxbytes(0)
16 , m_curbytes(0)
17 , m_imgbytes(0)
18{
19
20}
21
23{
24 m_maxbytes = max;
25}
26
28{
29 m_curbytes = memory;
30}
31
33{
34 m_imgbytes = memory;
35}
36
38{
39 qreal ratioCur = qreal(m_curbytes)/qreal(m_maxbytes);
40 QStyleOptionButton buttonStyle;
41 buttonStyle.initFrom(this);
42 QRect area = this->style()->subElementRect(QStyle::SE_PushButtonFocusRect, &buttonStyle);
43
44 int totalWidth = area.width();
45
46 QStylePainter painter(this);
47
48 painter.setPen(Qt::transparent);
49 if (style()->objectName() == "breeze") {
50 painter.drawPrimitive(QStyle::PE_PanelButtonCommand, buttonStyle);
51 } else {
52 painter.drawPrimitive(QStyle::PE_Frame, buttonStyle);
53 }
54
55 QColor HL = this->palette().highlight().color();
56 QColor mid = QColor(220, 220, 0);
57 QColor warn = QColor(220, 0, 0);
58 if (ratioCur>=0.2 && ratioCur<0.4) {
59 qreal newRatio = (ratioCur-0.2)/0.2;
60 qreal negRatio = 1-newRatio;
61 HL.setRed( qMax(0, qMin(int(HL.red()*negRatio) + int(mid.red()*newRatio), 255)));
62 HL.setGreen( qMax(0, qMin(int(HL.green()*negRatio) + int(mid.green()*newRatio), 255)));
63 HL.setBlue( qMax(0, qMin(int(HL.blue()*negRatio) + int(mid.blue()*newRatio), 255)));
64 }
65 else if (ratioCur>=0.4 && ratioCur<0.8) {
66 qreal newRatio = (ratioCur-0.4)/0.4;
67 qreal negRatio = 1-newRatio;
68 HL.setRed( qMax(0, qMin(int(mid.red()*negRatio) + int(warn.red()*newRatio), 255)));
69 HL.setGreen( qMax(0, qMin(int(mid.green()*negRatio) + int(warn.green()*newRatio), 255)));
70 HL.setBlue( qMax(0, qMin(int(mid.blue()*negRatio) + int(warn.blue()*newRatio), 255)));
71 }
72 else if (ratioCur>0.8) {
73 HL = warn;
74 }
75
76 painter.setBrush(HL);
77 QRect currentBytes = area;
78 currentBytes.setWidth(int(ratioCur*totalWidth));
79 painter.setOpacity(0.5);
80
81 painter.drawRoundedRect(currentBytes, 2, 2);
82
84 QRect imageSize = area;
85 imageSize.setWidth(int((qreal(m_imgbytes)/qreal(m_maxbytes))*totalWidth));
86
87 painter.setOpacity(1.0);
88 painter.drawRoundedRect(imageSize, 2, 2);
89 }
90
91 QPushButton::paintEvent(e);
92
93}
void setCurrentMemory(qint64 memory)
void setImageWeight(qint64 memory)
KisMemoryReportButton(QWidget *parent=0)
void paintEvent(QPaintEvent *e) override
rgba palette[MAX_PALETTE]
Definition palette.c:35