LinFor
4 years ago
committed by
Scott Lahteine
22 changed files with 3318 additions and 29 deletions
@ -0,0 +1,139 @@ |
|||
/************************
|
|||
* cyrillic_char_set.cpp * |
|||
************************/ |
|||
|
|||
/****************************************************************************
|
|||
* Written By Kirill Shashlov 2020 * |
|||
* Marcio Teixeira 2019 - Aleph Objects, Inc. * |
|||
* * |
|||
* This program is free software: you can redistribute it and/or modify * |
|||
* it under the terms of the GNU General Public License as published by * |
|||
* the Free Software Foundation, either version 3 of the License, or * |
|||
* (at your option) any later version. * |
|||
* * |
|||
* This program is distributed in the hope that it will be useful, * |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
|||
* GNU General Public License for more details. * |
|||
* * |
|||
* To view a copy of the GNU General Public License, go to the following * |
|||
* location: <https://www.gnu.org/licenses/>. *
|
|||
****************************************************************************/ |
|||
|
|||
#include "../ftdi_extended.h" |
|||
|
|||
#if ALL(FTDI_EXTENDED, TOUCH_UI_USE_UTF8, TOUCH_UI_UTF8_CYRILLIC_CHARSET) |
|||
|
|||
#include "cyrillic_char_set_bitmap_31.h" |
|||
|
|||
#define NUM_ELEMENTS(a) (sizeof(a)/sizeof(a[0])) |
|||
|
|||
#define UTF8(A) uint16_t(utf8(U##A)) |
|||
|
|||
using namespace FTDI; |
|||
|
|||
constexpr static uint8_t cyrillic_font_handle = 6; |
|||
|
|||
uint32_t FTDI::CyrillicCharSet::bitmap_addr; |
|||
|
|||
/**
|
|||
* Load bitmap data into RAMG. This function is called once at the start |
|||
* of the program. |
|||
* |
|||
* Parameters: |
|||
* |
|||
* addr - Address in RAMG where the font data is written |
|||
* |
|||
* Returns: Last wrote address |
|||
*/ |
|||
|
|||
uint32_t FTDI::CyrillicCharSet::load_data(uint32_t addr) { |
|||
if (addr % 4 != 0) |
|||
addr += 4 - (addr % 4); |
|||
|
|||
// Load the alternative font metrics
|
|||
CLCD::FontMetrics cyrillic_fm; |
|||
cyrillic_fm.ptr = addr + 148; |
|||
cyrillic_fm.format = L4; |
|||
cyrillic_fm.stride = 20; |
|||
cyrillic_fm.width = 40; |
|||
cyrillic_fm.height = 49; |
|||
LOOP_L_N(i, 127) |
|||
cyrillic_fm.char_widths[i] = 0; |
|||
|
|||
// For cyrillic characters, copy the character widths from the widths tables
|
|||
LOOP_L_N(i, NUM_ELEMENTS(cyrillic_font_widths)) { |
|||
cyrillic_fm.char_widths[i] = cyrillic_font_widths[i]; |
|||
} |
|||
CLCD::mem_write_bulk(addr, &cyrillic_fm, 148); |
|||
|
|||
// Decode the RLE data and load it into RAMG as a bitmap
|
|||
uint32_t lastaddr = write_rle_data(addr + 148, cyrillic_font, sizeof(cyrillic_font)); |
|||
|
|||
bitmap_addr = addr; |
|||
|
|||
return lastaddr; |
|||
} |
|||
|
|||
/**
|
|||
* Populates the bitmap handles for the custom into the display list. |
|||
* This function is called once at the start of each display list. |
|||
* |
|||
* Parameters: |
|||
* |
|||
* cmd - Object used for writing to the FTDI chip command queue. |
|||
*/ |
|||
|
|||
void FTDI::CyrillicCharSet::load_bitmaps(CommandProcessor& cmd) { |
|||
CLCD::FontMetrics cyrillic_fm; |
|||
cyrillic_fm.ptr = bitmap_addr + 148; |
|||
cyrillic_fm.format = L4; |
|||
cyrillic_fm.stride = 20; |
|||
cyrillic_fm.width = 40; |
|||
cyrillic_fm.height = 49; |
|||
set_font_bitmap(cmd, cyrillic_fm, cyrillic_font_handle); |
|||
} |
|||
|
|||
/**
|
|||
* Renders a character at location x and y. The x position is incremented |
|||
* by the width of the character. |
|||
* |
|||
* Parameters: |
|||
* |
|||
* cmd - If non-NULL the symbol is drawn to the screen. |
|||
* If NULL, only increment position for text measurement. |
|||
* |
|||
* x, y - The location at which to draw the character. On output, |
|||
* incremented to the location of the next character. |
|||
* |
|||
* fs - A scaling object used to scale the font. The display will |
|||
* already be configured to scale bitmaps, but positions |
|||
* must be scaled using fs.scale() |
|||
* |
|||
* c - The unicode code point to draw. If the renderer does not |
|||
* support the character, it should return false. |
|||
* |
|||
* Returns: Whether the character was supported. |
|||
*/ |
|||
|
|||
bool FTDI::CyrillicCharSet::render_glyph(CommandProcessor* cmd, int &x, int &y, font_size_t fs, utf8_char_t c) { |
|||
// A supported character?
|
|||
if ((c < UTF8('А') || c > UTF8('я')) && (c != UTF8('Ё')) && (c != UTF8('ё'))) return false; |
|||
|
|||
uint8_t idx = (c == UTF8('Ё')) ? 64 : |
|||
(c == UTF8('ё')) ? 65 : |
|||
(c < UTF8('р')) ? c - UTF8('А') : |
|||
c - UTF8('р') + 48 |
|||
; |
|||
|
|||
uint8_t width = cyrillic_font_widths[idx]; |
|||
|
|||
// Draw the character
|
|||
if (cmd) ext_vertex2ii(*cmd, x, y, cyrillic_font_handle, idx); |
|||
|
|||
// Increment X to the next character position
|
|||
x += fs.scale(width); |
|||
return true; |
|||
} |
|||
|
|||
#endif // FTDI_EXTENDED && TOUCH_UI_USE_UTF8 && TOUCH_UI_UTF8_WESTERN_CHARSET
|
@ -0,0 +1,32 @@ |
|||
/**********************
|
|||
* cyrillic_char_set.h * |
|||
**********************/ |
|||
|
|||
/****************************************************************************
|
|||
* Written By Kirill Shashlov 2020 * |
|||
* Marcio Teixeira 2019 - Aleph Objects, Inc. * |
|||
* * |
|||
* This program is free software: you can redistribute it and/or modify * |
|||
* it under the terms of the GNU General Public License as published by * |
|||
* the Free Software Foundation, either version 3 of the License, or * |
|||
* (at your option) any later version. * |
|||
* * |
|||
* This program is distributed in the hope that it will be useful, * |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
|||
* GNU General Public License for more details. * |
|||
* * |
|||
* To view a copy of the GNU General Public License, go to the following * |
|||
* location: <https://www.gnu.org/licenses/>. *
|
|||
****************************************************************************/ |
|||
|
|||
namespace FTDI { |
|||
class CyrillicCharSet { |
|||
private: |
|||
static uint32_t bitmap_addr; |
|||
public: |
|||
static uint32_t load_data(uint32_t addr); |
|||
static void load_bitmaps(CommandProcessor&); |
|||
static bool render_glyph(CommandProcessor*, int &x, int &y, font_size_t, utf8_char_t); |
|||
}; |
|||
} |
File diff suppressed because it is too large
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 16 KiB |
Loading…
Reference in new issue