forked from KolibriOS/kolibrios
WebView 2.0 Gold
git-svn-id: svn://kolibrios.org@7758 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
2c4fa5e173
commit
8a746b8351
@ -1,8 +1,7 @@
|
|||||||
#include "..\TWB\colors.h"
|
#include "..\TWB\colors.h"
|
||||||
#include "..\TWB\anchors.h"
|
#include "..\TWB\anchors.h"
|
||||||
#include "..\TWB\parce_tag.h"
|
#include "..\TWB\parce_tag.h"
|
||||||
#include "..\TWB\absolute_url.h"
|
#include "..\TWB\special.h"
|
||||||
#include "..\TWB\unicode_tags.h"
|
|
||||||
#include "..\TWB\img_cache.h"
|
#include "..\TWB\img_cache.h"
|
||||||
dword page_bg;
|
dword page_bg;
|
||||||
dword link_color_inactive;
|
dword link_color_inactive;
|
||||||
@ -22,6 +21,8 @@ struct _style {
|
|||||||
image,
|
image,
|
||||||
align;
|
align;
|
||||||
dword bg_color;
|
dword bg_color;
|
||||||
|
|
||||||
|
dword main_title;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TWebBrowser {
|
struct TWebBrowser {
|
||||||
@ -63,13 +64,18 @@ void TWebBrowser::DrawStyle()
|
|||||||
{
|
{
|
||||||
dword start_x, line_length, stolbec_len;
|
dword start_x, line_length, stolbec_len;
|
||||||
|
|
||||||
if (!header)
|
if (style.main_title)
|
||||||
{
|
{
|
||||||
strncpy(#header, #line, sizeof(header)-1);
|
strncpy(#header, #line, sizeof(header)-1);
|
||||||
|
strncat(#header, " - ", sizeof(header)-1);
|
||||||
|
strncat(#header, #version, sizeof(header)-1);
|
||||||
|
line = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (t_html) && (!t_body) {
|
||||||
line = 0;
|
line = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (t_html) && (!t_body) return;
|
|
||||||
|
|
||||||
if (line)
|
if (line)
|
||||||
{
|
{
|
||||||
@ -112,7 +118,7 @@ void TWebBrowser::DrawStyle()
|
|||||||
void TWebBrowser::SetPageDefaults()
|
void TWebBrowser::SetPageDefaults()
|
||||||
{
|
{
|
||||||
style.b = style.u = style.s = style.h = style.blq = t_html = t_body = style.pre =
|
style.b = style.u = style.s = style.h = style.blq = t_html = t_body = style.pre =
|
||||||
style.li = link = text_color_index = text_colors[0] = style.li_tab = false;
|
style.li = link = text_color_index = text_colors[0] = style.li_tab = style.main_title = false;
|
||||||
style.align = ALIGN_LEFT;
|
style.align = ALIGN_LEFT;
|
||||||
link_color_inactive = 0x0000FF;
|
link_color_inactive = 0x0000FF;
|
||||||
link_color_active = 0xFF0000;
|
link_color_active = 0xFF0000;
|
||||||
@ -121,7 +127,7 @@ void TWebBrowser::SetPageDefaults()
|
|||||||
DrawBuf.Fill(0, page_bg);
|
DrawBuf.Fill(0, page_bg);
|
||||||
PageLinks.Clear();
|
PageLinks.Clear();
|
||||||
anchors.clear();
|
anchors.clear();
|
||||||
strncpy(#header, #version, sizeof(header)-1);
|
header = NULL;
|
||||||
cur_encoding = CH_NULL;
|
cur_encoding = CH_NULL;
|
||||||
draw_y = body_magrin;
|
draw_y = body_magrin;
|
||||||
stolbec = 0;
|
stolbec = 0;
|
||||||
@ -258,25 +264,34 @@ void TWebBrowser::ParseHtml(){
|
|||||||
list.count = draw_y;
|
list.count = draw_y;
|
||||||
list.CheckDoesValuesOkey();
|
list.CheckDoesValuesOkey();
|
||||||
anchors.current = NULL;
|
anchors.current = NULL;
|
||||||
|
if (!header) {
|
||||||
|
strncpy(#header, #version, sizeof(header)-1);
|
||||||
|
DrawTitle(#header);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//============================================================================================
|
//============================================================================================
|
||||||
bool TWebBrowser::CheckForLineBreak()
|
bool TWebBrowser::CheckForLineBreak()
|
||||||
{
|
{
|
||||||
int line_break_pos;
|
int line_break_pos;
|
||||||
char new_line_text[4096];
|
char new_line_text[4096];
|
||||||
|
//Do we need a line break?
|
||||||
if (strlen(#line)*zoom + stolbec < list.column_max) return false;
|
if (strlen(#line)*zoom + stolbec < list.column_max) return false;
|
||||||
|
//Yes, we do. Lets calculate where...
|
||||||
line_break_pos = strrchr(#line, ' ');
|
line_break_pos = strrchr(#line, ' ');
|
||||||
|
//Is a new line fits in the current line?
|
||||||
if (line_break_pos*zoom + stolbec > list.column_max) {
|
if (line_break_pos*zoom + stolbec > list.column_max) {
|
||||||
line_break_pos = list.column_max/zoom - stolbec;
|
line_break_pos = list.column_max/zoom - stolbec;
|
||||||
while(line_break_pos) && (line[line_break_pos]!=' ') line_break_pos--;
|
while(line_break_pos) && (line[line_break_pos]!=' ') line_break_pos--;
|
||||||
}
|
}
|
||||||
if (!line_break_pos) && (strlen(#line)*zoom>list.column_max) {
|
//Maybe a new line is too big for the whole new line? Then we have to split it
|
||||||
line_break_pos=list.column_max/zoom;
|
if (!line_break_pos) && (style.li_tab*5 + strlen(#line) * zoom >= list.column_max) {
|
||||||
if (!stolbec)&&(style.pre) draw_y-=list.item_h; //hack to fix https://prnt.sc/rk3kyt
|
line_break_pos = list.column_max/zoom - stolbec;
|
||||||
}
|
}
|
||||||
strcpy(#new_line_text, #line + line_break_pos);
|
strcpy(#new_line_text, #line + line_break_pos);
|
||||||
line[line_break_pos] = 0x00;
|
line[line_break_pos] = 0x00;
|
||||||
|
|
||||||
DrawStyle();
|
DrawStyle();
|
||||||
|
|
||||||
strcpy(#line, #new_line_text);
|
strcpy(#line, #new_line_text);
|
||||||
NewLine();
|
NewLine();
|
||||||
//if (strlen(#line)*zoom + stolbec > list.column_max)CheckForLineBreak();
|
//if (strlen(#line)*zoom + stolbec > list.column_max)CheckForLineBreak();
|
||||||
@ -296,16 +311,10 @@ void TWebBrowser::SetStyle() {
|
|||||||
anchors.current = NULL;
|
anchors.current = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tag.is("html")) {
|
if (tag.is("html")) {
|
||||||
t_html = tag.opened;
|
t_html = tag.opened;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (tag.is("title")) {
|
|
||||||
if (tag.opened) header=NULL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tag.is("q"))
|
if (tag.is("q"))
|
||||||
{
|
{
|
||||||
if (tag.opened) {
|
if (tag.opened) {
|
||||||
@ -316,6 +325,11 @@ void TWebBrowser::SetStyle() {
|
|||||||
if (!tag.opened) strcat(#line, "\" ");
|
if (!tag.opened) strcat(#line, "\" ");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (tag.is("title")) {
|
||||||
|
style.main_title = tag.opened;
|
||||||
|
if (!tag.opened) DrawTitle(#header);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (tag.is("body")) {
|
if (tag.is("body")) {
|
||||||
t_body = tag.opened;
|
t_body = tag.opened;
|
||||||
if (value = tag.get_value_of("link=")) link_color_inactive = GetColor(value);
|
if (value = tag.get_value_of("link=")) link_color_inactive = GetColor(value);
|
||||||
@ -325,19 +339,6 @@ void TWebBrowser::SetStyle() {
|
|||||||
style.bg_color = page_bg = GetColor(value);
|
style.bg_color = page_bg = GetColor(value);
|
||||||
DrawBuf.Fill(0, page_bg);
|
DrawBuf.Fill(0, page_bg);
|
||||||
}
|
}
|
||||||
if (tag.opened) {
|
|
||||||
if (cur_encoding==CH_NULL) {
|
|
||||||
cur_encoding = CH_CP866;
|
|
||||||
//BufEncode(CH_UTF8);
|
|
||||||
debugln("Document has no information about encoding!");
|
|
||||||
}
|
|
||||||
if (!streq(#header, #version)) {
|
|
||||||
ChangeCharset(charsets[cur_encoding], "CP866", #header);
|
|
||||||
strncat(#header, " - ", sizeof(header)-1);
|
|
||||||
strncat(#header, #version, sizeof(header)-1);
|
|
||||||
}
|
|
||||||
DrawTitle(#header);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (tag.is("a")) {
|
if (tag.is("a")) {
|
||||||
@ -415,28 +416,25 @@ void TWebBrowser::SetStyle() {
|
|||||||
//ImgCache.Images( list.x, draw_y, WB1.list.w);
|
//ImgCache.Images( list.x, draw_y, WB1.list.w);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (tag.is("h4")) {
|
||||||
|
NewLine();
|
||||||
|
style.h = tag.opened;
|
||||||
|
style.b = tag.opened;
|
||||||
|
}
|
||||||
if (tag.is("h1")) || (tag.is("h2")) || (tag.is("h3")) || (tag.is("caption")) {
|
if (tag.is("h1")) || (tag.is("h2")) || (tag.is("h3")) || (tag.is("caption")) {
|
||||||
style.h = tag.opened;
|
style.h = tag.opened;
|
||||||
if (tag.opened)
|
if (tag.opened) {
|
||||||
{
|
|
||||||
NewLine();
|
NewLine();
|
||||||
draw_y += 10;
|
draw_y += 10;
|
||||||
WB1.zoom=2;
|
WB1.zoom=2;
|
||||||
WB1.list.font_type |= 10011001b;
|
WB1.list.font_type |= 10011001b;
|
||||||
if (value = tag.get_value_of("align=")) {
|
list.item_h = basic_line_h * 2 - 2;
|
||||||
if (streq(value, "center")) style.align = ALIGN_CENTER;
|
|
||||||
if (streq(value, "right")) style.align = ALIGN_RIGHT;
|
|
||||||
}
|
|
||||||
list.item_h = basic_line_h * 2;
|
|
||||||
if (tag.is("h1")) style.b = true;
|
if (tag.is("h1")) style.b = true;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
if (tag.is("h1")) style.b = false;
|
if (tag.is("h1")) style.b = false;
|
||||||
NewLine();
|
NewLine();
|
||||||
WB1.zoom=1;
|
WB1.zoom=1;
|
||||||
WB1.list.font_type = 10011000b;
|
WB1.list.font_type = 10011000b;
|
||||||
style.align = ALIGN_LEFT;
|
|
||||||
list.item_h = basic_line_h;
|
list.item_h = basic_line_h;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -451,6 +449,7 @@ void TWebBrowser::SetStyle() {
|
|||||||
style.li = tag.opened;
|
style.li = tag.opened;
|
||||||
if (tag.opened)
|
if (tag.opened)
|
||||||
{
|
{
|
||||||
|
if (style.li_tab==0) style.li_tab++;
|
||||||
NewLine();
|
NewLine();
|
||||||
stolbec = style.li_tab * 5 - 2;
|
stolbec = style.li_tab * 5 - 2;
|
||||||
strcpy(#line, "\31 ");
|
strcpy(#line, "\31 ");
|
||||||
@ -462,10 +461,12 @@ void TWebBrowser::SetStyle() {
|
|||||||
if (!tag.opened)
|
if (!tag.opened)
|
||||||
{
|
{
|
||||||
style.li = false;
|
style.li = false;
|
||||||
style.li_tab--;
|
if (style.li_tab>0) style.li_tab--;
|
||||||
NewLine();
|
NewLine();
|
||||||
}
|
}
|
||||||
else style.li_tab++;
|
else {
|
||||||
|
if (style.li_tab<5) style.li_tab++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (tag.is("hr")) {
|
if (tag.is("hr")) {
|
||||||
if (value = tag.get_value_of("color=")) EDI = GetColor(value); else EDI = 0x999999;
|
if (value = tag.get_value_of("color=")) EDI = GetColor(value); else EDI = 0x999999;
|
||||||
@ -490,7 +491,13 @@ void TWebBrowser::SetStyle() {
|
|||||||
else if (streq(value,"iso-8859-5")) || (streq(value,"iso8859-5")) meta_encoding = CH_ISO8859_5;
|
else if (streq(value,"iso-8859-5")) || (streq(value,"iso8859-5")) meta_encoding = CH_ISO8859_5;
|
||||||
else if (streq(value,"koi8-r")) || (streq(value,"koi8-u")) meta_encoding = CH_KOI8;
|
else if (streq(value,"koi8-r")) || (streq(value,"koi8-u")) meta_encoding = CH_KOI8;
|
||||||
}
|
}
|
||||||
if (meta_encoding!=CH_NULL) BufEncode(meta_encoding);
|
if (meta_encoding!=CH_NULL) {
|
||||||
|
BufEncode(meta_encoding);
|
||||||
|
if (header) {
|
||||||
|
ChangeCharset(charsets[cur_encoding], "CP866", #header);
|
||||||
|
DrawTitle(#header);
|
||||||
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,53 +0,0 @@
|
|||||||
|
|
||||||
:dword GetAbsoluteURL(dword new_URL, base_URL)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
dword orig_URL = new_URL;
|
|
||||||
char newurl[URL_SIZE+1];
|
|
||||||
strcpy(#newurl, base_URL);
|
|
||||||
|
|
||||||
while (i=strstr(new_URL, "&"))
|
|
||||||
{
|
|
||||||
strcpy(i+1, i+5);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (check_is_the_url_absolute(new_URL)) return orig_URL;
|
|
||||||
|
|
||||||
IF (!strncmp(new_URL,"//", 2))
|
|
||||||
{
|
|
||||||
strcpy(#newurl, "http:");
|
|
||||||
strcat(#newurl, new_URL);
|
|
||||||
strcpy(orig_URL, #newurl);
|
|
||||||
return orig_URL;
|
|
||||||
}
|
|
||||||
|
|
||||||
IF (!strncmp(new_URL,"./", 2)) new_URL+=2;
|
|
||||||
|
|
||||||
if (ESBYTE[new_URL] == '/') //remove everything after site domain name
|
|
||||||
{
|
|
||||||
i = strchr(#newurl+8, '/');
|
|
||||||
if (i) ESBYTE[i]=0;
|
|
||||||
new_URL+=1;
|
|
||||||
}
|
|
||||||
|
|
||||||
_CUT_ST_LEVEL_MARK:
|
|
||||||
|
|
||||||
if (newurl[strrchr(#newurl, '/')-2]<>'/')
|
|
||||||
{
|
|
||||||
newurl[strrchr(#newurl, '/')] = 0x00;
|
|
||||||
}
|
|
||||||
|
|
||||||
IF (!strncmp(new_URL,"../",3))
|
|
||||||
{
|
|
||||||
new_URL+=3;
|
|
||||||
newurl[strrchr(#newurl, '/')-1] = 0x00;
|
|
||||||
goto _CUT_ST_LEVEL_MARK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newurl[strlen(#newurl)-1]<>'/') strcat(#newurl, "/");
|
|
||||||
|
|
||||||
strcat(#newurl, new_URL);
|
|
||||||
strcpy(orig_URL, #newurl);
|
|
||||||
return orig_URL;
|
|
||||||
}
|
|
||||||
|
|
@ -54,6 +54,7 @@ dword LinksArray::GetURL(int id)
|
|||||||
return links[id].link;
|
return links[id].link;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool open_new_window=false;
|
||||||
void LinksArray::Clear()
|
void LinksArray::Clear()
|
||||||
{
|
{
|
||||||
page_links.drop();
|
page_links.drop();
|
||||||
@ -62,6 +63,7 @@ void LinksArray::Clear()
|
|||||||
active = -1;
|
active = -1;
|
||||||
unic_count = 0;
|
unic_count = 0;
|
||||||
CursorPointer.Restore();
|
CursorPointer.Restore();
|
||||||
|
open_new_window = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LinksArray::DrawUnderline(dword und_id, list_first, list_y, color)
|
void LinksArray::DrawUnderline(dword und_id, list_first, list_y, color)
|
||||||
@ -75,7 +77,7 @@ void LinksArray::DrawUnderline(dword und_id, list_first, list_y, color)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PathShow_data status_text = {0, 17,250, 6, 250, 0, 0, 0x0, 0xFFFfff, 0, NULL, 0};
|
PathShow_data status_text = {0, 17,250, 6, 250};
|
||||||
|
|
||||||
bool LinksArray::HoverAndProceed(dword mx, my, list_y, list_first)
|
bool LinksArray::HoverAndProceed(dword mx, my, list_y, list_first)
|
||||||
{
|
{
|
||||||
@ -93,7 +95,9 @@ bool LinksArray::HoverAndProceed(dword mx, my, list_y, list_first)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (mouse.mkm) && (mouse.up) {
|
if (mouse.mkm) && (mouse.up) {
|
||||||
RunProgram(#program_path, PageLinks.GetURL(PageLinks.active));
|
open_new_window = true;
|
||||||
|
EventClickLink(PageLinks.GetURL(PageLinks.active));
|
||||||
|
open_new_window = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (mouse.lkm) && (mouse.up) {
|
if (mouse.lkm) && (mouse.up) {
|
||||||
|
@ -20,6 +20,14 @@ char *unicode_symbols[]={
|
|||||||
"mdash", "-", //--
|
"mdash", "-", //--
|
||||||
|
|
||||||
"rsquo", "'",
|
"rsquo", "'",
|
||||||
|
"sect", "#",
|
||||||
|
|
||||||
|
"ensp", " ",
|
||||||
|
"emsp13", " ",
|
||||||
|
"emsp14", " ",
|
||||||
|
"numsp", " ",
|
||||||
|
"puncsp", " ",
|
||||||
|
"thinsp", " ",
|
||||||
|
|
||||||
"#1028", "\242",
|
"#1028", "\242",
|
||||||
"#1030", "I",
|
"#1030", "I",
|
||||||
@ -33,6 +41,8 @@ char *unicode_symbols[]={
|
|||||||
"#8470", "N",
|
"#8470", "N",
|
||||||
"#8722", "-",
|
"#8722", "-",
|
||||||
"#9642", "-", //square in the middle of the line
|
"#9642", "-", //square in the middle of the line
|
||||||
|
"#9658", ">",
|
||||||
|
"#9660", "v",
|
||||||
"#65122", "+",
|
"#65122", "+",
|
||||||
|
|
||||||
"uarr", "\24",
|
"uarr", "\24",
|
||||||
@ -45,6 +55,9 @@ char *unicode_symbols[]={
|
|||||||
|
|
||||||
"#xfeff", "",
|
"#xfeff", "",
|
||||||
|
|
||||||
|
"times", "x",
|
||||||
|
"lowast","*",
|
||||||
|
|
||||||
0};
|
0};
|
||||||
|
|
||||||
|
|
@ -30,45 +30,48 @@
|
|||||||
#include "..\lib\patterns\simple_open_dialog.h"
|
#include "..\lib\patterns\simple_open_dialog.h"
|
||||||
|
|
||||||
#include "show_src.h"
|
#include "show_src.h"
|
||||||
_http http = {0, 0, 0, 0, 0, 0, 0};
|
|
||||||
#include "download_manager.h"
|
#include "download_manager.h"
|
||||||
_history history;
|
_history history;
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
bool debug_mode = false;
|
bool debug_mode = false;
|
||||||
dword col_bg = 0xE3E2E2;
|
|
||||||
dword panel_color = 0xE3E2E2;
|
|
||||||
dword border_color = 0x787878;
|
|
||||||
#include "..\TWB\TWB.c"
|
#include "..\TWB\TWB.c"
|
||||||
|
|
||||||
|
char version[]="WebView 2.0 Gold";
|
||||||
|
|
||||||
#ifdef LANG_RUS
|
#ifdef LANG_RUS
|
||||||
char version[]="’¥ªáâ®¢ë© ¡à 㧥à 2.0 beta4";
|
|
||||||
char page_not_found[] = FROM "html\\page_not_found_ru.htm""\0";
|
char page_not_found[] = FROM "html\\page_not_found_ru.htm""\0";
|
||||||
char homepage[] = FROM "html\\homepage_ru.htm""\0";
|
char homepage[] = FROM "html\\homepage_ru.htm""\0";
|
||||||
char help[] = FROM "html\\help_ru.htm""\0";
|
char help[] = FROM "html\\help_ru.htm""\0";
|
||||||
char accept_language[]= "Accept-Language: ru\n";
|
char accept_language[]= "Accept-Language: ru\n";
|
||||||
char rmb_menu[] =
|
char rmb_menu[] =
|
||||||
"<EFBFBD>®á¬®âà¥âì ¨á室¨ª
|
"<EFBFBD>®á¬®âà¥âì ¨á室¨ª
|
||||||
<EFBFBD>¥¤ ªâ¨à®¢ âì ¨á室¨ª
|
<EFBFBD>¥¤ ªâ¨à®¢ âì ¨á室¨ª";
|
||||||
|
char main_menu[] =
|
||||||
|
"Žâªàëâì ä ©«
|
||||||
|
<EFBFBD>®¢®¥ ®ª®
|
||||||
ˆáâ®à¨ï
|
ˆáâ®à¨ï
|
||||||
Œ¥¥¤¦¥à § £à㧮ª";
|
Œ¥¥¤¦¥à § £à㧮ª";
|
||||||
char link_menu[] =
|
char link_menu[] =
|
||||||
"Š®¯¨à®¢ âì áá뫪ã
|
"Š®¯¨à®¢ âì áá뫪ã
|
||||||
‘ª ç âì ᮤ¥à¦¨¬®¥ áá뫪¨";
|
‘ª ç âì ᮤ¥à¦¨¬®¥ áá뫪¨";
|
||||||
|
char loading_text[] = "‡ £à㧪 ...";
|
||||||
#else
|
#else
|
||||||
char version[]="Text-based Browser 2.0 beta4";
|
|
||||||
char page_not_found[] = FROM "html\\page_not_found_en.htm""\0";
|
char page_not_found[] = FROM "html\\page_not_found_en.htm""\0";
|
||||||
char homepage[] = FROM "html\\homepage_en.htm""\0";
|
char homepage[] = FROM "html\\homepage_en.htm""\0";
|
||||||
char help[] = FROM "html\\help_en.htm""\0";
|
char help[] = FROM "html\\help_en.htm""\0";
|
||||||
char accept_language[]= "Accept-Language: en\n";
|
char accept_language[]= "Accept-Language: en\n";
|
||||||
char rmb_menu[] =
|
char rmb_menu[] =
|
||||||
"View source
|
"View source
|
||||||
Edit source
|
Edit source";
|
||||||
|
char main_menu[] =
|
||||||
|
"Open local file
|
||||||
|
New window
|
||||||
History
|
History
|
||||||
Download Manager";
|
Download Manager";
|
||||||
char link_menu[] =
|
char link_menu[] =
|
||||||
"Copy link
|
"Copy link
|
||||||
Download link contents";
|
Download link contents";
|
||||||
|
char loading_text[] = "Loading...";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define URL_SIZE 4000
|
#define URL_SIZE 4000
|
||||||
@ -77,12 +80,16 @@ Download link contents";
|
|||||||
#define URL_SERVICE_HOMEPAGE "WebView:home"
|
#define URL_SERVICE_HOMEPAGE "WebView:home"
|
||||||
#define URL_SERVICE_HELP "WebView:help"
|
#define URL_SERVICE_HELP "WebView:help"
|
||||||
|
|
||||||
#define TOOLBAR_GAPS 10
|
#define PADDING 9
|
||||||
dword TOOLBAR_H = 40;
|
#define SKIN_Y 24
|
||||||
|
#define TSZE 25
|
||||||
|
dword TOOLBAR_H = PADDING+TSZE+PADDING+2;
|
||||||
dword STATUSBAR_H = 15;
|
dword STATUSBAR_H = 15;
|
||||||
|
|
||||||
int action_buf;
|
int action_buf;
|
||||||
|
|
||||||
|
_http http = {0, 0, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
bool source_mode = false;
|
bool source_mode = false;
|
||||||
|
|
||||||
progress_bar wv_progress_bar;
|
progress_bar wv_progress_bar;
|
||||||
@ -97,6 +104,8 @@ enum {
|
|||||||
SANDWICH_BUTTON,
|
SANDWICH_BUTTON,
|
||||||
VIEW_SOURCE,
|
VIEW_SOURCE,
|
||||||
EDIT_SOURCE,
|
EDIT_SOURCE,
|
||||||
|
OPEN_FILE,
|
||||||
|
NEW_WINDOW,
|
||||||
VIEW_HISTORY,
|
VIEW_HISTORY,
|
||||||
DOWNLOAD_MANAGER,
|
DOWNLOAD_MANAGER,
|
||||||
COPY_LINK_URL,
|
COPY_LINK_URL,
|
||||||
@ -107,10 +116,9 @@ char default_dir[] = "/rd/1";
|
|||||||
od_filter filter2 = { 16, "TXT\0HTM\0HTML\0\0" };
|
od_filter filter2 = { 16, "TXT\0HTM\0HTML\0\0" };
|
||||||
|
|
||||||
char editURL[URL_SIZE+1];
|
char editURL[URL_SIZE+1];
|
||||||
edit_box address_box = {NULL,TOOLBAR_GAPS+TOOLBAR_GAPS+51,10,0xffffff,0x94AECE,0xffffff,
|
edit_box address_box = {, PADDING+TSZE*2+PADDING+6, PADDING+3, 0xffffff,
|
||||||
0xffffff,0x10000000,URL_SIZE-2,#editURL,0,NULL,19,19};
|
0x94AECE, 0xffffff, 0xffffff,0x10000000,URL_SIZE-2,#editURL,0,,19,19};
|
||||||
|
|
||||||
#define SKIN_Y 24
|
|
||||||
|
|
||||||
void LoadLibraries()
|
void LoadLibraries()
|
||||||
{
|
{
|
||||||
@ -143,8 +151,7 @@ void HandleParam()
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
int redirect_count = 0;
|
int i, btn, redirect_count=0;
|
||||||
int i;
|
|
||||||
LoadLibraries();
|
LoadLibraries();
|
||||||
CreateDir("/tmp0/1/downloads");
|
CreateDir("/tmp0/1/downloads");
|
||||||
Libimg_LoadImage(#skin, "/sys/toolbar.png");
|
Libimg_LoadImage(#skin, "/sys/toolbar.png");
|
||||||
@ -171,10 +178,15 @@ void main()
|
|||||||
WB1.DrawPage();
|
WB1.DrawPage();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (mouse.up) && (! address_box.flags & ed_focus) && (address_box.flags & ed_shift_bac)
|
||||||
|
{
|
||||||
|
DrawOmnibox(); //reset text selection
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case evButton:
|
case evButton:
|
||||||
ProcessEvent(GetButtonID());
|
btn = GetButtonID();
|
||||||
|
if (1==btn) ExitProcess(); else ProcessEvent(btn);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case evKey:
|
case evKey:
|
||||||
@ -225,7 +237,6 @@ void main()
|
|||||||
GetScreenHeight()-700/2-random(80),800,700,0x73,0,0,0);
|
GetScreenHeight()-700/2-random(80),800,700,0x73,0,0,0);
|
||||||
GetProcessInfo(#Form, SelfInfo);
|
GetProcessInfo(#Form, SelfInfo);
|
||||||
system.color.get();
|
system.color.get();
|
||||||
col_bg = system.color.work;
|
|
||||||
if (Form.status_window>2) { DrawTitle(#header); break; }
|
if (Form.status_window>2) { DrawTitle(#header); break; }
|
||||||
if (Form.height<120) { MoveSize(OLD,OLD,OLD,120); break; }
|
if (Form.height<120) { MoveSize(OLD,OLD,OLD,120); break; }
|
||||||
if (Form.width<280) { MoveSize(OLD,OLD,280,OLD); break; }
|
if (Form.width<280) { MoveSize(OLD,OLD,280,OLD); break; }
|
||||||
@ -233,79 +244,83 @@ void main()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case evNetwork:
|
case evNetwork:
|
||||||
if (http.transfer > 0) {
|
if (http.transfer <= 0) break;
|
||||||
http.receive();
|
http.receive();
|
||||||
EventUpdateProgressBar();
|
EventUpdateProgressBar();
|
||||||
if (http.receive_result == 0) {
|
if (http.receive_result != 0) break;
|
||||||
// Handle redirects
|
|
||||||
if (http.status_code >= 300) && (http.status_code < 400)
|
if (http.status_code >= 300) && (http.status_code < 400)
|
||||||
{
|
{
|
||||||
|
// Handle redirects
|
||||||
|
if (redirect_count<=5) {
|
||||||
redirect_count++;
|
redirect_count++;
|
||||||
if (redirect_count>5)
|
|
||||||
{
|
|
||||||
notify("'Too many redirects.' -E");
|
|
||||||
StopLoading();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
http.handle_redirect();
|
http.handle_redirect();
|
||||||
http.free();
|
http.free();
|
||||||
GetAbsoluteURL(#http.redirect_url, history.current());
|
GetAbsoluteURL(#http.redirect_url, history.current());
|
||||||
debug("Redirect: "); debugln(#http.redirect_url);
|
|
||||||
history.back();
|
history.back();
|
||||||
OpenPage(#http.redirect_url);
|
OpenPage(#http.redirect_url);
|
||||||
|
} else {
|
||||||
|
notify("'Too many redirects.' -E");
|
||||||
|
StopLoading();
|
||||||
}
|
}
|
||||||
break;
|
} else {
|
||||||
}
|
|
||||||
redirect_count = 0;
|
|
||||||
// Loading the page is complete, free resources
|
// Loading the page is complete, free resources
|
||||||
|
redirect_count = 0;
|
||||||
http.free();
|
http.free();
|
||||||
LoadInternalPage(http.content_pointer, http.content_received);
|
LoadInternalPage(http.content_pointer, http.content_received);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void SetElementSizes()
|
void SetElementSizes()
|
||||||
{
|
{
|
||||||
address_box.top = TOOLBAR_H/2-10;
|
|
||||||
basic_line_h = calc(WB1.list.font_h * 130) / 100;
|
basic_line_h = calc(WB1.list.font_h * 130) / 100;
|
||||||
address_box.width = Form.cwidth - address_box.left - 55;
|
address_box.width = Form.cwidth - address_box.left - 52 - 16;
|
||||||
WB1.list.SetSizes(0, TOOLBAR_H, Form.width - 10 - scroll_wv.size_x,
|
WB1.list.SetSizes(0, TOOLBAR_H, Form.width - 10 - scroll_wv.size_x,
|
||||||
Form.cheight - TOOLBAR_H - STATUSBAR_H, basic_line_h);
|
Form.cheight - TOOLBAR_H - STATUSBAR_H, basic_line_h);
|
||||||
WB1.list.wheel_size = 7 * basic_line_h;
|
WB1.list.wheel_size = 7 * basic_line_h;
|
||||||
WB1.list.column_max = WB1.list.w - scroll_wv.size_x / WB1.list.font_w + 1;
|
WB1.list.column_max = WB1.list.w - scroll_wv.size_x / WB1.list.font_w + 1;
|
||||||
WB1.list.visible = WB1.list.h;
|
WB1.list.visible = WB1.list.h;
|
||||||
if (WB1.list.w!=WB1.DrawBuf.bufw) {
|
|
||||||
WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, 400*20);
|
|
||||||
OpenPage(history.current());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void draw_window()
|
void draw_window()
|
||||||
{
|
{
|
||||||
DrawBar(0,0, Form.cwidth,TOOLBAR_H-2, panel_color);
|
int i;
|
||||||
DrawBar(0,TOOLBAR_H-2, Form.cwidth,1, 0xD7D0D3);
|
|
||||||
DrawBar(0,TOOLBAR_H-1, Form.cwidth,1, border_color);
|
|
||||||
SetElementSizes();
|
SetElementSizes();
|
||||||
DefineHiddenButton(TOOLBAR_GAPS, address_box.top-2, 24, skin.h-2, BACK_BUTTON);
|
|
||||||
DefineHiddenButton(TOOLBAR_GAPS+25, address_box.top-2, 24, skin.h-2, FORWARD_BUTTON);
|
DrawBar(0,0, Form.cwidth,PADDING, system.color.work);
|
||||||
img_draw stdcall(skin.image, TOOLBAR_GAPS-1, address_box.top-3, 51, skin.h, 0, SKIN_Y);
|
DrawBar(0,PADDING+TSZE+1, Form.cwidth,PADDING-1, system.color.work);
|
||||||
DefineHiddenButton(address_box.left+address_box.width-4, address_box.top-2, 20, skin.h-3, REFRESH_BUTTON);
|
DrawBar(0,TOOLBAR_H-2, Form.cwidth,1, system.color.work_dark);
|
||||||
DefineHiddenButton(Form.cwidth-31, address_box.top-3, 24, skin.h-1, SANDWICH_BUTTON);
|
DrawBar(0,TOOLBAR_H-1, Form.cwidth,1, system.color.work_graph);
|
||||||
img_draw stdcall(skin.image, Form.cwidth-27, address_box.top+1, 17, 18, 51, SKIN_Y);
|
DrawBar(0, PADDING, address_box.left-2, TSZE+1, system.color.work);
|
||||||
DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,STATUSBAR_H, col_bg);
|
DrawBar(address_box.left+address_box.width+18, PADDING, Form.cwidth-address_box.left-address_box.width-18, TSZE+1, system.color.work);
|
||||||
DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,1, border_color);
|
|
||||||
if (!header) {
|
DrawTopPanelButton(BACK_BUTTON, PADDING-1, 30);
|
||||||
|
DrawTopPanelButton(FORWARD_BUTTON, PADDING+TSZE+PADDING-2, 31);
|
||||||
|
DrawTopPanelButton(SANDWICH_BUTTON, Form.cwidth-PADDING-TSZE-3, -1);
|
||||||
|
for (i=0; i<=2; i++) DrawBar(Form.cwidth-PADDING-TSZE+3, i*5+PADDING+7, 15, 3, system.color.work_graph);
|
||||||
|
|
||||||
|
DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,STATUSBAR_H, system.color.work);
|
||||||
|
DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,1, system.color.work_graph);
|
||||||
|
|
||||||
|
DrawRectangle(WB1.list.x + WB1.list.w, WB1.list.y, scroll_wv.size_x,
|
||||||
|
WB1.list.h-1, scroll_wv.bckg_col);
|
||||||
|
|
||||||
|
if (WB1.list.w!=WB1.DrawBuf.bufw) {
|
||||||
|
WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, 400*20);
|
||||||
|
if (!strncmp(history.current(),"http",4)) {
|
||||||
|
//nihuya ne izyachnoe reshenie, no pust' poka butet tak
|
||||||
|
i=source_mode;
|
||||||
|
debugval("source_mode", source_mode);
|
||||||
|
LoadInternalPage(#loading_text, sizeof(loading_text));
|
||||||
|
source_mode=i;
|
||||||
|
debugval("source_mode", source_mode);
|
||||||
|
}
|
||||||
OpenPage(history.current());
|
OpenPage(history.current());
|
||||||
WB1.DrawScroller();
|
|
||||||
} else {
|
} else {
|
||||||
WB1.DrawPage();
|
WB1.DrawPage();
|
||||||
DrawOmnibox();
|
DrawOmnibox();
|
||||||
DrawRectangle(scroll_wv.start_x, scroll_wv.start_y, scroll_wv.size_x,
|
|
||||||
scroll_wv.size_y-1, scroll_wv.bckg_col);
|
|
||||||
}
|
}
|
||||||
DrawProgress();
|
DrawProgress();
|
||||||
}
|
}
|
||||||
@ -315,8 +330,8 @@ void ProcessEvent(dword id__)
|
|||||||
{
|
{
|
||||||
switch (id__)
|
switch (id__)
|
||||||
{
|
{
|
||||||
case 1:
|
case NEW_WINDOW:
|
||||||
ExitProcess();
|
RunProgram(#program_path, NULL);
|
||||||
return;
|
return;
|
||||||
case SCAN_CODE_BS:
|
case SCAN_CODE_BS:
|
||||||
case BACK_BUTTON:
|
case BACK_BUTTON:
|
||||||
@ -342,7 +357,7 @@ void ProcessEvent(dword id__)
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case SANDWICH_BUTTON:
|
case SANDWICH_BUTTON:
|
||||||
EventShowPageMenu(Form.cwidth - 215, TOOLBAR_H-6);
|
EventShowMainMenu(Form.cwidth - 215, TOOLBAR_H-6);
|
||||||
return;
|
return;
|
||||||
case VIEW_SOURCE:
|
case VIEW_SOURCE:
|
||||||
EventViewSource();
|
EventViewSource();
|
||||||
@ -374,6 +389,9 @@ void ProcessEvent(dword id__)
|
|||||||
CreateThread(#Downloader,#downloader_stak+4092);
|
CreateThread(#Downloader,#downloader_stak+4092);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
case OPEN_FILE:
|
||||||
|
EventOpenDialog();
|
||||||
|
return;
|
||||||
case SCAN_CODE_F12:
|
case SCAN_CODE_F12:
|
||||||
debug_mode ^= 1;
|
debug_mode ^= 1;
|
||||||
if (debug_mode) notify("'Debug mode ON'-I");
|
if (debug_mode) notify("'Debug mode ON'-I");
|
||||||
@ -443,6 +461,7 @@ void OpenPage(dword _open_URL)
|
|||||||
StopLoading();
|
StopLoading();
|
||||||
|
|
||||||
strcpy(#editURL, _open_URL);
|
strcpy(#editURL, _open_URL);
|
||||||
|
address_box.flags=0;
|
||||||
DrawOmnibox();
|
DrawOmnibox();
|
||||||
|
|
||||||
strncpy(#new_url, _open_URL, URL_SIZE);
|
strncpy(#new_url, _open_URL, URL_SIZE);
|
||||||
@ -461,12 +480,8 @@ void OpenPage(dword _open_URL)
|
|||||||
else LoadInternalPage(#page_not_found, sizeof(page_not_found));
|
else LoadInternalPage(#page_not_found, sizeof(page_not_found));
|
||||||
} else if (!strncmp(#new_url,"http:",5)) || (!strncmp(#new_url,"https:",6)) {
|
} else if (!strncmp(#new_url,"http:",5)) || (!strncmp(#new_url,"https:",6)) {
|
||||||
//WEB PAGE
|
//WEB PAGE
|
||||||
img_draw stdcall(skin.image, address_box.left+address_box.width+1,
|
|
||||||
address_box.top-3, 17, skin.h, 85, SKIN_Y);
|
|
||||||
|
|
||||||
if (ReplaceSpaceInUrl(#new_url, URL_SIZE)) {
|
if (ReplaceSpaceInUrl(#new_url, URL_SIZE)) {
|
||||||
strcpy(#editURL, #new_url);
|
strcpy(#editURL, #new_url);
|
||||||
DrawOmnibox();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strncmp(#new_url,"http:",5)) {
|
if (!strncmp(#new_url,"http:",5)) {
|
||||||
@ -476,6 +491,9 @@ void OpenPage(dword _open_URL)
|
|||||||
strncat(#new_url, _open_URL, URL_SIZE);
|
strncat(#new_url, _open_URL, URL_SIZE);
|
||||||
http.get(#new_url);
|
http.get(#new_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DrawOmnibox();
|
||||||
|
|
||||||
if (!http.transfer) {
|
if (!http.transfer) {
|
||||||
StopLoading();
|
StopLoading();
|
||||||
LoadInternalPage(#page_not_found, sizeof(page_not_found));
|
LoadInternalPage(#page_not_found, sizeof(page_not_found));
|
||||||
@ -492,6 +510,13 @@ void EventClickLink(dword _click_URL)
|
|||||||
{
|
{
|
||||||
char new_url[URL_SIZE+1];
|
char new_url[URL_SIZE+1];
|
||||||
|
|
||||||
|
if (open_new_window) {
|
||||||
|
strcpy(#new_url, _click_URL);
|
||||||
|
GetAbsoluteURL(#new_url, history.current());
|
||||||
|
RunProgram(#program_path, #new_url);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (ESBYTE[_click_URL]=='#') {
|
if (ESBYTE[_click_URL]=='#') {
|
||||||
if (anchors.get_pos_by_name(_click_URL+1)!=-1) {
|
if (anchors.get_pos_by_name(_click_URL+1)!=-1) {
|
||||||
WB1.list.first = anchors.get_pos_by_name(_click_URL+1);
|
WB1.list.first = anchors.get_pos_by_name(_click_URL+1);
|
||||||
@ -569,23 +594,6 @@ void EventSubmitOmnibox()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawOmnibox()
|
|
||||||
{
|
|
||||||
int skin_x_offset;
|
|
||||||
|
|
||||||
DrawRectangle(address_box.left-2, address_box.top-3, address_box.width+5, 25,border_color);
|
|
||||||
|
|
||||||
DrawBar(address_box.left-2, address_box.top-2, address_box.width+3, 1,0xD8DCD8);
|
|
||||||
DrawBar(address_box.left-2, address_box.top-1, address_box.width+3, 1, address_box.color);
|
|
||||||
img_draw stdcall(skin.image, address_box.left-2, address_box.top-3, 2, skin.h, 102, SKIN_Y);
|
|
||||||
if (address_box.flags & ed_focus) address_box.flags = ed_focus; else address_box.flags = 0;
|
|
||||||
EditBox_UpdateText(#address_box, address_box.flags);
|
|
||||||
edit_box_draw stdcall(#address_box);
|
|
||||||
if (http.transfer > 0) skin_x_offset = 85; else skin_x_offset = 68;
|
|
||||||
img_draw stdcall(skin.image, address_box.left+address_box.width+1,
|
|
||||||
address_box.top-3, 17, skin.h, skin_x_offset, SKIN_Y);
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoadInternalPage(dword _bufdata, _in_bufsize){
|
void LoadInternalPage(dword _bufdata, _in_bufsize){
|
||||||
if (!_bufdata) || (!_in_bufsize) {
|
if (!_bufdata) || (!_in_bufsize) {
|
||||||
LoadInternalPage(#page_not_found, sizeof(page_not_found));
|
LoadInternalPage(#page_not_found, sizeof(page_not_found));
|
||||||
@ -625,7 +633,7 @@ void DrawProgress()
|
|||||||
} else {
|
} else {
|
||||||
persent = 10;
|
persent = 10;
|
||||||
}
|
}
|
||||||
DrawBar(address_box.left-1, address_box.top+20, persent*address_box.width/100, 2, 0x72B7EB);
|
DrawBar(address_box.left-1, address_box.top+20, persent*address_box.width+16/100, 2, 0x72B7EB);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventShowPageMenu(dword _left, _top)
|
void EventShowPageMenu(dword _left, _top)
|
||||||
@ -633,6 +641,11 @@ void EventShowPageMenu(dword _left, _top)
|
|||||||
menu.show(Form.left+_left-6,Form.top+_top+skin_height+3, 220, #rmb_menu, VIEW_SOURCE);
|
menu.show(Form.left+_left-6,Form.top+_top+skin_height+3, 220, #rmb_menu, VIEW_SOURCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EventShowMainMenu(dword _left, _top)
|
||||||
|
{
|
||||||
|
menu.show(Form.left+_left-6+77,Form.top+_top+skin_height-3, 140, #main_menu, OPEN_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
void EventShowLinkMenu(dword _left, _top)
|
void EventShowLinkMenu(dword _left, _top)
|
||||||
{
|
{
|
||||||
menu.show(Form.left+_left-6,Form.top+_top+skin_height+3, 220, #link_menu, COPY_LINK_URL);
|
menu.show(Form.left+_left-6,Form.top+_top+skin_height+3, 220, #link_menu, COPY_LINK_URL);
|
||||||
@ -678,10 +691,83 @@ void DrawStatusBar(dword _status_text)
|
|||||||
status_text.start_x = 10;
|
status_text.start_x = 10;
|
||||||
status_text.start_y = Form.cheight - STATUSBAR_H + 3;
|
status_text.start_y = Form.cheight - STATUSBAR_H + 3;
|
||||||
status_text.area_size_x = Form.cwidth - status_text.start_x -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);
|
DrawBar(status_text.start_x, status_text.start_y, status_text.area_size_x, 9, system.color.work);
|
||||||
status_text.text_pointer = _status_text;
|
status_text.text_pointer = _status_text;
|
||||||
PathShow_prepare stdcall(#status_text);
|
PathShow_prepare stdcall(#status_text);
|
||||||
PathShow_draw stdcall(#status_text);
|
PathShow_draw stdcall(#status_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DrawOvalBorder(dword x,y,w,h, light,dark,right,dots)
|
||||||
|
{
|
||||||
|
DrawBar(x+1, y, w, 1, light);
|
||||||
|
DrawBar(x+1, y+h+1, w, 1, dark);
|
||||||
|
DrawBar(x, y+1, 1, h-1, light);
|
||||||
|
DrawBar(x+w+1, y+2, 1, h-2, right);
|
||||||
|
|
||||||
|
PutPixel(x, y, dots);
|
||||||
|
PutPixel(x+w+1, y+h+1, dots);
|
||||||
|
PutPixel(x, y+h+1, dots);
|
||||||
|
PutPixel(x+w+1, y, dots);
|
||||||
|
|
||||||
|
PutPixel(x, y+h, dark);
|
||||||
|
PutPixel(x+w+1, y+1, light);
|
||||||
|
PutPixel(x+w+1, y+h, dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
libimg_image top_icons;
|
||||||
|
libimg_image left_icons;
|
||||||
|
|
||||||
|
void DrawTopPanelButton(dword _button_id, _x, signed int _icon_n)
|
||||||
|
{
|
||||||
|
static dword semi_white=0, bg_col, bg_col_light, bg_col_dark, bg_dark;
|
||||||
|
if (!semi_white) {
|
||||||
|
bg_col = system.color.work;
|
||||||
|
if (GrayScaleImage(#bg_col,1,1)<65) bg_dark=true; else bg_dark=false;
|
||||||
|
Libimg_LoadImage(#top_icons, "/sys/icons16.png");
|
||||||
|
Libimg_LoadImage(#left_icons, "/sys/icons16.png");
|
||||||
|
|
||||||
|
semi_white = MixColors(system.color.work, 0xFFFfff, bg_dark*90 + 96);
|
||||||
|
bg_col_dark = MixColors(system.color.work, system.color.work_graph, 90);
|
||||||
|
bg_col_light = MixColors(semi_white, 0xFFFfff, bg_dark*90 + 10);
|
||||||
|
|
||||||
|
Libimg_ReplaceColor(top_icons.image, top_icons.w, top_icons.h, 0xffFFFfff, semi_white);
|
||||||
|
Libimg_ReplaceColor(top_icons.image, top_icons.w, top_icons.h, 0xffCACBD6, MixColors(semi_white, 0, 220));
|
||||||
|
|
||||||
|
Libimg_ReplaceColor(left_icons.image, left_icons.w, left_icons.h, 0xffFFFfff, system.color.work);
|
||||||
|
Libimg_ReplaceColor(left_icons.image, left_icons.w, left_icons.h, 0xffCACBD6, MixColors(system.color.work, 0, 200));
|
||||||
|
}
|
||||||
|
|
||||||
|
DrawWideRectangle(_x+1, PADDING+1, TSZE, TSZE, 5, semi_white);
|
||||||
|
DrawOvalBorder(_x, PADDING, TSZE, TSZE, bg_col_light, bg_col_dark, semi_white, system.color.work);
|
||||||
|
|
||||||
|
DefineHiddenButton(_x, PADDING, TSZE+1, TSZE+1, _button_id);
|
||||||
|
if (_icon_n==-1) {
|
||||||
|
DrawBar(_x+6, PADDING+5, 16, 16, semi_white);
|
||||||
|
} else {
|
||||||
|
img_draw stdcall(top_icons.image, _x+6, PADDING+5, 16, 16, 0, _icon_n*16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawOmnibox()
|
||||||
|
{
|
||||||
|
int skin_x_offset;
|
||||||
|
|
||||||
|
DrawOvalBorder(address_box.left-2, address_box.top-3, address_box.width+18, 24, system.color.work_graph, system.color.work_graph, system.color.work_graph, system.color.work_dark);
|
||||||
|
DrawBar(address_box.left-1, address_box.top-2, address_box.width+18, 1, 0xD8DCD8);
|
||||||
|
DrawBar(address_box.left-1, address_box.top-1, address_box.width+18, 1, address_box.color);
|
||||||
|
DrawBar(address_box.left-1, address_box.top, 1, 22, address_box.color);
|
||||||
|
|
||||||
|
if (address_box.flags & ed_focus) address_box.flags = ed_focus; else address_box.flags = 0;
|
||||||
|
EditBox_UpdateText(#address_box, address_box.flags);
|
||||||
|
edit_box_draw stdcall(#address_box);
|
||||||
|
if (http.transfer > 0) skin_x_offset = 85; else skin_x_offset = 68;
|
||||||
|
img_draw stdcall(skin.image, address_box.left+address_box.width+1,
|
||||||
|
address_box.top-1, 16, skin.h-3, skin_x_offset, SKIN_Y+2);
|
||||||
|
DefineHiddenButton(address_box.left+address_box.width-1, address_box.top-2, 17, skin.h-3, REFRESH_BUTTON);
|
||||||
|
|
||||||
|
DrawProgress();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
stop:
|
stop:
|
@ -80,9 +80,9 @@ dword ShowSource(dword _bufdata, _in_bufsize)
|
|||||||
break;
|
break;
|
||||||
case '\"':
|
case '\"':
|
||||||
case '\'':
|
case '\'':
|
||||||
if (TAG == mode) SourceBufAdd(VALUE, "<font color=#F301F2>'");
|
if (TAG == mode) SourceBufAdd(VALUE, "<font color=#F301F2>"");
|
||||||
else if (VALUE == mode) SourceBufAdd(TAG, "'</font>");
|
else if (VALUE == mode) SourceBufAdd(TAG, ""</font>");
|
||||||
else SourceBufAdd(NULL, "'");
|
else SourceBufAdd(NULL, """);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ESBYTE[source_buf_end] = ESBYTE[i];
|
ESBYTE[source_buf_end] = ESBYTE[i];
|
||||||
|
@ -214,3 +214,53 @@ void get_absolute_url(dword _rez, _base, _new)
|
|||||||
_GET_ABSOLUTE_URL_END:
|
_GET_ABSOLUTE_URL_END:
|
||||||
while (i=strstr(_rez, "&")) strcpy(i+1, i+5);
|
while (i=strstr(_rez, "&")) strcpy(i+1, i+5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
:dword GetAbsoluteURL(dword new_URL, base_URL)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
dword orig_URL = new_URL;
|
||||||
|
char newurl[URL_SIZE+1];
|
||||||
|
strcpy(#newurl, base_URL);
|
||||||
|
|
||||||
|
while (i=strstr(new_URL, "&")) strcpy(i+1, i+5);
|
||||||
|
|
||||||
|
if (check_is_the_url_absolute(new_URL)) return orig_URL;
|
||||||
|
|
||||||
|
IF (!strncmp(new_URL,"//", 2))
|
||||||
|
{
|
||||||
|
strcpy(#newurl, "http:");
|
||||||
|
strcat(#newurl, new_URL);
|
||||||
|
strcpy(orig_URL, #newurl);
|
||||||
|
return orig_URL;
|
||||||
|
}
|
||||||
|
|
||||||
|
IF (!strncmp(new_URL,"./", 2)) new_URL+=2;
|
||||||
|
|
||||||
|
if (ESBYTE[new_URL] == '/') //remove everything after site domain name
|
||||||
|
{
|
||||||
|
i = strchr(#newurl+8, '/');
|
||||||
|
if (i) ESBYTE[i]=0;
|
||||||
|
new_URL+=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
_CUT_ST_LEVEL_MARK:
|
||||||
|
|
||||||
|
if (newurl[strrchr(#newurl, '/')-2]<>'/')
|
||||||
|
{
|
||||||
|
newurl[strrchr(#newurl, '/')] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
IF (!strncmp(new_URL,"../",3))
|
||||||
|
{
|
||||||
|
new_URL+=3;
|
||||||
|
newurl[strrchr(#newurl, '/')-1] = 0x00;
|
||||||
|
goto _CUT_ST_LEVEL_MARK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newurl[strlen(#newurl)-1]<>'/') strcat(#newurl, "/");
|
||||||
|
|
||||||
|
strcat(#newurl, new_URL);
|
||||||
|
strcpy(orig_URL, #newurl);
|
||||||
|
return orig_URL;
|
||||||
|
}
|
||||||
|
@ -249,7 +249,7 @@ inline fastcall int strlcpy(dword ESI, EDI, EBX)
|
|||||||
|
|
||||||
:void strncpy(dword dst, src, len)
|
:void strncpy(dword dst, src, len)
|
||||||
{
|
{
|
||||||
while (len)
|
while (len) && (ESBYTE[src])
|
||||||
{
|
{
|
||||||
ESBYTE[dst] = ESBYTE[src];
|
ESBYTE[dst] = ESBYTE[src];
|
||||||
dst++;
|
dst++;
|
||||||
|
Loading…
Reference in New Issue
Block a user