diff --git a/OBJECTS b/OBJECTS index 4213de3..d34239e 100644 --- a/OBJECTS +++ b/OBJECTS @@ -1,5 +1,9 @@ TARGET = main -SRC = col.cpp hal.cpp main.cpp example.cpp gfx/screen.cpp gfx/canvas.cpp gfx/font.cpp +SRC = col.cpp hal.cpp main.cpp example.cpp + +SRC += gfx/screen.cpp gfx/canvas.cpp gfx/font.cpp + +SRC += fonts/basic_5x4.cpp SRCDIR = src INCDIR = inc diff --git a/inc/fonts/basic_5x4.h b/inc/fonts/basic_5x4.h new file mode 100644 index 0000000..a011b45 --- /dev/null +++ b/inc/fonts/basic_5x4.h @@ -0,0 +1,12 @@ +// +// Created by jedi on 11/2/18. +// + +#ifndef MGL_DMXMENU_BASIC_5X4_H +#define MGL_DMXMENU_BASIC_5X4_H + +#include "gfx/font.h" + +extern font basic_5x4; + +#endif //MGL_DMXMENU_BASIC_5X4_H diff --git a/inc/gfx/canvas.h b/inc/gfx/canvas.h index a3213b1..e672529 100644 --- a/inc/gfx/canvas.h +++ b/inc/gfx/canvas.h @@ -7,6 +7,7 @@ #include "hal.h" #include "gfx/font.h" +#include "fonts/basic_5x4.h" class canvas { private: @@ -23,23 +24,11 @@ public: } void print(int x, int y, const char *str) { - for (int i = 0; str[i]; i++) { - int j = (str[i] - ' ') % 32; - for (int x_ = 0; x_ < 4; x_++) - for (int y_ = 0; y_ < 5; y_++) - if (testFont[j][x_ + 4 * y_]) - draw(x + i * 5 + x_, y + y_); - } + basic_5x4.print(x, y, str, *this); } void print(int x, int y, char *str) { - for (int i = 0; str[i]; i++) { - int j = (str[i] - ' ') % 32; - for (int x_ = 0; x_ < 4; x_++) - for (int y_ = 0; y_ < 5; y_++) - if (testFont[j][x_ + 4 * y_]) - draw(x + i * 5 + x_, y + y_); - } + basic_5x4.print(x, y, str, *this); } }; diff --git a/inc/gfx/font.h b/inc/gfx/font.h index 76a321b..7b2dfaa 100644 --- a/inc/gfx/font.h +++ b/inc/gfx/font.h @@ -5,12 +5,18 @@ #ifndef MGL_DMXMENU_FONT_H #define MGL_DMXMENU_FONT_H - +class canvas; class font { - +public: + typedef const bool raw_font[32][20]; +private: + raw_font& raw_data_; +public: + font(raw_font&); + void print(int x, int y, char c, canvas&); + void print(int x, int y, char* str, canvas&); + void print(int x, int y, const char* str, canvas&); }; -extern bool testFont[32][20]; - #endif //MGL_DMXMENU_FONT_H diff --git a/inc/hal.h b/inc/hal.h index d2fbe7c..3eb0af0 100644 --- a/inc/hal.h +++ b/inc/hal.h @@ -15,6 +15,7 @@ void hal_init(); void hal_draw(int x, int y); void hal_print(int x, int y, const char* str); void render(Layout&); +void hal_render(); void quit(); extern bool input[4]; diff --git a/src/fonts/basic_5x4.cpp b/src/fonts/basic_5x4.cpp new file mode 100644 index 0000000..f761c3e --- /dev/null +++ b/src/fonts/basic_5x4.cpp @@ -0,0 +1,172 @@ +// +// Created by jedi on 11/2/18. +// + +#include "fonts/basic_5x4.h" + +const bool basic_5x4_raw[32][20] = { + //0 + {0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0}, + //A + {0,1,1,0, + 1,0,0,1, + 1,0,0,1, + 1,1,1,1, + 1,0,0,1}, + //B + {1,1,1,0, + 1,0,0,1, + 1,1,1,0, + 1,0,0,1, + 1,1,1,0}, + //C + {0,1,1,0, + 1,0,0,1, + 1,0,0,0, + 1,0,0,1, + 0,1,1,0}, + //D + {1,1,1,0, + 1,0,0,1, + 1,0,0,1, + 1,0,0,1, + 1,1,1,0}, + //E + {1,1,1,1, + 1,0,0,0, + 1,1,1,0, + 1,0,0,0, + 1,1,1,1}, + //F + {1,1,1,1, + 1,0,0,0, + 1,1,1,0, + 1,0,0,0, + 1,0,0,0}, + //G + {0,1,1,1, + 1,0,0,0, + 1,0,1,1, + 1,0,0,1, + 0,1,1,1}, + //H + {1,0,0,1, + 1,0,0,1, + 1,1,1,1, + 1,0,0,1, + 1,0,0,1}, + //I + {1,1,1,0, + 0,1,0,0, + 0,1,0,0, + 0,1,0,0, + 1,1,1,0}, + //J + {1,1,1,1, + 0,0,0,1, + 0,0,0,1, + 0,0,0,1, + 1,1,1,0}, + //K + {1,0,0,1, + 1,0,1,0, + 1,1,0,0, + 1,0,1,0, + 1,0,0,1}, + //L + {1,0,0,0, + 1,0,0,0, + 1,0,0,0, + 1,0,0,0, + 1,1,1,1}, + //M + {1,0,0,1, + 1,1,1,1, + 1,1,1,1, + 1,0,0,1, + 1,0,0,1}, + //N + {1,0,0,1, + 1,1,0,1, + 1,0,1,1, + 1,0,0,1, + 1,0,0,1}, + //O + {0,1,1,0, + 1,0,0,1, + 1,0,0,1, + 1,0,0,1, + 0,1,1,0}, + //P + {1,1,1,0, + 1,0,0,1, + 1,0,0,1, + 1,1,1,0, + 1,0,0,0}, + //Q + {0,1,1,0, + 1,0,0,1, + 1,0,0,1, + 1,0,1,1, + 0,1,1,1}, + //R + {1,1,1,0, + 1,0,0,1, + 1,0,0,1, + 1,1,1,0, + 1,0,0,1}, + //S + {0,1,1,1, + 1,0,0,0, + 0,1,1,0, + 0,0,0,1, + 1,1,1,0}, + //T + {1,1,1,1, + 0,0,1,0, + 0,0,1,0, + 0,0,1,0, + 0,0,1,0}, + //U + {1,0,0,1, + 1,0,0,1, + 1,0,0,1, + 1,0,0,1, + 0,1,1,0}, + //V + {1,0,0,1, + 1,0,0,1, + 1,0,1,0, + 1,0,1,0, + 0,1,0,0}, + //W + {1,0,0,1, + 1,0,0,1, + 1,1,1,1, + 1,1,1,1, + 0,1,1,0}, + //X + {1,0,0,1, + 1,0,0,1, + 0,1,1,0, + 1,0,0,1, + 1,0,0,1}, + //Y + {1,0,0,1, + 1,0,0,1, + 0,1,1,1, + 0,0,0,1, + 1,1,1,0}, + //Z + {1,1,1,1, + 0,0,0,1, + 0,1,1,0, + 1,0,0,0, + 1,1,1,1}, +}; + +font basic_5x4(basic_5x4_raw); diff --git a/src/gfx/font.cpp b/src/gfx/font.cpp index 1cd5246..5049fd9 100644 --- a/src/gfx/font.cpp +++ b/src/gfx/font.cpp @@ -3,168 +3,29 @@ // #include "gfx/font.h" +#include "gfx/canvas.h" -bool testFont[32][20] = { - //0 - {0,0,0,0, - 0,0,0,0, - 0,0,0,0, - 0,0,0,0, - 0,0,0,0}, - //A - {0,1,1,0, - 1,0,0,1, - 1,0,0,1, - 1,1,1,1, - 1,0,0,1}, - //B - {1,1,1,0, - 1,0,0,1, - 1,1,1,0, - 1,0,0,1, - 1,1,1,0}, - //C - {0,1,1,0, - 1,0,0,1, - 1,0,0,0, - 1,0,0,1, - 0,1,1,0}, - //D - {1,1,1,0, - 1,0,0,1, - 1,0,0,1, - 1,0,0,1, - 1,1,1,0}, - //E - {1,1,1,1, - 1,0,0,0, - 1,1,1,0, - 1,0,0,0, - 1,1,1,1}, - //F - {1,1,1,1, - 1,0,0,0, - 1,1,1,0, - 1,0,0,0, - 1,0,0,0}, - //G - {0,1,1,1, - 1,0,0,0, - 1,0,1,1, - 1,0,0,1, - 0,1,1,1}, - //H - {1,0,0,1, - 1,0,0,1, - 1,1,1,1, - 1,0,0,1, - 1,0,0,1}, - //I - {1,1,1,0, - 0,1,0,0, - 0,1,0,0, - 0,1,0,0, - 1,1,1,0}, - //J - {1,1,1,1, - 0,0,0,1, - 0,0,0,1, - 0,0,0,1, - 1,1,1,0}, - //K - {1,0,0,1, - 1,0,1,0, - 1,1,0,0, - 1,0,1,0, - 1,0,0,1}, - //L - {1,0,0,0, - 1,0,0,0, - 1,0,0,0, - 1,0,0,0, - 1,1,1,1}, - //M - {1,0,0,1, - 1,1,1,1, - 1,1,1,1, - 1,0,0,1, - 1,0,0,1}, - //N - {1,0,0,1, - 1,1,0,1, - 1,0,1,1, - 1,0,0,1, - 1,0,0,1}, - //O - {0,1,1,0, - 1,0,0,1, - 1,0,0,1, - 1,0,0,1, - 0,1,1,0}, - //P - {1,1,1,0, - 1,0,0,1, - 1,0,0,1, - 1,1,1,0, - 1,0,0,0}, - //Q - {0,1,1,0, - 1,0,0,1, - 1,0,0,1, - 1,0,1,1, - 0,1,1,1}, - //R - {1,1,1,0, - 1,0,0,1, - 1,0,0,1, - 1,1,1,0, - 1,0,0,1}, - //S - {0,1,1,1, - 1,0,0,0, - 0,1,1,0, - 0,0,0,1, - 1,1,1,0}, - //T - {1,1,1,1, - 0,0,1,0, - 0,0,1,0, - 0,0,1,0, - 0,0,1,0}, - //U - {1,0,0,1, - 1,0,0,1, - 1,0,0,1, - 1,0,0,1, - 0,1,1,0}, - //V - {1,0,0,1, - 1,0,0,1, - 1,0,1,0, - 1,0,1,0, - 0,1,0,0}, - //W - {1,0,0,1, - 1,0,0,1, - 1,1,1,1, - 1,1,1,1, - 0,1,1,0}, - //X - {1,0,0,1, - 1,0,0,1, - 0,1,1,0, - 1,0,0,1, - 1,0,0,1}, - //Y - {1,0,0,1, - 1,0,0,1, - 0,1,1,1, - 0,0,0,1, - 1,1,1,0}, - //Z - {1,1,1,1, - 0,0,0,1, - 0,1,1,0, - 1,0,0,0, - 1,1,1,1}, -}; + + +font::font(raw_font& raw ):raw_data_(raw){ +} + +void font::print(int x, int y, char l, canvas& c) { + int j = (l - ' ') % 32; + for (int x_ = 0; x_ < 4; x_++) + for (int y_ = 0; y_ < 5; y_++) + if (raw_data_[j][x_ + 4 * y_]) + c.draw(x + x_, y + y_); +} + +void font::print(int x, int y, char* str, canvas& c) { + for (int i = 0; str[i]; i++) { + print(x + i * 5,y,str[i],c); + } +} + +void font::print(int x, int y, const char* str, canvas& c) { + for (int i = 0; str[i]; i++) { + print(x + i * 5,y,str[i],c); + } +} \ No newline at end of file diff --git a/src/hal/avr.cpp b/src/hal/avr.cpp index 780d83b..e676ecf 100644 --- a/src/hal/avr.cpp +++ b/src/hal/avr.cpp @@ -14,6 +14,7 @@ void hal_init(){ ssd1306_fillScreen( 0x00 ); //ssd1306_setFixedFont(ssd1306xled_font6x8); ssd1306_setFixedFont(ssd1306xled_font5x7); + canvas.clear(); } void hal_draw(int x, int y){ @@ -44,6 +45,10 @@ void render(Layout& layout) { } } +void hal_render(){ + canvas.blt(0, 0); +} + void * operator new(unsigned int size) { return malloc(size); diff --git a/src/main.cpp b/src/main.cpp index ab0e8d8..8b41a8d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -83,6 +83,8 @@ int main() { SDL_DestroyWindow(window); SDL_Quit(); +#else + hal_render(); #endif return 0; }