summaryrefslogtreecommitdiff
path: root/lib/nes/app/graphics/renderer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/nes/app/graphics/renderer.cc')
-rw-r--r--lib/nes/app/graphics/renderer.cc80
1 files changed, 79 insertions, 1 deletions
diff --git a/lib/nes/app/graphics/renderer.cc b/lib/nes/app/graphics/renderer.cc
index 1a4dc4d..6a45b6c 100644
--- a/lib/nes/app/graphics/renderer.cc
+++ b/lib/nes/app/graphics/renderer.cc
@@ -3,6 +3,7 @@
#include "nes/app/graphics/mask-tile.hh"
#include "nes/app/graphics/image-tile.hh"
#include "nes/app/graphics/image-view.hh"
+#include "nes/app/graphics/tiles/characters.hh"
#include "nes/common/display.hh"
namespace nes::app
@@ -55,11 +56,20 @@ namespace nes::app
{
for (auto x_img = u32{ 0 }; x_img < image.get_width(); ++x_img)
{
- render_image_tile(x + x_img, y + y_img, image.get(x, y));
+ render_image_tile(x + x_img, y + y_img, image.get(x_img, y_img));
}
}
}
+ auto renderer::render_text(u32 const x, u32 const y, std::string_view const str, color const c) -> void
+ {
+ for (auto i = u32{ 0 }; i < str.size(); ++i)
+ {
+ auto const character = str[i];
+ render_mask_tile(x + i, y, resolve_character(str[i]), c);
+ }
+ }
+
auto renderer::render_rect(
u32 const x, u32 const y, u32 const width, u32 const height, color const c) -> void
{
@@ -101,4 +111,72 @@ namespace nes::app
return rgb::from_hex(0x000000);
}
+
+ auto renderer::resolve_character(u32 const c) const -> mask_tile
+ {
+ switch (c)
+ {
+ case ' ': return mask_tile{};
+ case 'a': case 'A': return tiles::letter_a;
+ case 'b': case 'B': return tiles::letter_b;
+ case 'c': case 'C': return tiles::letter_c;
+ case 'd': case 'D': return tiles::letter_d;
+ case 'e': case 'E': return tiles::letter_e;
+ case 'f': case 'F': return tiles::letter_f;
+ case 'g': case 'G': return tiles::letter_g;
+ case 'h': case 'H': return tiles::letter_h;
+ case 'i': case 'I': return tiles::letter_i;
+ case 'j': case 'J': return tiles::letter_j;
+ case 'k': case 'K': return tiles::letter_k;
+ case 'l': case 'L': return tiles::letter_l;
+ case 'm': case 'M': return tiles::letter_m;
+ case 'n': case 'N': return tiles::letter_n;
+ case 'o': case 'O': return tiles::letter_o;
+ case 'p': case 'P': return tiles::letter_p;
+ case 'q': case 'Q': return tiles::letter_q;
+ case 'r': case 'R': return tiles::letter_r;
+ case 's': case 'S': return tiles::letter_s;
+ case 't': case 'T': return tiles::letter_t;
+ case 'u': case 'U': return tiles::letter_u;
+ case 'v': case 'V': return tiles::letter_v;
+ case 'w': case 'W': return tiles::letter_w;
+ case 'x': case 'X': return tiles::letter_x;
+ case 'y': case 'Y': return tiles::letter_y;
+ case 'z': case 'Z': return tiles::letter_z;
+ case '0': return tiles::digit_0;
+ case '1': return tiles::digit_1;
+ case '2': return tiles::digit_2;
+ case '3': return tiles::digit_3;
+ case '4': return tiles::digit_4;
+ case '5': return tiles::digit_5;
+ case '6': return tiles::digit_6;
+ case '7': return tiles::digit_7;
+ case '8': return tiles::digit_8;
+ case '9': return tiles::digit_9;
+ case '&': return tiles::symbol_ampersand;
+ case '\'': return tiles::symbol_apostrophe;
+ case '[': return tiles::symbol_bracket_open;
+ case ']': return tiles::symbol_bracket_close;
+ case ':': return tiles::symbol_colon;
+ case ',': return tiles::symbol_comma;
+ case '$': return tiles::symbol_dollar;
+ case '=': return tiles::symbol_equal;
+ case '!': return tiles::symbol_exclamation_mark;
+ case '>': return tiles::symbol_greater;
+ case '#': return tiles::symbol_hashtag;
+ case '<': return tiles::symbol_less;
+ case '-': return tiles::symbol_minus;
+ case '(': return tiles::symbol_paren_open;
+ case ')': return tiles::symbol_paren_close;
+ case '%': return tiles::symbol_percent;
+ case '.': return tiles::symbol_period;
+ case '+': return tiles::symbol_plus;
+ case '?': return tiles::symbol_question_mark;
+ case '"': return tiles::symbol_quotation_mark;
+ case ';': return tiles::symbol_semicolon;
+ case '/': return tiles::symbol_slash;
+ case '*': return tiles::symbol_star;
+ default: return tiles::symbol_unknown;
+ }
+ }
} // namespace nes::app \ No newline at end of file