diff --git a/programs/cmm/TWB/TWB.c b/programs/cmm/TWB/TWB.c index f4820d6408..e4f2540114 100644 --- a/programs/cmm/TWB/TWB.c +++ b/programs/cmm/TWB/TWB.c @@ -10,6 +10,7 @@ char header[2048]; struct TWebBrowser { llist list; + dword draw_line_height, draw_line_width, draw_list_height; DrawBufer DrawBuf; void Prepare(); void Parse(); @@ -61,7 +62,7 @@ char anchor[256]; void TWebBrowser::DrawPage() { - int start_x, start_y, line_length, stolbec_len, magrin_left=5; + int start_x, start_y, zstart_x, zstart_y, line_length, zline_length, stolbec_len, magrin_left=5; if (!header) { @@ -77,18 +78,21 @@ void TWebBrowser::DrawPage() { start_x = stolbec * 6 + list.x + magrin_left; start_y = stroka * list.line_h + list.y + magrin_left; + zstart_x = stolbec * 6 + magrin_left * DrawBuf.zoomf + list.x; + zstart_y = stroka * list.line_h * DrawBuf.zoomf + magrin_left + list.y; stolbec_len = strlen(#line); line_length = stolbec_len * 6; + zline_length = stolbec_len * 6 * DrawBuf.zoomf; WriteBufText(start_x, 0, 0x88, text_colors[text_color_index], #line, buf_data); - IF (b_text) WriteBufText(start_x+1, 0, 0x88, text_colors[text_color_index], #line, buf_data); - IF (i_text) { stolbec++; DrawBuf.Skew(start_x, 0, line_length, list.line_h); } - IF (s_text) DrawBuf.DrawBar(start_x, 4, line_length, 1, text_colors[text_color_index]); - IF (u_text) DrawBuf.DrawBar(start_x, 8, line_length, 1, text_colors[text_color_index]); - IF (link) { - UnsafeDefineButton(start_x-2, start_y-1, line_length + 3, 10, PageLinks.count + 400 + BT_HIDE, 0xB5BFC9); + if (b_text) WriteBufText(start_x+1, 0, 0x88, text_colors[text_color_index], #line, buf_data); + if (i_text) { stolbec++; DrawBuf.Skew(start_x, 0, line_length, list.line_h); } + if (s_text) DrawBuf.DrawBar(start_x, 4, line_length, 1, text_colors[text_color_index]); + if (u_text) DrawBuf.DrawBar(start_x, 8, line_length, 1, text_colors[text_color_index]); + if (link) { DrawBuf.DrawBar(start_x, 8, line_length, 1, text_colors[text_color_index]); - PageLinks.AddText(#line, line_length, list.line_h, UNDERLINE); + UnsafeDefineButton(zstart_x-2, zstart_y-1, zline_length + 3, DrawBuf.zoomf * 10, PageLinks.count + 400 + BT_HIDE, 0xB5BFC9); + PageLinks.AddText(#line, zline_length, draw_line_height, UNDERLINE); } stolbec += stolbec_len; } @@ -145,6 +149,10 @@ void TWebBrowser::Parse(){ stolbec = 0; line = 0; + draw_line_height = list.line_h * DrawBuf.zoomf; + draw_line_width = list.w * DrawBuf.zoomf; + draw_list_height = list.h * DrawBuf.zoomf; + if (pre_text<>2) { pre_text=0; @@ -247,7 +255,7 @@ void TWebBrowser::Parse(){ if (stolbec + strlen(#line) > list.column_max) Perenos(); DrawPage(); line = NULL; - if (tag) SetTextStyle(list.x + 5, stroka * list.line_h + list.y + 5); //обработка тегов + if (tag) SetTextStyle(WB1.DrawBuf.zoomf * 5 + list.x, stroka * draw_line_height + list.y + 5); //обработка тегов tag = parametr = tagparam = ignor_param = NULL; break; default: @@ -265,8 +273,8 @@ void TWebBrowser::Parse(){ } DrawPage(); NewLine(); - DrawBar(list.x, stroka * list.line_h + list.y + 5, list.w, -stroka * list.line_h + list.h - 5, bg_color); - DrawBar(list.x, list.visible * list.line_h + list.y + 4, list.w, -list.visible * list.line_h + list.h - 4, bg_color); + DrawBar(list.x, stroka * draw_line_height + list.y + 5, draw_line_width, -stroka * draw_line_height + draw_list_height - 5, bg_color); + DrawBar(list.x, list.visible * draw_line_height + list.y + 4, draw_line_width, -list.visible * draw_line_height + draw_list_height - 4, bg_color); if (list.first == 0) list.count = stroka; if (anchor) //если посреди текста появится новый якорь - будет бесконечный цикл { @@ -380,7 +388,7 @@ void TWebBrowser::SetTextStyle(int left1, top1) { link = 1; text_colors[text_color_index] = link_color_inactive; - PageLinks.AddLink(#options, stolbec*6+left1, top1-2); + PageLinks.AddLink(#options, DrawBuf.zoomf * stolbec*6+left1, top1-2); } if (anchor) && (!strcmp(#parametr, "name=")) { @@ -548,7 +556,7 @@ void TWebBrowser::SetTextStyle(int left1, top1) { if (opened) { NewLine(); - if (stroka > -1) && (stroka - 2 < list.visible) DrawBuf.DrawBar(li_tab * 5 * 6 + left1 - 5, list.line_h/2-2, 2, 2, 0x555555); + if (stroka > -1) && (stroka - 2 < list.visible) DrawBuf.DrawBar(li_tab * 5 * 6 + list.x, list.line_h/2-2, 2, 2, 0x555555); } return; } @@ -606,10 +614,12 @@ void TWebBrowser::DrawScroller() scroll_wv.cur_area = list.visible; scroll_wv.position = list.first; - scroll_wv.all_redraw=0; + scroll_wv.all_redraw = 0; scroll_wv.start_x = list.x + list.w; scroll_wv.start_y = list.y; - scroll_wv.size_y=list.h; + + scroll_wv.size_y = list.h * DrawBuf.zoomf; + scroll_wv.start_x = list.w * DrawBuf.zoomf + list.x; scrollbar_v_draw(#scroll_wv); } @@ -617,18 +627,19 @@ void TWebBrowser::DrawScroller() void TWebBrowser::NewLine() { - int onleft; - int ontop; + int onleft, ontop, zontop; onleft = list.x + 5; ontop = stroka * list.line_h + list.y + 5; - if (!stroka) DrawBar(list.x, list.y, list.w, 5, bg_color); + zontop = stroka * list.line_h * DrawBuf.zoomf + list.y + 5; + if (!stroka) DrawBar(list.x, list.y, draw_line_width, 5, bg_color); if (t_html) && (!t_body) return; if (ontop>=list.y) && ( ontop < list.h+list.y-10) && (!anchor) { if (text_align == ALIGN_CENTER) DrawBuf.AlignCenter(onleft,ontop,list.w,list.line_h,stolbec * 6); if (text_align == ALIGN_RIGHT) DrawBuf.AlignRight(onleft,ontop,list.w,list.line_h,stolbec * 6); DrawBuf.bufy = ontop; + DrawBuf.zbufy = zontop; DrawBuf.Show(); DrawBuf.Fill(bg_color); } diff --git a/programs/cmm/TWB/links.h b/programs/cmm/TWB/links.h index c82a518bcc..98d1a934f9 100644 --- a/programs/cmm/TWB/links.h +++ b/programs/cmm/TWB/links.h @@ -76,11 +76,11 @@ void LinksArray::Hover(dword mx, my, link_col_in, link_col_a, bg_col) { if (active==i) return; CursorPointer.Set(); - if (links[active].underline) DrawBar(links[active].x,links[active].y+10,links[active].w,1, link_col_in); - if (links[i].underline) DrawBar(links[i].x,links[i].y+10,links[i].w,1, bg_col); + if (links[active].underline) DrawBar(links[active].x, WB1.list.line_h - WB1.DrawBuf.zoomf * WB1.DrawBuf.zoomf + links[active].y,links[active].w, WB1.DrawBuf.zoomf, link_col_in); + if (links[i].underline) DrawBar(links[i].x, WB1.list.line_h - WB1.DrawBuf.zoomf * WB1.DrawBuf.zoomf + links[i].y,links[i].w, WB1.DrawBuf.zoomf, bg_col); active = i; - status_text.start_x = progress_bar.left+progress_bar.width+10; - status_text.start_y = Form.cheight-STATUSBAR_H+3; + status_text.start_x = wv_progress_bar.left + wv_progress_bar.width + 10; + status_text.start_y = Form.cheight - STATUSBAR_H + 3; status_text.area_size_x = Form.cwidth - status_text.start_x -3; DrawBar(status_text.start_x, status_text.start_y, status_text.area_size_x, 9, col_bg); status_text.text_pointer = links[active].link; @@ -92,7 +92,7 @@ void LinksArray::Hover(dword mx, my, link_col_in, link_col_a, bg_col) if (active!=-1) { CursorPointer.Restore(); - if (links[active].underline) DrawBar(links[active].x,links[active].y+10,links[active].w,1, link_col_in); + if (links[active].underline) DrawBar(links[active].x, WB1.list.line_h - WB1.DrawBuf.zoomf * WB1.DrawBuf.zoomf + links[active].y,links[active].w, WB1.DrawBuf.zoomf, link_col_in); DrawBar(status_text.start_x, status_text.start_y, status_text.area_size_x, 9, col_bg); active = -1; } diff --git a/programs/cmm/browser/History.txt b/programs/cmm/browser/History.txt deleted file mode 100644 index 49905cee71..0000000000 --- a/programs/cmm/browser/History.txt +++ /dev/null @@ -1,449 +0,0 @@ -20.11.2013 - 0.99.6 -- переделаны ссылки, курсор превращается в руку при наведении - -29.12.2013 - 0.99.5 -- Condition Script - -27.12.2013 - 0.99.4 -- отделение TWB компонента от браузера - -15.10.13 - 0.99.1 -- поддержка тегов
(спасибо Nazarus и Jaeger); -- улучшена отзывчивость программы при прокрутке больших страниц (фикс изначально - был написан Gluk'ом для игры Косилка по моей просьбе, сюда перенесен мной); -- небольшие исправления в реакции ползунка прокрутки; -- исправлено залезание текста в наклонном шрифте на левый ободок окна; -- кнопка "Новая вкладка" и комбинации Ctrl+N, Ctrl+T банально создают новое окно; -- правильное распознание украинской буквы ґ; -- поддержка кодировки "UTF8" для универсальности (идея фичи Joaquin). - - - -20.06.11 -- v0.63 -- 11.32 Кб -lev -- наклонный шрифт -- таблица именованных цветов - -08.06.10 -- v0.62a -- 9.68 Кб -- в адресную строку нельзя было нормально ввести цифры 4 и 6 (спасибо Nasarus - за найденные баги) -- поддержка DOS-кодировки страниц (по просьбе Nasarus'a) - - -14.02.10 -- v0.62 -- 9.42 Кб -- поиск в Интернетах с помощью nigma.ru, поиск только по английским символам, - горячая комбинация клавиш Ctrl+Enter; -- улучшено и оптимизировано определение кодировки; -- небольшой фикс для работы с XHTML-тегами типа br/; -- исправлен баг: не работал просмотр (по f3) страниц из интернета; -- немного улучшено отображение изображений, но, всё равно, ещё очень плохо; -- поддержка тегов с кавычками ' (как на главной странице kolibrios.org); -- работа с историей вынесена в отдельный файл; -- исправлена поломанная в предыдущей версии работа в Интернетах. - - -31.01.10 -- v0.60 -- 8.94 Кб -- поддержка utf-8 реализованная Asper'ом ещё в ноябре, увы не попавшая в - дистр 0.7.7.0. От меня огромное спасибо Asper'у в помощи! -- исправлена ошибка при открытии страницы с /fd и /cd (спасибо Nasarus и IgorA, - которые сообщили мне об ошибке); -- поддержка шайтанской кодировки mht-страниц, то есть, сохранённых со всем - содержимым через ИЕ7 (спасибо за помощь IgorA); -- улучшено определение кодировки: например, теперь можно нормально читать хабр; -- небольшое исправление в парсинге параметров тега; -- увеличена длина URL до 4096 символов. - - -08.11.09 -- v0.57 -- 8.69 Кб -- Asper реализовал поддержку изображений, которую в HTMLv ещё надо пилить; -- поддержка .mht, скорее всего старых версий (страница Albom'a), в новых (я - сохранил в .mht через ИЕ7) вместо буковок какая-то ересь, очень похожая на - hex-коды; -- исправлено появление кнопки "остановить загрузку" когда не надо; -- оптимизации поиска и загрузки файла. - - -03.11.09 -- v0.53 -- 7.87 Кб -- восстановлена совместимость с библиотекой box_lib.obj; -- исправлена заглушка с адресами страниц, содержащими знак # ; -- программа больше не вылетает, если несколько раз нажать на локальную ссылку; -- серьёзное улучшение обработки разных ссылок; -- исправлено превышение максимальной длины истории ссылок; -- корректная обработка ссылок, содержащих знак = ; -- исправлено исчезание ссылок, если тег находится за границей видимой области; -- во время загрузки страницы, пишет "Loading..."; -- небольшие обновления кода. - - -05.06.09 -- v0.5 -- 7.91 Кб -- barsuk прикрутил загрузку страниц из Интернета через downloader за что - ему огромнейший респект :) -- исправление падения программы в случае, если страница недокачана - - исправлен выход за границы памяти при парсинге тегаов и обработке <-- -->; -- исправлена передача параметров downloader'y: обрезается / в конце; -- корректная обработка некоторых символов; -- некоторые оптимизации. - - -28.01.08 -- v0.48.5 -- 6.95 Кб -- если присутствует только закрывающий тег, без открывающего, ссылки - больше не "съезжают"; -- корректная обработка параметров, не взятых в скобки, пример: href=1.htm ; -- исправлен баг с цветом ссылок и цветом текста после ссылок; -- многоуровневые списки; -- немного улучшен алгоритм парсинга тегов; -- клавиша BackSpace опять возвращает назад; -- подчёркивание цветных ссылок теперь цвета самих ссылок; -- исправлен баг в заглушке с переходом по ссылке внутри страницы #. - - -28.01.08 -- v0.48.2 -- 6.95 Кб -- устранён вылет программы при прокрутке страницы с большим кол-вом ссылок; -- устранено "синение" текста в некоторых случаях; -- исправлен баг в чтении тега с параметрами; -- автоопределение кодировки KOI8; - - -22.01.08 -- v0.48.1 -- 6,88 Кб -21.12.08 -- v0.48.0 -- перенос по словам; -- координаты считаются от конца заголовка; -- исправлена перерисовка окна, когда страница маленькая; -- исправил баг в теге
; -- исправлен баг перерисовки первой строки; - - -07.12.08 -- v0.47 -- 7,50 Кб -- добавлен символ "апостроф", украинские буквы для кодировки win1251; -- инфа внутри фильтруется; -- переписана процедура парсинга параметров тега; -- зачатки вывода изображений (спасибо Nable и Asper за помощь); -- исправлен баг, из-за которого страницы могли не отображаться; -- исправлен баг с тегом font, из-за которого весь текст могло плющить; -- исправлен недочёт в теге(нашёл diamond); -- немного увеличена скорость обработки страниц; -- немного улучшена полоса прокрутки, исправлен один мелкий баг; - - -02.12.08 -- v0.45 -- 6,79 Кб -- поддержка кодировки KOI8-R(U) - активируется нажатием Ctrl+R. Спасибо Velianty - за написаный код; -- вывод какой-то win кодировки, где все символы отображаются, как А и т.д. - (заработал файл, присланый Albom'ом); -- исправлен очень серьёзный баг из-за которого страницы с большим количеством - ссылок приводили к вылету программы; -- кодировка DOS'a (cp866) активируется нажатием Ctrl+D; -- улучшен скролл; -- исправлен баг кнопки "Обновить"; -- иконки тулбара выводится одним изображением с палитрой, как результат меньше - перерисовка окна и размер программы. - - -20.10.08 -- v0.40 -- 7,36 Кб -- обработка нескольких параметров тега для ссылки и текста; -- перечёркивание и подчёркивание отображается тем же цветом что и текст -- правильная обработка табов; -- улучшение тега
; -- некоторые спецсимволы заменены своими "аналогами": (с), (r), обычное тире - вместо типографического; -- поддержка тегов и; -- прочие доработки и хитрожопые оптимизации отображения :) - - -19.10.08 -- v0.38.1 -- 6,85 Кб -- суровые оптимизации и как результат увеличилась скорость загрузки страниц на - 7-10% (было проверено с использованием секундомера); -- правильное отображение файлов с расширением ".txt" в окне программы; - -18.10.08 -- v0.38 -- 6,88 Кб -- для полосы адреса теперь используется отдельная переменная; -- хождение по относительным ссылкам, с косяками, но то фигня. Сделаю; -- улучшения в обработке тегов: корректно обрабатываются таб и переход на - следующую строку в теге. -- немного улучшена обработка тегов вообще, догадываюсь как сделать ваще зашибись; -- добавлена обработка цвета линий (hr). - -17.10.08 -- v0.37 -- 6,82 Кб -- реализовано преобразование тегов вида в символы (пока только 5 основных); -- немного улучшен скролл, но, всё равно, это не дело; -- F3 - просмотр исходного кода страницы; -- обновлены кнопочки "Вперёд/Назад". -Правка багов: -- исправлена табота со ссылками; -- исправлен баг с тем, что иногда отображалось два пробела в тексте вместо одного; -- исправил баг из-за которого часть текста при прокрутке могла стать синей; -- исправлен баг, связаный с клавишей BackSpace; -Огромное спасибо diamond'y за тестирование. - - -16.10.08 -- v0.35.3 -- 6,74 Кб -- кнопки от ссылок не удалялись в случае, если страница не найдена, fixed; -- улучшены кнопочки тулбара; -- пофиксил последнюю страницу от Albom'a, со скриптом; оказалось просто надо было - обнулить переменную во время её объявления; -- при сворачивании окна в заголовок, его название не исчезает. - - -15.10.08 -- v0.35 -- 6,75 Кб -- исправлен баг - вылет проги из-за переполнения памяти во время создания ссылок - (спасибо Albom'у, который прислал страницу, на которой проявляется баг); -- при перемотке колёсиком теперь проматывается 3 строчки; -- исправлена перемотка PgUp/PgDn; -- исправлена работа программы в случае, если страница не найдена; -- новые фирменные изображения на кнопках; -- исправлен тегдля длинных названий; -- теперь переход Домой записывается в хистори; -- программа больше не должна вылетать :) - - -03.10.08 -- v0.30.2 -- 6,56 Кб -- обновление страницы не приводит к записи новой ссылки в историю посещений; -- оптимизация перебора символов; -- больше не появляются белые полосы на ободке нижней части окна; -- установлены минимальные размеры окна, убраны артефакты при сворачивании окна в заголовок. - - -02.08.08 -- v0.30.1 -- 6,48 Кб -- поправил баг с историей посещений страниц; -- устранён баг, когда под самой нижней строкой появлась прозрачная полоса; -- игнорируется текст между