WebView images support (temporary is off, press F11 to enable)

git-svn-id: svn://kolibrios.org@8330 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2020-12-05 23:22:38 +00:00
parent 7b4bf97ec8
commit 67d3c20b4e
15 changed files with 223 additions and 220 deletions

View File

@ -1,142 +0,0 @@
struct _img
{
collection url;
collection_int xywh;
int getid;
void clear();
dword add_pos();
bool set_size();
dword current_url();
bool next_url();
void draw_all();
bool draw();
};
void _img::clear()
{
url.drop();
xywh.drop();
getid = 0;
}
dword _img::add_pos(dword _path, _x, _y)
{
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;
}
bool _img::set_size(dword _buf, _size)
{
char vvv[1000];
int w, h;
img_decode stdcall (_buf, _size, 0);
if (EAX) {
EDI = EAX;
w = ESDWORD[EDI+4];
h = ESDWORD[EDI+8];
xywh.set(getid*4+2, ESDWORD[EDI+4]);
xywh.set(getid*4+3, ESDWORD[EDI+8]);
sprintf(#vvv, "%s w:%i h:%i", current_url(), w, h);
debugln(#vvv);
}
}
dword _img::current_url()
{
return url.get(getid);
}
bool _img::next_url()
{
if (getid < url.count-1) {
getid++;
return 1;
}
return 0;
}
void _img::draw_all(int _x, _y, _start, _height)
{
int i, img_y;
for (i=0; i<url.count; i++)
{
img_y = xywh.get(i*4 + 1);
if (img_y > _start) && (img_y < _start + _height)
&& (cache.has(url.get(i))) draw(_x, _y, _start, i);
}
}
bool _img::draw(int _x, _y, _start, i)
{
libimg_image im;
img_decode stdcall (cache.current_buf, cache.current_size, 0);
if (EAX) {
im.image = EAX;
im.draw(xywh.get(i*4) + _x, xywh.get(i*4+1) - _start + _y, im.w, im.h, 0, 0);
}
}
/*
void ImageCache::Images(dword left1, top1, width1)
{
dword image;
dword imgw=0, imgh=0, img_lines_first=0, cur_pic=0;
//getting abs url from (#img_path);
//cur_pic = GetImage(#img_path);
if (!pics[cur_pic].image)
{
//cur_pic = GetImage("/sys/network/noimg.png");
return;
}
imgw = DSWORD[pics[cur_pic].image+4];
imgh = DSWORD[pics[cur_pic].image+8];
if (imgw > width1) imgw = width1;
draw_y += imgh + 5; TEMPORARY TURN OFF!!!
if (top1+imgh<WB1.list.y) || (top1>WB1.list.y+WB1.list.h-10) return; //if all image is out of visible area
if (top1<WB1.list.y) //if image partly visible (at the top)
{
img_lines_first=WB1.list.y-top1;
imgh=imgh-img_lines_first;
top1=WB1.list.y;
}
if (top1>WB1.list.y+WB1.list.h-imgh-5) //if image partly visible (at the bottom)
{
imgh=WB1.list.y+WB1.list.h-top1-5;
}
if (imgh<=0) return;
img_draw stdcall (pics[cur_pic].image, left1-5, top1, imgw, imgh,0,img_lines_first);
DrawBar(left1+imgw - 5, top1, WB1.list.w-imgw, imgh, page_bg);
DrawBar(WB1.list.x, top1+imgh, WB1.list.w, -imgh % WB1.list.item_h + WB1.list.item_h, page_bg);
if (link)
{
UnsafeDefineButton(left1 - 5, top1, imgw, imgh-1, links.count + 400 + BT_HIDE, 0xB5BFC9);
links.AddText(0, imgw, imgh-1, NOLINE, 1);
WB1.DrawPage();
}
}
ImageCache ImgCache;
*/

View File

@ -1,13 +1,13 @@
#include "..\TWB\colors.h" #include "TWB\colors.h"
#include "..\TWB\anchors.h" #include "TWB\anchors.h"
#include "..\TWB\parse_tag.h" #include "TWB\parse_tag.h"
#include "..\TWB\special.h" #include "TWB\special.h"
#include "..\TWB\img.h" #include "TWB\img.h"
#include "..\TWB\tag_list.h" #include "TWB\tag_list.h"
dword page_bg; dword page_bg;
dword link_color_default; dword link_color_default;
dword link_color_active; dword link_color_active;
#include "..\TWB\links.h" #include "TWB\links.h"
#define BODY_MARGIN 6 #define BODY_MARGIN 6
#define BASIC_LINE_H 18 #define BASIC_LINE_H 18
@ -189,8 +189,8 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
} }
for (bufpos=bufpointer ; (bufpos < bufpointer+bufsize) && (ESBYTE[bufpos]!=0) ; bufpos++;) for (bufpos=bufpointer ; (bufpos < bufpointer+bufsize) && (ESBYTE[bufpos]!=0) ; bufpos++;)
{ {
bukva = ESBYTE[bufpos]; //bukva = ESBYTE[bufpos];
switch (bukva) switch (ESBYTE[bufpos])
{ {
case 0x0a: case 0x0a:
if (style.pre) { if (style.pre) {
@ -223,11 +223,22 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
} }
break; break;
case '<': case '<':
if (!is_html) goto _default; if (!is_html) goto _DEFAULT;
bufpos++; bufpos++;
switch (ESBYTE[bufpos]) {
case '!':
case '/':
case 'a'...'z':
case 'A'...'Z':
goto _TAG;
default:
goto _DEFAULT;
}
_TAG:
if (!strncmp(bufpos,"!--",3)) if (!strncmp(bufpos,"!--",3))
{ {
bufpos+=3; bufpos+=3;
//STRSTR
while (strncmp(bufpos,"-->",3)!=0) && (bufpos < bufpointer + bufsize) while (strncmp(bufpos,"-->",3)!=0) && (bufpos < bufpointer + bufsize)
{ {
bufpos++; bufpos++;
@ -245,13 +256,10 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
while (ESBYTE[bufpos] !='>') && (bufpos < bufpointer + bufsize) //ïîëó÷àåì òåã è åãî ïàðàìåòðû while (ESBYTE[bufpos] !='>') && (bufpos < bufpointer + bufsize) //ïîëó÷àåì òåã è åãî ïàðàìåòðû
{ {
bukva = ESBYTE[bufpos]; bukva = ESBYTE[bufpos];
if (bukva == '\x9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' '; if (__isWhite(bukva)) bukva = ' ';
if (!ignor_param) && (bukva <>' ') if (!ignor_param) && (bukva <>' ') {
{
if (strlen(#tag.name)+1<sizeof(tag.name)) chrcat(#tag.name, bukva); if (strlen(#tag.name)+1<sizeof(tag.name)) chrcat(#tag.name, bukva);
} } else {
else
{
ignor_param = true; ignor_param = true;
if (strlen(#tag.params)+1<sizeof(tag.params)) strcat(#tag.params, #bukva); if (strlen(#tag.params)+1<sizeof(tag.params)) strcat(#tag.params, #bukva);
//chrncat(#tag.params, bukva, sizeof(tag.params)-1); //chrncat(#tag.params, bukva, sizeof(tag.params)-1);
@ -277,7 +285,7 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
} }
break; break;
default: default:
_default: _DEFAULT:
AddCharToTheLine(ESBYTE[bufpos]); AddCharToTheLine(ESBYTE[bufpos]);
} }
} }
@ -441,13 +449,44 @@ void TWebBrowser::SetStyle() {
style.pre = tag.opened; return; style.pre = tag.opened; return;
} }
if (tag.is("img")) { if (tag.is("img")) {
if (value = tag.get_value_of("src=")) strlcpy(#img_path, value, sizeof(img_path)-1); value = tag.get_value_of("src=");
/*
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);
if (!img_path) { line=0; return; }
value = page_img.add_pos(#img_path, stolbec+1*list.font_w+3, draw_y);
if (cache.has(value)) {
if (page_img.set_size(page_img.url.count-1, cache.current_buf, cache.current_size)) {
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),
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();}
return;
}
}
if (value = tag.get_value_of("title=")) && (strlen(value)<sizeof(line)-3) && (value) sprintf(#line, "[%s]", value); 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 (value = tag.get_value_of("alt=")) && (strlen(value)<sizeof(line)-3) && (value) sprintf(#line, "[%s]", value);
if (!img_path) { line=0; return; }
style.image = true;
page_img.add_pos(#img_path, stolbec+1*list.font_w+3, draw_y);
text_colors.add(0x9A6F29);
if (!line) { if (!line) {
if (!strncmp(#img_path, "data:", 5)) img_path=0; if (!strncmp(#img_path, "data:", 5)) img_path=0;
replace_char(#img_path, '?', NULL, strlen(#img_path)); replace_char(#img_path, '?', NULL, strlen(#img_path));
@ -455,9 +494,12 @@ void TWebBrowser::SetStyle() {
line[50]= NULL; line[50]= NULL;
} }
while (CheckForLineBreak()) {}; while (CheckForLineBreak()) {};
text_colors.add(0x9A6F29);
style.image = true;
Paint(); Paint();
text_colors.pop();
style.image = false; style.image = false;
text_colors.pop();
return; return;
} }
if (tag.is("h4")) { if (tag.is("h4")) {
@ -607,6 +649,6 @@ void TWebBrowser::NewLine()
void TWebBrowser::DrawPage() void TWebBrowser::DrawPage()
{ {
PutPaletteImage(list.first * DrawBuf.bufw * 4 + buf_data+8, DrawBuf.bufw, list.h, DrawBuf.bufx, DrawBuf.bufy, 32, 0); 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.first, list.h); page_img.draw_all(list.x, list.y, list.w, list.h, list.first);
DrawScroller(); DrawScroller();
} }

View File

@ -0,0 +1,98 @@
struct _img
{
collection url;
collection_int xywh;
int getid;
void clear();
dword add_pos();
bool set_size();
dword current_url();
bool next_url();
void draw_all();
bool draw();
};
void _img::clear()
{
url.drop();
xywh.drop();
getid = 0;
}
dword _img::add_pos(dword _path, _x, _y)
{
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;
}
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;
for (i=0; i<url.count; i++)
{
img_y = xywh.get(i*4 + 1);
if (img_y > _start) && (img_y < _start + _h)
&& (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;
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_draw stdcall(EDI, img_x + _x, img_y - _start + _y, img_w, img_h, 0, 0);
free(EDI);
}
}

View File

@ -1,5 +1,5 @@
CustomCursor CursorPointer; CustomCursor CursorPointer;
dword CursorFile = FROM "../TWB/pointer.cur"; dword CursorFile = FROM "TWB/pointer.cur";
#include "..\lib\collection.h" #include "..\lib\collection.h"
struct PAGE_LINKS { struct PAGE_LINKS {

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -22,6 +22,7 @@
#include "..\lib\obj\http.h" #include "..\lib\obj\http.h"
#include "..\lib\obj\iconv.h" #include "..\lib\obj\iconv.h"
#include "..\lib\obj\proc_lib.h" #include "..\lib\obj\proc_lib.h"
#include "..\lib\obj\netcode.h"
//useful patterns //useful patterns
#include "..\lib\patterns\history.h" #include "..\lib\patterns\history.h"
@ -31,13 +32,14 @@
char editbox_icons[] = FROM "res/editbox_icons.raw"; char editbox_icons[] = FROM "res/editbox_icons.raw";
char version[]="WebView 2.7e"; char version[]="WebView 2.8 ALPHA PREVIEW";
#include "texts.h" #include "texts.h"
#include "cache.h" #include "cache.h"
#include "show_src.h" #include "show_src.h"
bool debug_mode = false; bool debug_mode = false;
bool show_images = false;
enum { enum {
NEW_TAB=600, NEW_TAB=600,
@ -68,7 +70,7 @@ _history history;
enum { TARGET_SAME_TAB, TARGET_NEW_WINDOW, TARGET_NEW_TAB }; enum { TARGET_SAME_TAB, TARGET_NEW_WINDOW, TARGET_NEW_TAB };
#include "..\TWB\TWB.c" //HTML Parser, a core component #include "TWB\TWB.c" //HTML Parser, a core component
TWebBrowser WB1; TWebBrowser WB1;
@ -84,7 +86,7 @@ _http http = 0;
bool source_mode = false; bool source_mode = false;
progress_bar wv_progress_bar; progress_bar prbar;
char stak[4096]; char stak[4096];
proc_info Form; proc_info Form;
@ -105,12 +107,13 @@ dword http_get_type;
void LoadLibraries() void LoadLibraries()
{ {
load_dll(boxlib, #box_lib_init,0); load_dll(boxlib, #box_lib_init,0);
load_dll(libio, #libio_init,1); load_dll(libio, #libio_init,1);
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(Proc_lib, #OpenDialog_init,0); load_dll(netcode_lib, #base64_encode,0);
load_dll(Proc_lib, #OpenDialog_init,0);
OpenDialog_init stdcall (#o_dialog); OpenDialog_init stdcall (#o_dialog);
} }
@ -156,7 +159,7 @@ void main()
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);
if (scroll_wv.delta) { if (scroll_wv.delta2) {
WB1.list.first = scroll_wv.position; WB1.list.first = scroll_wv.position;
WB1.DrawPage(); WB1.DrawPage();
break; break;
@ -164,24 +167,24 @@ void main()
if (links.hover(WB1.list.y, WB1.list.first)) if (links.hover(WB1.list.y, WB1.list.first))
{ {
if (mouse.mkm) { if (mouse.key&MOUSE_MIDDLE) && (mouse.up) {
if (key_modifier&KEY_LSHIFT) || (key_modifier&KEY_RSHIFT) { if (key_modifier&KEY_LSHIFT) || (key_modifier&KEY_RSHIFT) {
EventClickLink(TARGET_NEW_WINDOW); EventClickLink(TARGET_NEW_WINDOW);
} else { } else {
EventClickLink(TARGET_NEW_TAB); EventClickLink(TARGET_NEW_TAB);
} }
} }
if (mouse.lkm) { if (mouse.key&MOUSE_LEFT) && (mouse.up) {
CursorPointer.Restore(); CursorPointer.Restore();
EventClickLink(TARGET_SAME_TAB); EventClickLink(TARGET_SAME_TAB);
} }
if (mouse.pkm) { if (mouse.key&MOUSE_RIGHT) && (mouse.up) {
CursorPointer.Restore(); CursorPointer.Restore();
EventShowLinkMenu(); EventShowLinkMenu();
} }
} else { } else {
CursorPointer.Restore(); CursorPointer.Restore();
if (mouse.pkm) && (WB1.list.MouseOver(mouse.x, mouse.y)) { if (mouse.key&MOUSE_RIGHT) && (mouse.up) && (WB1.list.MouseOver(mouse.x, mouse.y)) {
EventShowPageMenu(); EventShowPageMenu();
} }
} }
@ -259,7 +262,7 @@ void main()
} }
else if (http_get_type==IMG) { else if (http_get_type==IMG) {
cache.add(WB1.page_img.current_url(), http.content_pointer, http.content_received, IMG); cache.add(WB1.page_img.current_url(), http.content_pointer, http.content_received, IMG);
WB1.page_img.set_size(http.content_pointer, http.content_received); WB1.page_img.set_size(WB1.page_img.getid, http.content_pointer, http.content_received);
GetImg(); GetImg();
} }
} }
@ -397,6 +400,7 @@ void ProcessEvent(dword id__)
case DOWNLOAD_LINK_CT: EventOpenDownloader( GetAbsoluteActiveURL() ); return; case DOWNLOAD_LINK_CT: EventOpenDownloader( GetAbsoluteActiveURL() ); return;
case OPEN_FILE: EventOpenDialog(); return; case OPEN_FILE: EventOpenDialog(); return;
case SCAN_CODE_F12: EventToggleDebugMode(); return; case SCAN_CODE_F12: EventToggleDebugMode(); return;
case SCAN_CODE_F11: show_images^=1; return;
} }
} }
@ -420,10 +424,10 @@ void EventAllTabsClick(dword _n)
void EventEditSource() void EventEditSource()
{ {
if (check_is_the_adress_local(history.current())) { if (check_is_the_adress_local(history.current())) {
RunProgram("/rd/1/tinypad", history.current()); RunProgram("/rd/1/quark", history.current());
} else { } else {
CreateFile(WB1.bufsize, WB1.bufpointer, "/tmp0/1/WebView_tmp.htm"); CreateFile(WB1.bufsize, WB1.bufpointer, "/tmp0/1/WebView_tmp.htm");
if (!EAX) RunProgram("/rd/1/tinypad", "/tmp0/1/WebView_tmp.htm"); if (!EAX) RunProgram("/rd/1/quark", "/tmp0/1/WebView_tmp.htm");
} }
} }
@ -443,7 +447,7 @@ void EventCopyLinkToClipboard()
void StopLoading() void StopLoading()
{ {
if (http.stop()) pause(10); if (http.stop()) pause(10);
wv_progress_bar.value = 0; prbar.value = 0;
DrawOmnibox(); DrawOmnibox();
} }
@ -494,10 +498,22 @@ bool GetLocalFileData(dword _path)
return true; return true;
} }
void GetUrl(dword _http_url)
{
char new_url_full[URL_SIZE+1];
if (!strncmp(_http_url,"http:",5)) {
http.get(_http_url);
} 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);
}
}
void OpenPage(dword _open_URL) void OpenPage(dword _open_URL)
{ {
char new_url[URL_SIZE+1]; char new_url[URL_SIZE+1];
char new_url_full[URL_SIZE+1];
int unz_id; int unz_id;
StopLoading(); StopLoading();
@ -542,13 +558,7 @@ void OpenPage(dword _open_URL)
} }
http_get_type = PAGE; http_get_type = PAGE;
if (!strncmp(#new_url,"http:",5)) { GetUrl(#new_url);
http.get(#new_url);
} else if (!strncmp(#new_url,"https://",8)) {
strcpy(#new_url_full, "http://gate.aspero.pro/?site=");
strncat(#new_url_full, #new_url, URL_SIZE);
http.get(#new_url_full);
}
DrawOmnibox(); DrawOmnibox();
@ -703,7 +713,7 @@ void LoadInternalPage(dword _bufdata, _in_bufsize){
} else { } else {
WB1.DrawPage(); WB1.DrawPage();
} }
//GetImg(); GetImg();
} }
} }
@ -715,14 +725,11 @@ bool UrlExtIs(dword base, ext)
void DrawProgress() void DrawProgress()
{ {
dword persent; dword pct;
if (http.transfer == 0) return; if (!http.transfer) return;
if (wv_progress_bar.max) { if (http_get_type==PAGE) && (prbar.max) pct = prbar.value*30/prbar.max; else pct = 10;
persent = wv_progress_bar.value*100/wv_progress_bar.max; if (http_get_type==IMG) pct = WB1.page_img.getid * 70 / WB1.page_img.url.count + 30;
} else { DrawBar(address_box.left-1, address_box.top+20, pct*address_box.width+16/100, 2, 0x72B7EB);
persent = 10;
}
DrawBar(address_box.left-1, address_box.top+20, persent*address_box.width+16/100, 2, 0x72B7EB);
} }
void EventShowPageMenu() void EventShowPageMenu()
@ -766,10 +773,10 @@ void ProcessMenuClick()
void EventUpdateProgressBar() void EventUpdateProgressBar()
{ {
wv_progress_bar.max = http.content_length; prbar.max = http.content_length;
if (wv_progress_bar.value != http.content_received) if (prbar.value != http.content_received)
{ {
wv_progress_bar.value = http.content_received; prbar.value = http.content_received;
DrawProgress(); DrawProgress();
} }
} }
@ -925,21 +932,24 @@ void HandleRedirect()
char redirect_url[URL_SIZE]; char redirect_url[URL_SIZE];
http.header_field("location", #redirect_url, URL_SIZE); http.header_field("location", #redirect_url, URL_SIZE);
get_absolute_url(#redirect_url, history.current()); get_absolute_url(#redirect_url, history.current());
history.back(); if (http_get_type==PAGE) history.back();
http.hfree(); http.hfree();
if (http_get_type==PAGE) OpenPage(#redirect_url); if (http_get_type==PAGE) OpenPage(#redirect_url);
else if (http_get_type==IMG) http.get(#redirect_url); else if (http_get_type==IMG) GetUrl(#redirect_url);
} }
dword GetImg() dword GetImg()
{ {
if (!show_images) return;
while (WB1.page_img.next_url()) { while (WB1.page_img.next_url()) {
DrawProgress();
if (cache.has(WB1.page_img.current_url())) continue; if (cache.has(WB1.page_img.current_url())) continue;
http_get_type = IMG; http_get_type = IMG;
http.get(WB1.page_img.current_url()); GetUrl(WB1.page_img.current_url());
return; return;
} }
DrawOmnibox(); DrawOmnibox();
WB1.ParseHtml(WB1.o_bufpointer, WB1.bufsize);
WB1.DrawPage(); WB1.DrawPage();
} }

View File

@ -42,16 +42,10 @@ ShowHistory()
strcat(history_pointer, "<br><b>Cached images</b><br>"); strcat(history_pointer, "<br><b>Cached images</b><br>");
for (i=1; i<cache.url.count; i++) if (cache.type.get(i) == IMG) for (i=1; i<cache.url.count; i++) if (cache.type.get(i) == IMG)
{ {
strcat(history_pointer, "<a href='");
strcat(history_pointer, cache.url.get(i)); strcat(history_pointer, cache.url.get(i));
strcat(history_pointer, "'>"); strcat(history_pointer, "<img src='");
strcat(history_pointer, cache.url.get(i)); strcat(history_pointer, cache.url.get(i));
strcat(history_pointer, "</a><br>"); strcat(history_pointer, "'><br>");
// strcat(history_pointer, "<img src='");
// strcat(history_pointer, #pics[i].path);
// strcat(history_pointer, "'><br>");
// strcat(history_pointer, #pics[i].path);
} }
strcat(history_pointer, "</body></html>"); strcat(history_pointer, "</body></html>");

View File

@ -16,7 +16,7 @@ struct collection_int
void alloc(); void alloc();
void add(); void add();
dword get(); dword get();
void set(); dword set();
void swap(); void swap();
dword len(); dword len();
dword get_last(); dword get_last();
@ -47,10 +47,11 @@ struct collection_int
} }
:void collection_int::set(dword pos, _in) { :dword collection_int::set(dword pos, _in) {
while (pos >= count) add(0); while (pos >= count) add(0);
EAX = pos * sizeof(dword) + buf; EAX = pos * sizeof(dword) + buf;
ESDWORD[EAX] = _in; ESDWORD[EAX] = _in;
return ESDWORD[EAX];
} }
:void collection_int::swap(dword pos1, pos2) { :void collection_int::swap(dword pos1, pos2) {

View File

@ -5,7 +5,7 @@
#define MOUSE_LEFT 001b #define MOUSE_LEFT 001b
#define MOUSE_RIGHT 010b #define MOUSE_RIGHT 010b
#define MOUSE_LR 011b #define MOUSE_LR 011b
#define MOUSE_CENTER 100b #define MOUSE_MIDDLE 100b
/** /**
* The structure of the MOUSE * The structure of the MOUSE