Truetype lib: Make SetBackColor() function faster.

git-svn-id: svn://kolibrios.org@5518 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2015-03-14 22:23:44 +00:00
parent c0c80a0aca
commit 686b37b809
2 changed files with 31 additions and 29 deletions

View File

@ -1,27 +1,28 @@
11.04.12
SoUrcerer SoUrcerer
11.4.12
пусть сам автор напишет... пусть сам автор напишет...
---------- ----------
24.8.12
SoUrcerer SoUrcerer
20.6.12
...
----------
SoUrcerer
24.8.12
Исправил определение длины выводимой строки в пикселах. Теперь text_out работает корректно на длинных строках. Исправил определение длины выводимой строки в пикселах. Теперь text_out работает корректно на длинных строках.
Исправил вывод русских букв. Исправил вывод русских букв.
Вопрос с блиттером остается открытым. Нужен блиттер с поддержкой прозрачности, учитывающий флаг "рисовать относительно клиентской области окна". В том числе он нужен для букв с умляутами, типа ё и й. А так же составных символов. Иначе глиф-черточка или глиф-точечки "зарисует" остаток буквы в некоторых шрифтах. И вообще, так явно будет быстрее, чем грабить экран, смешивать и выводить на экран, вызывая 2 системных функции и гоняя цикл в пользовательском режиме Вопрос с блиттером остается открытым. Нужен блиттер с поддержкой прозрачности, учитывающий флаг "рисовать относительно клиентской области окна". В том числе он нужен для букв с умляутами, типа ё и й. А так же составных символов. Иначе глиф-черточка или глиф-точечки "зарисует" остаток буквы в некоторых шрифтах. И вообще, так явно будет быстрее, чем грабить экран, смешивать и выводить на экран, вызывая 2 системных функции и гоняя цикл в пользовательском режиме
--------- ----------
11.10.12 11.10.12
Lev Lev
stb.h - stb.h
ñèíõðîíèçèðîâàë stb.h ñ stb_truetype0.6c.h Ñèíõðîíèçèðîâàë stb.h ñ stb_truetype0.6c.h
 ñòðîêå if (num_vertices > 0) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex));
â ñòðîêå if (num_vertices > 0) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex)); Âñòàâèë STBTT_memcpy âìåñòî STBTT_memset ïî àíàëîãèè ñ èñõîäíûì stb_truetype0.6c.h (åñëè ýòî áûëî íåïðàâèëüíî - âåðíèòå íàçàä)
âñòàâèë STBTT_memcpy âìåñòî STBTT_memset ïî àíàëîãèè ñ èñõîäíûì stb_truetype0.6c.h (åñëè ýòî áûëî íåïðàâèëüíî - âåðíèòå íàçàä) - lib.c
lib.c
заменил 65-ю функцию на 7-ю, по коду чуть проще и вылетало у меня постоянно с 65-й заменил 65-ю функцию на 7-ю, по коду чуть проще и вылетало у меня постоянно с 65-й
внёс поправки для правильной работы с окнами отсчитывающими координаты от клиентского окна внёс поправки для правильной работы с окнами отсчитывающими координаты от клиентского окна
Добавил учёт descent, чтобы не вылетало на диакритике типа "Й", dos2utf править не стал - вместо Ё и т.п. показываются символы расширенной латиницы Добавил учёт descent, чтобы не вылетало на диакритике типа "Й", dos2utf править не стал - вместо Ё и т.п. показываются символы расширенной латиницы
----------
13.03.15
hidnplayr
Separate original stb_truetype.h from kolibri library code, updated stb_truetype to version 1.02, added utf8 support for library functions, added compile.bat for windows users.
----------
Leency
15.05.15
Make SetBackColor() function faster.

View File

@ -170,26 +170,27 @@ int __stdcall picture_utf8(unsigned char *s, stbtt_fontinfo *buffer, char *scree
return 0; return 0;
} }
void __stdcall SetBackColor(int back_color, int width, int height, char *from_zone) void __stdcall SetBackColor(int back_color, int width, int height, char *from_zone)
{ {
int i,j; unsigned char bcr = back_color>>16;
unsigned char bcr,bcg,bcb; unsigned char bcg = back_color>>8;
unsigned char bcb = back_color;
bcr=back_color<<16;
bcg=back_color<<8; unsigned int i;
bcb=back_color; unsigned int max_i = width * height * 3;
for (i=0; i < max_i; i+=3)
for (j=0;j<height ;j++)
{ {
for (i=0;i<width ;i++) from_zone[i] = bcb;
{ from_zone[i+1] = bcg;
from_zone[(j*width+i)*3]=back_color; from_zone[i+2] = bcr;
from_zone[(j*width+i)*3+1]=back_color>>8;
from_zone[(j*width+i)*3+2]=back_color>>16;
}
} }
} }
int __stdcall text_out(char *string, char *buffer, int height, int color,int back_color, int x, int y) { int __stdcall text_out(char *string, char *buffer, int height, int color,int back_color, int x, int y) {
unsigned char *from_zone; unsigned char *from_zone;
unsigned char *to_zone; unsigned char *to_zone;