From 1b46e09ba602ed296ba331cd71736cb96b159afa Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Wed, 26 Aug 2015 19:22:20 +0000 Subject: [PATCH] WevView 1.35: fix links, remove tabs, refactoring git-svn-id: svn://kolibrios.org@5772 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/cmm/TWB/TWB.c | 2 - programs/cmm/TWB/links.h | 21 ++-- programs/cmm/browser/WebView.c | 189 +++++++++++-------------------- programs/cmm/browser/wv_skin.png | Bin 1976 -> 1945 bytes 4 files changed, 76 insertions(+), 136 deletions(-) diff --git a/programs/cmm/TWB/TWB.c b/programs/cmm/TWB/TWB.c index b55299f4f..f62c0c5cd 100644 --- a/programs/cmm/TWB/TWB.c +++ b/programs/cmm/TWB/TWB.c @@ -102,7 +102,6 @@ void TWebBrowser::DrawStyle() if (style.u) DrawBuf.DrawBar(start_x, list.line_h - DrawBuf.zoom - DrawBuf.zoom + start_y, line_length, DrawBuf.zoom, text_colors[text_color_index]); if (link) { DrawBuf.DrawBar(start_x, list.line_h - DrawBuf.zoom - DrawBuf.zoom + start_y, line_length, DrawBuf.zoom, text_colors[text_color_index]); - UnsafeDefineButton(start_x-2, start_y-1 + list.y, line_length + 3, DrawBuf.zoom * list.font_h, PageLinks.count + 400 + BT_HIDE, 0xB5BFC9); PageLinks.AddText(#line, line_length, list.line_h, UNDERLINE); } stolbec += stolbec_len; @@ -312,7 +311,6 @@ void TWebBrowser::SetStyle(int left1, top1) { do{ if (isattr("href=")) { - if (stroka - 1 > list.visible) || (stroka < -2) return; text_color_index++; text_colors[text_color_index] = text_colors[text_color_index-1]; link = 1; diff --git a/programs/cmm/TWB/links.h b/programs/cmm/TWB/links.h index 80b7834a4..bade95c19 100644 --- a/programs/cmm/TWB/links.h +++ b/programs/cmm/TWB/links.h @@ -4,20 +4,17 @@ dword CursorFile = FROM "../TWB/pointer.cur"; #define NOLINE 0 #define UNDERLINE 1 - struct array_link { dword link, text; int x,y,w,h; int underline; }; -struct LinksArray -{ - array_link links[200]; +struct LinksArray { + array_link links[400]; char page_links[64000]; dword buflen; int count, active; - void Hover(); void AddLink(); void AddText(); @@ -27,14 +24,14 @@ struct LinksArray int UrlAbsolute(); } PageLinks; -void LinksArray::AddLink(dword new_link, int link_x, link_y) +void LinksArray::AddLink(dword lpath, int link_x, link_y) { links[count].x = link_x; links[count].y = link_y; links[count].link = buflen; - strcpy(buflen, new_link); - buflen += strlen(new_link)+1; + strcpy(buflen, lpath); + buflen += strlen(lpath)+1; count++; } @@ -71,14 +68,15 @@ PathShow_data status_text = {0, 17,250, 6, 250, 0, 0, 0x0, 0xFFFfff, 0, #temp, 0 void LinksArray::Hover(dword mx, my, link_col_in, link_col_a, bg_col) { int i; + signed int WBY = -WB1.list.first*WB1.list.line_h + WB1.list.line_h - WB1.DrawBuf.zoom; for (i=0; ilinks[i].x) && (my>links[i].y) && (mxWB1.list.y) PageLinks.Hover(mouse.x, mouse.y, link_color_inactive, link_color_active, bg_color); - //Menu - if (mouse.y>WB1.list.y) && (mouse.y=0) + { + DrawRectangle(PageLinks.links[PageLinks.active].x, PageLinks.links[PageLinks.active].y, + PageLinks.links[PageLinks.active].w, PageLinks.links[PageLinks.active].h, 0); + ClickLink(); + } } //Drag scroller scroll_wv.all_redraw = 0; if (!mouse.lkm) scroll_used=0; if (mouse.x>=scroll_wv.start_x) && (mouse.x<=scroll_wv.start_x+scroll_wv.size_x) && (mouse.y>=scroll_wv.start_y+scroll_wv.btn_height) && (-scroll_wv.btn_height+scroll_wv.start_y+scroll_wv.size_y>mouse.y) - && (WB1.list.count>WB1.list.visible) && (mouse.lkm) - { - scroll_used=1; - } + && (WB1.list.count>WB1.list.visible) && (mouse.lkm) scroll_used=1; if (scroll_used) { mouse.y = mouse.y + 5; @@ -265,7 +221,9 @@ void main() } else { - //TODO: display error (too many redirects) + notify("Too many redirects"); + StopLoading(); + break; } } else @@ -292,7 +250,7 @@ void main() http_free stdcall (http_transfer); http_transfer=0; SetPageDefaults(); - Draw_Window(); // stop button => refresh button + ShowPage(); } } } @@ -302,54 +260,32 @@ void main() void SetElementSizes() { - address_box.top = TOOLBAR_H-TAB_H/2-7+TAB_H; + address_box.top = TOOLBAR_H/2-7; address_box.width = Form.cwidth - address_box.left - 25 - 22; WB1.list.SetSizes(0, TOOLBAR_H, Form.width - 10 - scroll_wv.size_x / WB1.DrawBuf.zoom, Form.cheight - TOOLBAR_H - STATUSBAR_H, WB1.list.font_h + WB1.DrawBuf.zoom + WB1.DrawBuf.zoom * WB1.DrawBuf.zoom); WB1.list.wheel_size = 7; WB1.list.column_max = WB1.list.w - scroll_wv.size_x / WB1.list.font_w; WB1.list.visible = WB1.list.h - 5 / WB1.list.line_h; - WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, WB1.list.h * 20); + if (WB1.list.w!=WB1.DrawBuf.bufw) WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, WB1.list.h * 20); } void Draw_Window() { - int img_off; - // tab { - /* - if (TAB_H) - { - DrawBar(0, 0, TAB_W, TAB_H+1, panel_color); - WriteText(5, 7, 0x80, 0xfdfdFd, "Index.htm"); - WriteText(4, 6, 0x80, 0, "Index.htm"); - DrawBar(TAB_W,0, Form.cwidth-TAB_W,TAB_H, col_bg); - DrawBar(TAB_W-1,TAB_H, Form.cwidth-TAB_W+1,1, border_color); - img_draw stdcall(skin.image, TAB_W-13, 0, 30, skin.h, 101, 0); - } - else */ DrawBar(0,0, Form.cwidth,1, col_bg); - // } - DrawBar(0,TAB_H+1, Form.cwidth,TOOLBAR_H-TAB_H-3, panel_color); + DrawBar(0,0, Form.cwidth,TOOLBAR_H-2, panel_color); DrawBar(0,TOOLBAR_H-2, Form.cwidth,1, 0xD7D0D3); DrawBar(0,TOOLBAR_H-1, Form.cwidth,1, border_color); SetElementSizes(); - DrawRectangle(address_box.left-2, address_box.top-3, address_box.width+4, 20,border_color); - DrawRectangle(address_box.left-1, address_box.top-2, address_box.width+2, 18,address_box.color); - DrawRectangle(address_box.left-1, address_box.top-1, address_box.width+2, 16,address_box.color); - // < / > - DefineButton(address_box.left-49, address_box.top-2, 23, skin.h-2, BACK_BUTTON+BT_HIDE, 0); - DefineButton(address_box.left-25, address_box.top-2, 23, skin.h-2, FORWARD_BUTTON+BT_HIDE, 0); - img_draw stdcall(skin.image, address_box.left-50, address_box.top-3, 48, skin.h, 3, 0); - // refresh_BUTTON + DrawRectangle(address_box.left-3, address_box.top-3, address_box.width+5, 20,border_color); + DefineButton(address_box.left-50, address_box.top-2, 23, skin.h-2, BACK_BUTTON+BT_HIDE, 0); + DefineButton(address_box.left-26, address_box.top-2, 23, skin.h-2, FORWARD_BUTTON+BT_HIDE, 0); + img_draw stdcall(skin.image, address_box.left-51, address_box.top-3, 48, skin.h, 3, 0); DefineButton(address_box.left+address_box.width+1, address_box.top-3, 16, skin.h-1, REFRESH_BUTTON+BT_HIDE+BT_NOFRAME, 0); - if (http_transfer > 0) img_off = 131; else img_off = 52; - img_draw stdcall(skin.image, address_box.left+address_box.width+1, address_box.top-3, 17, skin.h, img_off, 0); - // config DefineButton(Form.cwidth-24, address_box.top-3, 19, skin.h-1, SANDWICH_BUTTON+BT_HIDE, 0); img_draw stdcall(skin.image, Form.cwidth-22, address_box.top-3, 16, skin.h, 85, 0); - //status bar DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,STATUSBAR_H, col_bg); DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,1, border_color); - ShowPage(); + if (!header) OpenPage(); else { WB1.DrawPage(); DrawEditBox(); } DrawRectangle(scroll_wv.start_x, scroll_wv.start_y, scroll_wv.size_x, scroll_wv.size_y-1, scroll_wv.bckg_col); DrawProgress(); } @@ -358,11 +294,6 @@ void Draw_Window() void Scan(dword id__) { action_buf=0; - if (id__ >= 400) && (id__ < 1000) - { - ProcessLinks(id__); - return; - } switch (id__) { case SCAN_CODE_BS: @@ -370,41 +301,39 @@ void Scan(dword id__) if (!BrowserHistory.GoBack()) return; OpenPage(); return; - case FORWARD_BUTTON: if (!BrowserHistory.GoForward()) return; OpenPage(); return; - case SCAN_CODE_HOME: case SCAN_CODE_END: case SCAN_CODE_PGUP: case SCAN_CODE_PGDN: if (WB1.list.ProcessKey(key_scancode)) WB1.DrawPage(); return; - case SCAN_CODE_UP: if (WB1.list.first <= 0) return; WB1.list.first--; WB1.DrawPage(); return; - case SCAN_CODE_DOWN: if (WB1.list.visible + WB1.list.first >= WB1.list.count) return; WB1.list.first++; WB1.DrawPage(); return; - case GOTOURL_BUTTON: - case SCAN_CODE_ENTER: //enter - if (!editURL[0]) return; - if (strncmp(#editURL,"http:",5)) && (editURL[0]!='/') && (strncmp(#editURL,"WebView:",9)) strncpy(#URL,"http://",7); + case SCAN_CODE_ENTER: + if (!strncmp(#editURL,"http:",5)) || (editURL[0]=='/') || (!strncmp(#editURL,"WebView:",9)) + { + strcpy(#URL, #editURL); + } else - URL[0] = 0; - strcat(#URL, #editURL); + { + strncpy(#URL,"http://",7); + strcat(#URL, #editURL); + } OpenPage(); return; - case 063: //F5 IF(address_box.flags & 0b10) return; case REFRESH_BUTTON: @@ -415,19 +344,16 @@ void Scan(dword id__) } else OpenPage(); return; - case SANDWICH_BUTTON: mouse.y = TOOLBAR_H-6; mouse.x = Form.cwidth - 167; CreateThread(#menu_rmb,#stak+4092); return; - case VIEW_SOURCE: WB1.list.first = 0; ShowSource(); WB1.DrawPage(); break; - case EDIT_SOURCE: if (!strncmp(#URL,"http:",5)) { @@ -436,42 +362,36 @@ void Scan(dword id__) } else RunProgram("/rd/1/tinypad", #URL); return; - case FREE_IMG_CACHE: ImgCache.Free(); notify(IMAGES_CACHE_CLEARED); WB1.DrawPage(); return; - case VIEW_HISTORY: strcpy(#URL, URL_SERVICE_HISTORY); OpenPage(); return; - case DOWNLOAD_MANAGER: if (!downloader_opened) { strncpy(#DL_URL, "http://",7); CreateThread(#Downloader,#downloader_stak+4092); } - return; -/* + return; /* case 020: case NEWTAB: MoveSize(190,80,OLD,OLD); RunProgram(#program_path, #URL); return; - case SEARCHWEB_BUTTON: sprintf(#URL,"%s%s",#search_path,#editURL); OpenPage(); - return; -*/ + return; */ } } -void ProcessLinks(int id) +void ClickLink() { if (http_transfer > 0) { @@ -479,7 +399,7 @@ void ProcessLinks(int id) BrowserHistory.current--; } - strcpy(#URL, PageLinks.GetURL(id-401)); + strcpy(#URL, PageLinks.GetURL(PageLinks.active)); //#1 if (URL[0] == '#') { @@ -563,6 +483,7 @@ void OpenPage() SetPageDefaults(); if (!strcmp(#URL, URL_SERVICE_HOME)) WB1.LoadInternalPage(#homepage, sizeof(homepage)); else if (!strcmp(#URL, URL_SERVICE_HISTORY)) ShowHistory(); + DrawEditBox(); return; } if (!strncmp(#URL,"http:",5)) @@ -596,9 +517,12 @@ void OpenPage() DrawEditBox() { + DrawWideRectangle(address_box.left-2, address_box.top-2, address_box.width+3, 19, 2, address_box.color); address_box.size = address_box.pos = address_box.shift = address_box.shift_old = strlen(#editURL); address_box.offset = 0; edit_box_draw stdcall(#address_box); + if (http_transfer > 0) EAX = 131; else EAX = 52; + img_draw stdcall(skin.image, address_box.left+address_box.width+1, address_box.top-3, 17, skin.h, EAX, 0); } @@ -630,6 +554,27 @@ byte UrlExtIs(dword ext) return false; } +int SetSkinColors() +{ + dword image_data; + image_data = DSDWORD[skin.image+24]; + col_bg = DSDWORD[image_data]; + panel_color = DSDWORD[skin.w*4*4 + image_data]; + border_color = DSDWORD[skin.w*4*7 + image_data]; + wv_progress_bar.progress_color = DSDWORD[skin.w*4*10 + image_data]; + $and col_bg, 0x00ffffff + $and panel_color, 0x00ffffff + $and border_color, 0x00ffffff + $and wv_progress_bar.progress_color, 0x00ffffff +} + +void DrawProgress() +{ + unsigned long btn; + if (http_transfer == 0) return; + if (wv_progress_bar.max) btn = address_box.width*wv_progress_bar.value/wv_progress_bar.max; else btn = 30; + DrawBar(address_box.left-2, address_box.top+15, btn, 2, wv_progress_bar.progress_color); +} char downloader_stak[4096]; diff --git a/programs/cmm/browser/wv_skin.png b/programs/cmm/browser/wv_skin.png index 439810a148bf02a9d9c72fd187e92aef221ee047..dbe9136c818e871824260b7e390115c0e88c761f 100644 GIT binary patch delta 1932 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 x2A|ke1*)>5awP1T^0)MvasrBaYsQFT_b*Vk$H