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-2021 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 <Qt>
26 #include <QtGui>
27 #include "directory.h"
28 
29 
30 class QSize;
31 
32 namespace {
33 
35 
36 public: // methods:
37 
38  BtOverlayIconEngine(QIcon const & icon, QIcon const & overlay)
39  : m_icon(icon)
40  , m_overlayIcon(overlay)
41  {}
42 
43  QIconEngine * clone() const override
44  { return new BtOverlayIconEngine(m_icon, m_overlayIcon); }
45 
46  void paint(QPainter * painter,
47  QRect const & rect,
48  QIcon::Mode mode,
49  QIcon::State state) override
50  {
51  {
52  QBrush brush(painter->background());
53  brush.setColor(Qt::transparent);
54  painter->setBackground(brush);
55  }
56  painter->eraseRect(rect);
57  painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
58  m_icon.paint(painter, rect, Qt::AlignCenter, mode, state);
59  m_overlayIcon.paint(painter,
60  rect.adjusted(0.4 * rect.width(),
61  0.4 * rect.height(),
62  0,
63  0),
64  Qt::AlignCenter,
65  mode,
66  state);
67  }
68 
69  QPixmap pixmap(QSize const & size,
70  QIcon::Mode mode,
71  QIcon::State state) override
72  {
73  QImage img(size, QImage::Format_ARGB32);
74  img.fill(qRgba(0,0,0,0));
75  QPixmap pix = QPixmap::fromImage(img, Qt::NoFormatConversion);
76  QPainter painter(&pix);
77  this->paint(&painter, QRect(QPoint(0, 0), size), mode, state);
78  return pix;
79  }
80 
81 private: // fields:
82 
83  QIcon const & m_icon;
84  QIcon const & m_overlayIcon;
85 
86 };
87 
88 } // anonymous namespace
89 
90 BtIcons::RegularIcon::RegularIcon(QString const & name)
91  : QIcon(util::directory::getIconDir().filePath(name))
92 {}
93 
95  QIcon const & overlayedIcon)
96  : QIcon(new BtOverlayIconEngine(icon, overlayedIcon))
97 {}
98 
99 BtIcons * BtIcons::m_instance = nullptr;
100 
102  /* Regular icons: */
103  : icon_add(QStringLiteral("add.svg"))
104  , icon_automatically(QStringLiteral("automatically.svg"))
105  , icon_back(QStringLiteral("back.svg"))
106  , icon_bible(QStringLiteral("bible.svg"))
107  , icon_bibletime(QStringLiteral("bibletime.svg"))
108  , icon_book(QStringLiteral("book.svg"))
109  , icon_bookmark(QStringLiteral("bookmark.svg"))
110  , icon_books(QStringLiteral("books.svg"))
111  , icon_calendar(QStringLiteral("calendar.svg"))
112  , icon_cascade(QStringLiteral("cascade.svg"))
113  , icon_checkbox(QStringLiteral("checkbox.svg"))
114  , icon_commentary(QStringLiteral("commentary.svg"))
115  , icon_configure(QStringLiteral("configure.svg"))
116  , icon_contents2(QStringLiteral("contents2.svg"))
117  , icon_delete(QStringLiteral("delete.svg"))
118  , icon_dictionary(QStringLiteral("dictionary.svg"))
119  , icon_displayconfig(QStringLiteral("displayconfig.svg"))
120  , icon_document_magnifier(QStringLiteral("document_magnifier.svg"))
121  , icon_edit_clear_locationbar(QStringLiteral("edit_clear_locationbar.svg"))
122  , icon_edit_copy(QStringLiteral("edit_copy.svg"))
123  , icon_exit(QStringLiteral("exit.svg"))
124  , icon_export(QStringLiteral("export.svg"))
125  , icon_file_save(QStringLiteral("file_save.svg"))
126  , icon_fileclose(QStringLiteral("fileclose.svg"))
127  , icon_find(QStringLiteral("find.svg"))
128  , icon_flag(QStringLiteral("flag.svg"))
129  , icon_folder_open(QStringLiteral("folder-open.svg"))
130  , icon_folder(QStringLiteral("folder.svg"))
131  , icon_fonts(QStringLiteral("fonts.svg"))
132  , icon_forward(QStringLiteral("forward.svg"))
133  , icon_import(QStringLiteral("import.svg"))
134  , icon_info(QStringLiteral("info.svg"))
135  , icon_key_bindings(QStringLiteral("key_bindings.svg"))
136  , icon_layer_visible_on(QStringLiteral("layer-visible-on.svg"))
137  , icon_lexicon(QStringLiteral("lexicon.svg"))
138  , icon_light_bulb(QStringLiteral("light_bulb.svg"))
139  , icon_lock(QStringLiteral("lock.svg"))
140  , icon_manual(QStringLiteral("manual.svg"))
141  , icon_map(QStringLiteral("map.svg"))
142  , icon_pencil(QStringLiteral("pencil.svg"))
143  , icon_plus(QStringLiteral("plus.svg"))
144  , icon_pointing_arrow(QStringLiteral("pointing_arrow.svg"))
145  , icon_print(QStringLiteral("print.svg"))
146  , icon_remove(QStringLiteral("remove.svg"))
147  , icon_questionable(QStringLiteral("questionable.svg"))
148  , icon_questionmark(QStringLiteral("questionmark.svg"))
149  , icon_refresh(QStringLiteral("refresh.svg"))
150  , icon_startconfig(QStringLiteral("startconfig.svg"))
151  , icon_stop(QStringLiteral("stop.svg"))
152  , icon_swordconfig(QStringLiteral("swordconfig.svg"))
153  , icon_sync(QStringLiteral("sync.svg"))
154  , icon_tabbed(QStringLiteral("tabbed.svg"))
155  , icon_text_bold(QStringLiteral("text_bold.svg"))
156  , icon_text_center(QStringLiteral("text_center.svg"))
157  , icon_text_italic(QStringLiteral("text_italic.svg"))
158  , icon_text_leftalign(QStringLiteral("text_leftalign.svg"))
159  , icon_text_rightalign(QStringLiteral("text_rightalign.svg"))
160  , icon_text_under(QStringLiteral("text_under.svg"))
161  , icon_tile(QStringLiteral("tile.svg"))
162  , icon_tile_horiz(QStringLiteral("tile_horiz.svg"))
163  , icon_tile_vert(QStringLiteral("tile_vert.svg"))
164  , icon_trash(QStringLiteral("trash.svg"))
165  , icon_unlock(QStringLiteral("unlock.svg"))
166  , icon_view_tree(QStringLiteral("view-tree.svg"))
167  , icon_view_index(QStringLiteral("view_index.svg"))
168  , icon_view_mag(QStringLiteral("view_mag.svg"))
169  , icon_view_profile(QStringLiteral("view_profile.svg"))
170  , icon_window_fullscreen(QStringLiteral("window_fullscreen.svg"))
171  /* Overlayed icons: */
188 {
190  m_instance = this;
191 }
192 
193 QString iconToHtml(QIcon const & icon, int const extent) {
194  QByteArray bytes;
195  QBuffer buffer(&bytes);
196  icon.pixmap(extent).save(&buffer, "PNG");
197  return "<img src=\"data:image/png;base64," + bytes.toBase64() + "\" />";
198 }
#define BT_ASSERT(...)
Definition: btassert.h:17
QString iconToHtml(QIcon const &icon, int const extent)
Definition: bticons.cpp:193
OverlayedIcon(QIcon const &icon, QIcon const &overlayedIcon)
Definition: bticons.cpp:94
RegularIcon(QString const &name)
Definition: bticons.cpp:90
RegularIcon const icon_document_magnifier
Definition: bticons.h:75
RegularIcon const icon_light_bulb
Definition: bticons.h:93
BtIcons()
Definition: bticons.cpp:101
RegularIcon const icon_unlock
Definition: bticons.h:120
RegularIcon const icon_refresh
Definition: bticons.h:104
OverlayedIcon const icon_cascade_auto
Definition: bticons.h:135
RegularIcon const icon_delete
Definition: bticons.h:72
RegularIcon const icon_dictionary
Definition: bticons.h:73
RegularIcon const icon_export
Definition: bticons.h:79
OverlayedIcon const icon_lexicon_locked
Definition: bticons.h:140
RegularIcon const icon_bible
Definition: bticons.h:61
OverlayedIcon const icon_tile_auto
Definition: bticons.h:141
OverlayedIcon const icon_bible_install
Definition: bticons.h:129
RegularIcon const icon_print
Definition: bticons.h:100
RegularIcon const icon_key_bindings
Definition: bticons.h:90
RegularIcon const icon_back
Definition: bticons.h:60
OverlayedIcon const icon_bible_remove
Definition: bticons.h:131
RegularIcon const icon_swordconfig
Definition: bticons.h:107
RegularIcon const icon_manual
Definition: bticons.h:95
RegularIcon const icon_tabbed
Definition: bticons.h:109
RegularIcon const icon_import
Definition: bticons.h:88
OverlayedIcon const icon_bible_add
Definition: bticons.h:128
RegularIcon const icon_plus
Definition: bticons.h:98
RegularIcon const icon_calendar
Definition: bticons.h:66
RegularIcon const icon_view_tree
Definition: bticons.h:121
RegularIcon const icon_text_under
Definition: bticons.h:115
RegularIcon const icon_configure
Definition: bticons.h:70
RegularIcon const icon_books
Definition: bticons.h:65
RegularIcon const icon_pointing_arrow
Definition: bticons.h:99
RegularIcon const icon_questionmark
Definition: bticons.h:103
RegularIcon const icon_sync
Definition: bticons.h:108
RegularIcon const icon_forward
Definition: bticons.h:87
RegularIcon const icon_startconfig
Definition: bticons.h:105
OverlayedIcon const icon_bible_locked
Definition: bticons.h:130
RegularIcon const icon_find
Definition: bticons.h:82
RegularIcon const icon_commentary
Definition: bticons.h:69
OverlayedIcon const icon_lexicon_add
Definition: bticons.h:139
RegularIcon const icon_edit_copy
Definition: bticons.h:77
RegularIcon const icon_file_save
Definition: bticons.h:80
RegularIcon const icon_edit_clear_locationbar
Definition: bticons.h:76
RegularIcon const icon_window_fullscreen
Definition: bticons.h:125
RegularIcon const icon_lexicon
Definition: bticons.h:92
RegularIcon const icon_book
Definition: bticons.h:63
RegularIcon const icon_questionable
Definition: bticons.h:102
RegularIcon const icon_view_profile
Definition: bticons.h:124
OverlayedIcon const icon_commentary_add
Definition: bticons.h:136
RegularIcon const icon_text_center
Definition: bticons.h:111
RegularIcon const icon_folder_open
Definition: bticons.h:84
RegularIcon const icon_cascade
Definition: bticons.h:67
OverlayedIcon const icon_bible_uninstall
Definition: bticons.h:132
RegularIcon const icon_bibletime
Definition: bticons.h:62
OverlayedIcon const icon_book_add
Definition: bticons.h:133
RegularIcon const icon_checkbox
Definition: bticons.h:68
RegularIcon const icon_automatically
Definition: bticons.h:59
RegularIcon const icon_stop
Definition: bticons.h:106
RegularIcon const icon_tile
Definition: bticons.h:116
RegularIcon const icon_fileclose
Definition: bticons.h:81
RegularIcon const icon_view_mag
Definition: bticons.h:123
RegularIcon const icon_tile_vert
Definition: bticons.h:118
RegularIcon const icon_text_bold
Definition: bticons.h:110
RegularIcon const icon_remove
Definition: bticons.h:101
RegularIcon const icon_contents2
Definition: bticons.h:71
RegularIcon const icon_add
Definition: bticons.h:58
RegularIcon const icon_exit
Definition: bticons.h:78
RegularIcon const icon_text_rightalign
Definition: bticons.h:114
RegularIcon const icon_view_index
Definition: bticons.h:122
static BtIcons * m_instance
Definition: bticons.h:51
OverlayedIcon const icon_folder_add
Definition: bticons.h:138
OverlayedIcon const icon_commentary_locked
Definition: bticons.h:137
RegularIcon const icon_folder
Definition: bticons.h:85
RegularIcon const icon_trash
Definition: bticons.h:119
RegularIcon const icon_text_italic
Definition: bticons.h:112
RegularIcon const icon_lock
Definition: bticons.h:94
RegularIcon const icon_map
Definition: bticons.h:96
RegularIcon const icon_flag
Definition: bticons.h:83
OverlayedIcon const icon_book_locked
Definition: bticons.h:134
RegularIcon const icon_info
Definition: bticons.h:89
OverlayedIcon const icon_tile_horiz_auto
Definition: bticons.h:142
RegularIcon const icon_layer_visible_on
Definition: bticons.h:91
RegularIcon const icon_bookmark
Definition: bticons.h:64
OverlayedIcon const icon_tile_vert_auto
Definition: bticons.h:143
RegularIcon const icon_pencil
Definition: bticons.h:97
RegularIcon const icon_displayconfig
Definition: bticons.h:74
RegularIcon const icon_fonts
Definition: bticons.h:86
RegularIcon const icon_text_leftalign
Definition: bticons.h:113
RegularIcon const icon_tile_horiz
Definition: bticons.h:117
QPixmap pixmap(QSize const &size, QIcon::Mode mode, QIcon::State state) override
Definition: bticons.cpp:69
void paint(QPainter *painter, QRect const &rect, QIcon::Mode mode, QIcon::State state) override
Definition: bticons.cpp:46
BtOverlayIconEngine(QIcon const &icon, QIcon const &overlay)
Definition: bticons.cpp:38
QDir const & getIconDir()
Definition: directory.cpp:265
Definition: cp1252.cpp:24