/programs/cmm/browser/TWB/TWB.c |
---|
31,7 → 31,7 |
struct TWebBrowser { |
llist list; |
_style style; |
_img page_img; |
_img img; |
dword draw_y, stolbec; |
int zoom; |
dword o_bufpointer; |
129,7 → 129,7 |
DrawBuf.Fill(0, page_bg); |
links.clear(); |
anchors.clear(); |
page_img.clear(); |
img.clear(); |
text_colors.drop(); |
text_colors.add(0); |
header = NULL; |
254,10 → 254,11 |
ignor_param=false; |
while (ESBYTE[bufpos] !='>') && (bufpos < bufpointer + bufsize) //ïîëó÷àåì òåã è åãî ïàðàìåòðû |
//&& (!chrnum(#tag.params,'\"') % 2) //<a title="<small>ATI</small><br>9800xt" href="vgamuseum.ru/9800xt"> |
{ |
bukva = ESBYTE[bufpos]; |
if (__isWhite(bukva)) bukva = ' '; |
if (!ignor_param) && (bukva <>' ') { |
if (!ignor_param) && (bukva!=' ') { |
if (strlen(#tag.name)+1<sizeof(tag.name)) chrcat(#tag.name, bukva); |
} else { |
ignor_param = true; |
450,41 → 451,61 |
} |
if (tag.is("img")) { |
value = tag.get_value_of("src="); |
if (!value) goto NOIMG; |
/* |
if (streqrp(value, "data:")) { |
EAX = strstr(value, "base64,"); |
if (value == EAX) return; |
value = EAX; |
//cache.add(history.current(), http.content_pointer, http.content_received, PAGE); |
base64_decode stdcall (#pass_b64, value, strlen(value)); |
} else |
*/ |
strlcpy(#img_path, value, sizeof(img_path)-1); |
get_absolute_url(#img_path, history.current()); |
if (!img_path) { line=0; return; } |
if (cache.has(#img_path)) |
{ |
img_decode stdcall (cache.current_buf, cache.current_size, 0); |
if (!EAX) goto NOIMG; |
value = page_img.add_pos(#img_path, stolbec+1*list.font_w+3, draw_y); |
EDI = EAX; |
img.w.add(ESDWORD[EDI+4]); |
img.h.add(ESDWORD[EDI+8]); |
free(EDI); |
if (cache.has(value)) { |
if (page_img.set_size(page_img.url.count-1, cache.current_buf, cache.current_size)) { |
img.url.add(#img_path); |
if (img.w.get_last() / 6 + 1 + stolbec > list.column_max) { |
NewLine(); |
} |
img.x.add(stolbec*list.font_w+3); |
img.y.add(draw_y); |
stolbec += img.w.get_last() / 6 + 1; |
if (img.h.get_last() > list.item_h) { |
draw_y += img.h.get_last() - list.item_h; |
NewLine(); |
} |
if (link) links.add_text( |
stolbec * list.font_w + BODY_MARGIN + list.x, |
draw_y + list.y, |
page_img.xywh.get(page_img.url.count-1*4+2), |
page_img.xywh.get(page_img.url.count-1*4+3), |
img.x.get_last() + list.x, |
img.y.get_last() + list.y, |
img.w.get_last(), |
img.h.get_last(), |
0); |
stolbec += page_img.xywh.get(page_img.url.count-1*4+2) / 6 + 1; |
//if (stolbec > list.column_max) NewLine(); |
value = page_img.xywh.get(page_img.url.count-1*4+3); |
if (value > list.item_h) {draw_y += value - list.item_h; NewLine();} |
//debugval(img.url.get_last(), img.y.get_last()); |
return; |
} else { |
img.url.add(#img_path); |
} |
} |
NOIMG: |
/* |
if (streqrp(value, "data:")) { |
EAX = strstr(value, "base64,"); |
if (value == EAX) return; |
value = EAX; |
//cache.add(history.current(), http.content_pointer, http.content_received, PAGE); |
base64_decode stdcall (#pass_b64, value, strlen(value)); |
} else |
*/ |
if (value = tag.get_value_of("title=")) && (strlen(value)<sizeof(line)-3) && (value) sprintf(#line, "[%s]", value); |
if (value = tag.get_value_of("alt=")) && (strlen(value)<sizeof(line)-3) && (value) sprintf(#line, "[%s]", value); |
if (!line) { |
587,7 → 608,7 |
value += strrchr(value, '='); //search in content= |
if (ESBYTE[value] == '"') value++; |
strlwr(value); |
if (streqrp(value,"utf-8")) || (streqrp(value,"utf8")) { ChangeEncoding(CH_UTF8); debugln("UTF"); } |
if (streqrp(value,"utf-8")) || (streqrp(value,"utf8")) ChangeEncoding(CH_UTF8); |
else if (streqrp(value,"windows-1251")) || (streqrp(value,"windows1251")) ChangeEncoding(CH_CP1251); |
else if (streqrp(value,"dos")) || (streqrp(value,"cp-866")) ChangeEncoding(CH_CP866); |
else if (streqrp(value,"iso-8859-5")) || (streqrp(value,"iso8859-5")) ChangeEncoding(CH_ISO8859_5); |
648,7 → 669,16 |
//============================================================================================ |
void TWebBrowser::DrawPage() |
{ |
int i, img_y; |
PutPaletteImage(list.first * DrawBuf.bufw * 4 + buf_data+8, DrawBuf.bufw, list.h, DrawBuf.bufx, DrawBuf.bufy, 32, 0); |
page_img.draw_all(list.x, list.y, list.w, list.h, list.first); |
DrawScroller(); |
//img.draw_all(list.x, list.y, list.w, list.h, list.first); |
for (i=0; i<img.url.count; i++) |
{ |
img_y = img.y.get(i); |
if (img_y + img.h.get(i) > list.first) && (img_y - list.h < list.first) |
&& (cache.has(img.url.get(i))) img.draw(list.x, list.y, list.w, list.h, list.first, i); |
} |
} |
/programs/cmm/browser/TWB/img.h |
---|
2,16 → 2,11 |
struct _img |
{ |
collection url; |
collection_int xywh; |
int getid; |
collection_int x,y,w,h; |
void clear(); |
dword add_pos(); |
bool set_size(); |
void add(); |
dword current_url(); |
bool next_url(); |
void draw_all(); |
bool draw(); |
}; |
19,53 → 14,22 |
void _img::clear() |
{ |
url.drop(); |
xywh.drop(); |
getid = 0; |
x.drop(); |
y.drop(); |
w.drop(); |
h.drop(); |
} |
dword _img::add_pos(dword _path, _x, _y) |
void _img::add(dword _path, _x, _y, _w, _h) |
{ |
char full_path[URL_SIZE]; |
strncpy(#full_path, _path, URL_SIZE); |
get_absolute_url(#full_path, history.current()); |
url.add(#full_path); |
xywh.add(_x); |
xywh.add(_y); |
xywh.add(NULL); |
xywh.add(NULL); |
return #full_path; |
url.add(_path); |
x.add(_x); |
y.add(_y); |
w.add(_w); |
h.add(_h); |
} |
bool _img::set_size(dword _id, _buf, _size) |
{ |
img_decode stdcall (_buf, _size, 0); |
if (EAX) { |
EDI = EAX; |
xywh.set(_id*4+2, ESDWORD[EDI+4]); |
xywh.set(_id*4+3, ESDWORD[EDI+8]); |
free(EDI); |
return true; |
} |
return false; |
} |
//DELTE!!!!!11111111111111111111111111111111111111 |
dword _img::current_url() |
{ |
return url.get(getid); |
} |
//DELTE!!!!!11111111111111111111111111111111111111 |
bool _img::next_url() |
{ |
if (getid < url.count-1) { |
getid++; |
return 1; |
} |
return 0; |
} |
/* |
void _img::draw_all(int _x, _y, _w, _h, _start) |
{ |
int i, img_y; |
72,27 → 36,33 |
for (i=0; i<url.count; i++) |
{ |
img_y = xywh.get(i*4 + 1); |
img_y = y.get(i); |
if (img_y > _start) && (img_y < _start + _h) |
if (img_y + h.get(i) > _start) && (img_y - _h < _start) |
&& (cache.has(url.get(i))) draw(_x, _y, _w, _h, _start, i); |
} |
} |
*/ |
bool _img::draw(int _x, _y, _w, _h, _start, i) |
{ |
int img_x, img_y, img_w, img_h; |
int img_x, img_y, img_w, img_h, invisible_h=0; |
img_decode stdcall (cache.current_buf, cache.current_size, 0); |
if (EAX) { |
EDI = EAX; |
img_x = xywh.get(i*4+0); |
img_y = xywh.get(i*4+1); |
img_w = math.min(xywh.set(getid*4+2, ESDWORD[EDI+4]), _w - img_x); |
img_h = math.min(xywh.set(getid*4+3, ESDWORD[EDI+8]), _h + _start - img_y); |
img_x = x.get(i); |
img_y = y.get(i); |
img_w = math.min(w.set(i, ESDWORD[EDI+4]), _w - img_x); |
img_h = math.min(h.set(i, ESDWORD[EDI+8]), _h + _start - img_y); |
if (_start > img_y) { |
invisible_h = _start - img_y; |
img_y = _start; |
} |
img_draw stdcall(EDI, img_x + _x, img_y - _start + _y, img_w, img_h, 0, 0); |
img_draw stdcall(EDI, img_x + _x, img_y - _start + _y, img_w, img_h - invisible_h, 0, invisible_h); |
free(EDI); |
} |
} |
/programs/cmm/browser/WebView.c |
---|
33,18 → 33,19 |
#include "..\lib\patterns\toolbar_button.h" |
#include "..\lib\patterns\restart_process.h" |
#include "const.h" |
#include "cache.h" |
#include "show_src.h" |
//===================================================// |
// // |
// DATA // |
// // |
//===================================================// |
char version[]="WebView 2.8 BETA"; |
char version[]="WebView 2.8 ALPHA PREVIEW"; |
#define DEFAULT_URL URL_SERVICE_HOMEPAGE |
#include "const.h" |
#include "cache.h" |
#include "show_src.h" |
bool debug_mode = false; |
bool show_images = false; |
72,10 → 73,13 |
char stak[4096]; |
proc_info Form; |
#include "tabs.h" |
dword cur_img_url; |
dword shared_url; |
dword http_get_type; |
int menu_id=NULL; |
#include "tabs.h" |
char default_dir[] = "/rd/1"; |
od_filter filter2 = { 22, "TXT\0HTM\0HTML\0DOCX\0\0" }; |
83,10 → 87,6 |
edit_box omnibox_edit = {, PADDING+TSZE*2+PADDING+6, PADDING+3, 0xffffff, |
0x94AECE, 0xffffff, 0xffffff,0x10000000,URL_SIZE-2,#editURL,0,,19,19}; |
dword shared_url; |
dword http_get_type; |
//===================================================// |
// // |
// CODE // |
108,7 → 108,7 |
void HandleParam() |
{ |
if (!param) { |
history.add(URL_SERVICE_HOMEPAGE); |
history.add(DEFAULT_URL); |
} else { |
if (!strncmp(#param, "-source ", 8)) { |
source_mode = true; |
203,8 → 203,16 |
case evNetwork: |
if (http.transfer <= 0) break; |
http.receive(); |
if (http_get_type==PAGE) CheckContentType(); |
EventUpdateProgressBar(); |
if (http_get_type==PAGE) { |
CheckContentType(); |
prbar.max = http.content_length; |
if (prbar.value != http.content_received) { |
prbar.value = http.content_received; |
DrawProgress(); |
} |
} |
if (http.receive_result != 0) break; |
if (http.status_code >= 300) && (http.status_code < 400) |
{ |
226,9 → 234,8 |
LoadInternalPage(http.content_pointer, http.content_received); |
} |
else if (http_get_type==IMG) { |
cache.add(WB1.page_img.current_url(), http.content_pointer, http.content_received, IMG); |
WB1.page_img.set_size(WB1.page_img.getid, http.content_pointer, http.content_received); |
GetImg(); |
cache.add(cur_img_url, http.content_pointer, http.content_received, IMG); |
GetImg(false); |
} |
} |
break; |
300,6 → 307,7 |
case SCAN_CODE_RIGHT: ProcessButtonClick(FORWARD_BUTTON); return true; |
case SCAN_CODE_KEY_W: EventCloseActiveTab(); return true; |
case SCAN_CODE_TAB: EventActivateNextTab(); return true; |
case SCAN_CODE_F5: EventClearCache(); return; |
default: return false; |
} |
493,17 → 501,20 |
return true; |
} |
void GetUrl(dword _http_url) |
bool GetUrl(dword _http_url) |
{ |
char new_url_full[URL_SIZE+1]; |
if (!strncmp(_http_url,"http:",5)) { |
http.get(_http_url); |
return true; |
} else if (!strncmp(_http_url,"https://",8)) { |
strcpy(#new_url_full, "http://gate.aspero.pro/?site="); |
strncat(#new_url_full, _http_url, URL_SIZE); |
http.get(#new_url_full); |
return true; |
} |
return false; |
} |
void OpenPage(dword _open_URL) |
537,7 → 548,8 |
if (cache.has(#new_url)) { |
//CACHED PAGE |
LoadInternalPage(cache.current_buf, cache.current_size); |
if (cache.current_type==PAGE) LoadInternalPage(cache.current_buf, cache.current_size); |
else {EventOpenDownloader(#new_url);return;} |
} else if (!strncmp(#new_url,"WebView:",8)) { |
//INTERNAL PAGE |
708,7 → 720,7 |
} else { |
WB1.DrawPage(); |
} |
GetImg(); |
GetImg(true); |
} |
} |
723,7 → 735,7 |
dword pct; |
if (!http.transfer) return; |
if (http_get_type==PAGE) && (prbar.max) pct = prbar.value*30/prbar.max; else pct = 10; |
if (http_get_type==IMG) pct = WB1.page_img.getid * 70 / WB1.page_img.url.count + 30; |
if (http_get_type==IMG) pct = prbar.value * 70 / prbar.max + 30; |
DrawBar(omnibox_edit.left-1, omnibox_edit.top+20, pct*omnibox_edit.width+16/100, 2, 0x72B7EB); |
} |
766,16 → 778,6 |
} |
} |
void EventUpdateProgressBar() |
{ |
prbar.max = http.content_length; |
if (prbar.value != http.content_received) |
{ |
prbar.value = http.content_received; |
DrawProgress(); |
} |
} |
void EventSeachWeb() |
{ |
char new_url[URL_SIZE+1]; |
890,9 → 892,7 |
void SetOmniboxText(dword _text) |
{ |
strcpy(#editURL, _text); |
omnibox_edit.flags=0; |
DrawOmnibox(); |
edit_box_set_text stdcall (#omnibox_edit, _text); |
} |
dword GetAbsoluteActiveURL() |
929,16 → 929,22 |
else if (http_get_type==IMG) GetUrl(#redirect_url); |
} |
dword GetImg() |
dword GetImg(bool _new) |
{ |
int i; |
if (!show_images) return; |
while (WB1.page_img.next_url()) { |
DrawProgress(); |
if (cache.has(WB1.page_img.current_url())) continue; |
http_get_type = IMG; |
GetUrl(WB1.page_img.current_url()); |
return; |
for (i = 0; i < WB1.img.url.count; i++) |
{ |
cur_img_url = WB1.img.url.get(i); |
if (cache.has(cur_img_url)==false) { |
prbar.max = WB1.img.url.count; |
prbar.value = i; |
if (GetUrl(cur_img_url)) {DrawProgress(); return;} |
} |
} |
if (_new) return; |
DrawOmnibox(); |
WB1.ParseHtml(WB1.o_bufpointer, WB1.bufsize); |
WB1.DrawPage(); |
/programs/cmm/browser/cache.h |
---|
6,6 → 6,7 |
{ |
dword current_buf; |
dword current_size; |
dword current_type; |
collection url; |
collection_int data; |
collection_int size; |
34,6 → 35,7 |
if (pos != -1) { |
current_buf = data.get(pos); |
current_size = size.get(pos); |
current_type = type.get(pos); |
return true; |
} |
return false; |
/programs/cmm/eolite/include/properties.h |
---|
188,15 → 188,13 |
else |
{ |
GetFileInfo(#file_path, #file_info_general); |
strcpy(#file_name2, #file_name); |
EditBox_UpdateText(#file_name_ed, 0); |
edit_box_set_text stdcall (#file_name_ed, #file_name); |
if(itdir) dir_size.get(#file_path); |
ch_read_only.checked = file_info_general.readonly; |
ch_hidden.checked = file_info_general.hidden; |
ch_system.checked = file_info_general.system; |
} |
strcpy(#path_to_file, #path); |
path_to_file_ed.size = strlen(#path_to_file); |
edit_box_set_text stdcall (#path_to_file_ed, #path); |
SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER); |
loop() switch(WaitEvent()) |