WebView 3.2:

- improve image positioning: inline images, various line height
- revert 8443 and fix into enother way
- proceed colors without hash symbol

git-svn-id: svn://kolibrios.org@8451 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2020-12-19 00:50:55 +00:00
parent 51f9df912f
commit 132591b85f
7 changed files with 93 additions and 87 deletions

View File

@ -3,7 +3,7 @@
#include "TWB\parse_tag.h" #include "TWB\parse_tag.h"
#include "TWB\special.h" #include "TWB\special.h"
#include "TWB\tag_list.h" #include "TWB\tag_list.h"
dword page_bg; #define DEFAULT_BG_COL 0xffEBE8E9;
dword link_color_default; dword link_color_default;
dword link_color_active; dword link_color_active;
#include "TWB\links.h" #include "TWB\links.h"
@ -22,9 +22,9 @@ struct STYLE {
blq, blq,
button, button,
image; image;
dword bg_color;
LIST tag_list; LIST tag_list;
dword title; dword title;
dword cur_line_h;
void reset(); void reset();
}; };
@ -32,6 +32,7 @@ void STYLE::reset()
{ {
b = u = s = h = blq = pre = title = false; b = u = s = h = blq = pre = title = false;
font = false; font = false;
cur_line_h = NULL;
tag_list.reset(); tag_list.reset();
} }
@ -103,9 +104,10 @@ void TWebBrowser::Paint()
start_x = stolbec * list.font_w + BODY_MARGIN + list.x; start_x = stolbec * list.font_w + BODY_MARGIN + list.x;
stolbec_len = strlen(#line) * zoom; stolbec_len = strlen(#line) * zoom;
line_length = stolbec_len * list.font_w; line_length = stolbec_len * list.font_w;
style.cur_line_h = math.max(style.cur_line_h, list.item_h);
if (style.bg_color!=page_bg) { if (bg_colors.get_last() - bg_colors.get(0)) {
canvas.DrawBar(start_x, draw_y, line_length, list.item_h, style.bg_color); canvas.DrawBar(start_x, draw_y, line_length, list.item_h, bg_colors.get_last());
} }
if (style.image) { if (style.image) {
@ -141,13 +143,15 @@ void TWebBrowser::SetPageDefaults()
style.reset(); style.reset();
link_color_default = 0x0000FF; link_color_default = 0x0000FF;
link_color_active = 0xFF0000; link_color_active = 0xFF0000;
style.bg_color = page_bg = 0xffEBE8E9; //E0E3E3 EBE8E9 //style.cur_line_h = list.item_h;
canvas.Fill(0, page_bg);
links.clear(); links.clear();
anchors.clear(); anchors.clear();
img_url.drop(); img_url.drop();
text_colors.drop(); text_colors.drop();
text_colors.add(0); text_colors.add(0);
bg_colors.drop();
bg_colors.add(DEFAULT_BG_COL);
canvas.Fill(0, DEFAULT_BG_COL);
header = NULL; header = NULL;
cur_encoding = CH_CP866; cur_encoding = CH_CP866;
draw_y = BODY_MARGIN; draw_y = BODY_MARGIN;
@ -326,7 +330,8 @@ void TWebBrowser::NewLine()
} }
if (t_html) && (!t_body) return; if (t_html) && (!t_body) return;
draw_y += list.item_h; draw_y += style.cur_line_h;
style.cur_line_h = list.item_h;
if (style.blq) stolbec = 6; else stolbec = 0; if (style.blq) stolbec = 6; else stolbec = 0;
stolbec += style.tag_list.level * 5; stolbec += style.tag_list.level * 5;
} }

View File

