From 686b37b8094f36037492cb1e777008508beb2060 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Sat, 14 Mar 2015 22:23:44 +0000 Subject: [PATCH] Truetype lib: Make SetBackColor() function faster. git-svn-id: svn://kolibrios.org@5518 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../libraries/truetype/trunk/history.txt | 31 ++++++++++--------- .../libraries/truetype/trunk/truetype.c | 29 ++++++++--------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/programs/develop/libraries/truetype/trunk/history.txt b/programs/develop/libraries/truetype/trunk/history.txt index c54bf19316..0ebb4b7d8b 100644 --- a/programs/develop/libraries/truetype/trunk/history.txt +++ b/programs/develop/libraries/truetype/trunk/history.txt @@ -1,27 +1,28 @@ +11.04.12 SoUrcerer -11.4.12 пусть сам автор напишет... ---------- +24.8.12 SoUrcerer -20.6.12 -... ----------- -SoUrcerer -24.8.12 Исправил определение длины выводимой строки в пикселах. Теперь text_out работает корректно на длинных строках. Исправил вывод русских букв. - Вопрос с блиттером остается открытым. Нужен блиттер с поддержкой прозрачности, учитывающий флаг "рисовать относительно клиентской области окна". В том числе он нужен для букв с умляутами, типа ё и й. А так же составных символов. Иначе глиф-черточка или глиф-точечки "зарисует" остаток буквы в некоторых шрифтах. И вообще, так явно будет быстрее, чем грабить экран, смешивать и выводить на экран, вызывая 2 системных функции и гоняя цикл в пользовательском режиме ---------- +---------- 11.10.12 Lev -stb.h -синхронизировал stb.h с stb_truetype0.6c.h - -в строке if (num_vertices > 0) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex)); -вставил STBTT_memcpy вместо STBTT_memset по аналогии с исходным stb_truetype0.6c.h (если это было неправильно - верните назад) - -lib.c +- stb.h +Синхронизировал stb.h с stb_truetype0.6c.h +В строке if (num_vertices > 0) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex)); +Вставил STBTT_memcpy вместо STBTT_memset по аналогии с исходным stb_truetype0.6c.h (если это было неправильно - верните назад) +- lib.c заменил 65-ю функцию на 7-ю, по коду чуть проще и вылетало у меня постоянно с 65-й внёс поправки для правильной работы с окнами отсчитывающими координаты от клиентского окна Добавил учёт 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. diff --git a/programs/develop/libraries/truetype/trunk/truetype.c b/programs/develop/libraries/truetype/trunk/truetype.c index 894acdec13..1f47122065 100644 --- a/programs/develop/libraries/truetype/trunk/truetype.c +++ b/programs/develop/libraries/truetype/trunk/truetype.c @@ -170,26 +170,27 @@ int __stdcall picture_utf8(unsigned char *s, stbtt_fontinfo *buffer, char *scree return 0; } + void __stdcall SetBackColor(int back_color, int width, int height, char *from_zone) { - int i,j; - unsigned char bcr,bcg,bcb; - - bcr=back_color<<16; - bcg=back_color<<8; - bcb=back_color; - - for (j=0;j>16; + unsigned char bcg = back_color>>8; + unsigned char bcb = back_color; + + unsigned int i; + unsigned int max_i = width * height * 3; + for (i=0; i < max_i; i+=3) { - for (i=0;i>8; - from_zone[(j*width+i)*3+2]=back_color>>16; - } + from_zone[i] = bcb; + from_zone[i+1] = bcg; + from_zone[i+2] = bcr; } + } + + + 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 *to_zone;