Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
fonts/EAFont.cpp@7:6cf21b018420, 2010-11-01 (annotated)
- Committer:
- richardparker
- Date:
- Mon Nov 01 13:07:40 2010 +0000
- Revision:
- 7:6cf21b018420
Embedded Artists LCD panel:- Version 0.7
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| richardparker | 7:6cf21b018420 | 1 | // Copyright 2010 Richard Parker |
| richardparker | 7:6cf21b018420 | 2 | |
| richardparker | 7:6cf21b018420 | 3 | #include "mbed.h" |
| richardparker | 7:6cf21b018420 | 4 | #include "EAFont.h" |
| richardparker | 7:6cf21b018420 | 5 | |
| richardparker | 7:6cf21b018420 | 6 | #include "EAFontCache.h" |
| richardparker | 7:6cf21b018420 | 7 | #include "EAFontCacheEntry.h" |
| richardparker | 7:6cf21b018420 | 8 | #include "../screen/EALCD.h" |
| richardparker | 7:6cf21b018420 | 9 | #include "../images/EAImage.h" |
| richardparker | 7:6cf21b018420 | 10 | |
| richardparker | 7:6cf21b018420 | 11 | EAFont::EAFont() |
| richardparker | 7:6cf21b018420 | 12 | : _entry(NULL) |
| richardparker | 7:6cf21b018420 | 13 | { |
| richardparker | 7:6cf21b018420 | 14 | } |
| richardparker | 7:6cf21b018420 | 15 | |
| richardparker | 7:6cf21b018420 | 16 | EAFont::~EAFont() |
| richardparker | 7:6cf21b018420 | 17 | { |
| richardparker | 7:6cf21b018420 | 18 | // Return reference to characters. |
| richardparker | 7:6cf21b018420 | 19 | if (_entry != NULL) |
| richardparker | 7:6cf21b018420 | 20 | { |
| richardparker | 7:6cf21b018420 | 21 | EAFontCache::instance().returnCharacters(_entry); |
| richardparker | 7:6cf21b018420 | 22 | _entry = NULL; |
| richardparker | 7:6cf21b018420 | 23 | } |
| richardparker | 7:6cf21b018420 | 24 | } |
| richardparker | 7:6cf21b018420 | 25 | |
| richardparker | 7:6cf21b018420 | 26 | EAFont::EAFont(const EAFont& font) |
| richardparker | 7:6cf21b018420 | 27 | { |
| richardparker | 7:6cf21b018420 | 28 | // Do copy like this to ensure that the references in the cache are kept up-to-date. |
| richardparker | 7:6cf21b018420 | 29 | if (font._entry != NULL) |
| richardparker | 7:6cf21b018420 | 30 | { |
| richardparker | 7:6cf21b018420 | 31 | _entry = EAFontCache::instance().getCharacters(font._entry->path()); |
| richardparker | 7:6cf21b018420 | 32 | } else { |
| richardparker | 7:6cf21b018420 | 33 | _entry = NULL; |
| richardparker | 7:6cf21b018420 | 34 | } |
| richardparker | 7:6cf21b018420 | 35 | } |
| richardparker | 7:6cf21b018420 | 36 | |
| richardparker | 7:6cf21b018420 | 37 | EAFont& EAFont::operator=(const EAFont& font) |
| richardparker | 7:6cf21b018420 | 38 | { |
| richardparker | 7:6cf21b018420 | 39 | if (&font == this) |
| richardparker | 7:6cf21b018420 | 40 | { |
| richardparker | 7:6cf21b018420 | 41 | return *this; |
| richardparker | 7:6cf21b018420 | 42 | } |
| richardparker | 7:6cf21b018420 | 43 | |
| richardparker | 7:6cf21b018420 | 44 | // Return the current entry. |
| richardparker | 7:6cf21b018420 | 45 | if (_entry != NULL) |
| richardparker | 7:6cf21b018420 | 46 | { |
| richardparker | 7:6cf21b018420 | 47 | EAFontCache::instance().returnCharacters(_entry); |
| richardparker | 7:6cf21b018420 | 48 | _entry = NULL; |
| richardparker | 7:6cf21b018420 | 49 | } |
| richardparker | 7:6cf21b018420 | 50 | |
| richardparker | 7:6cf21b018420 | 51 | // Do copy like this to ensure that the references in the cache are kept up-to-date. |
| richardparker | 7:6cf21b018420 | 52 | if (font._entry != NULL) |
| richardparker | 7:6cf21b018420 | 53 | { |
| richardparker | 7:6cf21b018420 | 54 | _entry = EAFontCache::instance().getCharacters(font._entry->path()); |
| richardparker | 7:6cf21b018420 | 55 | } else { |
| richardparker | 7:6cf21b018420 | 56 | _entry = NULL; |
| richardparker | 7:6cf21b018420 | 57 | } |
| richardparker | 7:6cf21b018420 | 58 | |
| richardparker | 7:6cf21b018420 | 59 | return *this; |
| richardparker | 7:6cf21b018420 | 60 | } |
| richardparker | 7:6cf21b018420 | 61 | |
| richardparker | 7:6cf21b018420 | 62 | |
| richardparker | 7:6cf21b018420 | 63 | bool EAFont::load(const std::string& path) |
| richardparker | 7:6cf21b018420 | 64 | { |
| richardparker | 7:6cf21b018420 | 65 | if (path.empty() == true) |
| richardparker | 7:6cf21b018420 | 66 | { |
| richardparker | 7:6cf21b018420 | 67 | // Invalid path passed in. |
| richardparker | 7:6cf21b018420 | 68 | return false; |
| richardparker | 7:6cf21b018420 | 69 | } |
| richardparker | 7:6cf21b018420 | 70 | |
| richardparker | 7:6cf21b018420 | 71 | // Return entry if needed. |
| richardparker | 7:6cf21b018420 | 72 | if (_entry != NULL) |
| richardparker | 7:6cf21b018420 | 73 | { |
| richardparker | 7:6cf21b018420 | 74 | EAFontCache::instance().returnCharacters(_entry); |
| richardparker | 7:6cf21b018420 | 75 | _entry = NULL; |
| richardparker | 7:6cf21b018420 | 76 | } |
| richardparker | 7:6cf21b018420 | 77 | |
| richardparker | 7:6cf21b018420 | 78 | // Load font descriptor into look up table. |
| richardparker | 7:6cf21b018420 | 79 | _entry = EAFontCache::instance().getCharacters(path); |
| richardparker | 7:6cf21b018420 | 80 | |
| richardparker | 7:6cf21b018420 | 81 | if (_entry == NULL) |
| richardparker | 7:6cf21b018420 | 82 | { |
| richardparker | 7:6cf21b018420 | 83 | return false; |
| richardparker | 7:6cf21b018420 | 84 | } |
| richardparker | 7:6cf21b018420 | 85 | |
| richardparker | 7:6cf21b018420 | 86 | return true; |
| richardparker | 7:6cf21b018420 | 87 | } |
| richardparker | 7:6cf21b018420 | 88 | |
| richardparker | 7:6cf21b018420 | 89 | bool EAFont::isValid() const |
| richardparker | 7:6cf21b018420 | 90 | { |
| richardparker | 7:6cf21b018420 | 91 | return (_entry != NULL); |
| richardparker | 7:6cf21b018420 | 92 | } |
| richardparker | 7:6cf21b018420 | 93 | |
| richardparker | 7:6cf21b018420 | 94 | bool EAFont::_getCharacter(char c, EACharacter& detail) |
| richardparker | 7:6cf21b018420 | 95 | { |
| richardparker | 7:6cf21b018420 | 96 | if (_entry == NULL) |
| richardparker | 7:6cf21b018420 | 97 | { |
| richardparker | 7:6cf21b018420 | 98 | return false; |
| richardparker | 7:6cf21b018420 | 99 | } |
| richardparker | 7:6cf21b018420 | 100 | |
| richardparker | 7:6cf21b018420 | 101 | for (int i = 0; i < _entry->noChars(); i++) |
| richardparker | 7:6cf21b018420 | 102 | { |
| richardparker | 7:6cf21b018420 | 103 | if (_entry->chars()[i].id == c) |
| richardparker | 7:6cf21b018420 | 104 | { |
| richardparker | 7:6cf21b018420 | 105 | detail = _entry->chars()[i]; |
| richardparker | 7:6cf21b018420 | 106 | return true; |
| richardparker | 7:6cf21b018420 | 107 | } |
| richardparker | 7:6cf21b018420 | 108 | } |
| richardparker | 7:6cf21b018420 | 109 | |
| richardparker | 7:6cf21b018420 | 110 | return false; |
| richardparker | 7:6cf21b018420 | 111 | } |
| richardparker | 7:6cf21b018420 | 112 | |
| richardparker | 7:6cf21b018420 | 113 | bool EAFont::_data(EAImage& image) |
| richardparker | 7:6cf21b018420 | 114 | { |
| richardparker | 7:6cf21b018420 | 115 | if (_entry == NULL) |
| richardparker | 7:6cf21b018420 | 116 | { |
| richardparker | 7:6cf21b018420 | 117 | return false; |
| richardparker | 7:6cf21b018420 | 118 | } |
| richardparker | 7:6cf21b018420 | 119 | |
| richardparker | 7:6cf21b018420 | 120 | image = _entry->data(); |
| richardparker | 7:6cf21b018420 | 121 | |
| richardparker | 7:6cf21b018420 | 122 | return true; |
| richardparker | 7:6cf21b018420 | 123 | } |
| richardparker | 7:6cf21b018420 | 124 |