forked from KolibriOS/kolibrios
WebView 1.48: support all site encodings (not only UTF8), use lib/menu.h, fix black screen after changing window size
git-svn-id: svn://kolibrios.org@6045 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
5f2eec40f1
commit
8181cb284f
@ -135,12 +135,12 @@ void TWebBrowser::Prepare(){
|
|||||||
if (strstri(bufpointer, "html"))
|
if (strstri(bufpointer, "html"))
|
||||||
{
|
{
|
||||||
style.pre = 0;
|
style.pre = 0;
|
||||||
cur_encoding = CH_UTF8;
|
cur_encoding = CH_NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
style.pre = 1;
|
style.pre = 1;
|
||||||
cur_encoding = CH_CP866;
|
cur_encoding = CH_NULL;
|
||||||
}
|
}
|
||||||
for (bufpos=bufpointer ; (bufpos < bufpointer+bufsize) && (ESBYTE[bufpos]!=0) ; bufpos++;)
|
for (bufpos=bufpointer ; (bufpos < bufpointer+bufsize) && (ESBYTE[bufpos]!=0) ; bufpos++;)
|
||||||
{
|
{
|
||||||
@ -368,7 +368,7 @@ void TWebBrowser::SetStyle() {
|
|||||||
if (opened)
|
if (opened)
|
||||||
{
|
{
|
||||||
WB1.DrawBuf.zoom=2;
|
WB1.DrawBuf.zoom=2;
|
||||||
WB1.list.font_type |= 10111001b;
|
WB1.list.font_type |= 10011001b;
|
||||||
if (isattr("align=")) && (isval("center")) style.align = ALIGN_CENTER;
|
if (isattr("align=")) && (isval("center")) style.align = ALIGN_CENTER;
|
||||||
if (isattr("align=")) && (isval("right")) style.align = ALIGN_RIGHT;
|
if (isattr("align=")) && (isval("right")) style.align = ALIGN_RIGHT;
|
||||||
if (stroka>1) NewLine();
|
if (stroka>1) NewLine();
|
||||||
@ -376,7 +376,7 @@ void TWebBrowser::SetStyle() {
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
WB1.DrawBuf.zoom=1;
|
WB1.DrawBuf.zoom=1;
|
||||||
WB1.list.font_type = 10111000b;
|
WB1.list.font_type = 10011000b;
|
||||||
style.align = ALIGN_LEFT;
|
style.align = ALIGN_LEFT;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -416,6 +416,7 @@ void TWebBrowser::SetStyle() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (istag("meta")) || (istag("?xml")) {
|
if (istag("meta")) || (istag("?xml")) {
|
||||||
|
meta_encoding = CH_NULL;
|
||||||
do{
|
do{
|
||||||
if (isattr("charset=")) || (isattr("content=")) || (isattr("encoding="))
|
if (isattr("charset=")) || (isattr("content=")) || (isattr("encoding="))
|
||||||
{
|
{
|
||||||
@ -426,10 +427,9 @@ void TWebBrowser::SetStyle() {
|
|||||||
else if (isval("windows-1251")) || (isval("windows1251")) meta_encoding = CH_CP1251;
|
else if (isval("windows-1251")) || (isval("windows1251")) meta_encoding = CH_CP1251;
|
||||||
else if (isval("iso-8859-5")) || (isval("iso8859-5")) meta_encoding = CH_ISO8859_5;
|
else if (isval("iso-8859-5")) || (isval("iso8859-5")) meta_encoding = CH_ISO8859_5;
|
||||||
else if (isval("dos")) || (isval("cp-866")) meta_encoding = CH_CP866;
|
else if (isval("dos")) || (isval("cp-866")) meta_encoding = CH_CP866;
|
||||||
if (cur_encoding!=meta_encoding) BufEncode(meta_encoding);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
} while(GetNextParam());
|
} while(GetNextParam());
|
||||||
|
if (meta_encoding!=CH_NULL) BufEncode(meta_encoding);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -437,7 +437,6 @@ void TWebBrowser::SetStyle() {
|
|||||||
void TWebBrowser::BufEncode(int set_new_encoding)
|
void TWebBrowser::BufEncode(int set_new_encoding)
|
||||||
{
|
{
|
||||||
int bufpointer_realsize;
|
int bufpointer_realsize;
|
||||||
cur_encoding = set_new_encoding;
|
|
||||||
if (o_bufpointer==0)
|
if (o_bufpointer==0)
|
||||||
{
|
{
|
||||||
o_bufpointer = malloc(bufsize);
|
o_bufpointer = malloc(bufsize);
|
||||||
@ -447,6 +446,11 @@ void TWebBrowser::BufEncode(int set_new_encoding)
|
|||||||
{
|
{
|
||||||
strcpy(bufpointer, o_bufpointer);
|
strcpy(bufpointer, o_bufpointer);
|
||||||
}
|
}
|
||||||
|
if (cur_encoding!=set_new_encoding) {
|
||||||
|
cur_encoding = set_new_encoding;
|
||||||
|
debugln(charsets[cur_encoding]);
|
||||||
|
bufpointer = ChangeCharset(charsets[cur_encoding], "CP866", bufpointer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//============================================================================================
|
//============================================================================================
|
||||||
void TWebBrowser::DrawScroller()
|
void TWebBrowser::DrawScroller()
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "..\lib\cursor.h"
|
#include "..\lib\cursor.h"
|
||||||
#include "..\lib\collection.h"
|
#include "..\lib\collection.h"
|
||||||
#include "..\lib\font.h"
|
#include "..\lib\font.h"
|
||||||
|
#include "..\lib\menu.h"
|
||||||
|
|
||||||
//*.obj libraries
|
//*.obj libraries
|
||||||
#include "..\lib\obj\box_lib.h"
|
#include "..\lib\obj\box_lib.h"
|
||||||
@ -29,19 +30,31 @@
|
|||||||
char homepage[] = FROM "html\\homepage.htm";
|
char homepage[] = FROM "html\\homepage.htm";
|
||||||
|
|
||||||
#ifdef LANG_RUS
|
#ifdef LANG_RUS
|
||||||
char version[]=" ’¥ªáâ®¢ë© ¡à 㧥à 1.42";
|
char version[]=" ’¥ªáâ®¢ë© ¡à 㧥à 1.48";
|
||||||
?define IMAGES_CACHE_CLEARED "Šíè ª à⨮ª ®ç¨é¥"
|
?define IMAGES_CACHE_CLEARED "Šíè ª à⨮ª ®ç¨é¥"
|
||||||
?define T_LAST_SLIDE "<EFBFBD>â® ¯®á«¥¤¨© á« ©¤"
|
?define T_LAST_SLIDE "<EFBFBD>â® ¯®á«¥¤¨© á« ©¤"
|
||||||
char loading[] = "‡ £à㧪 áâà ¨æë...<br>";
|
char loading[] = "‡ £à㧪 áâà ¨æë...<br>";
|
||||||
char page_not_found[] = FROM "html\page_not_found_ru.htm";
|
char page_not_found[] = FROM "html\page_not_found_ru.htm";
|
||||||
char accept_language[]= "Accept-Language: ru\n";
|
char accept_language[]= "Accept-Language: ru\n";
|
||||||
|
char rmb_menu[] =
|
||||||
|
"<EFBFBD>®á¬®âà¥âì ¨á室¨ª
|
||||||
|
<EFBFBD>¥¤ ªâ¨à®¢ âì ¨á室¨ª
|
||||||
|
ˆáâ®à¨ï
|
||||||
|
Žç¨áâ¨âì ªíè ª à⨮ª
|
||||||
|
Œ¥¥¤¦¥à § £à㧮ª";
|
||||||
#else
|
#else
|
||||||
char version[]=" Text-based Browser 1.42";
|
char version[]=" Text-based Browser 1.48";
|
||||||
?define IMAGES_CACHE_CLEARED "Images cache cleared"
|
?define IMAGES_CACHE_CLEARED "Images cache cleared"
|
||||||
?define T_LAST_SLIDE "This slide is the last"
|
?define T_LAST_SLIDE "This slide is the last"
|
||||||
char loading[] = "Loading...<br>";
|
char loading[] = "Loading...<br>";
|
||||||
char page_not_found[] = FROM "html\page_not_found_en.htm";
|
char page_not_found[] = FROM "html\page_not_found_en.htm";
|
||||||
char accept_language[]= "Accept-Language: en\n";
|
char accept_language[]= "Accept-Language: en\n";
|
||||||
|
char rmb_menu[] =
|
||||||
|
"View source
|
||||||
|
Edit source
|
||||||
|
History
|
||||||
|
Free image cache
|
||||||
|
Download Manager";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define URL_SERVICE_HISTORY "WebView://history"
|
#define URL_SERVICE_HISTORY "WebView://history"
|
||||||
@ -86,7 +99,6 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#include "..\TWB\TWB.c"
|
#include "..\TWB\TWB.c"
|
||||||
#include "menu.h"
|
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
#include "show_src.h"
|
#include "show_src.h"
|
||||||
#include "http_downloader.h"
|
#include "http_downloader.h"
|
||||||
@ -108,13 +120,12 @@ void main()
|
|||||||
load_dll(libimg, #libimg_init,1);
|
load_dll(libimg, #libimg_init,1);
|
||||||
load_dll(libHTTP, #http_lib_init,1);
|
load_dll(libHTTP, #http_lib_init,1);
|
||||||
load_dll(iconv_lib, #iconv_open,0);
|
load_dll(iconv_lib, #iconv_open,0);
|
||||||
//load_dll(kmenu, #akmenu_init,0);
|
|
||||||
Libimg_LoadImage(#skin, abspath("wv_skin.png"));
|
Libimg_LoadImage(#skin, abspath("wv_skin.png"));
|
||||||
SetSkinColors();
|
SetSkinColors();
|
||||||
CreateDir("/tmp0/1/downloads");
|
CreateDir("/tmp0/1/downloads");
|
||||||
if (param) strcpy(#URL, #param); else strcpy(#URL, URL_SERVICE_HOME);
|
if (param) strcpy(#URL, #param); else strcpy(#URL, URL_SERVICE_HOME);
|
||||||
WB1.DrawBuf.zoom = 1;
|
WB1.DrawBuf.zoom = 1;
|
||||||
WB1.list.SetFont(8, 14, 10111000b);
|
WB1.list.SetFont(8, 14, 10011000b);
|
||||||
WB1.list.no_selection = true;
|
WB1.list.no_selection = true;
|
||||||
label.init(DEFAULT_FONT);
|
label.init(DEFAULT_FONT);
|
||||||
SetEventMask(0xa7);
|
SetEventMask(0xa7);
|
||||||
@ -129,7 +140,10 @@ void main()
|
|||||||
if (WB1.list.MouseOver(mouse.x, mouse.y))
|
if (WB1.list.MouseOver(mouse.x, mouse.y))
|
||||||
{
|
{
|
||||||
PageLinks.Hover(mouse.x, WB1.list.first*WB1.list.item_h + mouse.y, link_color_inactive, link_color_active, bg_color);
|
PageLinks.Hover(mouse.x, WB1.list.first*WB1.list.item_h + mouse.y, link_color_inactive, link_color_active, bg_color);
|
||||||
if (bufsize) && (mouse.pkm) && (mouse.up) { CreateThread(#menu_rmb,#stak+4092); break; }
|
if (bufsize) && (mouse.pkm) && (mouse.up) {
|
||||||
|
menu.show(Form.left+mouse.x-6,Form.top+mouse.y+skin_height+3, 180, #rmb_menu, VIEW_SOURCE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (WB1.list.MouseScroll(mouse.vert)) WB1.DrawPage();
|
if (WB1.list.MouseScroll(mouse.vert)) WB1.DrawPage();
|
||||||
}
|
}
|
||||||
scrollbar_v_mouse (#scroll_wv);
|
scrollbar_v_mouse (#scroll_wv);
|
||||||
@ -161,7 +175,10 @@ void main()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case evReDraw:
|
case evReDraw:
|
||||||
if (action_buf) Scan(action_buf);
|
if (menu.list.cur_y) {
|
||||||
|
Scan(menu.list.cur_y);
|
||||||
|
menu.list.cur_y = 0;
|
||||||
|
}
|
||||||
DefineAndDrawWindow(GetScreenWidth()-800/2,GetScreenHeight()-600/2,800,600,0x73,col_bg,0,0);
|
DefineAndDrawWindow(GetScreenWidth()-800/2,GetScreenHeight()-600/2,800,600,0x73,col_bg,0,0);
|
||||||
GetProcessInfo(#Form, SelfInfo);
|
GetProcessInfo(#Form, SelfInfo);
|
||||||
if (Form.status_window>2) { DrawTitle(#header); break; }
|
if (Form.status_window>2) { DrawTitle(#header); break; }
|
||||||
@ -249,7 +266,10 @@ void SetElementSizes()
|
|||||||
WB1.list.wheel_size = 7;
|
WB1.list.wheel_size = 7;
|
||||||
WB1.list.column_max = WB1.list.w - scroll_wv.size_x / WB1.list.font_w;
|
WB1.list.column_max = WB1.list.w - scroll_wv.size_x / WB1.list.font_w;
|
||||||
WB1.list.visible = WB1.list.h - 5 / WB1.list.item_h;
|
WB1.list.visible = WB1.list.h - 5 / WB1.list.item_h;
|
||||||
if (WB1.list.w!=WB1.DrawBuf.bufw) WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, WB1.list.h * 30);
|
if (WB1.list.w!=WB1.DrawBuf.bufw) {
|
||||||
|
WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, WB1.list.h * 30);
|
||||||
|
Scan(REFRESH_BUTTON);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -332,7 +352,7 @@ void Scan(dword id__)
|
|||||||
case SANDWICH_BUTTON:
|
case SANDWICH_BUTTON:
|
||||||
mouse.y = TOOLBAR_H-6;
|
mouse.y = TOOLBAR_H-6;
|
||||||
mouse.x = Form.cwidth - 167;
|
mouse.x = Form.cwidth - 167;
|
||||||
CreateThread(#menu_rmb,#stak+4092);
|
menu.show(Form.left+mouse.x-6,Form.top+mouse.y+skin_height+3, 180, #rmb_menu, VIEW_SOURCE);
|
||||||
return;
|
return;
|
||||||
case VIEW_SOURCE:
|
case VIEW_SOURCE:
|
||||||
WB1.list.first = 0;
|
WB1.list.first = 0;
|
||||||
|
@ -8,7 +8,7 @@ ShowHistory()
|
|||||||
history_pointer = malloc(history.items.data_size+256);
|
history_pointer = malloc(history.items.data_size+256);
|
||||||
strcat(history_pointer, "<html><head><title>History</title></head><body><h1>History</h1>");
|
strcat(history_pointer, "<html><head><title>History</title></head><body><h1>History</h1>");
|
||||||
strcat(history_pointer, "<h2>Visited pages</h2><blockquote><br>");
|
strcat(history_pointer, "<h2>Visited pages</h2><blockquote><br>");
|
||||||
for (i=1; i<history.items.count; i++)
|
for (i=0; i<history.items.count; i++)
|
||||||
{
|
{
|
||||||
strcat(history_pointer, " <a href='");
|
strcat(history_pointer, " <a href='");
|
||||||
strcat(history_pointer, history.items.get(i));
|
strcat(history_pointer, history.items.get(i));
|
||||||
|
@ -1,77 +0,0 @@
|
|||||||
//Leency - 2012-2013
|
|
||||||
|
|
||||||
char *ITEMS_LIST[]={
|
|
||||||
#ifdef LANG_RUS
|
|
||||||
"<EFBFBD>®á¬®âà¥âì ¨á室¨ª",
|
|
||||||
"<EFBFBD>¥¤ ªâ¨à®¢ âì ¨á室¨ª",
|
|
||||||
"ˆáâ®à¨ï",
|
|
||||||
"Žç¨áâ¨âì ªíè ª à⨮ª",
|
|
||||||
"Œ¥¥¤¦¥à § £à㧮ª",
|
|
||||||
#else
|
|
||||||
"View source",
|
|
||||||
"Edit source",
|
|
||||||
"History",
|
|
||||||
"Free image cache",
|
|
||||||
"Download Manager",
|
|
||||||
#endif
|
|
||||||
0};
|
|
||||||
|
|
||||||
llist menu;
|
|
||||||
|
|
||||||
void menu_rmb()
|
|
||||||
{
|
|
||||||
proc_info MenuForm;
|
|
||||||
|
|
||||||
menu.ClearList();
|
|
||||||
while (ITEMS_LIST[menu.count]) menu.count++;
|
|
||||||
menu.SetSizes(2,2,177,menu.count*19,19);
|
|
||||||
SetEventMask(100111b);
|
|
||||||
|
|
||||||
_BEGIN_APPLICATION_MENU:
|
|
||||||
switch(WaitEvent())
|
|
||||||
{
|
|
||||||
case evMouse:
|
|
||||||
GetProcessInfo(#MenuForm, SelfInfo);
|
|
||||||
if (!CheckActiveProcess(MenuForm.ID)) ExitProcess();
|
|
||||||
mouse.get();
|
|
||||||
if (menu.ProcessMouse(mouse.x, mouse.y)) DrawMenuList();
|
|
||||||
if (mouse.lkm)&&(mouse.up) ItemClick();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case evKey:
|
|
||||||
GetKeys();
|
|
||||||
if (key_scancode==SCAN_CODE_ESC) ExitProcess();
|
|
||||||
if (key_scancode==SCAN_CODE_ENTER) ItemClick();
|
|
||||||
if (menu.ProcessKey(key_scancode)) DrawMenuList();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case evReDraw:
|
|
||||||
DefineAndDrawWindow(Form.left+mouse.x-6,Form.top+mouse.y+GetSkinHeight()+3,menu.w+2,menu.h+4,0x01, 0, 0, 0x01fffFFF);
|
|
||||||
DrawPopup(0,0,menu.w,menu.h+3,0, col_bg,border_color);
|
|
||||||
DrawMenuList();
|
|
||||||
}
|
|
||||||
goto _BEGIN_APPLICATION_MENU;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DrawMenuList()
|
|
||||||
{
|
|
||||||
int N;
|
|
||||||
|
|
||||||
for (N=0; N<menu.count; N++;)
|
|
||||||
{
|
|
||||||
if (N==menu.cur_y)
|
|
||||||
DrawBar(menu.x, N*menu.item_h+menu.y, menu.w-3, menu.item_h, 0x94AECE);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DrawBar(menu.x, N*menu.item_h+menu.y, menu.w-3, menu.item_h, col_bg);
|
|
||||||
WriteText(19,N*menu.item_h+9,0x80,0xf2f2f2,ITEMS_LIST[N]);
|
|
||||||
}
|
|
||||||
WriteText(18,N*menu.item_h+8,0x80,0x000000,ITEMS_LIST[N]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ItemClick()
|
|
||||||
{
|
|
||||||
action_buf = VIEW_SOURCE + menu.cur_y;
|
|
||||||
ExitProcess();
|
|
||||||
}
|
|
@ -29,9 +29,9 @@ dword ChangeCharset(dword from_chs, to_chs, conv_buf)
|
|||||||
iconv_open stdcall (from_chs, to_chs); //CP866, CP1251, CP1252, KOI8-RU, UTF-8, ISO8859-5
|
iconv_open stdcall (from_chs, to_chs); //CP866, CP1251, CP1252, KOI8-RU, UTF-8, ISO8859-5
|
||||||
if (EAX==-1)
|
if (EAX==-1)
|
||||||
{
|
{
|
||||||
debug(from_chs);
|
debugln(from_chs);
|
||||||
debug(to_chs);
|
debugln(to_chs);
|
||||||
debug("iconv: wrong charset,\nuse only CP866, CP1251, CP1252, KOI8-RU, UTF-8, ISO8859-5");
|
debugln("iconv: wrong charset,\nuse only CP866, CP1251, CP1252, KOI8-RU, UTF-8, ISO8859-5");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
cd = EAX;
|
cd = EAX;
|
||||||
@ -42,12 +42,10 @@ dword ChangeCharset(dword from_chs, to_chs, conv_buf)
|
|||||||
cd = EAX;
|
cd = EAX;
|
||||||
if (cd!=0)
|
if (cd!=0)
|
||||||
{
|
{
|
||||||
debug("iconv: something is wrong with stdcall iconv()");
|
debugln("iconv: something is wrong with stdcall iconv()");
|
||||||
debugi(cd);
|
debugi(cd);
|
||||||
debug("in_len");
|
debug("in_len:"); debugi(in_len);
|
||||||
debugi(in_len);
|
debug("out_len:"); debugi(out_len);
|
||||||
debug("out_len");
|
|
||||||
debugi(out_len);
|
|
||||||
new_buf = free(new_buf);
|
new_buf = free(new_buf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user