1 // SPDX-License-Identifier: GPL-3.0-or-later
2 // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors
3 
4 #include "capturebutton.h"
5 #include "src/utils/colorutils.h"
6 #include "src/utils/confighandler.h"
7 #include "src/utils/globalvalues.h"
8 #include <QGraphicsDropShadowEffect>
9 
CaptureButton(QWidget * parent)10 CaptureButton::CaptureButton(QWidget* parent)
11   : QPushButton(parent)
12 {
13     init();
14 }
15 
CaptureButton(const QString & text,QWidget * parent)16 CaptureButton::CaptureButton(const QString& text, QWidget* parent)
17   : QPushButton(text, parent)
18 {
19     init();
20 }
21 
CaptureButton(const QIcon & icon,const QString & text,QWidget * parent)22 CaptureButton::CaptureButton(const QIcon& icon,
23                              const QString& text,
24                              QWidget* parent)
25   : QPushButton(icon, text, parent)
26 {
27     init();
28 }
29 
init()30 void CaptureButton::init()
31 {
32     setCursor(Qt::ArrowCursor);
33     setFocusPolicy(Qt::NoFocus);
34 
35     auto dsEffect = new QGraphicsDropShadowEffect(this);
36     dsEffect->setBlurRadius(5);
37     dsEffect->setOffset(0);
38     dsEffect->setColor(QColor(Qt::black));
39 
40     setGraphicsEffect(dsEffect);
41 }
42 
globalStyleSheet()43 QString CaptureButton::globalStyleSheet()
44 {
45     return CaptureButton(nullptr).styleSheet();
46 }
47 
styleSheet() const48 QString CaptureButton::styleSheet() const
49 {
50     QString baseSheet = "CaptureButton { border: none;"
51                         "padding: 3px 8px;"
52                         "background-color: %1; color: %4 }"
53                         "CaptureToolButton { border-radius: %3;"
54                         "padding: 0; }"
55                         "CaptureButton:hover { background-color: %2; }"
56                         "CaptureButton:pressed:!hover { "
57                         "background-color: %1; }";
58     // define color when mouse is hovering
59     QColor contrast = ColorUtils::contrastColor(m_mainColor);
60     // foreground color
61     QColor color = ColorUtils::colorIsDark(m_mainColor) ? Qt::white : Qt::black;
62 
63     return baseSheet.arg(m_mainColor.name())
64       .arg(contrast.name())
65       .arg(GlobalValues::buttonBaseSize() / 2)
66       .arg(color.name());
67 }
68 
setColor(const QColor & c)69 void CaptureButton::setColor(const QColor& c)
70 {
71     m_mainColor = c;
72     setStyleSheet(styleSheet());
73 }
74 
75 QColor CaptureButton::m_mainColor = ConfigHandler().uiMainColorValue();
76