Codebase list kcolorpicker / fb7da20
Update upstream source from tag 'upstream/0.2.0' Update to upstream version '0.2.0' with Debian dir eda19a65b1eb0b08549f629be770a51d75192412 Boyuan Yang 1 year, 11 months ago
16 changed file(s) with 162 addition(s) and 69 deletion(s). Raw diff Collapse all Expand all
00 # These are supported funding model platforms
11
2 github: [DamirPorobic]
2 github: DamirPorobic
3 liberapay: dporobic
4 patreon: dporobic
5 open_collective: ksnip
36 custom: paypal.me/damirporobic
0 name: Build
1
2 on:
3 push:
4 branches: [ master ]
5 pull_request:
6 branches: [ master ]
7
8 jobs:
9 build:
10 runs-on: ubuntu-latest
11
12 steps:
13 - uses: actions/checkout@v2
14
15 - name: Install Qt
16 uses: jurplel/install-qt-action@v2
17 with:
18 version: '5.15.2'
19 host: 'linux'
20 install-deps: 'true'
21
22 - name: Install dependencies
23 run: sudo apt-get install xvfb
24
25 - name: Build
26 run: |
27 mkdir build && cd build
28 cmake .. -DBUILD_TESTS=ON && make VERBOSE=1
29
30 - name: Test
31 working-directory: ${{github.workspace}}/build
32 run: xvfb-run make test CTEST_OUTPUT_ON_FAILURE=1
+0
-28
.travis.yml less more
0 language: cpp
1 compiler: gcc
2 sudo: required
3 dist: trusty
4
5 before_install:
6 - sudo add-apt-repository ppa:beineri/opt-qt594-trusty -y
7 - sudo apt-get update -qq
8
9 install:
10 - sudo apt-get -y install qt59base
11 - source /opt/qt*/bin/qt*-env.sh
12
13 jobs:
14 include:
15 - stage: build
16 script:
17 - mkdir build
18 - cd build
19 - cmake ..
20 - make VERBOSE=1
21 - stage: test
22 script:
23 - mkdir build
24 - cd build
25 - cmake .. -DBUILD_TESTS=ON
26 - make
27 - xvfb-run make test CTEST_OUTPUT_ON_FAILURE=1
00 cmake_minimum_required(VERSION 3.5)
1 project(kColorPicker LANGUAGES CXX VERSION 0.1.6)
1 project(kColorPicker LANGUAGES CXX VERSION 0.2.0)
22
33 set(QT_MIN_VERSION "5.9.4")
44
0 # kColorPicker [![Build Status](https://travis-ci.org/ksnip/kColorPicker.svg?branch=master)](https://travis-ci.org/ksnip/kColorPicker)
0 # kColorPicker [![Build Status][github-badge]][github-url]
11 QToolButton with color popup menu with lets you select a color. The popup features a color dialog button which can be used to add custom colors to the popup menu.
22
3 Version 0.1.6
3 Version 0.2.0
44
55 ![kColorPicker](https://i.imgur.com/VkhUvFa.png "kColorPicker")
66
77 ### Building from source
8 1. Get latest release from GitHub by cloning the repo:
8 1. Get the latest release from GitHub by cloning the repo:
99 `$ git clone https://github.com/ksnip/kColorPicker`
1010 2. Change to repo directory:
1111 `$ cd kColorPicker`
3333
3434 2. Link the library with your application
3535 `target_link_libraries(myApp kColorPicker)`
36
37
38 [github-badge]: https://github.com/ksnip/kColorPicker/actions/workflows/build.yml/badge.svg
39 [github-url]: https://github.com/ksnip/kColorPicker/actions
2929 widget->setFixedWidth(200);
3030 widget->setFixedHeight(200);
3131 auto layout = new QVBoxLayout();
32 auto colorPicker = new KColorPicker();
32 auto colorPicker = new KColorPicker(true);
3333 colorPicker->setColor(QColor(Qt::red));
3434 layout->addWidget(colorPicker);
3535 widget->setLayout(layout);
3636 Q_DECLARE_PRIVATE(KColorPicker)
3737
3838 public:
39 explicit KColorPicker();
39 explicit KColorPicker(bool showAlphaChannel = false, QWidget *parent = nullptr);
4040 ~KColorPicker() override;
4141 void setFixedSize(const QSize &size);
4242 void setFixedSize(int width, int height);
4343 QColor color() const;
44 void resetColors(bool showAlphaChannel = false);
4445
4546 public Q_SLOTS:
4647 void setColor(const QColor &color);
2222
2323 QIcon IconCreator::createIcon(const QColor &color, const QSize &size)
2424 {
25 QPixmap pixmap(size);
26 pixmap.fill(color);
27 QPainter painter(&pixmap);
25 auto background = getBackgroundBrush(size);
26
27 QPixmap pixmap(size);
28 QPainter painter(&pixmap);
29
30 // Paint background
31 painter.setPen(Qt::NoPen);
32 painter.setBrush(background);
33 painter.drawRect(0, 0, size.width(), size.height());
34
35 // Paint color
36 painter.setBrush(color);
37 painter.drawRect(0, 0, size.width(), size.height());
38
39 // Paint border
2840 auto penWidth = painter.pen().width();
2941 painter.setPen(QColor(Qt::gray));
3042 painter.drawRect(0, 0, size.width() - penWidth, size.height() - penWidth);
3143
32 return QIcon(pixmap);
44 return { pixmap };
45 }
46
47 QImage IconCreator::getBackgroundBrush(const QSize &size)
48 {
49 auto halfWidth = size.width() / 2;
50 auto halfHeight = size.height() / 2;
51 auto background = QImage(size, QImage::Format_ARGB32_Premultiplied);
52 background.fill(Qt::white);
53 QPainter painter(&background);
54 painter.setPen(Qt::NoPen);
55 painter.setBrush(Qt::gray);
56 painter.drawRect(0, 0, halfWidth, halfHeight);
57 painter.drawRect(halfWidth, halfHeight, size.width(), size.height());
58
59 return background;
3360 }
3461
3562 } // namespace kColorPicker
2222 #include <QIcon>
2323 #include <QColor>
2424 #include <QPainter>
25 #include <QImage>
2526
2627 namespace kColorPicker {
2728
3132 explicit IconCreator() = delete;
3233 ~IconCreator() = delete;
3334 static QIcon createIcon(const QColor &color, const QSize &size);
35 static QImage getBackgroundBrush(const QSize &size);
3436 };
3537
3638 } // namespace kColorPicker
3434
3535 Q_DECLARE_PUBLIC(KColorPicker)
3636
37 explicit KColorPickerPrivate(KColorPicker *kColorPicker);
37 explicit KColorPickerPrivate(KColorPicker *kColorPicker, bool showAlphaChannel = false, QWidget *parent = nullptr);
3838
3939 KColorPicker *const q_ptr;
4040 QSize mIconSize;
41 PopupMenu mPopupMenu;
41 PopupMenu *mPopupMenu;
4242 QColor mSelectedColor;
4343 };
4444
45 KColorPicker::KColorPicker() : d_ptr(new KColorPickerPrivate(this))
46 {}
45 KColorPicker::KColorPicker(bool showAlphaChannel, QWidget *parent) : d_ptr(new KColorPickerPrivate(this, showAlphaChannel, parent))
46 {
47 // Default Colors
48 resetColors(showAlphaChannel);
49 }
4750
4851 KColorPicker::~KColorPicker()
4952 {}
5356 Q_D(KColorPicker);
5457 d->mSelectedColor = color;
5558 setColorIcon(color);
56 d->mPopupMenu.selectColor(color);
59 d->mPopupMenu->selectColor(color);
5760 }
5861
5962 void KColorPicker::colorSelected(const QColor &color)
8689 return d->mSelectedColor;
8790 }
8891
92 void KColorPicker::resetColors(bool showAlphaChannel)
93 {
94 Q_D(const KColorPicker);
95 d->mPopupMenu->removeColors();
96
97 d->mPopupMenu->addColor(QColor(Qt::red));
98 d->mPopupMenu->addColor(QColor(Qt::green));
99 d->mPopupMenu->addColor(QColor(Qt::blue));
100 d->mPopupMenu->addColor(QColor(Qt::yellow));
101 d->mPopupMenu->addColor(QColor(Qt::magenta));
102 d->mPopupMenu->addColor(QColor(Qt::cyan));
103 d->mPopupMenu->addColor(QColor(Qt::white));
104 d->mPopupMenu->addColor(QColor(Qt::black));
105
106 if(showAlphaChannel) {
107 d->mPopupMenu->addColor(QColor(0, 255, 255, 100));
108 d->mPopupMenu->addColor(QColor(255, 0, 255, 100));
109 d->mPopupMenu->addColor(QColor(255, 255, 0, 100));
110 d->mPopupMenu->addColor(QColor(255, 255, 255, 100));
111 }
112 }
113
89114 void KColorPicker::setIconSize(const QSize &size)
90115 {
91116 Q_D(KColorPicker);
106131 // KColorPickerPrivate
107132 //
108133
109 KColorPickerPrivate::KColorPickerPrivate(KColorPicker *kColorPicker) : q_ptr(kColorPicker)
134 KColorPickerPrivate::KColorPickerPrivate(KColorPicker *kColorPicker, bool showAlphaChannel, QWidget *parent) :
135 q_ptr(kColorPicker),
136 mPopupMenu(new PopupMenu(showAlphaChannel, parent))
110137 {
111138 initResource();
112139
113140 mIconSize = QSize(25, 25);
114141 kColorPicker->setPopupMode(QToolButton::InstantPopup);
115 kColorPicker->setMenu(&mPopupMenu);
116 kColorPicker->connect(&mPopupMenu, &PopupMenu::colorChanged, kColorPicker, &KColorPicker::colorSelected);
117
118 // Default Colors
119 mPopupMenu.addColor(QColor(Qt::red));
120 mPopupMenu.addColor(QColor(Qt::green));
121 mPopupMenu.addColor(QColor(Qt::blue));
122 mPopupMenu.addColor(QColor(Qt::yellow));
123 mPopupMenu.addColor(QColor(Qt::magenta));
124 mPopupMenu.addColor(QColor(Qt::cyan));
125 mPopupMenu.addColor(QColor(Qt::white));
126 mPopupMenu.addColor(QColor(Qt::black));
127
142 kColorPicker->setMenu(mPopupMenu);
143 kColorPicker->connect(mPopupMenu, &PopupMenu::colorChanged, kColorPicker, &KColorPicker::colorSelected);
128144 }
129145
130146 } // namespace kColorPicker
2020
2121 namespace kColorPicker {
2222
23 PopupMenu::PopupMenu() :
24 mButtonGroup(new QButtonGroup()),
25 mLayout(new QGridLayout()),
26 mColorDialogButton(new ColorDialogButton(QIcon(QLatin1String(":/icons/ellipsis"))))
23 PopupMenu::PopupMenu(bool showAlphaChannel, QWidget *parent) :
24 QMenu(parent),
25 mButtonGroup(new QButtonGroup(this)),
26 mLayout(new QGridLayout(this)),
27 mColorDialogButton(new ColorDialogButton(QIcon(QLatin1String(":/icons/ellipsis")), showAlphaChannel))
2728 {
28
2929 mLayout->setSpacing(0);
3030 mLayout->setMargin(5);
3131 setLayout(mLayout);
3535
3636 PopupMenu::~PopupMenu()
3737 {
38 delete mButtonGroup;
38 qDeleteAll(mColorButtons);
3939 delete mColorDialogButton;
4040 }
4141
4444 if (!isColorInGrid(color)) {
4545 addColorButton(color);
4646 }
47 }
48
49 void PopupMenu::removeColors()
50 {
51 for (auto button : mColorButtons) {
52 mButtonGroup->removeButton(button);
53 mLayout->removeWidget(button);
54 disconnect(button, &AbstractPopupMenuButton::colorSelected, this, &PopupMenu::colorSelected);
55 }
56
57 qDeleteAll(mColorButtons);
58 mColorButtons.clear();
59
60 generateGrid();
4761 }
4862
4963 void PopupMenu::selectColor(const QColor &color)
3333 {
3434 Q_OBJECT
3535 public:
36 PopupMenu();
36 PopupMenu(bool showAlphaChannel, QWidget *parent);
3737 ~PopupMenu() override;
3838 void addColor(const QColor &color);
39 void removeColors();
3940 void selectColor(const QColor &color);
4041 QSize sizeHint() const;
4142
5960 };
6061
6162 } // namespace kColorPicker
63
6264 #endif //KCOLORPICKER_POPUPMENU_H
2323 ColorButton::ColorButton(const QIcon &icon, const QColor &color) : AbstractPopupMenuButton(icon)
2424 {
2525 setCheckable(true);
26 setToolTip(color.name());
26 setToolTip(getColorName(color));
2727 mColor = color;
2828 }
2929
3737 emit colorSelected(mColor);
3838 }
3939
40 QString ColorButton::getColorName(const QColor &color)
41 {
42 auto format = color.alpha() < 255 ? QColor::HexArgb : QColor::HexRgb;
43
44 return color.name(format);
45 }
46
4047 } // namespace kColorPicker
3535
3636 private:
3737 QColor mColor;
38
39 static QString getColorName(const QColor &color);
3840 };
3941
4042 } // namespace kColorPicker
2020
2121 namespace kColorPicker {
2222
23 ColorDialogButton::ColorDialogButton(const QIcon &icon) : AbstractPopupMenuButton(icon)
23 ColorDialogButton::ColorDialogButton(const QIcon &icon, bool showAlphaChannel) :
24 AbstractPopupMenuButton(icon),
25 mShowAlphaChannel(showAlphaChannel)
2426 {
2527 setCheckable(false);
2628 }
2729
2830 void ColorDialogButton::buttonClicked()
2931 {
30 auto color = QColorDialog::getColor();
32 auto color = QColorDialog::getColor(Qt::white, this, QString(), getColorDialogOptions());
3133 emit colorSelected(color);
3234 }
3335
36 QFlags<QColorDialog::ColorDialogOption> ColorDialogButton::getColorDialogOptions() const
37 {
38 return mShowAlphaChannel ? QColorDialog::ShowAlphaChannel : QFlags<QColorDialog::ColorDialogOption>();
39 }
40
3441 } // namespace kColorPicker
2929 {
3030 Q_OBJECT
3131 public:
32 explicit ColorDialogButton(const QIcon &icon);
32 explicit ColorDialogButton(const QIcon &icon, bool showAlphaChannel);
3333
3434 protected:
3535 void buttonClicked() override;
3636
37 private:
38 bool mShowAlphaChannel;
39 QFlags<QColorDialog::ColorDialogOption> getColorDialogOptions() const;
3740 };
3841
3942 } // namespace kColorPicker