Skip to content

Commit 0a4b6d2

Browse files
committed
Change kColorPicker pimpl implementation to qt q_d implementation
1 parent f655168 commit 0a4b6d2

File tree

2 files changed

+50
-86
lines changed

2 files changed

+50
-86
lines changed

include/kColorPicker/KColorPicker.h

+11-14
Original file line numberDiff line numberDiff line change
@@ -26,34 +26,31 @@
2626

2727
#include <kColorPicker/KColorPickerExport.h>
2828

29+
class KColorPickerPrivate;
30+
2931
class KCOLORPICKER_EXPORT KColorPicker : public QToolButton
3032
{
3133
Q_OBJECT
34+
35+
Q_DECLARE_PRIVATE(KColorPicker)
3236
public:
33-
KColorPicker();
34-
KColorPicker(KColorPicker &&other) = default;
37+
explicit KColorPicker();
3538
~KColorPicker();
36-
KColorPicker &operator=(KColorPicker &&other) = default;
3739
void setFixedSize(const QSize& size);
3840
void setFixedSize(int width, int height);
3941

42+
public slots:
43+
void setColor(const QColor &color);
44+
4045
signals:
4146
void colorChanged(const QColor &color) const;
4247

43-
public slots:
44-
void setColor(const QColor &color);
45-
4648
private:
47-
class Impl;
48-
QSharedDataPointer<Impl> mImpl;
49-
50-
QSize mIconSize;
51-
52-
void addDefaultColors();
53-
void setColorIcon(const QColor& color);
54-
void setIconSize(const QSize &size);
49+
QScopedPointer<KColorPickerPrivate> const d_ptr;
5550

5651
private slots:
52+
void setColorIcon(const QColor& color);
53+
void setIconSize(const QSize &size);
5754
void colorSelected(const QColor &color);
5855
};
5956

src/KColorPicker.cpp

+39-72
Original file line numberDiff line numberDiff line change
@@ -22,41 +22,31 @@
2222
#include "IconCreator.h"
2323
#include "PopupMenu.h"
2424

25-
class KColorPicker::Impl : public QSharedData
25+
class KColorPickerPrivate
2626
{
27-
public:
28-
explicit Impl();
29-
~Impl();
30-
QIcon createIcon(const QColor & color, const QSize &size);
31-
PopupMenu* popupMenu();
32-
void addColor(const QColor &color);
33-
void selectColor(const QColor &color);
34-
QColor selectedColor() const;
35-
36-
private:
37-
PopupMenu *mPopupMenu;
27+
Q_DISABLE_COPY(KColorPickerPrivate)
28+
29+
Q_DECLARE_PUBLIC(KColorPicker)
30+
31+
explicit KColorPickerPrivate(KColorPicker *kColorPicker);
32+
33+
KColorPicker *const q_ptr;
34+
QSize mIconSize;
35+
PopupMenu mPopupMenu;
3836
QColor mSelectedColor;
3937
};
4038

41-
KColorPicker::KColorPicker() : mImpl(new Impl())
42-
{
43-
setPopupMode(QToolButton::InstantPopup);
44-
auto popupMenu = mImpl->popupMenu();
45-
setMenu(popupMenu);
46-
connect(popupMenu, &PopupMenu::colorChanged, this, &KColorPicker::colorSelected);
47-
mIconSize = QSize(25, 25);
48-
addDefaultColors();
49-
setColor(QColor(Qt::red));
50-
}
39+
KColorPicker::KColorPicker() : d_ptr(new KColorPickerPrivate(this))
40+
{}
5141

5242
KColorPicker::~KColorPicker()
53-
{
54-
}
43+
{}
5544

5645
void KColorPicker::setColor(const QColor &color)
5746
{
47+
Q_D(KColorPicker);
5848
setColorIcon(color);
59-
mImpl->selectColor(color);
49+
d->mPopupMenu.selectColor(color);
6050
}
6151

6252
void KColorPicker::colorSelected(const QColor &color)
@@ -67,78 +57,55 @@ void KColorPicker::colorSelected(const QColor &color)
6757

