From 94617c0888ebe34a269cbc01837bf34bb0c4ac55 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Fri, 1 Jan 2016 16:51:53 +0000 Subject: [PATCH] cmm: font.h increase performance on 15-20% git-svn-id: svn://kolibrios.org@6021 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/cmm/TWB/TWB.c | 8 +-- programs/cmm/TWB/absolute_url.h | 4 +- programs/cmm/browser/WebView.c | 26 ++++----- programs/cmm/browser/history.h | 8 +-- programs/cmm/eolite/Eolite.c | 16 +++--- programs/cmm/lib/font.h | 39 ++++++++++--- programs/cmm/lib/io.h | 28 +++++----- programs/cmm/lib/kolibri.h | 16 +++--- programs/cmm/lib/mem.h | 85 +++++++++++++++-------------- programs/cmm/lib/patterns/history.h | 12 ++-- programs/cmm/lib/strings.h | 2 +- 11 files changed, 136 insertions(+), 108 deletions(-) diff --git a/programs/cmm/TWB/TWB.c b/programs/cmm/TWB/TWB.c index 2b2ee7dba0..60ffebf631 100644 --- a/programs/cmm/TWB/TWB.c +++ b/programs/cmm/TWB/TWB.c @@ -90,7 +90,7 @@ void TWebBrowser::DrawStyle() { start_x = stolbec * list.font_w + body_magrin * DrawBuf.zoom + list.x; start_y = stroka * list.item_h + body_magrin; - stolbec_len = utf8_strlen(#line) * DrawBuf.zoom; + stolbec_len = strlen(#line) * DrawBuf.zoom; line_length = stolbec_len * list.font_w; if (style.h) stroka++; @@ -212,7 +212,7 @@ void TWebBrowser::Prepare(){ default: DEFAULT_MARK: if (bukva<=15) bukva=' '; - line_len = utf8_strlen(#line); + line_len = strlen(#line); if (!style.pre) && (bukva == ' ') { if (line[line_len-1]==' ') break; //no double spaces @@ -238,9 +238,9 @@ void TWebBrowser::Perenos() { int perenos_num; char new_line_text[4096]; - if (utf8_strlen(#line)*DrawBuf.zoom + stolbec < list.column_max) return; + if (strlen(#line)*DrawBuf.zoom + stolbec < list.column_max) return; perenos_num = strrchr(#line, ' '); - if (!perenos_num) && (utf8_strlen(#line)*DrawBuf.zoom>list.column_max) perenos_num=list.column_max/DrawBuf.zoom; + if (!perenos_num) && (strlen(#line)*DrawBuf.zoom>list.column_max) perenos_num=list.column_max/DrawBuf.zoom; strcpy(#new_line_text, #line + perenos_num); line[perenos_num] = 0x00; DrawStyle(); diff --git a/programs/cmm/TWB/absolute_url.h b/programs/cmm/TWB/absolute_url.h index 9c6c50c389..caf8623b49 100644 --- a/programs/cmm/TWB/absolute_url.h +++ b/programs/cmm/TWB/absolute_url.h @@ -34,11 +34,11 @@ void GetAbsoluteURL(dword in_URL) IF (!strcmpn(in_URL,"./", 2)) in_URL+=2; if (!http_transfer) { - strcpy(#newurl, History.current()); + strcpy(#newurl, history.current()); } else { - strcpy(#newurl, History.items.get(History.active-2)); + strcpy(#newurl, history.items.get(history.active-2)); } if (ESBYTE[in_URL] == '/') //remove everything after site domain name diff --git a/programs/cmm/browser/WebView.c b/programs/cmm/browser/WebView.c index b772bb7606..9ab7319be5 100644 --- a/programs/cmm/browser/WebView.c +++ b/programs/cmm/browser/WebView.c @@ -218,14 +218,14 @@ void main() http_free stdcall (http_transfer); http_transfer=0; GetAbsoluteURL(#URL); - History.back(); + history.back(); strcpy(#editURL, #URL); DrawEditBox(); OpenPage(); } else { - History.add(#URL); + history.add(#URL); ESI = http_transfer; bufpointer = ESI.http_msg.content_ptr; bufsize = ESI.http_msg.content_received; @@ -295,14 +295,14 @@ void Scan(dword id__) { case SCAN_CODE_BS: case BACK_BUTTON: - if (History.back()) { - strcpy(#URL, History.current()); + if (history.back()) { + strcpy(#URL, history.current()); OpenPage(); } return; case FORWARD_BUTTON: - if (History.forward()) { - strcpy(#URL, History.current()); + if (history.forward()) { + strcpy(#URL, history.current()); OpenPage(); } return; @@ -400,7 +400,7 @@ void OpenPage() StopLoading(); souce_mode = false; strcpy(#editURL, #URL); - History.add(#URL); + history.add(#URL); if (!strncmp(#URL,"WebView:",8)) { SetPageDefaults(); @@ -498,7 +498,7 @@ void ClickLink() if (http_transfer > 0) { StopLoading(); - History.back(); + history.back(); } strcpy(#URL, PageLinks.GetURL(PageLinks.active)); @@ -506,7 +506,7 @@ void ClickLink() if (URL[0] == '#') { strcpy(#anchor, #URL+strrchr(#URL, '#')); - strcpy(#URL, History.current()); + strcpy(#URL, history.current()); WB1.list.first=WB1.list.count-WB1.list.visible; ShowPage(); return; @@ -530,15 +530,15 @@ void ClickLink() CreateThread(#Downloader,#downloader_stak+4092); } else RunProgram("@open", #URL); - strcpy(#editURL, History.current()); - strcpy(#URL, History.current()); + strcpy(#editURL, history.current()); + strcpy(#URL, history.current()); return; } if (!strncmp(#URL,"mailto:", 7)) { notify(#URL); - strcpy(#editURL, History.current()); - strcpy(#URL, History.current()); + strcpy(#editURL, history.current()); + strcpy(#URL, history.current()); return; } OpenPage(); diff --git a/programs/cmm/browser/history.h b/programs/cmm/browser/history.h index 8ec66bbf81..e299d43564 100644 --- a/programs/cmm/browser/history.h +++ b/programs/cmm/browser/history.h @@ -5,15 +5,15 @@ ShowHistory() int t; free(history_pointer); - history_pointer = malloc(History.items.data_size+256); + history_pointer = malloc(history.items.data_size+256); strcat(history_pointer, "History

