1 /**
2 * QtAwesome - use font-awesome (or other font icons) in your c++ / Qt Application
3 *
4 * MIT Licensed
5 *
6 * Copyright 2013-2015 - Reliable Bits Software by Blommers IT. All Rights Reserved.
7 * Author Rick Blommers
8 */
9
10 #include "QtAwesome.h"
11
12 #include <QDebug>
13 #include <QFile>
14 #include <QFontDatabase>
15
16
17
18 /// The font-awesome icon painter
19 class QtAwesomeCharIconPainter: public QtAwesomeIconPainter
20 {
21 public:
paint(QtAwesome * awesome,QPainter * painter,const QRect & rect,QIcon::Mode mode,QIcon::State state,const QVariantMap & options)22 virtual void paint( QtAwesome* awesome, QPainter* painter, const QRect& rect, QIcon::Mode mode, QIcon::State state, const QVariantMap& options )
23 {
24 Q_UNUSED(mode);
25 Q_UNUSED(state);
26 Q_UNUSED(options);
27
28 painter->save();
29
30 // set the correct color
31 QColor color = options.value("color").value<QColor>();
32 QString text = options.value("text").toString();
33
34 if( mode == QIcon::Disabled ) {
35 color = options.value("color-disabled").value<QColor>();
36 QVariant alt = options.value("text-disabled");
37 if( alt.isValid() ) {
38 text = alt.toString();
39 }
40 } else if( mode == QIcon::Active ) {
41 color = options.value("color-active").value<QColor>();
42 QVariant alt = options.value("text-active");
43 if( alt.isValid() ) {
44 text = alt.toString();
45 }
46 } else if( mode == QIcon::Selected ) {
47 color = options.value("color-selected").value<QColor>();
48 QVariant alt = options.value("text-selected");
49 if( alt.isValid() ) {
50 text = alt.toString();
51 }
52 }
53 painter->setPen(color);
54
55 // add some 'padding' around the icon
56 int drawSize = qRound(rect.height()*options.value("scale-factor").toFloat());
57
58 painter->setFont( awesome->font(drawSize) );
59 painter->drawText( rect, text, QTextOption( Qt::AlignCenter|Qt::AlignVCenter ) );
60 painter->restore();
61 }
62
63 };
64
65
66 //---------------------------------------------------------------------------------------
67
68
69 /// The painter icon engine.
70 class QtAwesomeIconPainterIconEngine : public QIconEngine
71 {
72
73 public:
74
QtAwesomeIconPainterIconEngine(QtAwesome * awesome,QtAwesomeIconPainter * painter,const QVariantMap & options)75 QtAwesomeIconPainterIconEngine( QtAwesome* awesome, QtAwesomeIconPainter* painter, const QVariantMap& options )
76 : awesomeRef_(awesome)
77 , iconPainterRef_(painter)
78 , options_(options)
79 {
80 }
81
~QtAwesomeIconPainterIconEngine()82 virtual ~QtAwesomeIconPainterIconEngine() {}
83
clone() const84 QtAwesomeIconPainterIconEngine* clone() const
85 {
86 return new QtAwesomeIconPainterIconEngine( awesomeRef_, iconPainterRef_, options_ );
87 }
88
paint(QPainter * painter,const QRect & rect,QIcon::Mode mode,QIcon::State state)89 virtual void paint(QPainter* painter, const QRect& rect, QIcon::Mode mode, QIcon::State state)
90 {
91 Q_UNUSED( mode );
92 Q_UNUSED( state );
93 iconPainterRef_->paint( awesomeRef_, painter, rect, mode, state, options_ );
94 }
95
pixmap(const QSize & size,QIcon::Mode mode,QIcon::State state)96 virtual QPixmap pixmap(const QSize& size, QIcon::Mode mode, QIcon::State state)
97 {
98 QPixmap pm(size);
99 pm.fill( Qt::transparent ); // we need transparency
100 {
101 QPainter p(&pm);
102 paint(&p, QRect(QPoint(0,0),size), mode, state);
103 }
104 return pm;
105 }
106
107 private:
108
109 QtAwesome* awesomeRef_; ///< a reference to the QtAwesome instance
110 QtAwesomeIconPainter* iconPainterRef_; ///< a reference to the icon painter
111 QVariantMap options_; ///< the options for this icon painter
112 };
113
114
115 //---------------------------------------------------------------------------------------
116
117 /// The default icon colors
QtAwesome(QObject * parent)118 QtAwesome::QtAwesome( QObject* parent )
119 : QObject( parent )
120 , namedCodepoints_()
121 {
122 // initialize the default options
123 setDefaultOption( "color", QColor(50,50,50) );
124 setDefaultOption( "color-disabled", QColor(70,70,70,60));
125 setDefaultOption( "color-active", QColor(10,10,10));
126 setDefaultOption( "color-selected", QColor(10,10,10));
127 setDefaultOption( "scale-factor", 0.9 );
128
129 setDefaultOption( "text", QVariant() );
130 setDefaultOption( "text-disabled", QVariant() );
131 setDefaultOption( "text-active", QVariant() );
132 setDefaultOption( "text-selected", QVariant() );
133
134 fontIconPainter_ = new QtAwesomeCharIconPainter();
135
136 }
137
138
~QtAwesome()139 QtAwesome::~QtAwesome()
140 {
141 delete fontIconPainter_;
142 // delete errorIconPainter_;
143 qDeleteAll(painterMap_);
144 }
145
146 /// initializes the QtAwesome icon factory with the given fontname
init(const QString & fontname)147 void QtAwesome::init(const QString& fontname)
148 {
149 fontName_ = fontname;
150 }
151
152
153 /// a specialized init function so font-awesome is loaded and initialized
154 /// this method return true on success, it will return false if the fnot cannot be initialized
155 /// To initialize QtAwesome with font-awesome you need to call this method
initFontAwesome()156 bool QtAwesome::initFontAwesome( )
157 {
158 #if 0
159 static int fontAwesomeFontId = -1;
160
161 // only load font-awesome once
162 if( fontAwesomeFontId < 0 ) {
163
164 // The macro below internally calls "qInitResources_QtAwesome()". this initializes
165 // the resource system. For a .pri project this isn't required, but when building and using a
166 // static library the resource need to initialized first.
167 ///
168 // I've checked th qInitResource_* code and calling this method mutliple times shouldn't be any problem
169 // (More info about this subject: http://qt-project.org/wiki/QtResources)
170 Q_INIT_RESOURCE(QtAwesome);
171
172 // load the font file
173 QFile res(":/fonts/fontawesome-4.3.0.ttf");
174 if(!res.open(QIODevice::ReadOnly)) {
175 qDebug() << "Font awesome font could not be loaded!";
176 return false;
177 }
178 QByteArray fontData( res.readAll() );
179 res.close();
180
181 // fetch the given font
182 fontAwesomeFontId = QFontDatabase::addApplicationFontFromData(fontData);
183 }
184
185 QStringList loadedFontFamilies = QFontDatabase::applicationFontFamilies(fontAwesomeFontId);
186 if( !loadedFontFamilies.empty() ) {
187 fontName_= loadedFontFamilies.at(0);
188 } else {
189 qDebug() << "Font awesome font is empty?!";
190 fontAwesomeFontId = -1; // restore the font-awesome id
191 return false;
192 }
193 #endif
194
195 // intialize the map
196 QHash<QString, int>& m = namedCodepoints_;
197 m.insert("adjust", fa::adjust);
198 m.insert("adn", fa::adn);
199 m.insert("aligncenter", fa::aligncenter);
200 m.insert("alignjustify", fa::alignjustify);
201 m.insert("alignleft", fa::alignleft);
202 m.insert("alignright", fa::alignright);
203 m.insert("ambulance", fa::ambulance);
204 m.insert("anchor", fa::anchor);
205 m.insert("android", fa::android);
206 m.insert("angellist", fa::angellist);
207 m.insert("angledoubledown", fa::angledoubledown);
208 m.insert("angledoubleleft", fa::angledoubleleft);
209 m.insert("angledoubleright", fa::angledoubleright);
210 m.insert("angledoubleup", fa::angledoubleup);
211 m.insert("angledown", fa::angledown);
212 m.insert("angleleft", fa::angleleft);
213 m.insert("angleright", fa::angleright);
214 m.insert("angleup", fa::angleup);
215 m.insert("apple", fa::apple);
216 m.insert("archive", fa::archive);
217 m.insert("areachart", fa::areachart);
218 m.insert("arrowcircledown", fa::arrowcircledown);
219 m.insert("arrowcircleleft", fa::arrowcircleleft);
220 m.insert("arrowcircleodown", fa::arrowcircleodown);
221 m.insert("arrowcircleoleft", fa::arrowcircleoleft);
222 m.insert("arrowcircleoright", fa::arrowcircleoright);
223 m.insert("arrowcircleoup", fa::arrowcircleoup);
224 m.insert("arrowcircleright", fa::arrowcircleright);
225 m.insert("arrowcircleup", fa::arrowcircleup);
226 m.insert("arrowdown", fa::arrowdown);
227 m.insert("arrowleft", fa::arrowleft);
228 m.insert("arrowright", fa::arrowright);
229 m.insert("arrowup", fa::arrowup);
230 m.insert("arrows", fa::arrows);
231 m.insert("arrowsalt", fa::arrowsalt);
232 m.insert("arrowsh", fa::arrowsh);
233 m.insert("arrowsv", fa::arrowsv);
234 m.insert("asterisk", fa::asterisk);
235 m.insert("at", fa::at);
236 m.insert("automobile", fa::automobile);
237 m.insert("backward", fa::backward);
238 m.insert("ban", fa::ban);
239 m.insert("bank", fa::bank);
240 m.insert("barchart", fa::barchart);
241 m.insert("barcharto", fa::barcharto);
242 m.insert("barcode", fa::barcode);
243 m.insert("bars", fa::bars);
244 m.insert("bed", fa::bed);
245 m.insert("beer", fa::beer);
246 m.insert("behance", fa::behance);
247 m.insert("behancesquare", fa::behancesquare);
248 m.insert("bell", fa::bell);
249 m.insert("bello", fa::bello);
250 m.insert("bellslash", fa::bellslash);
251 m.insert("bellslasho", fa::bellslasho);
252 m.insert("bicycle", fa::bicycle);
253 m.insert("binoculars", fa::binoculars);
254 m.insert("birthdaycake", fa::birthdaycake);
255 m.insert("bitbucket", fa::bitbucket);
256 m.insert("bitbucketsquare", fa::bitbucketsquare);
257 m.insert("bitcoin", fa::bitcoin);
258 m.insert("bold", fa::bold);
259 m.insert("bolt", fa::bolt);
260 m.insert("bomb", fa::bomb);
261 m.insert("book", fa::book);
262 m.insert("bookmark", fa::bookmark);
263 m.insert("bookmarko", fa::bookmarko);
264 m.insert("briefcase", fa::briefcase);
265 m.insert("btc", fa::btc);
266 m.insert("bug", fa::bug);
267 m.insert("building", fa::building);
268 m.insert("buildingo", fa::buildingo);
269 m.insert("bullhorn", fa::bullhorn);
270 m.insert("bullseye", fa::bullseye);
271 m.insert("bus", fa::bus);
272 m.insert("buysellads", fa::buysellads);
273 m.insert("cab", fa::cab);
274 m.insert("calculator", fa::calculator);
275 m.insert("calendar", fa::calendar);
276 m.insert("calendaro", fa::calendaro);
277 m.insert("camera", fa::camera);
278 m.insert("cameraretro", fa::cameraretro);
279 m.insert("car", fa::car);
280 m.insert("caretdown", fa::caretdown);
281 m.insert("caretleft", fa::caretleft);
282 m.insert("caretright", fa::caretright);
283 m.insert("caretsquareodown", fa::caretsquareodown);
284 m.insert("caretsquareoleft", fa::caretsquareoleft);
285 m.insert("caretsquareoright", fa::caretsquareoright);
286 m.insert("caretsquareoup", fa::caretsquareoup);
287 m.insert("caretup", fa::caretup);
288 m.insert("cartarrowdown", fa::cartarrowdown);
289 m.insert("cartplus", fa::cartplus);
290 m.insert("cc", fa::cc);
291 m.insert("ccamex", fa::ccamex);
292 m.insert("ccdiscover", fa::ccdiscover);
293 m.insert("ccmastercard", fa::ccmastercard);
294 m.insert("ccpaypal", fa::ccpaypal);
295 m.insert("ccstripe", fa::ccstripe);
296 m.insert("ccvisa", fa::ccvisa);
297 m.insert("certificate", fa::certificate);
298 m.insert("chain", fa::chain);
299 m.insert("chainbroken", fa::chainbroken);
300 m.insert("check", fa::check);
301 m.insert("checkcircle", fa::checkcircle);
302 m.insert("checkcircleo", fa::checkcircleo);
303 m.insert("checksquare", fa::checksquare);
304 m.insert("checksquareo", fa::checksquareo);
305 m.insert("chevroncircledown", fa::chevroncircledown);
306 m.insert("chevroncircleleft", fa::chevroncircleleft);
307 m.insert("chevroncircleright", fa::chevroncircleright);
308 m.insert("chevroncircleup", fa::chevroncircleup);
309 m.insert("chevrondown", fa::chevrondown);
310 m.insert("chevronleft", fa::chevronleft);
311 m.insert("chevronright", fa::chevronright);
312 m.insert("chevronup", fa::chevronup);
313 m.insert("child", fa::child);
314 m.insert("circle", fa::circle);
315 m.insert("circleo", fa::circleo);
316 m.insert("circleonotch", fa::circleonotch);
317 m.insert("circlethin", fa::circlethin);
318 m.insert("clipboard", fa::clipboard);
319 m.insert("clocko", fa::clocko);
320 m.insert("close", fa::close);
321 m.insert("cloud", fa::cloud);
322 m.insert("clouddownload", fa::clouddownload);
323 m.insert("cloudupload", fa::cloudupload);
324 m.insert("cny", fa::cny);
325 m.insert("code", fa::code);
326 m.insert("codefork", fa::codefork);
327 m.insert("codepen", fa::codepen);
328 m.insert("coffee", fa::coffee);
329 m.insert("cog", fa::cog);
330 m.insert("cogs", fa::cogs);
331 m.insert("columns", fa::columns);
332 m.insert("comment", fa::comment);
333 m.insert("commento", fa::commento);
334 m.insert("comments", fa::comments);
335 m.insert("commentso", fa::commentso);
336 m.insert("compass", fa::compass);
337 m.insert("compress", fa::compress);
338 m.insert("connectdevelop", fa::connectdevelop);
339 m.insert("copy", fa::copy);
340 m.insert("copyright", fa::copyright);
341 m.insert("creditcard", fa::creditcard);
342 m.insert("crop", fa::crop);
343 m.insert("crosshairs", fa::crosshairs);
344 m.insert("css3", fa::css3);
345 m.insert("cube", fa::cube);
346 m.insert("cubes", fa::cubes);
347 m.insert("cut", fa::cut);
348 m.insert("cutlery", fa::cutlery);
349 m.insert("dashboard", fa::dashboard);
350 m.insert("dashcube", fa::dashcube);
351 m.insert("database", fa::database);
352 m.insert("dedent", fa::dedent);
353 m.insert("delicious", fa::delicious);
354 m.insert("desktop", fa::desktop);
355 m.insert("deviantart", fa::deviantart);
356 m.insert("diamond", fa::diamond);
357 m.insert("digg", fa::digg);
358 m.insert("dollar", fa::dollar);
359 m.insert("dotcircleo", fa::dotcircleo);
360 m.insert("download", fa::download);
361 m.insert("dribbble", fa::dribbble);
362 m.insert("dropbox", fa::dropbox);
363 m.insert("drupal", fa::drupal);
364 m.insert("edit", fa::edit);
365 m.insert("eject", fa::eject);
366 m.insert("ellipsish", fa::ellipsish);
367 m.insert("ellipsisv", fa::ellipsisv);
368 m.insert("empire", fa::empire);
369 m.insert("envelope", fa::envelope);
370 m.insert("envelopeo", fa::envelopeo);
371 m.insert("envelopesquare", fa::envelopesquare);
372 m.insert("eraser", fa::eraser);
373 m.insert("eur", fa::eur);
374 m.insert("euro", fa::euro);
375 m.insert("exchange", fa::exchange);
376 m.insert("exclamation", fa::exclamation);
377 m.insert("exclamationcircle", fa::exclamationcircle);
378 m.insert("exclamationtriangle", fa::exclamationtriangle);
379 m.insert("expand", fa::expand);
380 m.insert("externallink", fa::externallink);
381 m.insert("externallinksquare", fa::externallinksquare);
382 m.insert("eye", fa::eye);
383 m.insert("eyeslash", fa::eyeslash);
384 m.insert("eyedropper", fa::eyedropper);
385 m.insert("facebook", fa::facebook);
386 m.insert("facebookf", fa::facebookf);
387 m.insert("facebookofficial", fa::facebookofficial);
388 m.insert("facebooksquare", fa::facebooksquare);
389 m.insert("fastbackward", fa::fastbackward);
390 m.insert("fastforward", fa::fastforward);
391 m.insert("fax", fa::fax);
392 m.insert("female", fa::female);
393 m.insert("fighterjet", fa::fighterjet);
394 m.insert("file", fa::file);
395 m.insert("filearchiveo", fa::filearchiveo);
396 m.insert("fileaudioo", fa::fileaudioo);
397 m.insert("filecodeo", fa::filecodeo);
398 m.insert("fileexcelo", fa::fileexcelo);
399 m.insert("fileimageo", fa::fileimageo);
400 m.insert("filemovieo", fa::filemovieo);
401 m.insert("fileo", fa::fileo);
402 m.insert("filepdfo", fa::filepdfo);
403 m.insert("filephotoo", fa::filephotoo);
404 m.insert("filepictureo", fa::filepictureo);
405 m.insert("filepowerpointo", fa::filepowerpointo);
406 m.insert("filesoundo", fa::filesoundo);
407 m.insert("filetext", fa::filetext);
408 m.insert("filetexto", fa::filetexto);
409 m.insert("filevideoo", fa::filevideoo);
410 m.insert("filewordo", fa::filewordo);
411 m.insert("filezipo", fa::filezipo);
412 m.insert("fileso", fa::fileso);
413 m.insert("film", fa::film);
414 m.insert("filter", fa::filter);
415 m.insert("fire", fa::fire);
416 m.insert("fireextinguisher", fa::fireextinguisher);
417 m.insert("flag", fa::flag);
418 m.insert("flagcheckered", fa::flagcheckered);
419 m.insert("flago", fa::flago);
420 m.insert("flash", fa::flash);
421 m.insert("flask", fa::flask);
422 m.insert("flickr", fa::flickr);
423 m.insert("floppyo", fa::floppyo);
424 m.insert("folder", fa::folder);
425 m.insert("foldero", fa::foldero);
426 m.insert("folderopen", fa::folderopen);
427 m.insert("folderopeno", fa::folderopeno);
428 m.insert("font", fa::font);
429 m.insert("forumbee", fa::forumbee);
430 m.insert("forward", fa::forward);
431 m.insert("foursquare", fa::foursquare);
432 m.insert("frowno", fa::frowno);
433 m.insert("futbolo", fa::futbolo);
434 m.insert("gamepad", fa::gamepad);
435 m.insert("gavel", fa::gavel);
436 m.insert("gbp", fa::gbp);
437 m.insert("ge", fa::ge);
438 m.insert("gear", fa::gear);
439 m.insert("gears", fa::gears);
440 m.insert("genderless", fa::genderless);
441 m.insert("gift", fa::gift);
442 m.insert("git", fa::git);
443 m.insert("gitsquare", fa::gitsquare);
444 m.insert("github", fa::github);
445 m.insert("githubalt", fa::githubalt);
446 m.insert("githubsquare", fa::githubsquare);
447 m.insert("gittip", fa::gittip);
448 m.insert("glass", fa::glass);
449 m.insert("globe", fa::globe);
450 m.insert("google", fa::google);
451 m.insert("googleplus", fa::googleplus);
452 m.insert("googleplussquare", fa::googleplussquare);
453 m.insert("googlewallet", fa::googlewallet);
454 m.insert("graduationcap", fa::graduationcap);
455 m.insert("gratipay", fa::gratipay);
456 m.insert("group", fa::group);
457 m.insert("hsquare", fa::hsquare);
458 m.insert("hackernews", fa::hackernews);
459 m.insert("handodown", fa::handodown);
460 m.insert("handoleft", fa::handoleft);
461 m.insert("handoright", fa::handoright);
462 m.insert("handoup", fa::handoup);
463 m.insert("hddo", fa::hddo);
464 m.insert("header", fa::header);
465 m.insert("headphones", fa::headphones);
466 m.insert("heart", fa::heart);
467 m.insert("hearto", fa::hearto);
468 m.insert("heartbeat", fa::heartbeat);
469 m.insert("history", fa::history);
470 m.insert("home", fa::home);
471 m.insert("hospitalo", fa::hospitalo);
472 m.insert("hotel", fa::hotel);
473 m.insert("html5", fa::html5);
474 m.insert("ils", fa::ils);
475 m.insert("image", fa::image);
476 m.insert("inbox", fa::inbox);
477 m.insert("indent", fa::indent);
478 m.insert("info", fa::info);
479 m.insert("infocircle", fa::infocircle);
480 m.insert("inr", fa::inr);
481 m.insert("instagram", fa::instagram);
482 m.insert("institution", fa::institution);
483 m.insert("ioxhost", fa::ioxhost);
484 m.insert("italic", fa::italic);
485 m.insert("joomla", fa::joomla);
486 m.insert("jpy", fa::jpy);
487 m.insert("jsfiddle", fa::jsfiddle);
488 m.insert("key", fa::key);
489 m.insert("keyboardo", fa::keyboardo);
490 m.insert("krw", fa::krw);
491 m.insert("language", fa::language);
492 m.insert("laptop", fa::laptop);
493 m.insert("lastfm", fa::lastfm);
494 m.insert("lastfmsquare", fa::lastfmsquare);
495 m.insert("leaf", fa::leaf);
496 m.insert("leanpub", fa::leanpub);
497 m.insert("legal", fa::legal);
498 m.insert("lemono", fa::lemono);
499 m.insert("leveldown", fa::leveldown);
500 m.insert("levelup", fa::levelup);
501 m.insert("lifebouy", fa::lifebouy);
502 m.insert("lifebuoy", fa::lifebuoy);
503 m.insert("lifering", fa::lifering);
504 m.insert("lifesaver", fa::lifesaver);
505 m.insert("lightbulbo", fa::lightbulbo);
506 m.insert("linechart", fa::linechart);
507 m.insert("link", fa::link);
508 m.insert("linkedin", fa::linkedin);
509 m.insert("linkedinsquare", fa::linkedinsquare);
510 m.insert("linux", fa::linux);
511 m.insert("list", fa::list);
512 m.insert("listalt", fa::listalt);
513 m.insert("listol", fa::listol);
514 m.insert("listul", fa::listul);
515 m.insert("locationarrow", fa::locationarrow);
516 m.insert("lock", fa::lock);
517 m.insert("longarrowdown", fa::longarrowdown);
518 m.insert("longarrowleft", fa::longarrowleft);
519 m.insert("longarrowright", fa::longarrowright);
520 m.insert("longarrowup", fa::longarrowup);
521 m.insert("magic", fa::magic);
522 m.insert("magnet", fa::magnet);
523 m.insert("mailforward", fa::mailforward);
524 m.insert("mailreply", fa::mailreply);
525 m.insert("mailreplyall", fa::mailreplyall);
526 m.insert("male", fa::male);
527 m.insert("mapmarker", fa::mapmarker);
528 m.insert("mars", fa::mars);
529 m.insert("marsdouble", fa::marsdouble);
530 m.insert("marsstroke", fa::marsstroke);
531 m.insert("marsstrokeh", fa::marsstrokeh);
532 m.insert("marsstrokev", fa::marsstrokev);
533 m.insert("maxcdn", fa::maxcdn);
534 m.insert("meanpath", fa::meanpath);
535 m.insert("medium", fa::medium);
536 m.insert("medkit", fa::medkit);
537 m.insert("meho", fa::meho);
538 m.insert("mercury", fa::mercury);
539 m.insert("microphone", fa::microphone);
540 m.insert("microphoneslash", fa::microphoneslash);
541 m.insert("minus", fa::minus);
542 m.insert("minuscircle", fa::minuscircle);
543 m.insert("minussquare", fa::minussquare);
544 m.insert("minussquareo", fa::minussquareo);
545 m.insert("mobile", fa::mobile);
546 m.insert("mobilephone", fa::mobilephone);
547 m.insert("money", fa::money);
548 m.insert("moono", fa::moono);
549 m.insert("mortarboard", fa::mortarboard);
550 m.insert("motorcycle", fa::motorcycle);
551 m.insert("music", fa::music);
552 m.insert("navicon", fa::navicon);
553 m.insert("neuter", fa::neuter);
554 m.insert("newspapero", fa::newspapero);
555 m.insert("openid", fa::openid);
556 m.insert("outdent", fa::outdent);
557 m.insert("pagelines", fa::pagelines);
558 m.insert("paintbrush", fa::paintbrush);
559 m.insert("paperplane", fa::paperplane);
560 m.insert("paperplaneo", fa::paperplaneo);
561 m.insert("paperclip", fa::paperclip);
562 m.insert("paragraph", fa::paragraph);
563 m.insert("paste", fa::paste);
564 m.insert("pause", fa::pause);
565 m.insert("paw", fa::paw);
566 m.insert("paypal", fa::paypal);
567 m.insert("pencil", fa::pencil);
568 m.insert("pencilsquare", fa::pencilsquare);
569 m.insert("pencilsquareo", fa::pencilsquareo);
570 m.insert("phone", fa::phone);
571 m.insert("phonesquare", fa::phonesquare);
572 m.insert("photo", fa::photo);
573 m.insert("pictureo", fa::pictureo);
574 m.insert("piechart", fa::piechart);
575 m.insert("piedpiper", fa::piedpiper);
576 m.insert("piedpiperalt", fa::piedpiperalt);
577 m.insert("pinterest", fa::pinterest);
578 m.insert("pinterestp", fa::pinterestp);
579 m.insert("pinterestsquare", fa::pinterestsquare);
580 m.insert("plane", fa::plane);
581 m.insert("play", fa::play);
582 m.insert("playcircle", fa::playcircle);
583 m.insert("playcircleo", fa::playcircleo);
584 m.insert("plug", fa::plug);
585 m.insert("plus", fa::plus);
586 m.insert("pluscircle", fa::pluscircle);
587 m.insert("plussquare", fa::plussquare);
588 m.insert("plussquareo", fa::plussquareo);
589 m.insert("poweroff", fa::poweroff);
590 m.insert("print", fa::print);
591 m.insert("puzzlepiece", fa::puzzlepiece);
592 m.insert("qq", fa::qq);
593 m.insert("qrcode", fa::qrcode);
594 m.insert("question", fa::question);
595 m.insert("questioncircle", fa::questioncircle);
596 m.insert("quoteleft", fa::quoteleft);
597 m.insert("quoteright", fa::quoteright);
598 m.insert("ra", fa::ra);
599 m.insert("random", fa::random);
600 m.insert("rebel", fa::rebel);
601 m.insert("recycle", fa::recycle);
602 m.insert("reddit", fa::reddit);
603 m.insert("redditsquare", fa::redditsquare);
604 m.insert("refresh", fa::refresh);
605 m.insert("remove", fa::remove);
606 m.insert("renren", fa::renren);
607 m.insert("reorder", fa::reorder);
608 m.insert("repeat", fa::repeat);
609 m.insert("reply", fa::reply);
610 m.insert("replyall", fa::replyall);
611 m.insert("retweet", fa::retweet);
612 m.insert("rmb", fa::rmb);
613 m.insert("road", fa::road);
614 m.insert("rocket", fa::rocket);
615 m.insert("rotateleft", fa::rotateleft);
616 m.insert("rotateright", fa::rotateright);
617 m.insert("rouble", fa::rouble);
618 m.insert("rss", fa::rss);
619 m.insert("rsssquare", fa::rsssquare);
620 m.insert("rub", fa::rub);
621 m.insert("ruble", fa::ruble);
622 m.insert("rupee", fa::rupee);
623 m.insert("save", fa::save);
624 m.insert("scissors", fa::scissors);
625 m.insert("search", fa::search);
626 m.insert("searchminus", fa::searchminus);
627 m.insert("searchplus", fa::searchplus);
628 m.insert("sellsy", fa::sellsy);
629 m.insert("send", fa::send);
630 m.insert("sendo", fa::sendo);
631 m.insert("server", fa::server);
632 m.insert("share", fa::share);
633 m.insert("sharealt", fa::sharealt);
634 m.insert("sharealtsquare", fa::sharealtsquare);
635 m.insert("sharesquare", fa::sharesquare);
636 m.insert("sharesquareo", fa::sharesquareo);
637 m.insert("shekel", fa::shekel);
638 m.insert("sheqel", fa::sheqel);
639 m.insert("shield", fa::shield);
640 m.insert("ship", fa::ship);
641 m.insert("shirtsinbulk", fa::shirtsinbulk);
642 m.insert("shoppingcart", fa::shoppingcart);
643 m.insert("signin", fa::signin);
644 m.insert("signout", fa::signout);
645 m.insert("signal", fa::signal);
646 m.insert("simplybuilt", fa::simplybuilt);
647 m.insert("sitemap", fa::sitemap);
648 m.insert("skyatlas", fa::skyatlas);
649 m.insert("skype", fa::skype);
650 m.insert("slack", fa::slack);
651 m.insert("sliders", fa::sliders);
652 m.insert("slideshare", fa::slideshare);
653 m.insert("smileo", fa::smileo);
654 m.insert("soccerballo", fa::soccerballo);
655 m.insert("sort", fa::sort);
656 m.insert("sortalphaasc", fa::sortalphaasc);
657 m.insert("sortalphadesc", fa::sortalphadesc);
658 m.insert("sortamountasc", fa::sortamountasc);
659 m.insert("sortamountdesc", fa::sortamountdesc);
660 m.insert("sortasc", fa::sortasc);
661 m.insert("sortdesc", fa::sortdesc);
662 m.insert("sortdown", fa::sortdown);
663 m.insert("sortnumericasc", fa::sortnumericasc);
664 m.insert("sortnumericdesc", fa::sortnumericdesc);
665 m.insert("sortup", fa::sortup);
666 m.insert("soundcloud", fa::soundcloud);
667 m.insert("spaceshuttle", fa::spaceshuttle);
668 m.insert("spinner", fa::spinner);
669 m.insert("spoon", fa::spoon);
670 m.insert("spotify", fa::spotify);
671 m.insert("square", fa::square);
672 m.insert("squareo", fa::squareo);
673 m.insert("stackexchange", fa::stackexchange);
674 m.insert("stackoverflow", fa::stackoverflow);
675 m.insert("star", fa::star);
676 m.insert("starhalf", fa::starhalf);
677 m.insert("starhalfempty", fa::starhalfempty);
678 m.insert("starhalffull", fa::starhalffull);
679 m.insert("starhalfo", fa::starhalfo);
680 m.insert("staro", fa::staro);
681 m.insert("steam", fa::steam);
682 m.insert("steamsquare", fa::steamsquare);
683 m.insert("stepbackward", fa::stepbackward);
684 m.insert("stepforward", fa::stepforward);
685 m.insert("stethoscope", fa::stethoscope);
686 m.insert("stop", fa::stop);
687 m.insert("streetview", fa::streetview);
688 m.insert("strikethrough", fa::strikethrough);
689 m.insert("stumbleupon", fa::stumbleupon);
690 m.insert("stumbleuponcircle", fa::stumbleuponcircle);
691 m.insert("subscript", fa::subscript);
692 m.insert("subway", fa::subway);
693 m.insert("suitcase", fa::suitcase);
694 m.insert("suno", fa::suno);
695 m.insert("superscript", fa::superscript);
696 m.insert("support", fa::support);
697 m.insert("table", fa::table);
698 m.insert("tablet", fa::tablet);
699 m.insert("tachometer", fa::tachometer);
700 m.insert("tag", fa::tag);
701 m.insert("tags", fa::tags);
702 m.insert("tasks", fa::tasks);
703 m.insert("taxi", fa::taxi);
704 m.insert("tencentweibo", fa::tencentweibo);
705 m.insert("terminal", fa::terminal);
706 m.insert("textheight", fa::textheight);
707 m.insert("textwidth", fa::textwidth);
708 m.insert("th", fa::th);
709 m.insert("thlarge", fa::thlarge);
710 m.insert("thlist", fa::thlist);
711 m.insert("thumbtack", fa::thumbtack);
712 m.insert("thumbsdown", fa::thumbsdown);
713 m.insert("thumbsodown", fa::thumbsodown);
714 m.insert("thumbsoup", fa::thumbsoup);
715 m.insert("thumbsup", fa::thumbsup);
716 m.insert("ticket", fa::ticket);
717 m.insert("times", fa::times);
718 m.insert("timescircle", fa::timescircle);
719 m.insert("timescircleo", fa::timescircleo);
720 m.insert("tint", fa::tint);
721 m.insert("toggledown", fa::toggledown);
722 m.insert("toggleleft", fa::toggleleft);
723 m.insert("toggleoff", fa::toggleoff);
724 m.insert("toggleon", fa::toggleon);
725 m.insert("toggleright", fa::toggleright);
726 m.insert("toggleup", fa::toggleup);
727 m.insert("train", fa::train);
728 m.insert("transgender", fa::transgender);
729 m.insert("transgenderalt", fa::transgenderalt);
730 m.insert("trash", fa::trash);
731 m.insert("trasho", fa::trasho);
732 m.insert("tree", fa::tree);
733 m.insert("trello", fa::trello);
734 m.insert("trophy", fa::trophy);
735 m.insert("truck", fa::truck);
736 m.insert("try", fa::fa_try);
737 m.insert("fa_try", fa::fa_try);
738 m.insert("tty", fa::tty);
739 m.insert("tumblr", fa::tumblr);
740 m.insert("tumblrsquare", fa::tumblrsquare);
741 m.insert("turkishlira", fa::turkishlira);
742 m.insert("twitch", fa::twitch);
743 m.insert("twitter", fa::twitter);
744 m.insert("twittersquare", fa::twittersquare);
745 m.insert("umbrella", fa::umbrella);
746 m.insert("underline", fa::underline);
747 m.insert("undo", fa::undo);
748 m.insert("university", fa::university);
749 m.insert("unlink", fa::unlink);
750 m.insert("unlock", fa::unlock);
751 m.insert("unlockalt", fa::unlockalt);
752 m.insert("unsorted", fa::unsorted);
753 m.insert("upload", fa::upload);
754 m.insert("usd", fa::usd);
755 m.insert("user", fa::user);
756 m.insert("usermd", fa::usermd);
757 m.insert("userplus", fa::userplus);
758 m.insert("usersecret", fa::usersecret);
759 m.insert("usertimes", fa::usertimes);
760 m.insert("users", fa::users);
761 m.insert("venus", fa::venus);
762 m.insert("venusdouble", fa::venusdouble);
763 m.insert("venusmars", fa::venusmars);
764 m.insert("viacoin", fa::viacoin);
765 m.insert("videocamera", fa::videocamera);
766 m.insert("vimeosquare", fa::vimeosquare);
767 m.insert("vine", fa::vine);
768 m.insert("vk", fa::vk);
769 m.insert("volumedown", fa::volumedown);
770 m.insert("volumeoff", fa::volumeoff);
771 m.insert("volumeup", fa::volumeup);
772 m.insert("warning", fa::warning);
773 m.insert("wechat", fa::wechat);
774 m.insert("weibo", fa::weibo);
775 m.insert("weixin", fa::weixin);
776 m.insert("whatsapp", fa::whatsapp);
777 m.insert("wheelchair", fa::wheelchair);
778 m.insert("wifi", fa::wifi);
779 m.insert("windows", fa::windows);
780 m.insert("won", fa::won);
781 m.insert("wordpress", fa::wordpress);
782 m.insert("wrench", fa::wrench);
783 m.insert("xing", fa::xing);
784 m.insert("xingsquare", fa::xingsquare);
785 m.insert("yahoo", fa::yahoo);
786 m.insert("yelp", fa::yelp);
787 m.insert("yen", fa::yen);
788 m.insert("youtube", fa::youtube);
789 m.insert("youtubeplay", fa::youtubeplay);
790 m.insert("youtubesquare", fa::youtubesquare);
791
792 return true;
793 }
794
addNamedCodepoint(const QString & name,int codePoint)795 void QtAwesome::addNamedCodepoint( const QString& name, int codePoint)
796 {
797 namedCodepoints_.insert( name, codePoint);
798 }
799
800
801 /// Sets a default option. These options are passed on to the icon painters
setDefaultOption(const QString & name,const QVariant & value)802 void QtAwesome::setDefaultOption(const QString& name, const QVariant& value)
803 {
804 defaultOptions_.insert( name, value );
805 }
806
807
808 /// Returns the default option for the given name
defaultOption(const QString & name)809 QVariant QtAwesome::defaultOption(const QString& name)
810 {
811 return defaultOptions_.value( name );
812 }
813
814
815 // internal helper method to merge to option amps
mergeOptions(const QVariantMap & defaults,const QVariantMap & override)816 static QVariantMap mergeOptions( const QVariantMap& defaults, const QVariantMap& override )
817 {
818 QVariantMap result= defaults;
819 if( !override.isEmpty() ) {
820 QMapIterator<QString,QVariant> itr(override);
821 while( itr.hasNext() ) {
822 itr.next();
823 result.insert( itr.key(), itr.value() );
824 }
825 }
826 return result;
827 }
828
829
830 /// Creates an icon with the given code-point
831 /// <code>
832 /// awesome->icon( icon_group )
833 /// </code>
icon(int character,const QVariantMap & options)834 QIcon QtAwesome::icon(int character, const QVariantMap &options)
835 {
836 // create a merged QVariantMap to have default options and icon-specific options
837 QVariantMap optionMap = mergeOptions( defaultOptions_, options );
838 optionMap.insert("text", QString( QChar(static_cast<int>(character)) ) );
839
840 return icon( fontIconPainter_, optionMap );
841 }
842
843
844
845 /// Creates an icon with the given name
846 ///
847 /// You can use the icon names as defined on http://fortawesome.github.io/Font-Awesome/design.html withour the 'icon-' prefix
848 /// @param name the name of the icon
849 /// @param options extra option to pass to the icon renderer
icon(const QString & name,const QVariantMap & options)850 QIcon QtAwesome::icon(const QString& name, const QVariantMap& options)
851 {
852 // when it's a named codepoint
853 if( namedCodepoints_.count(name) ) {
854 return icon( namedCodepoints_.value(name), options );
855 }
856
857
858 // create a merged QVariantMap to have default options and icon-specific options
859 QVariantMap optionMap = mergeOptions( defaultOptions_, options );
860
861 // this method first tries to retrieve the icon
862 QtAwesomeIconPainter* painter = painterMap_.value(name);
863 if( !painter ) {
864 return QIcon();
865 }
866
867 return icon( painter, optionMap );
868 }
869
870 /// Create a dynamic icon by simlpy supplying a painter object
871 /// The ownership of the painter is NOT transfered.
872 /// @param painter a dynamic painter that is going to paint the icon
873 /// @param optionmap the options to pass to the painter
icon(QtAwesomeIconPainter * painter,const QVariantMap & optionMap)874 QIcon QtAwesome::icon(QtAwesomeIconPainter* painter, const QVariantMap& optionMap )
875 {
876 // Warning, when you use memoryleak detection. You should turn it of for the next call
877 // QIcon's placed in gui items are often cached and not deleted when my memory-leak detection checks for leaks.
878 // I'm not sure if it's a Qt bug or something I do wrong
879 QtAwesomeIconPainterIconEngine* engine = new QtAwesomeIconPainterIconEngine( this, painter, optionMap );
880 return QIcon( engine );
881 }
882
883 /// Adds a named icon-painter to the QtAwesome icon map
884 /// As the name applies the ownership is passed over to QtAwesome
885 ///
886 /// @param name the name of the icon
887 /// @param painter the icon painter to add for this name
give(const QString & name,QtAwesomeIconPainter * painter)888 void QtAwesome::give(const QString& name, QtAwesomeIconPainter* painter)
889 {
890 delete painterMap_.value( name ); // delete the old one
891 painterMap_.insert( name, painter );
892 }
893
894 /// Creates/Gets the icon font with a given size in pixels. This can be usefull to use a label for displaying icons
895 /// Example:
896 ///
897 /// QLabel* label = new QLabel( QChar( icon_group ) );
898 /// label->setFont( awesome->font(16) )
font(int size)899 QFont QtAwesome::font( int size )
900 {
901 QFont font( fontName_);
902 font.setPixelSize(size);
903 return font;
904 }
905