- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
void DrawingLibrary::drawText(int x0, int y0, char string[], int strlen, int red, int green, int blue, int alpha) {
for(int i = 0; i < strlen; ++i) {
char chr = string[i];
int sX = x0 + i * 8;
// проходимся по символам, рисуя их
if(chr == '!') {
bool symbol[8][8] = {{0,0,0,0,0,1,0,0},{0,0,0,0,0,1,0,0},{0,0,0,0,0,1,0,0},{0,0,0,0,0,1,0,0},{0,0,0,0,0,1,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,1,0,0},{0,0,0,0,0,0,0,0}};
this->drawSymbol(sX, y0, symbol, red, green, blue, alpha);
}
else if(chr == '"') {
bool symbol[8][8] = {{0,0,0,0,1,0,1,0},{0,0,0,0,1,0,1,0},{0,0,0,0,1,0,1,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}};
this->drawSymbol(sX, y0, symbol, red, green, blue, alpha);
}
else if(chr == '#') {
bool symbol[8][8] = {{0,0,0,0,1,0,1,0},{0,0,0,0,1,0,1,0},{0,0,0,1,1,1,1,1},{0,0,0,0,1,0,1,0},{0,0,0,1,1,1,1,1},{0,0,0,0,1,0,1,0},{0,0,0,0,1,0,1,0},{0,0,0,0,0,0,0,0}};
this->drawSymbol(sX, y0, symbol, red, green, blue, alpha);
}
/* еще 135 строк такого "кода" */
else if(chr == 'э') {
bool symbol[8][8] = {{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,1,1,1,0},{0,0,0,0,0,0,0,1},{0,0,0,0,0,1,1,1},{0,0,0,0,0,0,0,1},{0,0,0,0,1,1,1,0},{0,0,0,0,0,0,0,0}};
this->drawSymbol(sX, y0, symbol, red, green, blue, alpha);
}
else if(chr == 'ю') {
bool symbol[8][8] = {{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,1,0,0,1,0},{0,0,0,1,0,1,0,1},{0,0,0,1,1,1,0,1},{0,0,0,1,0,1,0,1},{0,0,0,1,0,0,1,0},{0,0,0,0,0,0,0,0}};
this->drawSymbol(sX, y0, symbol, red, green, blue, alpha);
}
else if(chr == 'я') {
bool symbol[8][8] = {{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,1,1,1},{0,0,0,0,1,0,0,1},{0,0,0,0,0,1,1,1},{0,0,0,0,0,1,0,1},{0,0,0,0,1,0,0,1},{0,0,0,0,0,0,0,0}};
this->drawSymbol(sX, y0, symbol, red, green, blue, alpha);
}
}
}
>char string[]
Мдя... про std::string афтар не слышал
Но мне больше интереснее с массивом char. И не надо, пожалуйста, холивара char vs. std::string.
new/delete здесь не лучший вариант.
А в исходном ГК надо бы вынести this->drawSymbol(sX, y0, symbol, red, green, blue, alpha); и использовать switch.
А uint8_t symbols[223][8] -- всего 1784 байта.
=)
Нужно бы это оформить отдельным говнокодом... :D
для этого нужно формировать массив symbols[223][8][8] ну или symbols[223][8] (если сойдет без сглаживания) в функции инициализации шрифта (ну или брутально в конструкторе). Для этого при инициализации можно вывести все 223 символа в буферную картинку стандартными методами.
Если сделать некоряво, то будет на порядок быстрее стандартного API.