DtkGui 5.5.23
DTK Gui module
ddciicon.h
1// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: LGPL-3.0-or-later
4
5#pragma once
6#include "ddciiconpalette.h"
7
8#include <dtkgui_global.h>
9
10#include <QPixmap>
11
12DCORE_BEGIN_NAMESPACE
13class DDciFile;
14DCORE_END_NAMESPACE
15
16DGUI_BEGIN_NAMESPACE
17
18typedef void* DDciIconMatchResult;
19
20class DDciIconPrivate;
22{
23public:
24 enum Mode {
25 Normal = 0,
26 Disabled = 1,
27 Hover = 2,
28 Pressed = 3
29 };
30 enum Theme {
31 Light = 0,
32 Dark = 1
33 };
34 enum IconAttibute {
35 HasPalette = 0x001
36 };
37 enum IconMatchedFlag {
38 None = 0,
39 DontFallbackMode = 0x01
40 };
41 Q_DECLARE_FLAGS(IconMatchedFlags, IconMatchedFlag)
42 Q_FLAGS(IconMatchedFlags);
43
44 DDciIcon();
45 explicit DDciIcon(const DCORE_NAMESPACE::DDciFile *dciFile);
46 explicit DDciIcon(const QString &fileName);
47 explicit DDciIcon(const QByteArray &data);
48 DDciIcon(const DDciIcon &other);
49 DDciIcon &operator=(const DDciIcon &other) noexcept;
50 ~DDciIcon();
51 DDciIcon(DDciIcon && other) noexcept;
52 DDciIcon &operator=(DDciIcon &&other) noexcept;
53 void swap(DDciIcon &other) noexcept { d.swap(other.d); }
54
55 bool isNull() const;
56 DDciIconMatchResult matchIcon(int size, Theme theme, Mode mode, IconMatchedFlags flags = None) const;
57
58 int actualSize(DDciIconMatchResult result) const;
59 int actualSize(int size, Theme theme, Mode mode = Normal) const;
60
61 QList<int> availableSizes(Theme theme, Mode mode = Normal) const;
62 bool isSupportedAttribute(DDciIconMatchResult result, IconAttibute attr) const;
63
64 QPixmap pixmap(qreal devicePixelRatio, int iconSize, Theme theme, Mode mode = Normal,
65 const DDciIconPalette &palette = DDciIconPalette()) const;
66 QPixmap pixmap(qreal devicePixelRatio, int iconSize, DDciIconMatchResult result,
67 const DDciIconPalette &palette = DDciIconPalette()) const;
68
69 void paint(QPainter *painter, const QRect &rect, qreal devicePixelRatio, Theme theme, Mode mode = Normal,
70 Qt::Alignment alignment = Qt::AlignCenter, const DDciIconPalette &palette = DDciIconPalette()) const;
71 void paint(QPainter *painter, const QRect &rect, qreal devicePixelRatio, DDciIconMatchResult result,
72 Qt::Alignment alignment = Qt::AlignCenter, const DDciIconPalette &palette = DDciIconPalette()) const;
73
74 static DDciIcon fromTheme(const QString &name);
75 static DDciIcon fromTheme(const QString &name, const DDciIcon &fallback);
76
77 // TODO: Should be compatible with QIcon
78private:
80#ifndef QT_NO_DATASTREAM
81 friend QDataStream &operator<<(QDataStream &, const DDciIcon &);
82 friend QDataStream &operator>>(QDataStream &, DDciIcon &);
83#endif
84};
85
86#ifndef QT_NO_DATASTREAM
87QDataStream &operator<<(QDataStream &, const DDciIcon &);
88QDataStream &operator>>(QDataStream &, DDciIcon &);
89#endif
90
91DGUI_END_NAMESPACE
92Q_DECLARE_METATYPE(DTK_GUI_NAMESPACE::DDciIcon);
Definition: ddciiconpalette.h:17
Definition: ddciicon.h:22
typedef Alignment