6858
void KColorPicker::setFixedSize(const QSize &size)
6959
{
60+
Q_D(const KColorPicker);
7061
QToolButton::setFixedSize(size);
7162
setIconSize(size);
72-
setColorIcon(mImpl->selectedColor());
63+
setColorIcon(d->mSelectedColor);
7364
}
7465

7566
void KColorPicker::setFixedSize(int width, int height)
7667
{
68+
Q_D(const KColorPicker);
7769
QToolButton::setFixedSize(width, height);
7870
setIconSize(QSize(width, height));
79-
setColorIcon(mImpl->selectedColor());
71+
setColorIcon(d->mSelectedColor);
8072
}
8173

8274
void KColorPicker::setIconSize(const QSize &size)
8375
{
76+
Q_D(KColorPicker);
8477
auto scaleFactor = 0.6;
85-
mIconSize = size * scaleFactor;
86-
QToolButton::setIconSize(mIconSize);
87-
}
88-
89-
void KColorPicker::addDefaultColors()
90-
{
91-
mImpl->addColor(QColor(Qt::red));
92-
mImpl->addColor(QColor(Qt::green));
93-
mImpl->addColor(QColor(Qt::blue));
94-
mImpl->addColor(QColor(Qt::yellow));
95-
mImpl->addColor(QColor(Qt::magenta));
96-
mImpl->addColor(QColor(Qt::cyan));
97-
mImpl->addColor(QColor(Qt::white));
98-
mImpl->addColor(QColor(Qt::black));
78+
d->mIconSize = size * scaleFactor;
79+
QToolButton::setIconSize(d->mIconSize);
9980
}
10081

10182
void KColorPicker::setColorIcon(const QColor &color)
10283
{
103-
auto icon = mImpl->createIcon(color, mIconSize);
84+
Q_D(KColorPicker);
85+
auto icon = IconCreator::createIcon(color, d->mIconSize);
10486
setIcon(icon);
10587
}
10688

10789
//
108-
// Impl
90+
// KColorPickerPrivate
10991
//
110-
KColorPicker::Impl::Impl()
111-
{
112-
mPopupMenu = new PopupMenu();;
113-
}
11492

115-
KColorPicker::Impl::~Impl()
93+
KColorPickerPrivate::KColorPickerPrivate(KColorPicker *kColorPicker) : q_ptr(kColorPicker)
11694
{
117-
delete mPopupMenu;
118-
}
119-
120-
QIcon KColorPicker::Impl::createIcon(const QColor &color, const QSize &size)
121-
{
122-
return IconCreator::createIcon(color, size);
123-
}
124-
125-
PopupMenu *KColorPicker::Impl::popupMenu()
126-
{
127-
return mPopupMenu;
128-
}
95+
mIconSize = QSize(25, 25);
96+
kColorPicker->setPopupMode(QToolButton::InstantPopup);
97+
kColorPicker->setMenu(&mPopupMenu);
98+
kColorPicker->connect(&mPopupMenu, &PopupMenu::colorChanged, kColorPicker, &KColorPicker::colorSelected);
12999

130-
void KColorPicker::Impl::addColor(const QColor &color)
131-
{
132-
mPopupMenu->addColor(color);
133-
mSelectedColor = color;
134-
}
135100

136-
void KColorPicker::Impl::selectColor(const QColor &color)
137-
{
138-
mPopupMenu->selectColor(color);
139-
}
101+
// Default Colors
102+
mPopupMenu.addColor(QColor(Qt::red));
103+
mPopupMenu.addColor(QColor(Qt::green));
104+
mPopupMenu.addColor(QColor(Qt::blue));
105+
mPopupMenu.addColor(QColor(Qt::yellow));
106+
mPopupMenu.addColor(QColor(Qt::magenta));
107+
mPopupMenu.addColor(QColor(Qt::cyan));
108+
mPopupMenu.addColor(QColor(Qt::white));
109+
mPopupMenu.addColor(QColor(Qt::black));
140110

141-
QColor KColorPicker::Impl::selectedColor() const
142-
{
143-
return mSelectedColor;
144111
}

0 commit comments

Comments
 (0)