BibleTime
bticons.cpp
Go to the documentation of this file.
1/*********
2*
3* In the name of the Father, and of the Son, and of the Holy Spirit.
4*
5* This file is part of BibleTime's source code, https://bibletime.info/
6*
7* Copyright 1999-2026 by the BibleTime developers.
8* The BibleTime source code is licensed under the GNU General Public License
9* version 2.0.
10*
11**********/
12
13#include "bticons.h"
14
15#include <QBrush>
16#include <QBuffer>
17#include <QByteArray>
18#include <QDir>
19#include <QIconEngine>
20#include <QImage>
21#include <QPainter>
22#include <QPixmap>
23#include <QPoint>
24#include <QRect>
25#include <QString>
26#include <Qt>
27#include <QtGui>
28#include "directory.h"
29
30
31class QSize;
32
33namespace {
34
35class BtRegularIcon: public QIcon {
36
37public: // methods:
38
39 BtRegularIcon(QString const & name)
40 : QIcon(util::directory::getIconDir().filePath(name))
41 {}
42
43};
44
46
47public: // methods:
48
49 BtOverlayIconEngine(QIcon const & icon, QIcon const & overlay)
50 : m_icon(icon)
51 , m_overlayIcon(overlay)
52 {}
53
54 QIconEngine * clone() const override
55 { return new BtOverlayIconEngine(m_icon, m_overlayIcon); }
56
57 void paint(QPainter * painter,
58 QRect const & rect,
59 QIcon::Mode mode,
60 QIcon::State state) override
61 {
62 {
63 QBrush brush(painter->background());
64 brush.setColor(Qt::transparent);
65 painter->setBackground(brush);
66 }
67 painter->eraseRect(rect);
68 painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
69 m_icon.paint(painter, rect, Qt::AlignCenter, mode, state);
70 m_overlayIcon.paint(painter,
71 rect.adjusted(0.4 * rect.width(),
72 0.4 * rect.height(),
73 0,
74 0),
75 Qt::AlignCenter,
76 mode,
77 state);
78 }
79
80 QPixmap pixmap(QSize const & size,
81 QIcon::Mode mode,
82 QIcon::State state) override
83 {
84 QImage img(size, QImage::Format_ARGB32);
85 img.fill(qRgba(0,0,0,0));
86 QPixmap pix = QPixmap::fromImage(img, Qt::NoFormatConversion);
87 QPainter painter(&pix);
88 this->paint(&painter, QRect(QPoint(0, 0), size), mode, state);
89 return pix;
90 }
91
92private: // fields:
93
94 QIcon const & m_icon;
95 QIcon const & m_overlayIcon;
96
97};
98
99class BtOverlayedIcon: public QIcon {
100
101public: // methods:
102
103 BtOverlayedIcon(QIcon const & icon, QIcon const & overlayedIcon)
104 : QIcon(new BtOverlayIconEngine(icon, overlayedIcon))
105 {}
106
107};
108
109} // anonymous namespace
110
111namespace BtIcons {
112
113#define BT_ICON_(type,name,...) \
114 QIcon const & name() { \
115 static type const s_icon __VA_ARGS__; \
116 return s_icon; \
117 }
118#define BT_ICON(type,name,...) BT_ICON_(type,name,(__VA_ARGS__))
119#define BT_REGULAR_ICON(name,filename) \
120 BT_ICON(BtRegularIcon, name, QStringLiteral(filename))
121#define BT_OVERLAYED_ICON(name, icon, icon2) \
122 BT_ICON(BtOverlayedIcon, name, icon(), icon2())
123
124BT_ICON_(QIcon, icon_null)
125
126BT_REGULAR_ICON(icon_add, "add.svg")
127BT_REGULAR_ICON(icon_automatically, "automatically.svg")
128BT_REGULAR_ICON(icon_back, "back.svg")
129BT_REGULAR_ICON(icon_bible, "bible.svg")
130BT_REGULAR_ICON(icon_bibletime, "bibletime.svg")
131BT_REGULAR_ICON(icon_book, "book.svg")
132BT_REGULAR_ICON(icon_bookmark, "bookmark.svg")
133BT_REGULAR_ICON(icon_books, "books.svg")
134BT_REGULAR_ICON(icon_calendar, "calendar.svg")
135BT_REGULAR_ICON(icon_cascade, "cascade.svg")
136BT_REGULAR_ICON(icon_checkbox, "checkbox.svg")
137BT_REGULAR_ICON(icon_commentary, "commentary.svg")
138BT_REGULAR_ICON(icon_configure, "configure.svg")
139BT_REGULAR_ICON(icon_contents2, "contents2.svg")
140BT_REGULAR_ICON(icon_delete, "delete.svg")
141BT_REGULAR_ICON(icon_dictionary, "dictionary.svg")
142BT_REGULAR_ICON(icon_displayconfig, "displayconfig.svg")
143BT_REGULAR_ICON(icon_document_magnifier, "document_magnifier.svg")
144BT_REGULAR_ICON(icon_edit_clear_locationbar, "edit_clear_locationbar.svg")
145BT_REGULAR_ICON(icon_edit_copy, "edit_copy.svg")
146BT_REGULAR_ICON(icon_exit, "exit.svg")
147BT_REGULAR_ICON(icon_export, "export.svg")
148BT_REGULAR_ICON(icon_file_save, "file_save.svg")
149BT_REGULAR_ICON(icon_fileclose, "fileclose.svg")
150BT_REGULAR_ICON(icon_find, "find.svg")
151BT_REGULAR_ICON(icon_flag, "flag.svg")
152BT_REGULAR_ICON(icon_folder_open, "folder-open.svg")
153BT_REGULAR_ICON(icon_folder, "folder.svg")
154BT_REGULAR_ICON(icon_fonts, "fonts.svg")
155BT_REGULAR_ICON(icon_forward, "forward.svg")
156BT_REGULAR_ICON(icon_import, "import.svg")
157BT_REGULAR_ICON(icon_info, "info.svg")
158BT_REGULAR_ICON(icon_key_bindings, "key_bindings.svg")
159BT_REGULAR_ICON(icon_layer_visible_on, "layer-visible-on.svg")
160BT_REGULAR_ICON(icon_lexicon, "lexicon.svg")
161BT_REGULAR_ICON(icon_light_bulb, "light_bulb.svg")
162BT_REGULAR_ICON(icon_lock, "lock.svg")
164BT_REGULAR_ICON(icon_map, "map.svg")
165BT_REGULAR_ICON(icon_plus, "plus.svg")
166BT_REGULAR_ICON(icon_pointing_arrow, "pointing_arrow.svg")
167BT_REGULAR_ICON(icon_print, "print.svg")
168BT_REGULAR_ICON(icon_remove, "remove.svg")
169BT_REGULAR_ICON(icon_questionable, "questionable.svg")
170BT_REGULAR_ICON(icon_speaker, "speaker.svg")
171BT_REGULAR_ICON(icon_startconfig, "startconfig.svg")
172BT_REGULAR_ICON(icon_stop, "stop.svg")
173BT_REGULAR_ICON(icon_swordconfig, "swordconfig.svg")
174BT_REGULAR_ICON(icon_sync, "sync.svg")
175BT_REGULAR_ICON(icon_tabbed, "tabbed.svg")
176BT_REGULAR_ICON(icon_text_bold, "text_bold.svg")
177BT_REGULAR_ICON(icon_text_center, "text_center.svg")
178BT_REGULAR_ICON(icon_text_italic, "text_italic.svg")
179BT_REGULAR_ICON(icon_text_leftalign, "text_leftalign.svg")
180BT_REGULAR_ICON(icon_text_rightalign, "text_rightalign.svg")
181BT_REGULAR_ICON(icon_text_under, "text_under.svg")
182BT_REGULAR_ICON(icon_tile, "tile.svg")
183BT_REGULAR_ICON(icon_tile_horiz, "tile_horiz.svg")
184BT_REGULAR_ICON(icon_tile_vert, "tile_vert.svg")
185BT_REGULAR_ICON(icon_trash, "trash.svg")
186BT_REGULAR_ICON(icon_unlock, "unlock.svg")
187BT_REGULAR_ICON(icon_view_tree, "view-tree.svg")
188BT_REGULAR_ICON(icon_view_index, "view_index.svg")
189BT_REGULAR_ICON(icon_view_mag, "view_mag.svg")
190BT_REGULAR_ICON(icon_view_profile, "view_profile.svg")
191BT_REGULAR_ICON(icon_window_fullscreen, "window_fullscreen.svg")
192
215
216#undef BT_OVERLAYED_ICON
217#undef BT_REGULAR_ICON
218#undef BT_ICON
219#undef BT_ICON_
220
221} // namespace BtIcons
222
223QString iconToHtml(QIcon const & icon, int const extent) {
224 QByteArray bytes;
225 QBuffer buffer(&bytes);
226 icon.pixmap(extent).save(&buffer, "PNG");
227 return "<img src=\"data:image/png;base64," + bytes.toBase64() + "\" />";
228}
@ manual
Definition btglobal.h:76
#define BT_OVERLAYED_ICON(name, icon, icon2)
Definition bticons.cpp:121
#define BT_ICON_(type, name,...)
Definition bticons.cpp:113
QString iconToHtml(QIcon const &icon, int const extent)
Definition bticons.cpp:223
#define BT_REGULAR_ICON(name, filename)
Definition bticons.cpp:119
QPixmap pixmap(QSize const &size, QIcon::Mode mode, QIcon::State state) override
Definition bticons.cpp:80
void paint(QPainter *painter, QRect const &rect, QIcon::Mode mode, QIcon::State state) override
Definition bticons.cpp:57
BtOverlayIconEngine(QIcon const &icon, QIcon const &overlay)
Definition bticons.cpp:49
BtOverlayedIcon(QIcon const &icon, QIcon const &overlayedIcon)
Definition bticons.cpp:103
QIcon const & icon_tile_vert()
QIcon const & icon_questionable_add()
QIcon const & icon_contents2()
QIcon const & icon_folder_open()
QIcon const & icon_map_locked()
QIcon const & icon_lexicon_locked()
QIcon const & icon_commentary()
QIcon const & icon_import()
QIcon const & icon_stop()
QIcon const & icon_tile_horiz()
QIcon const & icon_delete()
QIcon const & icon_file_save()
QIcon const & icon_text_under()
QIcon const & icon_books()
QIcon const & icon_questionable()
QIcon const & icon_pointing_arrow()
QIcon const & icon_cascade()
QIcon const & icon_back()
QIcon const & icon_tile_vert_auto()
QIcon const & icon_sync()
QIcon const & icon_tile_auto()
QIcon const & icon_edit_clear_locationbar()
QIcon const & icon_text_italic()
QIcon const & icon_folder()
QIcon const & icon_configure()
QIcon const & icon_window_fullscreen()
QIcon const & icon_questionable_locked()
QIcon const & icon_unlock()
QIcon const & icon_dictionary()
QIcon const & icon_view_mag()
QIcon const & icon_bible()
QIcon const & icon_calendar()
QIcon const & icon_text_leftalign()
QIcon const & icon_null()
QIcon const & icon_map_add()
QIcon const & icon_key_bindings()
QIcon const & icon_trash()
QIcon const & icon_edit_copy()
QIcon const & icon_automatically()
QIcon const & icon_dictionary_add()
QIcon const & icon_folder_add()
QIcon const & icon_plus()
QIcon const & icon_text_rightalign()
QIcon const & icon_print()
QIcon const & icon_forward()
QIcon const & icon_book_add()
QIcon const & icon_view_tree()
QIcon const & icon_export()
QIcon const & icon_bookmark()
QIcon const & icon_manual()
QIcon const & icon_light_bulb()
QIcon const & icon_book()
QIcon const & icon_bible_remove()
QIcon const & icon_view_profile()
QIcon const & icon_fileclose()
QIcon const & icon_remove()
QIcon const & icon_calendar_add()
QIcon const & icon_find()
QIcon const & icon_tabbed()
QIcon const & icon_swordconfig()
QIcon const & icon_add()
QIcon const & icon_lock()
QIcon const & icon_dictionary_locked()
QIcon const & icon_text_bold()
QIcon const & icon_displayconfig()
QIcon const & icon_speaker()
QIcon const & icon_startconfig()
QIcon const & icon_tile()
QIcon const & icon_tile_horiz_auto()
QIcon const & icon_exit()
QIcon const & icon_bible_add()
QIcon const & icon_flag()
QIcon const & icon_cascade_auto()
QIcon const & icon_checkbox()
QIcon const & icon_commentary_add()
QIcon const & icon_map()
QIcon const & icon_document_magnifier()
QIcon const & icon_fonts()
QIcon const & icon_info()
QIcon const & icon_layer_visible_on()
QIcon const & icon_bible_locked()
QIcon const & icon_bibletime()
QIcon const & icon_view_index()
QIcon const & icon_commentary_locked()
QIcon const & icon_calendar_locked()
QIcon const & icon_text_center()
QIcon const & icon_lexicon()
QIcon const & icon_lexicon_add()
QIcon const & icon_book_locked()