dde-dock/plugins/system-tray/fashiontraycontrolwidget.cpp
listenerri e9c48fb2f0 refactor(system-tray): new fashion system tray
Change-Id: I7d359c1a33fbb32bc174026e7aee130d328313ef
2018-10-22 10:06:12 +08:00

114 lines
2.5 KiB
C++

#include "fashiontraycontrolwidget.h"
#include <QMouseEvent>
#include <QPainter>
#define ExpandedKey "fashion-tray-expanded"
FashionTrayControlWidget::FashionTrayControlWidget(Dock::Position position, QWidget *parent)
: QWidget(parent),
m_settings(new QSettings("deepin", "dde-dock-tray")),
m_dockPosition(position),
m_expanded(m_settings->value(ExpandedKey, true).toBool()),
m_hover(false),
m_pressed(false)
{
setDockPostion(m_dockPosition);
setExpanded(m_expanded);
}
void FashionTrayControlWidget::setDockPostion(Dock::Position pos)
{
m_dockPosition = pos;
update();
}
bool FashionTrayControlWidget::expanded() const
{
return m_expanded;
}
void FashionTrayControlWidget::setExpanded(const bool &expanded)
{
if (m_expanded == expanded) {
return;
}
m_expanded = expanded;
update();
m_settings->setValue(ExpandedKey, m_expanded);
Q_EMIT expandChanged(m_expanded);
}
void FashionTrayControlWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setOpacity(0.5);
if (m_expanded) {
painter.setPen(QColor::fromRgb(40, 40, 40));
painter.setBrush(QColor::fromRgb(40, 40, 40));
if (m_hover) {
painter.setPen(QColor::fromRgb(60, 60, 60));
painter.setBrush(QColor::fromRgb(60, 60, 60));
}
if (m_pressed) {
painter.setPen(QColor::fromRgb(20, 20, 20));
painter.setBrush(QColor::fromRgb(20, 20, 20));
}
} else {
painter.setPen(QColor::fromRgb(255, 255, 255));
painter.setBrush(QColor::fromRgb(255, 255, 255));
if (m_hover) {
painter.setOpacity(0.6);
}
if (m_pressed) {
painter.setOpacity(0.3);
}
}
painter.drawRoundRect(rect());
}
void FashionTrayControlWidget::mouseReleaseEvent(QMouseEvent *event)
{
m_pressed = false;
update();
if (event->button() == Qt::LeftButton) {
event->accept();
setExpanded(!m_expanded);
return;
}
QWidget::mouseReleaseEvent(event);
}
void FashionTrayControlWidget::mousePressEvent(QMouseEvent *event)
{
m_pressed = true;
update();
QWidget::mousePressEvent(event);
}
void FashionTrayControlWidget::enterEvent(QEvent *event)
{
m_hover = true;
update();
QWidget::enterEvent(event);
}
void FashionTrayControlWidget::leaveEvent(QEvent *event)
{
m_hover = false;
update();
QWidget::leaveEvent(event);
}