diff --git a/programs/cmm/TWB/TWB.c b/programs/cmm/TWB/TWB.c index b55299f4f5..f62c0c5cd1 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 80b7834a4a..bade95c195 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 439810a148..dbe9136c81 100644 Binary files a/programs/cmm/browser/wv_skin.png and b/programs/cmm/browser/wv_skin.png differ