-
Notifications
You must be signed in to change notification settings - Fork 40
/
colorbutton.cpp
93 lines (65 loc) · 2.42 KB
/
colorbutton.cpp
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
/***************************************************************************
* *
* copyright : (C) 2007 The University of Toronto *
* netterfield@astro.utoronto.ca *
* *
* 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 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "colorbutton.h"
#include <QPainter>
#include <QColorDialog>
#include <QDebug>
#include <qdrawutil.h>
namespace Kst {
ColorButton::ColorButton(QWidget *parent)
: QToolButton(parent), _color(Qt::black) {
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
connect (this, SIGNAL(clicked()), this, SLOT(chooseColor()));
}
ColorButton::ColorButton(const QColor &color, QWidget *parent)
: QToolButton(parent), _color(color) {
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
connect (this, SIGNAL(clicked()), this, SLOT(chooseColor()));
}
ColorButton::~ColorButton() {
}
QColor ColorButton::color() const {
return _color;
}
void ColorButton::clearSelection() {
setColor(QColor(Qt::transparent));
}
bool ColorButton::colorDirty() const {
return _color != QColor(Qt::transparent);
}
void ColorButton::setColor(const QColor &color) {
_color = color;
update();
emit changed(color);
}
void ColorButton::paintEvent(QPaintEvent *event)
{
QToolButton::paintEvent(event);
if (!isEnabled())
return;
QPainter painter(this);
QBrush brush(_color);
int m = (rect().height())/6;
qDrawShadePanel(&painter, rect().x() + m, rect().y() + m, rect().width() - 2*m, rect().height() - 2*m,
palette(), /*sunken*/ isDown(), /*lineWidth*/ 1, /*fill*/ &brush);
}
void ColorButton::chooseColor() {
if (_color == Qt::transparent) {
_color = Qt::black;
}
QColor color = QColorDialog::getColor(_color, parentWidget(), "Choose Color", QColorDialog::ShowAlphaChannel);
if (color.isValid()) {
setColor(color);
}
}
}
// vim: ts=2 sw=2 et