- 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);
}
}
}
absolut 21.02.2011 14:11 # +5
ShitCode 21.02.2011 14:14 # 0
Sauron 21.02.2011 16:09 # −2
>char string[]
Мдя... про std::string афтар не слышал
ShitCode 21.02.2011 16:38 # 0
Но мне больше интереснее с массивом char. И не надо, пожалуйста, холивара char vs. std::string.
absolut 21.02.2011 18:07 # +2
new/delete здесь не лучший вариант.
А в исходном ГК надо бы вынести this->drawSymbol(sX, y0, symbol, red, green, blue, alpha); и использовать switch.
gegMOPO4 21.02.2011 18:19 # +3
ShitCode 21.02.2011 18:25 # 0
absolut 21.02.2011 18:29 # 0
gegMOPO4 21.02.2011 18:53 # +1
А uint8_t symbols[223][8] -- всего 1784 байта.
absolut 21.02.2011 18:30 # +1
ShitCode 21.02.2011 18:38 # 0
ShitCode 21.02.2011 19:08 # −5
gegMOPO4 21.02.2011 19:19 # +1
ShitCode 21.02.2011 19:24 # 0
absolut 21.02.2011 19:24 # +3
ShitCode 21.02.2011 19:41 # 0
ShitCode 21.02.2011 20:36 # 0
bugmenot 24.02.2011 14:22 # +1
=)
ShitCode 21.02.2011 18:26 # 0
ShitCode 21.02.2011 18:28 # 0
guest 24.02.2011 12:24 # 0
Нужно бы это оформить отдельным говнокодом... :D
bugmenot 24.02.2011 14:20 # 0
ctm 24.02.2011 07:24 # 0
для этого нужно формировать массив symbols[223][8][8] ну или symbols[223][8] (если сойдет без сглаживания) в функции инициализации шрифта (ну или брутально в конструкторе). Для этого при инициализации можно вывести все 223 символа в буферную картинку стандартными методами.
Если сделать некоряво, то будет на порядок быстрее стандартного API.
TarasB 24.02.2011 14:53 # +1
Kotik 24.02.2011 23:31 # +1
gegMOPO4 26.02.2011 11:36 # +1