Icon: Aggregate QVector instead of deriving from it

In this way we hide the public interface of QVector for Icon.

Change-Id: I7722779b3b6781ff2cbcab0e2e9894dbd0435218
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2022-05-25 07:51:41 +02:00
parent ed40753ed1
commit a043b1676f
2 changed files with 13 additions and 12 deletions

View File

@@ -58,7 +58,7 @@ static QPixmap maskToColorAndAlpha(const QPixmap &mask, const QColor &color)
using MaskAndColor = QPair<QPixmap, QColor>; using MaskAndColor = QPair<QPixmap, QColor>;
using MasksAndColors = QList<MaskAndColor>; using MasksAndColors = QList<MaskAndColor>;
static MasksAndColors masksAndColors(const Icon &icon, int dpr) static MasksAndColors masksAndColors(const QVector<IconMaskAndColor> &icon, int dpr)
{ {
MasksAndColors result; MasksAndColors result;
for (const IconMaskAndColor &i: icon) { for (const IconMaskAndColor &i: icon) {
@@ -157,27 +157,27 @@ static QPixmap masksToIcon(const MasksAndColors &masks, const QPixmap &combinedM
Icon::Icon() = default; Icon::Icon() = default;
Icon::Icon(std::initializer_list<IconMaskAndColor> args, Icon::IconStyleOptions style) Icon::Icon(std::initializer_list<IconMaskAndColor> args, Icon::IconStyleOptions style)
: QVector<IconMaskAndColor>(args) : m_iconSourceList(args)
, m_style(style) , m_style(style)
{ {
} }
Icon::Icon(const FilePath &imageFileName) Icon::Icon(const FilePath &imageFileName)
{ {
append({imageFileName, Theme::Color(-1)}); m_iconSourceList.append({imageFileName, Theme::Color(-1)});
} }
QIcon Icon::icon() const QIcon Icon::icon() const
{ {
if (isEmpty()) { if (m_iconSourceList.isEmpty()) {
return QIcon(); return QIcon();
} else if (m_style == None) { } else if (m_style == None) {
return QIcon(constFirst().first.toString()); return QIcon(m_iconSourceList.constFirst().first.toString());
} else { } else {
QIcon result; QIcon result;
const int maxDpr = qRound(qApp->devicePixelRatio()); const int maxDpr = qRound(qApp->devicePixelRatio());
for (int dpr = 1; dpr <= maxDpr; dpr++) { for (int dpr = 1; dpr <= maxDpr; dpr++) {
const MasksAndColors masks = masksAndColors(*this, dpr); const MasksAndColors masks = masksAndColors(m_iconSourceList, dpr);
const QPixmap combinedMask = Utils::combinedMask(masks, m_style); const QPixmap combinedMask = Utils::combinedMask(masks, m_style);
result.addPixmap(masksToIcon(masks, combinedMask, m_style)); result.addPixmap(masksToIcon(masks, combinedMask, m_style));
@@ -190,13 +190,13 @@ QIcon Icon::icon() const
QPixmap Icon::pixmap(QIcon::Mode iconMode) const QPixmap Icon::pixmap(QIcon::Mode iconMode) const
{ {
if (isEmpty()) { if (m_iconSourceList.isEmpty()) {
return QPixmap(); return QPixmap();
} else if (m_style == None) { } else if (m_style == None) {
return QPixmap(StyleHelper::dpiSpecificImageFile(constFirst().first.toString())); return QPixmap(StyleHelper::dpiSpecificImageFile(m_iconSourceList.constFirst().first.toString()));
} else { } else {
const MasksAndColors masks = const MasksAndColors masks =
masksAndColors(*this, qRound(qApp->devicePixelRatio())); masksAndColors(m_iconSourceList, qRound(qApp->devicePixelRatio()));
const QPixmap combinedMask = Utils::combinedMask(masks, m_style); const QPixmap combinedMask = Utils::combinedMask(masks, m_style);
return iconMode == QIcon::Disabled return iconMode == QIcon::Disabled
? maskToColorAndAlpha(combinedMask, creatorTheme()->color(Theme::IconsDisabledColor)) ? maskToColorAndAlpha(combinedMask, creatorTheme()->color(Theme::IconsDisabledColor))
@@ -206,8 +206,8 @@ QPixmap Icon::pixmap(QIcon::Mode iconMode) const
FilePath Icon::imageFilePath() const FilePath Icon::imageFilePath() const
{ {
QTC_ASSERT(length() == 1, return {}); QTC_ASSERT(m_iconSourceList.length() == 1, return {});
return first().first; return m_iconSourceList.first().first;
} }
QIcon Icon::sideBarIcon(const Icon &classic, const Icon &flat) QIcon Icon::sideBarIcon(const Icon &classic, const Icon &flat)

View File

@@ -46,7 +46,7 @@ using IconMaskAndColor = QPair<FilePath, Theme::Color>;
// Returns a recolored icon with shadow and custom disabled state for a // Returns a recolored icon with shadow and custom disabled state for a
// series of grayscalemask|Theme::Color mask pairs // series of grayscalemask|Theme::Color mask pairs
class QTCREATOR_UTILS_EXPORT Icon : public QVector<IconMaskAndColor> class QTCREATOR_UTILS_EXPORT Icon
{ {
public: public:
enum IconStyleOption { enum IconStyleOption {
@@ -86,6 +86,7 @@ public:
static QIcon combinedIcon(const QList<Icon> &icons); static QIcon combinedIcon(const QList<Icon> &icons);
private: private:
QVector<IconMaskAndColor> m_iconSourceList;
IconStyleOptions m_style = None; IconStyleOptions m_style = None;
}; };