2019-09-08 22:27:57 +02:00
|
|
|
#include "TitlebarButton.hpp"
|
|
|
|
|
|
|
|
#include "BaseTheme.hpp"
|
|
|
|
|
|
|
|
namespace AB_NAMESPACE {
|
|
|
|
|
|
|
|
TitleBarButton::TitleBarButton()
|
|
|
|
: Button(nullptr)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
TitleBarButtonStyle TitleBarButton::getButtonStyle() const
|
|
|
|
{
|
|
|
|
return this->style_;
|
|
|
|
}
|
|
|
|
|
|
|
|
void TitleBarButton::setButtonStyle(TitleBarButtonStyle _style)
|
|
|
|
{
|
|
|
|
this->style_ = _style;
|
|
|
|
this->update();
|
|
|
|
}
|
|
|
|
|
|
|
|
void TitleBarButton::paintEvent(QPaintEvent *event)
|
|
|
|
{
|
|
|
|
QPainter painter(this);
|
|
|
|
|
|
|
|
painter.setOpacity(this->getCurrentDimAmount());
|
|
|
|
|
|
|
|
QColor color = this->theme->window.text;
|
|
|
|
QColor background = this->theme->window.background;
|
|
|
|
|
|
|
|
int xD = this->height() / 3;
|
|
|
|
int centerX = this->width() / 2;
|
|
|
|
|
|
|
|
painter.setRenderHint(QPainter::Antialiasing, false);
|
|
|
|
|
|
|
|
switch (this->style_)
|
|
|
|
{
|
|
|
|
case TitleBarButtonStyle::Minimize:
|
|
|
|
{
|
|
|
|
painter.fillRect(centerX - xD / 2, xD * 3 / 2, xD, 1, color);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case TitleBarButtonStyle::Maximize:
|
|
|
|
{
|
|
|
|
painter.setPen(color);
|
|
|
|
painter.drawRect(centerX - xD / 2, xD, xD - 1, xD - 1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case TitleBarButtonStyle::Unmaximize:
|
|
|
|
{
|
|
|
|
int xD2 = xD * 1 / 5;
|
|
|
|
int xD3 = xD * 4 / 5;
|
|
|
|
|
|
|
|
painter.drawRect(centerX - xD / 2 + xD2, xD, xD3, xD3);
|
|
|
|
painter.fillRect(centerX - xD / 2, xD + xD2, xD3, xD3,
|
|
|
|
this->theme->window.background);
|
|
|
|
painter.drawRect(centerX - xD / 2, xD + xD2, xD3, xD3);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case TitleBarButtonStyle::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 TitleBarButtonStyle::User:
|
|
|
|
{
|
|
|
|
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 TitleBarButtonStyle::Settings:
|
|
|
|
{
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
default:;
|
|
|
|
}
|
|
|
|
|
|
|
|
Button::paintEvent(event);
|
|
|
|
// this->fancyPaint(painter);
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace AB_NAMESPACE
|