forked from felixonmars/panda-topbar
-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathblurwindow.cpp
More file actions
106 lines (91 loc) · 2.78 KB
/
Copy pathblurwindow.cpp
File metadata and controls
106 lines (91 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
* Copyright (C) 2020 PandaOS Team.
*
* Author: rekols <rekols@foxmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "blurwindow.h"
// #include <KWindowEffects>
#include <QHBoxLayout>
#include <QApplication>
#include <QPainterPath>
#include <QPainter>
#include <QDebug>
#include <QTimer>
#include <QLabel>
#include <QEvent>
BlurWindow::BlurWindow(QWidget *parent) : QWidget(parent), m_textLabel(new QLabel)
{
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(m_textLabel);
setLayout(layout);
installEventFilter(this);
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::WindowDoesNotAcceptFocus
| Qt::ToolTip);
setAttribute(Qt::WA_TranslucentBackground);
setVisible(false);
}
void BlurWindow::setText(const QString &text)
{
m_textLabel->setText(text);
}
void BlurWindow::update()
{
QWidget::update();
}
void BlurWindow::paintEvent(QPaintEvent *e)
{
QWidget::paintEvent(e);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
const QPalette &palette = qApp->palette();
QColor backgroundColor = palette.color(QPalette::Window);
backgroundColor.setAlpha(100);
painter.setPen(Qt::NoPen);
painter.setBrush(backgroundColor);
const qreal radius = 7.0; // std::min(rect().height(), rect().width()) / 2 - 2;
painter.drawRoundedRect(rect(), radius, radius);
}
void BlurWindow::showEvent(QShowEvent *e)
{
QWidget::showEvent(e);
}
void BlurWindow::hideEvent(QHideEvent *e)
{
QWidget::hideEvent(e);
// KWindowEffects::enableBlurBehind(winId(), false);
}
bool BlurWindow::eventFilter(QObject *obj, QEvent *e)
{
Q_UNUSED(obj);
switch (e->type()) {
case QEvent::UpdateRequest:
case QEvent::LayoutRequest:
updateBlurRegion();
break;
default:
break;
}
return false;
}
void BlurWindow::updateBlurRegion()
{
const qreal radius = 5.0; // std::min(rect().height(), rect().width()) / 2 - 2;
QPainterPath path;
path.addRoundedRect(this->rect(), radius, radius);
QPolygon polygon = path.toFillPolygon().toPolygon();
// QWidget::setMask(polygon);
// KWindowEffects::enableBlurBehind(winId(), true, polygon);
}