@ -1,78 +1,75 @@
collection_int text_colors; collection_int text_colors;
collection_int bg_colors;
struct color_spec { struct WEB_COLORS {
char *name; char *name;
int rgb; dword rgb;
}; } web_colors[] = {
"aliceblue", 0xF0F8FF, "antiquewhite", 0xFAEBD7, "aqua", 0x00FFFF, "aquamarine", 0x7FFFD4,
struct color_spec color_specs[] = { "azure", 0xF0FFFF, "beige", 0xF5F5DC, "bisque", 0xFFE4C4, "black", 0x000000,
"aliceblue", 0xFFF0F8FF, "antiquewhite", 0xFFFAEBD7, "aqua", 0xFF00FFFF, "aquamarine", 0xFF7FFFD4, "blanchedalmond", 0xFFEBCD, "blue", 0x0000FF, "blueviolet", 0x8A2BE2, "brown", 0xA52A2A,
"azure", 0xFFF0FFFF, "beige", 0xFFF5F5DC, "bisque", 0xFFFFE4C4, "black", 0xFF000000, "burlywood", 0xDEB887, "cadetblue", 0x5F9EA0, "chartreuse", 0x7FFF00, "chocolate", 0xD2691E,
"blanchedalmond", 0xFFFFEBCD, "blue", 0xFF0000FF, "blueviolet", 0xFF8A2BE2, "brown", 0xFFA52A2A, "coral", 0xFF7F50, "cornflowerblue", 0x6495ED, "cornsilk", 0xFFF8DC, "crimson", 0xDC143C,
"burlywood", 0xFFDEB887, "cadetblue", 0xFF5F9EA0, "chartreuse", 0xFF7FFF00, "chocolate", 0xFFD2691E, "cyan", 0x00FFFF, "darkblue", 0x00008B, "darkcyan", 0x008B8B, "darkgoldenrod", 0xB8860B,
"coral", 0xFFFF7F50, "cornflowerblue", 0xFF6495ED, "cornsilk", 0xFFFFF8DC, "crimson", 0xFFDC143C, "darkgray", 0xA9A9A9, "darkgreen", 0x006400, "darkkhaki", 0xBDB76B, "darkmagenta", 0x8B008B,
"cyan", 0xFF00FFFF, "darkblue", 0xFF00008B, "darkcyan", 0xFF008B8B, "darkgoldenrod", 0xFFB8860B, "darkolivegreen", 0x556B2F, "darkorange", 0xFF8C00, "darkorchid", 0x9932CC, "darkred", 0x8B0000,
"darkgray", 0xFFA9A9A9, "darkgreen", 0xFF006400, "darkkhaki", 0xFFBDB76B, "darkmagenta", 0xFF8B008B, "darksalmon", 0xE9967A, "darkseagreen", 0x8FBC8F, "darkslateblue", 0x483D8B, "darkslategray", 0x2F4F4F,
"darkolivegreen", 0xFF556B2F, "darkorange", 0xFFFF8C00, "darkorchid", 0xFF9932CC, "darkred", 0xFF8B0000, "darkturquoise", 0x00CED1, "darkviolet", 0x9400D3, "deeppink", 0xFF1493, "deepskyblue", 0x00BFFF,
"darksalmon", 0xFFE9967A, "darkseagreen", 0xFF8FBC8F, "darkslateblue", 0xFF483D8B, "darkslategray", 0xFF2F4F4F, "dimgray", 0x696969, "dodgerblue", 0x1E90FF, "firebrick", 0xB22222, "floralwhite", 0xFFFAF0,
"darkturquoise", 0xFF00CED1, "darkviolet", 0xFF9400D3, "deeppink", 0xFFFF1493, "deepskyblue", 0xFF00BFFF, "forestgreen", 0x228B22, "fuchsia", 0xFF00FF, "gainsboro", 0xDCDCDC, "ghostwhite", 0xF8F8FF,
"dimgray", 0xFF696969, "dodgerblue", 0xFF1E90FF, "firebrick", 0xFFB22222, "floralwhite", 0xFFFFFAF0, "gold", 0xFFD700, "goldenrod", 0xDAA520, "gray", 0x808080, "green", 0x008000,
"forestgreen", 0xFF228B22, "fuchsia", 0xFFFF00FF, "gainsboro", 0xFFDCDCDC, "ghostwhite", 0xFFF8F8FF, "greenyellow", 0xADFF2F, "honeydew", 0xF0FFF0, "hotpink", 0xFF69B4, "indianred", 0xCD5C5C,
"gold", 0xFFFFD700, "goldenrod", 0xFFDAA520, "gray", 0xFF808080, "green", 0xFF008000, "indigo", 0x4B0082, "ivory", 0xFFFFF0, "khaki", 0xF0E68C, "lavender", 0xE6E6FA,
"greenyellow", 0xFFADFF2F, "honeydew", 0xFFF0FFF0, "hotpink", 0xFFFF69B4, "indianred", 0xFFCD5C5C, "lavenderblush", 0xFFF0F5, "lawngreen", 0x7CFC00, "lemonchiffon", 0xFFFACD, "lightblue", 0xADD8E6,
"indigo", 0xFF4B0082, "ivory", 0xFFFFFFF0, "khaki", 0xFFF0E68C, "lavender", 0xFFE6E6FA, "lightcoral", 0xF08080, "lightcyan", 0xE0FFFF, "lightgreen", 0x90EE90, "lightgrey", 0xD3D3D3,
"lavenderblush", 0xFFFFF0F5, "lawngreen", 0xFF7CFC00, "lemonchiffon", 0xFFFFFACD, "lightblue", 0xFFADD8E6, "lightpink", 0xFFB6C1, "lightsalmon", 0xFFA07A, "lightseagreen", 0x20B2AA, "lightskyblue", 0x87CEFA,
"lightcoral", 0xFFF08080, "lightcyan", 0xFFE0FFFF, "lightgreen", 0xFF90EE90, "lightgrey", 0xFFD3D3D3, "lightslategray", 0x778899, "lightsteelblue", 0xB0C4DE, "lightyellow", 0xFFFFE0, "lime", 0x00FF00,
"lightpink", 0xFFFFB6C1, "lightsalmon", 0xFFFFA07A, "lightseagreen", 0xFF20B2AA, "lightskyblue", 0xFF87CEFA, "limegreen", 0x32CD32, "linen", 0xFAF0E6, "magenta", 0xFF00FF, "maroon", 0x800000,
"lightslategray", 0xFF778899, "lightsteelblue", 0xFFB0C4DE, "lightyellow", 0xFFFFFFE0, "lime", 0xFF00FF00, "mediumaquamarine", 0x66CDAA, "mediumblue", 0x0000CD, "mediumorchid", 0xBA55D3, "mediumpurple", 0x9370DB,
"limegreen", 0xFF32CD32, "linen", 0xFFFAF0E6, "magenta", 0xFFFF00FF, "maroon", 0xFF800000, "mediumseagreen", 0x3CB371, "mediumslateblue", 0x7B68EE, "mediumspringgreen",0x00FA9A, "mediumturquoise", 0x48D1CC,
"mediumaquamarine", 0xFF66CDAA, "mediumblue", 0xFF0000CD, "mediumorchid", 0xFFBA55D3, "mediumpurple", 0xFF9370DB, "mediumvioletred", 0xC71585, "midnightblue", 0x191970, "mintcream", 0xF5FFFA, "mistyrose", 0xFFE4E1,
"mediumseagreen", 0xFF3CB371, "mediumslateblue", 0xFF7B68EE, "mediumspringgreen",0xFF00FA9A, "mediumturquoise", 0xFF48D1CC, "moccasin", 0xFFE4B5, "navajowhite", 0xFFDEAD, "navy", 0x000080, "oldlace", 0xFDF5E6,
"mediumvioletred", 0xFFC71585, "midnightblue", 0xFF191970, "mintcream", 0xFFF5FFFA, "mistyrose", 0xFFFFE4E1, "olive", 0x808000, "olivedrab", 0x6B8E23, "orange", 0xFFA500, "orangered", 0xFF4500,
"moccasin", 0xFFFFE4B5, "navajowhite", 0xFFFFDEAD, "navy", 0xFF000080, "oldlace", 0xFFFDF5E6, "orchid", 0xDA70D6, "palegoldenrod", 0xEEE8AA, "palegreen", 0x98FB98, "paleturquoise", 0xAFEEEE,
"olive", 0xFF808000, "olivedrab", 0xFF6B8E23, "orange", 0xFFFFA500, "orangered", 0xFFFF4500, "palevioletred", 0xDB7093, "papayawhip", 0xFFEFD5, "peachpuff", 0xFFDAB9, "peru", 0xCD853F,
"orchid", 0xFFDA70D6, "palegoldenrod", 0xFFEEE8AA, "palegreen", 0xFF98FB98, "paleturquoise", 0xFFAFEEEE, "pink", 0xFFC0CB, "plum", 0xDDA0DD, "powderblue", 0xB0E0E6, "purple", 0x800080,
"palevioletred", 0xFFDB7093, "papayawhip", 0xFFFFEFD5, "peachpuff", 0xFFFFDAB9, "peru", 0xFFCD853F, "red", 0xFF0000, "rosybrown", 0xBC8F8F, "royalblue", 0x4169E1, "saddlebrown", 0x8B4513,
"pink", 0xFFFFC0CB, "plum", 0xFFDDA0DD, "powderblue", 0xFFB0E0E6, "purple", 0xFF800080, "salmon", 0xFA8072, "sandybrown", 0xF4A460, "seagreen", 0x2E8B57, "seashell", 0xFFF5EE,
"red", 0xFFFF0000, "rosybrown", 0xFFBC8F8F, "royalblue", 0xFF4169E1, "saddlebrown", 0xFF8B4513, "sienna", 0xA0522D, "silver", 0xC0C0C0, "skyblue", 0x87CEEB, "slateblue", 0x6A5ACD,
"salmon", 0xFFFA8072, "sandybrown", 0xFFF4A460, "seagreen", 0xFF2E8B57, "seashell", 0xFFFFF5EE, "slategray", 0x708090, "snow", 0xFFFAFA, "springgreen", 0x00FF7F, "steelblue", 0x4682B4,
"sienna", 0xFFA0522D, "silver", 0xFFC0C0C0, "skyblue", 0xFF87CEEB, "slateblue", 0xFF6A5ACD, "tan", 0xD2B48C, "teal", 0x008080, "thistle", 0xD8BFD8, "tomato", 0xFF6347,
"slategray", 0xFF708090, "snow", 0xFFFFFAFA, "springgreen", 0xFF00FF7F, "steelblue", 0xFF4682B4, "turquoise", 0x40E0D0, "violet", 0xEE82EE, "wheat", 0xF5DEB3, "white", 0xFFFFFF,
"tan", 0xFFD2B48C, "teal", 0xFF008080, "thistle", 0xFFD8BFD8, "tomato", 0xFFFF6347, "whitesmoke", 0xF5F5F5, "yellow", 0xFFFF00, "yellowgreen", 0x9ACD32, 0};
"turquoise", 0xFF40E0D0, "violet", 0xFFEE82EE, "wheat", 0xFFF5DEB3, "white", 0xFFFFFFFF,
"whitesmoke", 0xFFF5F5F5, "yellow", 0xFFFFFF00, "yellowgreen", 0xFF9ACD32, 0};
dword GetColor(char* color_str) dword GetColor(char* color_str)
{ {
int ii; int ii;
dword textlen=0; dword textlen=0;
dword color=0xFF000000; dword color=0;
strlwr(color_str); strlwr(color_str);
if (ESBYTE[color_str] == '#') if (ESBYTE[color_str] == '#') {
{ color_str++;
textlen = strlen(color_str); } else {
if (textlen==7) || (textlen==4) for (ii=0; web_colors[ii].name!=0; ii++)
{ {
FOR (ii=1; ii<textlen; ii++) if (streq(color_str, web_colors[ii].name)) return web_colors[ii].rgb;
{
BL = ESBYTE[color_str+ii];
IF ((BL>='0') && (BL<='9')) BL -= '0';
//IF ((BL>='A') && (BL<='F')) BL -= 'A'-10;
IF ((BL>='a') && (BL<='f')) BL -= 'a'-10;
color = color*0x10 + BL;
if (textlen==4) color = color*0x10 + BL; //#abc ->> #aabbcc
}
return color;
} }
} }
else
textlen = strlen(color_str);
if (textlen==6) || (textlen==3)
{ {
for (ii=0; color_specs[ii].name!=0; ii++) FOR (ii=0; ii<textlen; ii++)
{ {
if (streq(color_str, color_specs[ii].name)) BL = ESBYTE[color_str+ii];
return color_specs[ii].rgb; IF ((BL>='0') && (BL<='9')) BL -= '0';
//IF ((BL>='A') && (BL<='F')) BL -= 'A'-10;
IF ((BL>='a') && (BL<='f')) BL -= 'a'-10;
color = color*0x10 + BL;
if (textlen==3) color = color*0x10 + BL; //#abc ->> #aabbcc
} }
return color;
} }
return text_colors.get(0); return text_colors.get(0);
} }

