mirror-chatterino2/src/widgets/helper/TitlebarButton.cpp

122 lines
3.4 KiB
C++
Raw Normal View History

2018-06-26 14:09:39 +02:00
#include "TitlebarButton.hpp"
2018-06-28 19:46:45 +02:00
#include "singletons/Themes.hpp"
2018-04-05 23:44:46 +02:00
namespace chatterino {
TitleBarButton::TitleBarButton()
: RippleEffectButton(nullptr)
{
}
TitleBarButton::Style TitleBarButton::getButtonStyle() const
{
return this->style;
}
void TitleBarButton::setButtonStyle(Style _style)
{
this->style = _style;
this->update();
}
void TitleBarButton::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QColor color = this->themeManager->window.text;
QColor background = this->themeManager->window.background;
int xD = this->height() / 3;
int centerX = this->width() / 2;
painter.setRenderHint(QPainter::Antialiasing, false);
switch (this->style) {
case Minimize: {
painter.fillRect(centerX - xD / 2, xD * 3 / 2, xD, 1, color);
break;
}
case Maximize: {
painter.setPen(color);
painter.drawRect(centerX - xD / 2, xD, xD - 1, xD - 1);
break;
}
case Unmaximize: {
int xD2 = xD * 1 / 5;
int xD3 = xD * 4 / 5;
painter.drawRect(centerX - xD / 2 + xD2, xD, xD3, xD3);
2018-04-08 17:37:48 +02:00
painter.fillRect(centerX - xD / 2, xD + xD2, xD3, xD3,
this->themeManager->window.background);
painter.drawRect(centerX - xD / 2, xD + xD2, xD3, xD3);
break;
}
case Close: {
QRect rect(centerX - xD / 2, xD, xD - 1, xD - 1);
painter.setPen(QPen(color, 1));
painter.drawLine(rect.topLeft(), rect.bottomRight());
painter.drawLine(rect.topRight(), rect.bottomLeft());
break;
}
case User: {
2018-04-05 23:44:46 +02:00
color = "#999";
painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::HighQualityAntialiasing);
auto a = xD / 3;
QPainterPath path;
painter.save();
painter.translate(3, 3);
path.arcMoveTo(a, 4 * a, 6 * a, 6 * a, 0);
path.arcTo(a, 4 * a, 6 * a, 6 * a, 0, 180);
painter.fillPath(path, color);
painter.setBrush(background);
painter.drawEllipse(2 * a, 1 * a, 4 * a, 4 * a);
painter.setBrush(color);
painter.drawEllipse(2.5 * a, 1.5 * a, 3 * a + 1, 3 * a);
painter.restore();
break;
}
case Settings: {
2018-04-05 23:44:46 +02:00
color = "#999";
painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::HighQualityAntialiasing);
painter.save();
painter.translate(3, 3);
auto a = xD / 3;
QPainterPath path;
path.arcMoveTo(a, a, 6 * a, 6 * a, 0 - (360 / 32.0));
for (int i = 0; i < 8; i++) {
path.arcTo(a, a, 6 * a, 6 * a, i * (360 / 8.0) - (360 / 32.0), (360 / 32.0));
path.arcTo(2 * a, 2 * a, 4 * a, 4 * a, i * (360 / 8.0) + (360 / 32.0),
(360 / 32.0));
}
painter.strokePath(path, color);
painter.fillPath(path, color);
painter.setBrush(background);
painter.drawEllipse(3 * a, 3 * a, 2 * a, 2 * a);
painter.restore();
break;
}
}
this->fancyPaint(painter);
}
} // namespace chatterino