From 8c1db15f9181c880da8f2837f467fbb35dc9a403 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Sat, 19 Dec 2020 22:43:46 +0000 Subject: [PATCH] WebView 3.21: small fixes git-svn-id: svn://kolibrios.org@8454 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/cmm/browser/TWB/TWB.c | 39 ++++++++++++++-------------- programs/cmm/browser/TWB/set_style.h | 20 +++++++++----- programs/cmm/browser/WebView.c | 8 ++++-- 3 files changed, 40 insertions(+), 27 deletions(-) diff --git a/programs/cmm/browser/TWB/TWB.c b/programs/cmm/browser/TWB/TWB.c index ad43d4598e..dca552859d 100644 --- a/programs/cmm/browser/TWB/TWB.c +++ b/programs/cmm/browser/TWB/TWB.c @@ -83,8 +83,9 @@ struct TWebBrowser { //============================================================================================ void TWebBrowser::Paint() { - dword start_x, line_length, stolbec_len; - dword text_color__; + unsigned px; //paint x coordinate + unsigned pw; //paint y coordinate + dword pc; //paint color if (style.title) { @@ -101,37 +102,37 @@ void TWebBrowser::Paint() if (line) { - start_x = stolbec * list.font_w + BODY_MARGIN + list.x; - stolbec_len = strlen(#line) * zoom; - line_length = stolbec_len * list.font_w; + px = stolbec * list.font_w + BODY_MARGIN + list.x; + pw = strlen(#line) * zoom * list.font_w; + stolbec += strlen(#line) * zoom; + style.cur_line_h = math.max(style.cur_line_h, list.item_h); if (bg_colors.get_last() - bg_colors.get(0)) { - canvas.DrawBar(start_x, draw_y, line_length, list.item_h, bg_colors.get_last()); + canvas.DrawBar(px, draw_y, pw, list.item_h, bg_colors.get_last()); } if (style.image) { - canvas.DrawBar(start_x, draw_y, line_length, list.item_h-1, 0xF9DBCB); + canvas.DrawBar(px, draw_y, pw, list.item_h-1, 0xF9DBCB); } if (style.button) { - canvas.DrawBar(start_x, draw_y, line_length, list.item_h - calc(zoom*2), 0xCCCccc); - canvas.DrawBar(start_x, draw_y + list.item_h - calc(zoom*2), line_length, zoom, 0x999999); + canvas.DrawBar(px, draw_y, pw, list.item_h - calc(zoom*2), 0xCCCccc); + canvas.DrawBar(px, draw_y + list.item_h - calc(zoom*2), pw, zoom, 0x999999); } - text_color__ = text_colors.get_last(); - if (link) && (text_color__ == text_colors.get(0)) text_color__ = link_color_default; + pc = text_colors.get_last(); + if (link) && (pc == text_colors.get(0)) pc = link_color_default; - canvas.WriteText(start_x, draw_y, list.font_type, text_color__, #line, NULL); - if (style.b) canvas.WriteText(start_x+1, draw_y, list.font_type, text_color__, #line, NULL); - if (style.s) canvas.DrawBar(start_x, list.item_h / 2 - zoom + draw_y, line_length, zoom, text_color__); - if (style.u) canvas.DrawBar(start_x, list.item_h - zoom - zoom + draw_y, line_length, zoom, text_color__); + canvas.WriteText(px, draw_y, list.font_type, pc, #line, NULL); + if (style.b) canvas.WriteText(px+1, draw_y, list.font_type, pc, #line, NULL); + if (style.s) canvas.DrawBar(px, list.item_h / 2 - zoom + draw_y, pw, zoom, pc); + if (style.u) canvas.DrawBar(px, list.item_h - zoom - zoom + draw_y, pw, zoom, pc); if (link) { if (line[0]==' ') && (line[1]==NULL) {} else { - canvas.DrawBar(start_x, draw_y + list.item_h - calc(zoom*2)-1, line_length, zoom, link_color_default); - links.add_text(start_x, draw_y + list.y, line_length, list.item_h - calc(zoom*2)-1, zoom); + canvas.DrawBar(px, draw_y + list.item_h - calc(zoom*2)-1, pw, zoom, link_color_default); + links.add_text(px, draw_y + list.y, pw, list.item_h - calc(zoom*2)-1, zoom); } } - stolbec += stolbec_len; if (debug_mode) debugln(#line); line = NULL; } @@ -143,7 +144,7 @@ void TWebBrowser::SetPageDefaults() style.reset(); link_color_default = 0x0000FF; link_color_active = 0xFF0000; - //style.cur_line_h = list.item_h; + style.cur_line_h = list.item_h; links.clear(); anchors.clear(); img_url.drop(); diff --git a/programs/cmm/browser/TWB/set_style.h b/programs/cmm/browser/TWB/set_style.h index dbcd7d73b5..99a7e00968 100644 --- a/programs/cmm/browser/TWB/set_style.h +++ b/programs/cmm/browser/TWB/set_style.h @@ -30,7 +30,7 @@ void TWebBrowser::SetStyle() if (tag.is("blockquote")) { style.blq = tag.opened; return; } if (tag.is("dl")) { if (tag.opened) NewLine(); return; } if (tag.is("tr")) { if (tag.opened) NewLine(); return; } - if (tag.is("td")) { if (tag.opened) AddCharToTheLine(' '); return; } + if (tag.is("td")) { /*if (tag.opened) AddCharToTheLine(' ');*/ return; } if (tag.is("button")) { style.button = tag.opened; stolbec++; return; } if (tag.is("w:r")) { if (!tag.opened) style.b = false; return; } if (tag.is("h1")) { tag_h1234_caption(); return; } @@ -54,7 +54,7 @@ void TWebBrowser::SetStyle() if (tag.is("html")) { t_html = tag.opened; return; } if (tag.is("dd")) { //NewLine(); - //if (tag.opened) stolbec += 5; //stolbec overflow! + //if (tag.opened) stolbec += 5; //may overflow! return; } } @@ -265,7 +265,9 @@ void TWebBrowser::tag_img() dword cur_img; int img_x, img_y, img_w, img_h; - if (!tag.get_value_of("src")) return; + if (!tag.get_value_of("data-large-image")) + if (!tag.get_value_of("data-src")) + if (!tag.get_value_of("src")) return; if (streqrp(tag.value, "data:")) { if (!strstr(tag.value, "base64,")) goto NOIMG; @@ -281,6 +283,8 @@ void TWebBrowser::tag_img() } if (!strcmp(tag.value + strrchr(tag.value, '.'), "svg")) goto NOIMG; + if (!strcmp(tag.value + strrchr(tag.value, '.'), "webp")) goto NOIMG; + strlcpy(#img_path, tag.value, sizeof(img_path)-1); get_absolute_url(#img_path, history.current()); @@ -302,17 +306,21 @@ IMGOK: img_h = ESDWORD[cur_img+8]; img_w = ESDWORD[cur_img+4]; - if (img_w / 6 + stolbec > list.column_max) { + if (img_w / 8 + stolbec > list.column_max) { NewLine(); } - img_x = stolbec*list.font_w+3; + img_x = stolbec*list.font_w + 3; img_y = draw_y; + if (img_h < list.item_h) img_y += list.item_h - img_h / 2 - 1; else img_y -= 2; + img_w = math.min(img_w, canvas.bufw - img_x); style.cur_line_h = math.max(list.item_h, img_h); - stolbec += img_w / 6; + stolbec += img_w / 8; + if (img_w % 8) stolbec++; + if (stolbec > list.column_max) { NewLine(); } diff --git a/programs/cmm/browser/WebView.c b/programs/cmm/browser/WebView.c index fe05f5c2fa..efed19f5f7 100644 --- a/programs/cmm/browser/WebView.c +++ b/programs/cmm/browser/WebView.c @@ -41,7 +41,7 @@ // DATA // // // //===================================================// -char version[]="WebView 3.2"; +char version[]="WebView 3.21"; #define DEFAULT_URL URL_SERVICE_HOMEPAGE @@ -237,7 +237,11 @@ void main() } else if (http_get_type==IMG) { _IMG_RES: - cache.add(cur_img_url, http.content_pointer, http.content_received, IMG); + if (http.status_code >= 200) && (http.status_code < 300) { + cache.add(cur_img_url, http.content_pointer, http.content_received, IMG); + } else { + cache.add(cur_img_url, 0, 0, IMG); + } free(http.content_pointer); GetImg(false); }