View File

@ -87,7 +87,7 @@ bool PAGE_LINKS::hover(dword list_y, list_first)
CursorPointer.Set(); CursorPointer.Set();
draw_underline(active, list_first, list_y, link_color_default); draw_underline(active, list_first, list_y, link_color_default);
draw_underline(i, list_first, list_y, page_bg); draw_underline(i, list_first, list_y, DEFAULT_BG_COL);
active_url = link.get(i); active_url = link.get(i);
active = i; active = i;

View File

@ -74,17 +74,23 @@ void TWebBrowser::tag_title()
void TWebBrowser::tag_font() void TWebBrowser::tag_font()
{ {
style.font = tag.opened; style.font = tag.opened;
style.bg_color = page_bg;
if (tag.opened) if (tag.opened)
{ {
if (tag.get_value_of("bg")) style.bg_color = GetColor(tag.value); if (tag.get_value_of("bg")) {
bg_colors.add(GetColor(tag.value));
} else {
bg_colors.add(bg_colors.get_last());
}
if (tag.get_value_of("color")) { if (tag.get_value_of("color")) {
text_colors.add(GetColor(tag.value)); text_colors.add(GetColor(tag.value));
} else { } else {
text_colors.add(text_colors.get_last()); text_colors.add(text_colors.get_last());
} }
} }
else text_colors.pop(); else {
text_colors.pop();
bg_colors.pop();
}
} }
void TWebBrowser::tag_div() void TWebBrowser::tag_div()
@ -121,7 +127,6 @@ void TWebBrowser::tag_a()
} }
} else { } else {
link = false; link = false;
style.bg_color = page_bg;
} }
} }
@ -147,9 +152,9 @@ void TWebBrowser::tag_meta_xml()
void TWebBrowser::tag_code() void TWebBrowser::tag_code()
{ {
if (style.pre = tag.opened) { if (style.pre = tag.opened) {
style.bg_color = 0xe4ffcb; bg_colors.add(0xe4ffcb);
} else { } else {
style.bg_color = page_bg; bg_colors.pop();
} }
} }
@ -205,8 +210,8 @@ void TWebBrowser::tag_body()
if (tag.get_value_of("alink")) link_color_active = GetColor(tag.value); if (tag.get_value_of("alink")) link_color_active = GetColor(tag.value);
if (tag.get_value_of("text")) text_colors.set(0, GetColor(tag.value)); if (tag.get_value_of("text")) text_colors.set(0, GetColor(tag.value));
if (tag.get_value_of("bgcolor")) { if (tag.get_value_of("bgcolor")) {
style.bg_color = page_bg = GetColor(tag.value); bg_colors.set(0, GetColor(tag.value));
canvas.Fill(0, page_bg); canvas.Fill(0, bg_colors.get(0));
} }
// Autodetecting encoding if no encoding was set // Autodetecting encoding if no encoding was set
if (tag.opened) && (custom_encoding==-1) && (cur_encoding == CH_CP866) { if (tag.opened) && (custom_encoding==-1) && (cur_encoding == CH_CP866) {
@ -247,7 +252,7 @@ void TWebBrowser::tag_h1234_caption()
NewLine(); NewLine();
zoom=1; zoom=1;
list.font_type = 10011000b; list.font_type = 10011000b;
list.item_h = BASIC_LINE_H; style.cur_line_h = list.item_h = BASIC_LINE_H;
} }
} }
} }
@ -260,7 +265,7 @@ void TWebBrowser::tag_img()
dword cur_img; dword cur_img;
int img_x, img_y, img_w, img_h; int img_x, img_y, img_w, img_h;
if (!tag.get_value_of("src")) goto NOIMG; if (!tag.get_value_of("src")) return;
if (streqrp(tag.value, "data:")) { if (streqrp(tag.value, "data:")) {
if (!strstr(tag.value, "base64,")) goto NOIMG; if (!strstr(tag.value, "base64,")) goto NOIMG;
@ -305,11 +310,10 @@ IMGOK:
img_w = math.min(img_w, canvas.bufw - img_x); img_w = math.min(img_w, canvas.bufw - img_x);
stolbec += img_w / 6; style.cur_line_h = math.max(list.item_h, img_h);
if (stolbec > list.column_max) NewLine();
if (img_h > list.item_h + 5) { stolbec += img_w / 6;
draw_y += img_h - list.item_h; if (stolbec > list.column_max) {
NewLine(); NewLine();
} }

View File

@ -41,7 +41,7 @@
// DATA // // DATA //
// // // //
//===================================================// //===================================================//
char version[]="WebView 3.15"; char version[]="WebView 3.2";
#define DEFAULT_URL URL_SERVICE_HOMEPAGE #define DEFAULT_URL URL_SERVICE_HOMEPAGE

View File

@ -4,8 +4,8 @@
<title>„®¬ è­ïï áâà ­¨æ </title> <title>„®¬ è­ïï áâà ­¨æ </title>
</head> </head>
<body><pre>‡ ª« ¤ª¨: <body><pre>‡ ª« ¤ª¨:
1. <a href="http://kolibrios.org" id="valera">„®¬ è­ïï áâà ­¨æ  KolibriOS</a> 1. <a href="http://kolibrios.org">„®¬ è­ïï áâà ­¨æ  KolibriOS</a>
2. <a href="http://kolibri-n.org" id="hodor">KolibriN10</a> 2. <a href="http://kolibri-n.org">KolibriN10</a>
3. <a href="http://store.kolibri-n.org">Kolibri Store</a> 3. <a href="http://store.kolibri-n.org">Kolibri Store</a>
<font bg=#F8F15B>Šáâ â¨,</font> <font bg=#F8F15B>Šáâ â¨,</font>

View File

@ -45,7 +45,7 @@ bool CANVAS::Init(dword i_bufx, i_bufy, i_bufw, i_bufh)
void CANVAS::Fill(dword start_pointer, i_fill_color) void CANVAS::Fill(dword start_pointer, i_fill_color)
{ {
dword max_i = bufw * bufh * 4 - start_pointer/4; dword max_i = bufw * bufh * 4 - start_pointer/4;
fill_color = i_fill_color; fill_color = i_fill_color | 0xFF000000; //set background color non-transparent
@MEMSETD(buf_data+start_pointer+8, max_i, fill_color); @MEMSETD(buf_data+start_pointer+8, max_i, fill_color);
} }