History

"); strcat(history_pointer, "

Visited pages


"); - for (i=1; i"); - strcat(history_pointer, History.items.get(i)); + strcat(history_pointer, history.items.get(i)); strcat(history_pointer, "
"); } strcat(history_pointer, "

Cached images

"); diff --git a/programs/cmm/eolite/Eolite.c b/programs/cmm/eolite/Eolite.c index 57ed546150..cccb001d40 100644 --- a/programs/cmm/eolite/Eolite.c +++ b/programs/cmm/eolite/Eolite.c @@ -170,9 +170,9 @@ void main() { if (dif_x > 150) { - if (History.forward()) + if (history.forward()) { - strcpy(#path, History.current()); + strcpy(#path, history.current()); files.KeyHome(); Open_Dir(#path,WITH_REDRAW); } @@ -324,9 +324,9 @@ void main() GoBack(); break; case 22: //Forward - if (History.forward()) + if (history.forward()) { - strcpy(#path, History.current()); + strcpy(#path, history.current()); files.KeyHome(); Open_Dir(#path,WITH_REDRAW); } @@ -743,7 +743,7 @@ void Open_Dir(dword dir_path, redraw){ if (ESBYTE[dir_path+1]!='\0') chrcat(dir_path, '/'); if (errornum) { - History.add(#path); + history.add(#path); GoBack(); Write_Error(errornum); return; @@ -761,7 +761,7 @@ void Open_Dir(dword dir_path, redraw){ PathShow_prepare stdcall(#PathShow); PathShow_draw stdcall(#PathShow); } - History.add(#path); + history.add(#path); files.visible = files.h / files.item_h; if (files.count < files.visible) files.visible = files.count; if (redraw!=ONLY_SHOW) Sorting(); @@ -999,8 +999,8 @@ inline fastcall void GoBack() char cur_folder[4096]; strcpy(#cur_folder, #path); cur_folder[strlen(#cur_folder)-1]=0x00; //delete last '/' - if (History.back()) { - strcpy(#path, History.current()); + if (history.back()) { + strcpy(#path, history.current()); SelectFileByName(#cur_folder+strrchr(#cur_folder,'/')); } } diff --git a/programs/cmm/lib/font.h b/programs/cmm/lib/font.h index 6af7dcad84..e746e1ebb5 100644 --- a/programs/cmm/lib/font.h +++ b/programs/cmm/lib/font.h @@ -9,6 +9,9 @@ #include "../lib/obj/fs.h" #endif +#include "../lib/patterns/rgb.h" + + #define DEFAULT_FONT "/sys/fonts/Tahoma.kf" :struct __SIZE @@ -211,20 +214,40 @@ inline fastcall dword b24(EBX) { return DSDWORD[EBX] << 8; } :void LABEL::apply_smooth() { dword i,line_w,to; + rgb.DwordToRgb(ShadowPixel(background,2)); //get shadowed pixel line_w = size.width * 3; to = size.height - 1 * line_w + raw - 3; for(i=raw; i < to; i+=3) { if(i-raw%line_w +3 == line_w) continue; + // pixels position, where b - black, w - write + // bw + // wb if(b24(i)==0x000000) && (b24(i+3)!=0x000000) && (b24(i+line_w)!=0x000000) && (b24(i+3+line_w)==0x000000) { - ShadowImage(i+3, 1, 1, 2); - ShadowImage(i+line_w, 1, 1, 2); + ESBYTE[i+3] = rgb.b; + ESBYTE[i+4] = rgb.g; + ESBYTE[i+5] = rgb.r; + ESBYTE[i+line_w ] = rgb.b; + ESBYTE[i+line_w+1] = rgb.g; + ESBYTE[i+line_w+2] = rgb.r; + // // I don't know why but underneath code works slower then beneath + // DSDWORD[i] = DSDWORD[i] & 0xFF000000 | dark_background; + // DSDWORD[i+line_w] = DSDWORD[i+3+line_w] & 0xFF000000 | dark_background; } + // wb + // bw else if(b24(i)!=0x000000) && (b24(i+3)==0x000000) && (b24(i+line_w)==0x000000) && (b24(i+3+line_w)!=0x000000) { - ShadowImage(i, 1, 1, 2); - ShadowImage(i+3+line_w, 1, 1, 2); + ESBYTE[i ] = rgb.b; + ESBYTE[i+1] = rgb.g; + ESBYTE[i+2] = rgb.r; + ESBYTE[i+line_w+3] = rgb.b; + ESBYTE[i+line_w+4] = rgb.g; + ESBYTE[i+line_w+5] = rgb.r; + // // I don't know why but underneath code works slower then beneath + // DSDWORD[i] = DSDWORD[i] & 0xFF000000 | dark_background; + // DSDWORD[i+3+line_w] = DSDWORD[i+3+line_w] & 0xFF000000 | dark_background; } } } @@ -281,9 +304,11 @@ inline fastcall dword b24(EBX) { return DSDWORD[EBX] << 8; } IF(!text1)return; IF(size.pt)IF(!changeSIZE())return; - size.pt = fontSizePoints; - getsize(text1); - y -= size.offset_y; + if (size.pt != fontSizePoints) { + size.pt = fontSizePoints; + getsize(text1); + y -= size.offset_y; + } color = _color; background = _background; diff --git a/programs/cmm/lib/io.h b/programs/cmm/lib/io.h index 9697f73401..ab73809da8 100644 --- a/programs/cmm/lib/io.h +++ b/programs/cmm/lib/io.h @@ -2,22 +2,22 @@ /* class IO: - io.count(path) - количество файлов в дирректории path - io.size(path) - размер (файла/папки) path - io.run(path,param) - запустить файл path с параметром param - io.write(path,data) - записать файл с данными data в дирректорию path - io.read(path) - прочитать файл path и возвратить указатель на данные - io.move(path1,path2) - переместить (файл/папку) из path1 в path2 - io.copy(path1,path2) - копировать (файл/папку) из path1 в path2 - io.set(path,attribute) - установить аттрибуты для (файла/папки) - io.del(path) - удалить (файл/папку) + io.count(path) - количество файлов в дирректории path + io.size(path) - размер (файла/папки) path + io.run(path,param) - запустить файл path с параметром param + io.write(size,data,path) - записать файл с данными data в дирректорию path + io.read(path) - прочитать файл path и возвратить указатель на данные + io.move(path1,path2) - переместить (файл/папку) из path1 в path2 + io.copy(path1,path2) - копировать (файл/папку) из path1 в path2 + io.set(path,attribute) - установить аттрибуты для (файла/папки) + io.del(path) - удалить (файл/папку) - io.dir.load(path) - загрузить в буффер данные папки path (следует очищать буффер сомандой free!!!) - io.dir.position(number) - возвратить указатель имени файла по позиции number - io.dir.make(path) - создать папку path + io.dir.load(path) - загрузить в буффер данные папки path (следует очищать буффер сомандой free!!!) + io.dir.position(number) - возвратить указатель имени файла по позиции number + io.dir.make(path) - создать папку path - io.dir.buffer - буффер данных загруженной папки ф-цией (io.dir.load) - io.dir.count - количество файлов фагруженной ф-цией (io.count) + io.dir.buffer - буффер данных загруженной папки ф-цией (io.dir.load) + io.dir.count - количество файлов фагруженной ф-цией (io.count) */ #ifndef INCLUDE_IO_H diff --git a/programs/cmm/lib/kolibri.h b/programs/cmm/lib/kolibri.h index 99d237a58a..a13ee4571b 100644 --- a/programs/cmm/lib/kolibri.h +++ b/programs/cmm/lib/kolibri.h @@ -1,4 +1,5 @@ -//CODED by Veliant, Leency, Nable. GNU GPL licence. +//CODED by Veliant, Leency, Nable, Pavelyakov. GNU GPL licence. + #ifndef INCLUDE_KOLIBRI_H #define INCLUDE_KOLIBRI_H #print "[include ]\n" @@ -805,15 +806,14 @@ void ______INIT______() DOUBLE_CLICK_DELAY = GetMouseDoubleClickDelay(); __generator = GetStartTime(); - $push ebx - $mov eax, 68 - $mov ebx, 11 - $int 0x40 - - $pop ebx + mem_init(); main(); ExitProcess(); } ______STOP______: -#endif \ No newline at end of file +#endif + +#ifndef INCLUDE_MEM_H +#include "../lib/mem.h" +#endif diff --git a/programs/cmm/lib/mem.h b/programs/cmm/lib/mem.h index 5208253285..b4b2862ebb 100644 --- a/programs/cmm/lib/mem.h +++ b/programs/cmm/lib/mem.h @@ -9,61 +9,64 @@ dword mem_init() { $push ebx - $mov eax, 68 - $mov ebx, 11 - $int 0x40 - - $pop ebx - return EAX; + $mov eax, 68 + $mov ebx, 11 + $int 0x40 + + $pop ebx + return EAX; } dword malloc(dword size) { - $push ebx - $push ecx - $mov eax, 68 - $mov ebx, 12 - $mov ecx, size - $int 0x40 - - $pop ecx - $pop ebx - return EAX; + $push ebx + $push ecx + + $mov eax, 68 + $mov ebx, 12 + $mov ecx, size + $int 0x40 + + $pop ecx + $pop ebx + return EAX; } stdcall dword realloc(dword mptr, size) { - $push ebx - $push ecx - $push edx - $mov eax, 68 - $mov ebx, 20 - $mov ecx, size - $mov edx, mptr - $int 0x40 + $push ebx + $push ecx + $push edx - $pop edx - $pop ecx - $pop ebx - return EAX; + $mov eax, 68 + $mov ebx, 20 + $mov ecx, size + $mov edx, mptr + $int 0x40 + + $pop edx + $pop ecx + $pop ebx + return EAX; } dword free(dword mptr) { - $push eax - $push ebx - $push ecx - $mov eax, 68 - $mov ebx, 13 - $mov ecx, mptr - $test ecx, ecx - $jz end0 - $int 0x40 + $push eax + $push ebx + $push ecx + + $mov eax, 68 + $mov ebx, 13 + $mov ecx, mptr + $test ecx, ecx + $jz end0 + $int 0x40 @end0: - $pop ecx - $pop ebx - $pop eax - return 0; + $pop ecx + $pop ebx + $pop eax + return 0; } inline fastcall memmov( EDI, ESI, ECX) diff --git a/programs/cmm/lib/patterns/history.h b/programs/cmm/lib/patterns/history.h index 90c5a3c470..e4ea4ccb8f 100644 --- a/programs/cmm/lib/patterns/history.h +++ b/programs/cmm/lib/patterns/history.h @@ -1,15 +1,15 @@ #include "..\lib\collection.h" -struct _History { +struct _history { collection items; int active; int add(); int back(); int forward(); dword current(); -} History; +} history; -int _History::add(dword in) +int _history::add(dword in) { if (!strcmp(in, items.get(active-1))) return 0; items.count = active; @@ -18,21 +18,21 @@ int _History::add(dword in) return 1; } -int _History::back() +int _history::back() { if (active==1) return 0; active--; return 1; } -int _History::forward() +int _history::forward() { if (active==items.count) return 0; active++; return 1; } -dword _History::current() +dword _history::current() { return items.get(active-1); } \ No newline at end of file diff --git a/programs/cmm/lib/strings.h b/programs/cmm/lib/strings.h index 4c00248261..ba5e065bb6 100644 --- a/programs/cmm/lib/strings.h +++ b/programs/cmm/lib/strings.h @@ -506,7 +506,7 @@ inline dword strstri(dword searchin, usestr_s) searchin++; if (DSBYTE[usestr_e]=='\0') return searchin; } - return 0; + return -1; }