diff --git a/examples/pico_explorer/CMakeLists.txt b/examples/pico_explorer/CMakeLists.txt index fa32b9d6..02238a31 100644 --- a/examples/pico_explorer/CMakeLists.txt +++ b/examples/pico_explorer/CMakeLists.txt @@ -9,4 +9,13 @@ add_resource(explorer fox.tga) target_link_libraries(explorer pico_stdlib pico_explorer msa301) # create map/bin/hex file etc. -pico_add_extra_outputs(explorer) \ No newline at end of file +pico_add_extra_outputs(explorer) + +add_executable( + text_demo + text_demo.cpp +) + +target_link_libraries(text_demo pico_stdlib pico_explorer msa301) + +pico_add_extra_outputs(text_demo) \ No newline at end of file diff --git a/examples/pico_explorer/text_demo.cpp b/examples/pico_explorer/text_demo.cpp new file mode 100644 index 00000000..15a67cfb --- /dev/null +++ b/examples/pico_explorer/text_demo.cpp @@ -0,0 +1,37 @@ +#include +#include +#include +#include + +#include "pico_explorer.hpp" +#include "font8_data.hpp" +#include "msa301.hpp" + +using namespace pimoroni; + +extern unsigned char _binary_fox_tga_start[]; + +uint16_t buffer[PicoExplorer::WIDTH * PicoExplorer::HEIGHT]; +PicoExplorer pico_explorer(buffer); +MSA301 msa301; + +int main() { + pico_explorer.init(); + pico_explorer.set_font(&font8); + msa301.init(); + + uint32_t i = 0; + while(true) { + pico_explorer.set_pen(120, 40, 60); + pico_explorer.clear(); + + pico_explorer.set_pen(255, 255, 255); + pico_explorer.text("Hello World. How are you today?", Point(10, 190), 100); + + pico_explorer.update(); + + i++; + } + + return 0; +} diff --git a/libraries/pico_graphics/CMakeLists.txt b/libraries/pico_graphics/CMakeLists.txt index 535785e6..df147cc0 100644 --- a/libraries/pico_graphics/CMakeLists.txt +++ b/libraries/pico_graphics/CMakeLists.txt @@ -1 +1 @@ -include(pico_graphics.cmake) \ No newline at end of file +include(pico_graphics.cmake) diff --git a/libraries/pico_graphics/font.hpp b/libraries/pico_graphics/font.hpp new file mode 100644 index 00000000..876f9eff --- /dev/null +++ b/libraries/pico_graphics/font.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include + +namespace pimoroni { + struct Font { + const uint8_t height; + const uint8_t max_width; + const uint8_t widths[96]; + const uint8_t data[]; + }; +} \ No newline at end of file diff --git a/libraries/pico_graphics/font6_data.hpp b/libraries/pico_graphics/font6_data.hpp new file mode 100644 index 00000000..4a0c3214 --- /dev/null +++ b/libraries/pico_graphics/font6_data.hpp @@ -0,0 +1,114 @@ +#pragma once + +#include "font.hpp" + +const pimoroni::Font font6 { + .height = 6, + .max_width = 6, + .widths = { + 3, 2, 4, 6, 6, 6, 7, 2, 3, 3, 4, 4, 2, 4, 2, 4, + 6, 3, 5, 5, 6, 5, 6, 6, 6, 6, 2, 2, 4, 4, 4, 5, + 7, 6, 6, 5, 6, 5, 5, 6, 5, 4, 5, 5, 5, 6, 6, 6, + 6, 6, 6, 5, 6, 6, 6, 6, 5, 5, 5, 3, 4, 3, 4, 4, + 3, 6, 6, 5, 6, 5, 5, 6, 5, 4, 5, 5, 5, 6, 6, 6, + 6, 6, 6, 5, 6, 6, 6, 6, 5, 5, 5, 4, 2, 4, 4, 2 + }, + .data = { + 0x00,0x00,0x00,0x00,0x00,0x00, // + 0x2e,0x00,0x00,0x00,0x00,0x00, // ! + 0x06,0x00,0x06,0x00,0x00,0x00, // " + 0x14,0x3e,0x14,0x3e,0x14,0x00, // # + 0x04,0x2a,0x3e,0x2a,0x10,0x00, // $ + 0x22,0x10,0x08,0x04,0x22,0x00, // % + 0x14,0x2a,0x2a,0x2c,0x10,0x28, // & + 0x06,0x00,0x00,0x00,0x00,0x00, // ' + 0x1c,0x22,0x00,0x00,0x00,0x00, // ( + 0x22,0x1c,0x00,0x00,0x00,0x00, // ) + 0x14,0x08,0x14,0x00,0x00,0x00, // * + 0x08,0x1c,0x08,0x00,0x00,0x00, // + + 0x60,0x00,0x00,0x00,0x00,0x00, // , + 0x08,0x08,0x08,0x00,0x00,0x00, // - + 0x20,0x00,0x00,0x00,0x00,0x00, // . + 0x30,0x0c,0x02,0x00,0x00,0x00, // / + 0x1c,0x22,0x22,0x22,0x1e,0x00, // 0 + 0x02,0x3e,0x00,0x00,0x00,0x00, // 1 + 0x32,0x2a,0x2a,0x24,0x00,0x00, // 2 + 0x2a,0x2a,0x2a,0x16,0x00,0x00, // 3 + 0x0e,0x10,0x10,0x3e,0x10,0x00, // 4 + 0x2e,0x2a,0x2a,0x12,0x00,0x00, // 5 + 0x3c,0x2a,0x2a,0x2a,0x12,0x00, // 6 + 0x06,0x02,0x22,0x12,0x0e,0x00, // 7 + 0x14,0x2a,0x2a,0x2a,0x16,0x00, // 8 + 0x04,0x2a,0x2a,0x2a,0x1e,0x00, // 9 + 0x24,0x00,0x00,0x00,0x00,0x00, // : + 0x64,0x00,0x00,0x00,0x00,0x00, // ; + 0x08,0x14,0x22,0x00,0x00,0x00, // < + 0x14,0x14,0x14,0x00,0x00,0x00, // = + 0x22,0x14,0x08,0x00,0x00,0x00, // > + 0x02,0x2a,0x0a,0x04,0x00,0x00, // ? + 0x3c,0x02,0x1a,0x2a,0x22,0x1e, // @ + 0x3c,0x12,0x12,0x12,0x3e,0x00, // A + 0x3c,0x2a,0x2a,0x2e,0x10,0x00, // B + 0x1c,0x22,0x22,0x22,0x00,0x00, // C + 0x3c,0x22,0x22,0x22,0x1c,0x00, // D + 0x3c,0x2a,0x2a,0x2a,0x00,0x00, // E + 0x3c,0x12,0x12,0x12,0x00,0x00, // F + 0x3c,0x22,0x22,0x2a,0x1a,0x00, // G + 0x3e,0x08,0x08,0x3e,0x00,0x00, // H + 0x22,0x3e,0x22,0x00,0x00,0x00, // I + 0x30,0x22,0x22,0x1e,0x00,0x00, // J + 0x3e,0x08,0x0c,0x32,0x00,0x00, // K + 0x3e,0x20,0x20,0x20,0x00,0x00, // L + 0x3c,0x02,0x3c,0x02,0x3c,0x00, // M + 0x3c,0x02,0x02,0x02,0x3e,0x00, // N + 0x1c,0x22,0x22,0x22,0x1e,0x00, // O + 0x3c,0x12,0x12,0x12,0x0e,0x00, // P + 0x1c,0x22,0x22,0x62,0x1e,0x00, // Q + 0x3c,0x12,0x12,0x32,0x0e,0x00, // R + 0x24,0x2a,0x2a,0x12,0x00,0x00, // S + 0x02,0x02,0x3e,0x02,0x02,0x00, // T + 0x1e,0x20,0x20,0x20,0x1e,0x00, // U + 0x0e,0x10,0x20,0x10,0x0e,0x00, // V + 0x3e,0x20,0x1e,0x20,0x1e,0x00, // W + 0x36,0x08,0x08,0x36,0x00,0x00, // X + 0x26,0x28,0x28,0x1e,0x00,0x00, // Y + 0x32,0x2a,0x2a,0x26,0x00,0x00, // Z + 0x3e,0x22,0x00,0x00,0x00,0x00, // [ + 0x02,0x0c,0x30,0x00,0x00,0x00, // "\" + 0x22,0x3e,0x00,0x00,0x00,0x00, // ] + 0x04,0x02,0x04,0x00,0x00,0x00, // ^ + 0x20,0x20,0x20,0x00,0x00,0x00, // _ + 0x02,0x04,0x00,0x00,0x00,0x00, // ` + 0x3c,0x12,0x12,0x12,0x3e,0x00, // a + 0x3c,0x2a,0x2a,0x2e,0x10,0x00, // b + 0x1c,0x22,0x22,0x22,0x00,0x00, // c + 0x3c,0x22,0x22,0x22,0x1c,0x00, // d + 0x3c,0x2a,0x2a,0x2a,0x00,0x00, // e + 0x3c,0x12,0x12,0x12,0x00,0x00, // f + 0x3c,0x22,0x22,0x2a,0x1a,0x00, // g + 0x3e,0x08,0x08,0x3e,0x00,0x00, // h + 0x22,0x3e,0x22,0x00,0x00,0x00, // i + 0x30,0x22,0x22,0x1e,0x00,0x00, // j + 0x3e,0x08,0x0c,0x32,0x00,0x00, // k + 0x3e,0x20,0x20,0x20,0x00,0x00, // l + 0x3c,0x02,0x3c,0x02,0x3e,0x00, // m + 0x3c,0x02,0x02,0x02,0x3e,0x00, // n + 0x1c,0x22,0x22,0x22,0x1e,0x00, // o + 0x3c,0x12,0x12,0x12,0x0e,0x00, // p + 0x1c,0x22,0x22,0x62,0x1e,0x00, // q + 0x3c,0x12,0x12,0x32,0x0e,0x00, // r + 0x24,0x2a,0x2a,0x12,0x00,0x00, // s + 0x02,0x02,0x3e,0x02,0x02,0x00, // t + 0x1e,0x20,0x20,0x20,0x1e,0x00, // u + 0x0e,0x10,0x20,0x10,0x0e,0x00, // v + 0x3e,0x20,0x1e,0x20,0x1e,0x00, // w + 0x36,0x08,0x08,0x36,0x00,0x00, // x + 0x26,0x28,0x28,0x1e,0x00,0x00, // y + 0x32,0x2a,0x2a,0x26,0x00,0x00, // z + 0x08,0x3e,0x22,0x00,0x00,0x00, // 0x + 0x3e,0x00,0x00,0x00,0x00,0x00, // | + 0x22,0x3e,0x08,0x00,0x00,0x00, // } + 0x04,0x02,0x02,0x00,0x00,0x00, // ~ + 0x00,0x00,0x00,0x00,0x00,0x00 + } +}; \ No newline at end of file diff --git a/libraries/pico_graphics/font8_data.hpp b/libraries/pico_graphics/font8_data.hpp new file mode 100644 index 00000000..8a1948d3 --- /dev/null +++ b/libraries/pico_graphics/font8_data.hpp @@ -0,0 +1,114 @@ +#pragma once + +#include "font.hpp" + +const pimoroni::Font font8 { + .height = 8, + .max_width = 6, + .widths = { + 3, 2, 4, 6, 5, 5, 5, 2, 4, 4, 4, 4, 3, 4, 3, 5, + 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 2, 3, 4, 4, 4, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 6, 5, 5, + 5, 5, 5, 5, 6, 5, 5, 6, 5, 5, 5, 3, 5, 3, 4, 4, + 3, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 4, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 4, 2, 4, 5, 2 + }, + .data = { + 0x00,0x00,0x00,0x00,0x00,0x00, // + 0x5f,0x00,0x00,0x00,0x00,0x00, // ! + 0x03,0x00,0x03,0x00,0x00,0x00, // " + 0x28,0x7c,0x28,0x7c,0x28,0x00, // # + 0x24,0x7a,0x2f,0x12,0x00,0x00, // $ + 0x66,0x10,0x08,0x66,0x00,0x00, // % + 0x36,0x49,0x49,0x7c,0x00,0x00, // & + 0x03,0x00,0x00,0x00,0x00,0x00, // ' + 0x1c,0x22,0x41,0x00,0x00,0x00, // ( + 0x41,0x22,0x1c,0x00,0x00,0x00, // ) + 0x54,0x38,0x54,0x00,0x00,0x00, // * + 0x10,0x38,0x10,0x00,0x00,0x00, // + + 0x80,0x60,0x00,0x00,0x00,0x00, // , + 0x10,0x10,0x10,0x00,0x00,0x00, // - + 0x60,0x60,0x00,0x00,0x00,0x00, // . + 0x60,0x18,0x06,0x01,0x00,0x00, // / + 0x3e,0x41,0x41,0x3e,0x00,0x00, // 0 + 0x42,0x7f,0x40,0x00,0x00,0x00, // 1 + 0x61,0x51,0x49,0x46,0x00,0x00, // 2 + 0x21,0x49,0x4d,0x33,0x00,0x00, // 3 + 0x18,0x26,0x11,0x7f,0x00,0x00, // 4 + 0x4f,0x49,0x49,0x31,0x00,0x00, // 5 + 0x3c,0x4a,0x49,0x30,0x00,0x00, // 6 + 0x01,0x61,0x19,0x07,0x00,0x00, // 7 + 0x33,0x49,0x49,0x33,0x00,0x00, // 8 + 0x06,0x49,0x29,0x1e,0x00,0x00, // 9 + 0x33,0x00,0x00,0x00,0x00,0x00, // : + 0x80,0x6c,0x00,0x00,0x00,0x00, // ; + 0x10,0x28,0x44,0x00,0x00,0x00, // < + 0x28,0x28,0x28,0x00,0x00,0x00, // = + 0x44,0x28,0x10,0x00,0x00,0x00, // > + 0x02,0x51,0x09,0x06,0x00,0x00, // ? + 0x3e,0x49,0x55,0x5e,0x00,0x00, // @ + 0x7e,0x09,0x09,0x7e,0x00,0x00, // A + 0x7f,0x49,0x49,0x36,0x00,0x00, // B + 0x3e,0x41,0x41,0x22,0x00,0x00, // C + 0x7f,0x41,0x41,0x3e,0x00,0x00, // D + 0x7f,0x49,0x49,0x41,0x00,0x00, // E + 0x7f,0x09,0x09,0x01,0x00,0x00, // F + 0x3e,0x41,0x49,0x79,0x00,0x00, // G + 0x7f,0x08,0x08,0x7f,0x00,0x00, // H + 0x41,0x7f,0x41,0x00,0x00,0x00, // I + 0x30,0x40,0x40,0x3f,0x00,0x00, // J + 0x7f,0x08,0x14,0x63,0x00,0x00, // K + 0x7f,0x40,0x40,0x40,0x00,0x00, // L + 0x7f,0x02,0x04,0x02,0x7f,0x00, // M + 0x7f,0x02,0x04,0x7f,0x00,0x00, // N + 0x3e,0x41,0x41,0x3e,0x00,0x00, // O + 0x7f,0x09,0x09,0x06,0x00,0x00, // P + 0x3e,0x41,0x21,0x5e,0x00,0x00, // Q + 0x7f,0x09,0x19,0x66,0x0e,0x00, // R + 0x46,0x49,0x49,0x31,0x00,0x00, // S + 0x01,0x01,0x7f,0x01,0x01,0x00, // T + 0x3f,0x40,0x40,0x3f,0x00,0x00, // U + 0x7f,0x40,0x20,0x1f,0x00,0x00, // V + 0x3f,0x40,0x20,0x40,0x3f,0x00, // W + 0x77,0x08,0x08,0x77,0x00,0x00, // X + 0x47,0x48,0x48,0x3f,0x00,0x00, // Y + 0x71,0x49,0x45,0x43,0x00,0x00, // Z + 0x7f,0x41,0x00,0x00,0x00,0x00, // [ + 0x01,0x06,0x18,0x60,0x00,0x00, // "\" + 0x41,0x7f,0x00,0x00,0x00,0x00, // ] + 0x04,0x02,0x04,0x00,0x00,0x00, // ^ + 0x40,0x40,0x40,0x00,0x00,0x00, // _ + 0x01,0x01,0x00,0x00,0x00,0x00, // ` + 0x20,0x54,0x54,0x78,0x00,0x00, // a + 0x7f,0x44,0x44,0x38,0x00,0x00, // b + 0x38,0x44,0x44,0x28,0x00,0x00, // c + 0x38,0x44,0x44,0x7f,0x00,0x00, // d + 0x38,0x54,0x54,0x58,0x00,0x00, // e + 0x7e,0x09,0x09,0x02,0x00,0x00, // f + 0x18,0xa4,0xa4,0x7c,0x00,0x00, // g + 0x7f,0x04,0x04,0x78,0x00,0x00, // h + 0x04,0x7d,0x40,0x00,0x00,0x00, // i + 0x60,0x80,0x80,0x7d,0x00,0x00, // j + 0x7f,0x10,0x28,0x44,0x00,0x00, // k + 0x01,0x7f,0x40,0x00,0x00,0x00, // l + 0x7c,0x04,0x78,0x04,0x78,0x00, // m + 0x7c,0x04,0x04,0x78,0x00,0x00, // n + 0x38,0x44,0x44,0x38,0x00,0x00, // o + 0xfc,0x24,0x24,0x18,0x00,0x00, // p + 0x18,0x24,0x24,0xfc,0x1e,0x00, // q + 0x7c,0x08,0x04,0x04,0x00,0x00, // r + 0x48,0x54,0x54,0x24,0x00,0x00, // s + 0x37,0x44,0x44,0x20,0x00,0x00, // t + 0x3c,0x40,0x40,0x7c,0x00,0x00, // u + 0x7c,0x40,0x20,0x1c,0x00,0x00, // v + 0x3c,0x40,0x20,0x40,0x3c,0x00, // w + 0x6c,0x10,0x10,0x6c,0x00,0x00, // x + 0x1c,0xa0,0xa0,0x7c,0x00,0x00, // y + 0x64,0x54,0x4c,0x00,0x00,0x00, // z + 0x08,0x3e,0x41,0x00,0x00,0x00, // { + 0x7f,0x00,0x00,0x00,0x00,0x00, // | + 0x41,0x3e,0x08,0x00,0x00,0x00, // } + 0x08,0x04,0x08,0x04,0x00,0x00, // ~ + 0x00,0x00,0x00,0x00,0x00,0x00 + } +}; \ No newline at end of file diff --git a/libraries/pico_graphics/font_data.cpp b/libraries/pico_graphics/font_data.cpp deleted file mode 100644 index 8e507c5f..00000000 --- a/libraries/pico_graphics/font_data.cpp +++ /dev/null @@ -1,112 +0,0 @@ -#include - -uint8_t font_height = 6; - -uint8_t font_data[96][6] = { - {0x00,0x00,0x00,0x00,0x00,0x00}, // - {0x2e,0x00,0x00,0x00,0x00,0x00}, // ! - {0x06,0x00,0x06,0x00,0x00,0x00}, // " - {0x14,0x3e,0x14,0x3e,0x14,0x00}, // # - {0x04,0x2a,0x3e,0x2a,0x10,0x00}, // $ - {0x22,0x10,0x08,0x04,0x22,0x00}, // % - {0x14,0x2a,0x2a,0x2c,0x10,0x28}, // & - {0x06,0x00,0x00,0x00,0x00,0x00}, // ' - {0x1c,0x22,0x00,0x00,0x00,0x00}, // ( - {0x22,0x1c,0x00,0x00,0x00,0x00}, // ) - {0x14,0x08,0x14,0x00,0x00,0x00}, // * - {0x08,0x1c,0x08,0x00,0x00,0x00}, // + - {0x60,0x00,0x00,0x00,0x00,0x00}, // , - {0x08,0x08,0x08,0x00,0x00,0x00}, // - - {0x20,0x00,0x00,0x00,0x00,0x00}, // . - {0x30,0x0c,0x02,0x00,0x00,0x00}, // / - {0x1c,0x22,0x22,0x22,0x1e,0x00}, // 0 - {0x02,0x3e,0x00,0x00,0x00,0x00}, // 1 - {0x32,0x2a,0x2a,0x24,0x00,0x00}, // 2 - {0x2a,0x2a,0x2a,0x16,0x00,0x00}, // 3 - {0x0e,0x10,0x10,0x3e,0x10,0x00}, // 4 - {0x2e,0x2a,0x2a,0x12,0x00,0x00}, // 5 - {0x3c,0x2a,0x2a,0x2a,0x12,0x00}, // 6 - {0x06,0x02,0x22,0x12,0x0e,0x00}, // 7 - {0x14,0x2a,0x2a,0x2a,0x16,0x00}, // 8 - {0x04,0x2a,0x2a,0x2a,0x1e,0x00}, // 9 - {0x24,0x00,0x00,0x00,0x00,0x00}, // : - {0x64,0x00,0x00,0x00,0x00,0x00}, // ; - {0x08,0x14,0x22,0x00,0x00,0x00}, // < - {0x14,0x14,0x14,0x00,0x00,0x00}, // = - {0x22,0x14,0x08,0x00,0x00,0x00}, // > - {0x02,0x2a,0x0a,0x04,0x00,0x00}, // ? - {0x3c,0x02,0x1a,0x2a,0x22,0x1e}, // @ - {0x3c,0x12,0x12,0x12,0x3e,0x00}, // A - {0x3c,0x2a,0x2a,0x2e,0x10,0x00}, // B - {0x1c,0x22,0x22,0x22,0x00,0x00}, // C - {0x3c,0x22,0x22,0x22,0x1c,0x00}, // D - {0x3c,0x2a,0x2a,0x2a,0x00,0x00}, // E - {0x3c,0x12,0x12,0x12,0x00,0x00}, // F - {0x3c,0x22,0x22,0x2a,0x1a,0x00}, // G - {0x3e,0x08,0x08,0x3e,0x00,0x00}, // H - {0x22,0x3e,0x22,0x00,0x00,0x00}, // I - {0x30,0x22,0x22,0x1e,0x00,0x00}, // J - {0x3e,0x08,0x0c,0x32,0x00,0x00}, // K - {0x3e,0x20,0x20,0x20,0x00,0x00}, // L - {0x3c,0x02,0x3c,0x02,0x3c,0x00}, // M - {0x3c,0x02,0x02,0x02,0x3e,0x00}, // N - {0x1c,0x22,0x22,0x22,0x1e,0x00}, // O - {0x3c,0x12,0x12,0x12,0x0e,0x00}, // P - {0x1c,0x22,0x22,0x62,0x1e,0x00}, // Q - {0x3c,0x12,0x12,0x32,0x0e,0x00}, // R - {0x24,0x2a,0x2a,0x12,0x00,0x00}, // S - {0x02,0x02,0x3e,0x02,0x02,0x00}, // T - {0x1e,0x20,0x20,0x20,0x1e,0x00}, // U - {0x0e,0x10,0x20,0x10,0x0e,0x00}, // V - {0x3e,0x20,0x1e,0x20,0x1e,0x00}, // W - {0x36,0x08,0x08,0x36,0x00,0x00}, // X - {0x26,0x28,0x28,0x1e,0x00,0x00}, // Y - {0x32,0x2a,0x2a,0x26,0x00,0x00}, // Z - {0x3e,0x22,0x00,0x00,0x00,0x00}, // [ - {0x02,0x0c,0x30,0x00,0x00,0x00}, // "\" - {0x22,0x3e,0x00,0x00,0x00,0x00}, // ] - {0x04,0x02,0x04,0x00,0x00,0x00}, // ^ - {0x20,0x20,0x20,0x00,0x00,0x00}, // _ - {0x02,0x04,0x00,0x00,0x00,0x00}, // ` - {0x3c,0x12,0x12,0x12,0x3e,0x00}, // a - {0x3c,0x2a,0x2a,0x2e,0x10,0x00}, // b - {0x1c,0x22,0x22,0x22,0x00,0x00}, // c - {0x3c,0x22,0x22,0x22,0x1c,0x00}, // d - {0x3c,0x2a,0x2a,0x2a,0x00,0x00}, // e - {0x3c,0x12,0x12,0x12,0x00,0x00}, // f - {0x3c,0x22,0x22,0x2a,0x1a,0x00}, // g - {0x3e,0x08,0x08,0x3e,0x00,0x00}, // h - {0x22,0x3e,0x22,0x00,0x00,0x00}, // i - {0x30,0x22,0x22,0x1e,0x00,0x00}, // j - {0x3e,0x08,0x0c,0x32,0x00,0x00}, // k - {0x3e,0x20,0x20,0x20,0x00,0x00}, // l - {0x3c,0x02,0x3c,0x02,0x3e,0x00}, // m - {0x3c,0x02,0x02,0x02,0x3e,0x00}, // n - {0x1c,0x22,0x22,0x22,0x1e,0x00}, // o - {0x3c,0x12,0x12,0x12,0x0e,0x00}, // p - {0x1c,0x22,0x22,0x62,0x1e,0x00}, // q - {0x3c,0x12,0x12,0x32,0x0e,0x00}, // r - {0x24,0x2a,0x2a,0x12,0x00,0x00}, // s - {0x02,0x02,0x3e,0x02,0x02,0x00}, // t - {0x1e,0x20,0x20,0x20,0x1e,0x00}, // u - {0x0e,0x10,0x20,0x10,0x0e,0x00}, // v - {0x3e,0x20,0x1e,0x20,0x1e,0x00}, // w - {0x36,0x08,0x08,0x36,0x00,0x00}, // x - {0x26,0x28,0x28,0x1e,0x00,0x00}, // y - {0x32,0x2a,0x2a,0x26,0x00,0x00}, // z - {0x08,0x3e,0x22,0x00,0x00,0x00}, // { - {0x3e,0x00,0x00,0x00,0x00,0x00}, // | - {0x22,0x3e,0x08,0x00,0x00,0x00}, // } - {0x04,0x02,0x02,0x00,0x00,0x00}, // ~ - {0x00,0x00,0x00,0x00,0x00,0x00} -}; - -uint8_t character_widths[96] = { - 3, 2, 4, 6, 6, 6, 7, 2, 3, 3, 4, 4, 2, 4, 2, 4, - 6, 3, 5, 5, 6, 5, 6, 6, 6, 6, 2, 2, 4, 4, 4, 5, - 7, 6, 6, 5, 6, 5, 5, 6, 5, 4, 5, 5, 5, 6, 6, 6, - 6, 6, 6, 5, 6, 6, 6, 6, 5, 5, 5, 3, 4, 3, 4, 4, - 3, 6, 6, 5, 6, 5, 5, 6, 5, 4, 5, 5, 5, 6, 6, 6, - 6, 6, 6, 5, 6, 6, 6, 6, 5, 5, 5, 4, 2, 4, 4, 2 -}; - diff --git a/libraries/pico_graphics/font_data8.cpp b/libraries/pico_graphics/font_data8.cpp deleted file mode 100644 index c64ad990..00000000 --- a/libraries/pico_graphics/font_data8.cpp +++ /dev/null @@ -1,112 +0,0 @@ -#include - -uint8_t font_height = 8; - -uint8_t font_data[96][6] = { - {0x00,0x00,0x00,0x00,0x00,0x00}, // - {0x5f,0x00,0x00,0x00,0x00,0x00}, // ! - {0x03,0x00,0x03,0x00,0x00,0x00}, // " - {0x28,0x7c,0x28,0x7c,0x28,0x00}, // # - {0x24,0x7a,0x2f,0x12,0x00,0x00}, // $ - {0x66,0x10,0x08,0x66,0x00,0x00}, // % - {0x36,0x49,0x49,0x7c,0x00,0x00}, // & - {0x03,0x00,0x00,0x00,0x00,0x00}, // ' - {0x1c,0x22,0x41,0x00,0x00,0x00}, // ( - {0x41,0x22,0x1c,0x00,0x00,0x00}, // ) - {0x54,0x38,0x54,0x00,0x00,0x00}, // * - {0x10,0x38,0x10,0x00,0x00,0x00}, // + - {0x80,0x60,0x00,0x00,0x00,0x00}, // , - {0x10,0x10,0x10,0x00,0x00,0x00}, // - - {0x60,0x60,0x00,0x00,0x00,0x00}, // . - {0x60,0x18,0x06,0x01,0x00,0x00}, // / - {0x3e,0x41,0x41,0x3e,0x00,0x00}, // 0 - {0x42,0x7f,0x40,0x00,0x00,0x00}, // 1 - {0x61,0x51,0x49,0x46,0x00,0x00}, // 2 - {0x21,0x49,0x4d,0x33,0x00,0x00}, // 3 - {0x18,0x26,0x11,0x7f,0x00,0x00}, // 4 - {0x4f,0x49,0x49,0x31,0x00,0x00}, // 5 - {0x3c,0x4a,0x49,0x30,0x00,0x00}, // 6 - {0x01,0x61,0x19,0x07,0x00,0x00}, // 7 - {0x33,0x49,0x49,0x33,0x00,0x00}, // 8 - {0x06,0x49,0x29,0x1e,0x00,0x00}, // 9 - {0x33,0x00,0x00,0x00,0x00,0x00}, // : - {0x80,0x6c,0x00,0x00,0x00,0x00}, // ; - {0x10,0x28,0x44,0x00,0x00,0x00}, // < - {0x28,0x28,0x28,0x00,0x00,0x00}, // = - {0x44,0x28,0x10,0x00,0x00,0x00}, // > - {0x02,0x51,0x09,0x06,0x00,0x00}, // ? - {0x3e,0x49,0x55,0x5e,0x00,0x00}, // @ - {0x7e,0x09,0x09,0x7e,0x00,0x00}, // A - {0x7f,0x49,0x49,0x36,0x00,0x00}, // B - {0x3e,0x41,0x41,0x22,0x00,0x00}, // C - {0x7f,0x41,0x41,0x3e,0x00,0x00}, // D - {0x7f,0x49,0x49,0x41,0x00,0x00}, // E - {0x7f,0x09,0x09,0x01,0x00,0x00}, // F - {0x3e,0x41,0x49,0x79,0x00,0x00}, // G - {0x7f,0x08,0x08,0x7f,0x00,0x00}, // H - {0x41,0x7f,0x41,0x00,0x00,0x00}, // I - {0x30,0x40,0x40,0x3f,0x00,0x00}, // J - {0x7f,0x08,0x14,0x63,0x00,0x00}, // K - {0x7f,0x40,0x40,0x40,0x00,0x00}, // L - {0x7f,0x02,0x04,0x02,0x7f,0x00}, // M - {0x7f,0x02,0x04,0x7f,0x00,0x00}, // N - {0x3e,0x41,0x41,0x3e,0x00,0x00}, // O - {0x7f,0x09,0x09,0x06,0x00,0x00}, // P - {0x3e,0x41,0x21,0x5e,0x00,0x00}, // Q - {0x7f,0x09,0x19,0x66,0x0e,0x00}, // R - {0x46,0x49,0x49,0x31,0x00,0x00}, // S - {0x01,0x01,0x7f,0x01,0x01,0x00}, // T - {0x3f,0x40,0x40,0x3f,0x00,0x00}, // U - {0x7f,0x40,0x20,0x1f,0x00,0x00}, // V - {0x3f,0x40,0x20,0x40,0x3f,0x00}, // W - {0x77,0x08,0x08,0x77,0x00,0x00}, // X - {0x47,0x48,0x48,0x3f,0x00,0x00}, // Y - {0x71,0x49,0x45,0x43,0x00,0x00}, // Z - {0x7f,0x41,0x00,0x00,0x00,0x00}, // [ - {0x01,0x06,0x18,0x60,0x00,0x00}, // "\" - {0x41,0x7f,0x00,0x00,0x00,0x00}, // ] - {0x04,0x02,0x04,0x00,0x00,0x00}, // ^ - {0x40,0x40,0x40,0x00,0x00,0x00}, // _ - {0x01,0x01,0x00,0x00,0x00,0x00}, // ` - {0x20,0x54,0x54,0x78,0x00,0x00}, // a - {0x7f,0x44,0x44,0x38,0x00,0x00}, // b - {0x38,0x44,0x44,0x28,0x00,0x00}, // c - {0x38,0x44,0x44,0x7f,0x00,0x00}, // d - {0x38,0x54,0x54,0x58,0x00,0x00}, // e - {0x7e,0x09,0x09,0x02,0x00,0x00}, // f - {0x18,0xa4,0xa4,0x7c,0x00,0x00}, // g - {0x7f,0x04,0x04,0x78,0x00,0x00}, // h - {0x04,0x7d,0x40,0x00,0x00,0x00}, // i - {0x60,0x80,0x80,0x7d,0x00,0x00}, // j - {0x7f,0x10,0x28,0x44,0x00,0x00}, // k - {0x01,0x7f,0x40,0x00,0x00,0x00}, // l - {0x7c,0x04,0x78,0x04,0x78,0x00}, // m - {0x7c,0x04,0x04,0x78,0x00,0x00}, // n - {0x38,0x44,0x44,0x38,0x00,0x00}, // o - {0xfc,0x24,0x24,0x18,0x00,0x00}, // p - {0x18,0x24,0x24,0xfc,0x1e,0x00}, // q - {0x7c,0x08,0x04,0x04,0x00,0x00}, // r - {0x48,0x54,0x54,0x24,0x00,0x00}, // s - {0x37,0x44,0x44,0x20,0x00,0x00}, // t - {0x3c,0x40,0x40,0x7c,0x00,0x00}, // u - {0x7c,0x40,0x20,0x1c,0x00,0x00}, // v - {0x3c,0x40,0x20,0x40,0x3c,0x00}, // w - {0x6c,0x10,0x10,0x6c,0x00,0x00}, // x - {0x1c,0xa0,0xa0,0x7c,0x00,0x00}, // y - {0x64,0x54,0x4c,0x00,0x00,0x00}, // z - {0x08,0x3e,0x41,0x00,0x00,0x00}, // { - {0x7f,0x00,0x00,0x00,0x00,0x00}, // | - {0x41,0x3e,0x08,0x00,0x00,0x00}, // } - {0x08,0x04,0x08,0x04,0x00,0x00}, // ~ - {0x00,0x00,0x00,0x00,0x00,0x00} -}; - -uint8_t character_widths[96] = { - 3, 2, 4, 6, 5, 5, 5, 2, 4, 4, 4, 4, 3, 4, 3, 5, - 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 2, 3, 4, 4, 4, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 6, 5, 5, - 5, 5, 5, 5, 6, 5, 5, 6, 5, 5, 5, 3, 5, 3, 4, 4, - 3, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 4, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 4, 2, 4, 5, 2 -}; - diff --git a/libraries/pico_graphics/pico_graphics.cmake b/libraries/pico_graphics/pico_graphics.cmake index a69b6463..164185c1 100644 --- a/libraries/pico_graphics/pico_graphics.cmake +++ b/libraries/pico_graphics/pico_graphics.cmake @@ -1,6 +1,7 @@ add_library(pico_graphics ${CMAKE_CURRENT_LIST_DIR}/types.cpp - ${CMAKE_CURRENT_LIST_DIR}/font_data.cpp - ${CMAKE_CURRENT_LIST_DIR}/pico_graphics.cpp) + ${CMAKE_CURRENT_LIST_DIR}/pico_graphics.cpp +) + +target_include_directories(pico_graphics INTERFACE ${CMAKE_CURRENT_LIST_DIR}) -target_include_directories(pico_graphics INTERFACE ${CMAKE_CURRENT_LIST_DIR}) \ No newline at end of file diff --git a/libraries/pico_graphics/pico_graphics.cpp b/libraries/pico_graphics/pico_graphics.cpp index 8c781dd7..325bad0e 100644 --- a/libraries/pico_graphics/pico_graphics.cpp +++ b/libraries/pico_graphics/pico_graphics.cpp @@ -1,10 +1,14 @@ #include "pico_graphics.hpp" -extern uint8_t font_data[96][6]; -extern uint8_t character_widths[96]; -extern uint8_t font_height; - namespace pimoroni { + PicoGraphics::PicoGraphics(uint16_t width, uint16_t height, uint16_t *frame_buffer) + : frame_buffer(frame_buffer), bounds(0, 0, width, height), clip(0, 0, width, height) { + set_font(&font6); + }; + + void PicoGraphics::set_font(const Font *font){ + this->font = font; + } void PicoGraphics::set_pen(uint8_t r, uint8_t g, uint8_t b) { pen = create_pen(r, g, b); @@ -107,13 +111,13 @@ namespace pimoroni { void PicoGraphics::character(const char c, const Point &p, uint8_t scale) { uint8_t char_index = c - 32; - Rect char_bounds(p.x, p.y, character_widths[char_index] * scale, font_height * scale); + Rect char_bounds(p.x, p.y, font->widths[char_index] * scale, font->height * scale); if(!clip.intersects(char_bounds)) return; - const uint8_t *d = &font_data[char_index][0]; - for(uint8_t cx = 0; cx < character_widths[char_index]; cx++) { - for(uint8_t cy = 0; cy < font_height; cy++) { + const uint8_t *d = &font->data[char_index * font->max_width]; + for(uint8_t cx = 0; cx < font->widths[char_index]; cx++) { + for(uint8_t cy = 0; cy < font->height; cy++) { if((1U << cy) & *d) { rectangle(Rect(p.x + (cx * scale), p.y + (cy * scale), scale, scale)); } @@ -137,24 +141,24 @@ namespace pimoroni { uint16_t word_width = 0; for(size_t j = i; j < next_space; j++) { - word_width += character_widths[t[j] - 32] * scale; + word_width += font->widths[t[j] - 32] * scale; } // if this word would exceed the wrap limit then // move to the next line if(co != 0 && co + word_width > (uint32_t)wrap) { co = 0; - lo += (font_height + 1) * scale; + lo += (font->height + 1) * scale; } // draw word for(size_t j = i; j < next_space; j++) { character(t[j], Point(p.x + co, p.y + lo), scale); - co += character_widths[t[j] - 32] * scale; + co += font->widths[t[j] - 32] * scale; } // move character offset to end of word and add a space - co += character_widths[0] * scale; + co += font->widths[0] * scale; i = next_space + 1; } } diff --git a/libraries/pico_graphics/pico_graphics.hpp b/libraries/pico_graphics/pico_graphics.hpp index 87006bb5..b56c15c8 100644 --- a/libraries/pico_graphics/pico_graphics.hpp +++ b/libraries/pico_graphics/pico_graphics.hpp @@ -4,6 +4,7 @@ #include #include #include +#include "font6_data.hpp" // a tiny little graphics library for our Pico products // supports only 16-bit (565) RGB framebuffers @@ -51,10 +52,11 @@ namespace pimoroni { Pen pen; - public: - PicoGraphics(uint16_t width, uint16_t height, uint16_t *frame_buffer) - : frame_buffer(frame_buffer), bounds(0, 0, width, height), clip(0, 0, width, height) {} + const Font *font; + public: + PicoGraphics(uint16_t width, uint16_t height, uint16_t *frame_buffer); + void set_font(const Font *font); void set_pen(uint8_t r, uint8_t g, uint8_t b); void set_pen(Pen p);