From 01c85524899587ddec9d9d4135b54b84907946c0 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sun, 10 Oct 2010 22:42:24 +0000 Subject: [PATCH] make windows frontend build and run again Fix redraw bugs Still major issue with frames svn path=/trunk/netsurf/; revision=10880 --- Makefile.sources | 2 +- windows/gui.c | 1016 +++++++++++++++++++++------------------- windows/localhistory.c | 1 - windows/plot.c | 330 +++++++------ windows/plot.h | 2 - windows/thumbnail.c | 13 +- windows/windbg.c | 612 ++++++++++++++++++++++++ windows/windbg.h | 1 + 8 files changed, 1330 insertions(+), 647 deletions(-) create mode 100644 windows/windbg.c create mode 100644 windows/windbg.h diff --git a/Makefile.sources b/Makefile.sources index 2239cc7cd..f21aeddf2 100644 --- a/Makefile.sources +++ b/Makefile.sources @@ -72,7 +72,7 @@ S_GTK := $(addprefix gtk/,$(S_GTK)) $(addprefix utils/,container.c) # S_WINDOWS are sources purely for the windows build S_WINDOWS := about.c bitmap.c download.c filetype.c findfile.c font.c \ gui.c localhistory.c login.c misc.c plot.c prefs.c schedule.c \ - thumbnail.c tree.c + thumbnail.c tree.c windbg.c S_WINDOWS := $(addprefix windows/,$(S_WINDOWS)) # S_BEOS are sources purely for the BeOS build diff --git a/windows/gui.c b/windows/gui.c index 9eb30e780..860f35eeb 100644 --- a/windows/gui.c +++ b/windows/gui.c @@ -60,6 +60,8 @@ #include "windows/resourceid.h" #include "windows/schedule.h" +#include "windbg.h" + char *default_stylesheet_url; char *adblock_stylesheet_url; char *quirks_stylesheet_url; @@ -86,6 +88,7 @@ struct gui_window { /* The front's private data connected to a browser window */ /* currently 1<->1 gui_window<->windows window [non-tabbed] */ struct browser_window *bw; /** the browser_window */ + HWND main; /**< handle to the actual window */ HWND toolbar; /**< toolbar handle */ HWND urlbar; /**< url bar handle */ @@ -94,6 +97,7 @@ struct gui_window { HWND statusbar; /**< status bar handle */ HWND vscroll; /**< vertical scrollbar handle */ HWND hscroll; /**< horizontal scrollbar handle */ + HMENU mainmenu; /**< the main menu */ HMENU rclick; /**< the right-click menu */ struct nsws_localhistory *localhistory; /**< handle to local history window */ @@ -157,8 +161,9 @@ void gui_poll(bool active) if (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE) != 0) { if (!((current_gui == NULL) || (TranslateAccelerator(current_gui->main, - current_gui->acceltable, &Msg)))) + current_gui->acceltable, &Msg)))) { TranslateMessage(&Msg); + } DispatchMessage(&Msg); } @@ -171,14 +176,11 @@ void gui_poll(bool active) /** * callback for url bar events */ -LRESULT CALLBACK +LRESULT CALLBACK nsws_window_url_callback(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { DWORD i, ii; SendMessage(hwnd, EM_GETSEL, (WPARAM)&i, (LPARAM)&ii); - int x,y; - x = GET_X_LPARAM(lparam); - y = GET_Y_LPARAM(lparam); if (msg == WM_PAINT) { SendMessage(hwnd, EM_SETSEL, (WPARAM)0, (LPARAM)-1); @@ -189,7 +191,13 @@ nsws_window_url_callback(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) /* calculate the dimensions of the url bar relative to the parent toolbar */ static void -urlbar_dimensions(HWND hWndParent, int toolbuttonsize, int buttonc, int *x, int *y, int *width, int *height) +urlbar_dimensions(HWND hWndParent, + int toolbuttonsize, + int buttonc, + int *x, + int *y, + int *width, + int *height) { RECT rc; const int cy_edit = 24; @@ -217,12 +225,14 @@ nsws_get_gui_window(HWND hwnd) } if (gw == NULL) { - /* unable to fetch from property, try seraching the + /* unable to fetch from property, try searching the * gui window list */ gw = window_list; while (gw != NULL) { - if ((gw->main == hwnd) || (gw->toolbar == hwnd)) { + if ((gw->main == hwnd) || + (gw->drawingarea == hwnd) || + (gw->toolbar == hwnd)) { break; } gw = gw->next; @@ -241,14 +251,19 @@ nsws_window_toolbar_callback(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) struct gui_window *gw; int urlx, urly, urlwidth, urlheight; - switch (msg) { - case WM_SIZE: + if (msg == WM_SIZE) { gw = nsws_get_gui_window(hwnd); - urlbar_dimensions(hwnd, gw->toolbuttonsize, gw->toolbuttonc, &urlx, &urly, &urlwidth, &urlheight); + + urlbar_dimensions(hwnd, + gw->toolbuttonsize, + gw->toolbuttonc, + &urlx, &urly, &urlwidth, &urlheight); + /* resize url */ if (gw->urlbar != NULL) { MoveWindow(gw->urlbar, urlx, urly, urlwidth, urlheight, true); } + /* move throbber */ if (gw->throbber != NULL) { MoveWindow(gw->throbber, @@ -257,7 +272,6 @@ nsws_window_toolbar_callback(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) true); } - break; } /* chain to the next handler */ @@ -271,8 +285,10 @@ static void nsws_window_update_forward_back(struct gui_window *w) { if (w->bw == NULL) return; + bool forward = history_forward_available(w->bw->history); bool back = history_back_available(w->bw->history); + if (w->mainmenu != NULL) { EnableMenuItem(w->mainmenu, NSWS_ID_NAV_FORWARD, (forward ? MF_ENABLED : MF_GRAYED)); @@ -283,6 +299,7 @@ static void nsws_window_update_forward_back(struct gui_window *w) EnableMenuItem(w->rclick, NSWS_ID_NAV_BACK, (back ? MF_ENABLED : MF_GRAYED)); } + if (w->toolbar != NULL) { SendMessage(w->toolbar, TB_SETSTATE, (WPARAM) NSWS_ID_NAV_FORWARD, @@ -300,8 +317,7 @@ static void nsws_update_edit(struct gui_window *w) bool paste, copy, del; if (GetFocus() == w->urlbar) { DWORD i, ii; - SendMessage(w->urlbar, EM_GETSEL, (WPARAM)&i, - (LPARAM)&ii); + SendMessage(w->urlbar, EM_GETSEL, (WPARAM)&i, (LPARAM)&ii); paste = true; copy = (i != ii); del = (i != ii); @@ -324,17 +340,14 @@ static void nsws_update_edit(struct gui_window *w) NSWS_ID_EDIT_PASTE, (paste ? MF_ENABLED : MF_GRAYED)); - EnableMenuItem(w->mainmenu, NSWS_ID_EDIT_COPY, (copy ? MF_ENABLED : MF_GRAYED)); - EnableMenuItem(w->rclick, NSWS_ID_EDIT_COPY, (copy ? MF_ENABLED : MF_GRAYED)); - if (del == true) { EnableMenuItem(w->mainmenu, NSWS_ID_EDIT_CUT, MF_ENABLED); EnableMenuItem(w->mainmenu, NSWS_ID_EDIT_DELETE, MF_ENABLED); @@ -426,14 +439,17 @@ static void nsws_window_set_accels(struct gui_window *w) static void nsws_window_set_ico(struct gui_window *w) { char ico[PATH_MAX]; + nsws_find_resource(ico, "NetSurf32.ico", "windows/res/NetSurf32.ico"); LOG(("setting ico as %s", ico)); hIcon = LoadImage(NULL, ico, IMAGE_ICON, 32, 32, LR_LOADFROMFILE); + if (hIcon != NULL) SendMessage(w->main, WM_SETICON, ICON_BIG, (LPARAM) hIcon); nsws_find_resource(ico, "NetSurf16.ico", "windows/res/NetSurf16.ico"); LOG(("setting ico as %s", ico)); hIconS = LoadImage(NULL, ico, IMAGE_ICON, 16, 16, LR_LOADFROMFILE); + if (hIconS != NULL) SendMessage(w->main, WM_SETICON, ICON_SMALL, (LPARAM)hIconS); } @@ -470,13 +486,13 @@ static void nsws_window_throbber_create(struct gui_window *w) w->throbber = hwnd; } -static HIMAGELIST +static HIMAGELIST nsws_set_imagelist(HWND hwnd, UINT msg, int resid, int bsize, int bcnt) { HIMAGELIST hImageList; HBITMAP hScrBM; - hImageList = ImageList_Create(bsize, bsize, ILC_COLOR24 |ILC_MASK, 0, bcnt); + hImageList = ImageList_Create(bsize, bsize, ILC_COLOR24 | ILC_MASK, 0, bcnt); hScrBM = LoadImage(hinstance, MAKEINTRESOURCE(resid), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); ImageList_AddMasked(hImageList, hScrBM, 0xcccccc); @@ -487,7 +503,7 @@ nsws_set_imagelist(HWND hwnd, UINT msg, int resid, int bsize, int bcnt) } static HWND -nsws_window_toolbar_create(struct gui_window *gw, HWND hWndParent) +nsws_window_toolbar_create(struct gui_window *gw) { HWND hWndToolbar; /* Toolbar buttons */ @@ -498,6 +514,7 @@ nsws_window_toolbar_create(struct gui_window *gw, HWND hWndParent) {3, NSWS_ID_NAV_RELOAD, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, {4, NSWS_ID_NAV_STOP, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, }; + HWND hWndParent = gw->main; /* Create the toolbar child window. */ hWndToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, "Toolbar", @@ -572,22 +589,36 @@ static LRESULT nsws_drawable_mousemove(struct gui_window *gw, int x, int y) (gw->bw == NULL)) return 0; - if ((gw->mouse->state & BROWSER_MOUSE_PRESS_1) != 0) { - browser_window_mouse_click(gw->bw, BROWSER_MOUSE_DRAG_1, - gw->mouse->pressed_x, - gw->mouse->pressed_y); - gw->mouse->state &= ~BROWSER_MOUSE_PRESS_1; - gw->mouse->state |= BROWSER_MOUSE_HOLDING_1 | - BROWSER_MOUSE_DRAG_ON; - } - else if ((gw->mouse->state & BROWSER_MOUSE_PRESS_2) != 0) { - browser_window_mouse_click(gw->bw, BROWSER_MOUSE_DRAG_2, - gw->mouse->pressed_x, - gw->mouse->pressed_y); - gw->mouse->state &= ~BROWSER_MOUSE_PRESS_2; - gw->mouse->state |= BROWSER_MOUSE_HOLDING_2 | - BROWSER_MOUSE_DRAG_ON; + /* scale co-ordinates */ + x = (x + gw->scrollx) / gw->bw->scale; + y = (y + gw->scrolly) / gw->bw->scale; + + /* if mouse button held down and pointer moved more than + * minimum distance drag is happening */ + if (((gw->mouse->state & (BROWSER_MOUSE_PRESS_1 | BROWSER_MOUSE_PRESS_2)) != 0) && + (abs(x - gw->mouse->pressed_x) >= 5) && + (abs(y - gw->mouse->pressed_y) >= 5)) { + + LOG(("Drag start state 0x%x", gw->mouse->state)); + + if ((gw->mouse->state & BROWSER_MOUSE_PRESS_1) != 0) { + browser_window_mouse_click(gw->bw, BROWSER_MOUSE_DRAG_1, + gw->mouse->pressed_x, + gw->mouse->pressed_y); + gw->mouse->state &= ~BROWSER_MOUSE_PRESS_1; + gw->mouse->state |= BROWSER_MOUSE_HOLDING_1 | + BROWSER_MOUSE_DRAG_ON; + } + else if ((gw->mouse->state & BROWSER_MOUSE_PRESS_2) != 0) { + browser_window_mouse_click(gw->bw, BROWSER_MOUSE_DRAG_2, + gw->mouse->pressed_x, + gw->mouse->pressed_y); + gw->mouse->state &= ~BROWSER_MOUSE_PRESS_2; + gw->mouse->state |= BROWSER_MOUSE_HOLDING_2 | + BROWSER_MOUSE_DRAG_ON; + } } + if (((gw->mouse->state & BROWSER_MOUSE_MOD_1) != 0) && !shift) gw->mouse->state &= ~BROWSER_MOUSE_MOD_1; if (((gw->mouse->state & BROWSER_MOUSE_MOD_2) != 0) && !ctrl) @@ -595,14 +626,16 @@ static LRESULT nsws_drawable_mousemove(struct gui_window *gw, int x, int y) if (((gw->mouse->state & BROWSER_MOUSE_MOD_3) != 0) && !alt) gw->mouse->state &= ~BROWSER_MOUSE_MOD_3; - browser_window_mouse_track(gw->bw, gw->mouse->state, - (x + gw->scrollx) / gw->bw->scale, - (y + gw->scrolly) / gw->bw->scale); + + browser_window_mouse_track(gw->bw, gw->mouse->state, x, y); return 0; } -static LRESULT nsws_drawable_mousedown(struct gui_window *gw, int x, int y, browser_mouse_state button) +static LRESULT +nsws_drawable_mousedown(struct gui_window *gw, + int x, int y, + browser_mouse_state button) { if ((gw == NULL) || (gw->mouse == NULL) || @@ -622,6 +655,11 @@ static LRESULT nsws_drawable_mousedown(struct gui_window *gw, int x, int y, brow gw->mouse->pressed_x = (x + gw->scrollx) / gw->bw->scale; gw->mouse->pressed_y = (y + gw->scrolly) / gw->bw->scale; + LOG(("mouse click bw %p, state %x, x %f, y %f",gw->bw, + gw->mouse->state, + (x + gw->scrollx) / gw->bw->scale, + (y + gw->scrolly) / gw->bw->scale)); + browser_window_mouse_click(gw->bw, gw->mouse->state, (x + gw->scrollx) / gw->bw->scale , (y + gw->scrolly) / gw->bw->scale); @@ -645,7 +683,7 @@ nsws_drawable_mouseup(struct gui_window *gw, (gw->bw == NULL)) return 0; - + LOG(("state 0x%x, press 0x%x", gw->mouse->state, press)); if ((gw->mouse->state & press) != 0) { gw->mouse->state &= ~press; gw->mouse->state |= click; @@ -658,69 +696,71 @@ nsws_drawable_mouseup(struct gui_window *gw, if (((gw->mouse->state & BROWSER_MOUSE_MOD_3) != 0) && !alt) gw->mouse->state &= ~BROWSER_MOUSE_MOD_3; - if ((gw->mouse->state & click) != 0) + if ((gw->mouse->state & click) != 0) { + LOG(("mouse click bw %p, state 0x%x, x %f, y %f",gw->bw, + gw->mouse->state, + (x + gw->scrollx) / gw->bw->scale, + (y + gw->scrolly) / gw->bw->scale)); + browser_window_mouse_click(gw->bw, gw->mouse->state, (x + gw->scrollx) / gw->bw->scale, (y + gw->scrolly) / gw->bw->scale); - else + } else { browser_window_mouse_drag_end(gw->bw, 0, (x + gw->scrollx) / gw->bw->scale, (y + gw->scrolly) / gw->bw->scale); + } gw->mouse->state = 0; return 0; } -static void nsws_drawable_paint(struct gui_window *gw, HWND hwnd) +static LRESULT +nsws_drawable_paint(struct gui_window *gw, HWND hwnd) { PAINTSTRUCT ps; BeginPaint(hwnd, &ps); - if ((gw != NULL) && - (gw->bw != NULL) && + if ((gw != NULL) && + (gw->bw != NULL) && (gw->bw->current_content != NULL)) { /* set globals for the plotters */ current_hwnd = gw->drawingarea; current_gui = gw; - LOG(("x %f, y %f, w %d, h %d, left %d, top %d, right %d, bottom %d", - -gw->scrollx / gw->bw->scale, - -gw->scrolly / gw->bw->scale, - gw->width, - gw->height, - ps.rcPaint.left, - ps.rcPaint.top, - ps.rcPaint.right, - ps.rcPaint.bottom)); - - content_redraw(gw->bw->current_content, + content_redraw(gw->bw->current_content, -gw->scrollx / gw->bw->scale, -gw->scrolly / gw->bw->scale, - gw->width, + gw->width, gw->height, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom, - gw->bw->scale, + gw->bw->scale, 0xFFFFFF); - LOG(("complete")); + } EndPaint(hwnd, &ps); + + return 0; } -static void +static LRESULT nsws_drawable_hscroll(struct gui_window *gw, HWND hwnd, WPARAM wparam) { - LOG(("HSCROLL!")); - if (gw->requestscrollx != 0) - return; SCROLLINFO si; int mem; + + LOG(("HSCROLL %d", gw->requestscrollx)); + + if (gw->requestscrollx != 0) + return 0; + si.cbSize = sizeof(si); si.fMask = SIF_ALL; GetScrollInfo(hwnd, SB_HORZ, &si); @@ -749,27 +789,38 @@ nsws_drawable_hscroll(struct gui_window *gw, HWND hwnd, WPARAM wparam) default: break; } + si.fMask = SIF_POS; - if ((gw->bw != NULL) && (gw->bw->current_content != NULL)) + + if ((gw->bw != NULL) && + (gw->bw->current_content != NULL)) { si.nPos = MIN(si.nPos, content_get_width(gw->bw->current_content) * gw->bw->scale - gw->width); + } si.nPos = MAX(si.nPos, 0); SetScrollInfo(hwnd, SB_HORZ, &si, TRUE); GetScrollInfo(hwnd, SB_HORZ, &si); if (si.nPos != mem) { - gui_window_set_scroll(gw, gw->scrollx + gw->requestscrollx + si.nPos - mem, gw->scrolly); + gui_window_set_scroll(gw, + gw->scrollx + gw->requestscrollx + si.nPos - mem, + gw->scrolly); } + + return 0; } -static void +static LRESULT nsws_drawable_vscroll(struct gui_window *gw, HWND hwnd, WPARAM wparam) { - LOG(("VSCROLL!")); - if (gw->requestscrolly != 0) - return; SCROLLINFO si; int mem; + + LOG(("VSCROLL %d", gw->requestscrolly)); + + if (gw->requestscrolly != 0) + return 0; + si.cbSize = sizeof(si); si.fMask = SIF_ALL; GetScrollInfo(hwnd, SB_VERT, &si); @@ -807,7 +858,7 @@ nsws_drawable_vscroll(struct gui_window *gw, HWND hwnd, WPARAM wparam) break; } si.fMask = SIF_POS; - if ((gw->bw != NULL) && + if ((gw->bw != NULL) && (gw->bw->current_content != NULL)) { si.nPos = MIN(si.nPos, content_get_height(gw->bw->current_content) * @@ -820,12 +871,15 @@ nsws_drawable_vscroll(struct gui_window *gw, HWND hwnd, WPARAM wparam) gui_window_set_scroll(gw, gw->scrollx, gw->scrolly + gw->requestscrolly + si.nPos - mem); } + + return 0; } -static void nsws_drawable_key(struct gui_window *gw, HWND hwnd, WPARAM wparam) +static LRESULT +nsws_drawable_key(struct gui_window *gw, HWND hwnd, WPARAM wparam) { if (GetFocus() != hwnd) - return; + return 0 ; uint32_t i; bool shift = ((GetKeyState(VK_SHIFT) & 0x8000) == 0x8000); @@ -903,9 +957,10 @@ static void nsws_drawable_key(struct gui_window *gw, HWND hwnd, WPARAM wparam) if (gw != NULL) browser_window_key_press(gw->bw, i); + return 0; } -static DWORD +static LRESULT nsws_drawable_wheel(struct gui_window *gw, HWND hwnd, WPARAM wparam) { int i, z = GET_WHEEL_DELTA_WPARAM(wparam) / WHEEL_DELTA; @@ -921,38 +976,42 @@ nsws_drawable_wheel(struct gui_window *gw, HWND hwnd, WPARAM wparam) z = (z < 0) ? -1 * z : z; for (i = 0; i < z; i++) SendMessage(hwnd, newmessage, MAKELONG(command, 0), 0); + return 0; } -static DWORD +static LRESULT nsws_drawable_resize(struct gui_window *gw) { browser_window_reformat(gw->bw, gw->width, gw->height); return 0; } + /* Called when activity occours within the drawable window. */ -LRESULT CALLBACK nsws_window_drawable_event_callback(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) +LRESULT CALLBACK +nsws_window_drawable_event_callback(HWND hwnd, + UINT msg, + WPARAM wparam, + LPARAM lparam) { - struct gui_window *gw = window_list; + struct gui_window *gw; - while (gw != NULL) { - if (gw->drawingarea == hwnd) { - break; - } - gw = gw->next; - } + gw = nsws_get_gui_window(hwnd); - if (gw == NULL) + LOG(("%s, hwnd %p, gw %p", msg_num_to_name(msg), hwnd, gw)); + + if (gw == NULL) { + LOG(("Unable to find gui window structure for hwnd %p", hwnd)); return DefWindowProc(hwnd, msg, wparam, lparam); + } switch(msg) { case WM_MOUSEMOVE: - nsws_drawable_mousemove(gw, - GET_X_LPARAM(lparam), - GET_Y_LPARAM(lparam)); - break; + return nsws_drawable_mousemove(gw, + GET_X_LPARAM(lparam), + GET_Y_LPARAM(lparam)); case WM_LBUTTONDOWN: nsws_drawable_mousedown(gw, @@ -961,6 +1020,7 @@ LRESULT CALLBACK nsws_window_drawable_event_callback(HWND hwnd, UINT msg, WPARAM BROWSER_MOUSE_PRESS_1); SetFocus(hwnd); nsws_localhistory_close(gw); + return 0; break; case WM_RBUTTONDOWN: @@ -969,70 +1029,65 @@ LRESULT CALLBACK nsws_window_drawable_event_callback(HWND hwnd, UINT msg, WPARAM GET_Y_LPARAM(lparam), BROWSER_MOUSE_PRESS_2); SetFocus(hwnd); + return 0; break; case WM_LBUTTONUP: - nsws_drawable_mouseup(gw, - GET_X_LPARAM(lparam), - GET_Y_LPARAM(lparam), - BROWSER_MOUSE_PRESS_1, - BROWSER_MOUSE_CLICK_1); - break; + return nsws_drawable_mouseup(gw, + GET_X_LPARAM(lparam), + GET_Y_LPARAM(lparam), + BROWSER_MOUSE_PRESS_1, + BROWSER_MOUSE_CLICK_1); case WM_RBUTTONUP: - nsws_drawable_mouseup(gw, - GET_X_LPARAM(lparam), - GET_Y_LPARAM(lparam), - BROWSER_MOUSE_PRESS_2, - BROWSER_MOUSE_CLICK_2); - break; + return nsws_drawable_mouseup(gw, + GET_X_LPARAM(lparam), + GET_Y_LPARAM(lparam), + BROWSER_MOUSE_PRESS_2, + BROWSER_MOUSE_CLICK_2); - case WM_ERASEBKGND: + case WM_ERASEBKGND: /* ignore as drawable window is redrawn on paint */ return 0; - case WM_PAINT: - nsws_drawable_paint(gw, hwnd); - break; + case WM_PAINT: /* redraw the exposed part of the window */ + return nsws_drawable_paint(gw, hwnd); case WM_KEYDOWN: - nsws_drawable_key(gw, hwnd, wparam); - break; + return nsws_drawable_key(gw, hwnd, wparam); case WM_SIZE: - nsws_drawable_resize(gw); - break; + return nsws_drawable_resize(gw); case WM_HSCROLL: - nsws_drawable_hscroll(gw, hwnd, wparam); - break; + return nsws_drawable_hscroll(gw, hwnd, wparam); case WM_VSCROLL: - nsws_drawable_vscroll(gw, hwnd, wparam); - break; + return nsws_drawable_vscroll(gw, hwnd, wparam); case WM_MOUSEWHEEL: return nsws_drawable_wheel(gw, hwnd, wparam); - default: - break; } - return DefWindowProc(hwnd, msg, wparam, lparam); } -static void +static LRESULT nsws_window_resize(struct gui_window *w, HWND hwnd, WPARAM wparam, LPARAM lparam) { + int x, y; + RECT rmain, rstatus, rtool; + if ((w->toolbar == NULL) || (w->urlbar == NULL) || (w->statusbar == NULL)) - return; + return 0; + + SendMessage(w->statusbar, WM_SIZE, wparam, lparam); + SendMessage(w->toolbar, WM_SIZE, wparam, lparam); - int x, y; - RECT rmain, rstatus, rtool; GetClientRect(hwnd, &rmain); GetClientRect(w->toolbar, &rtool); GetWindowRect(w->statusbar, &rstatus); @@ -1052,60 +1107,335 @@ nsws_window_resize(struct gui_window *w, gui_window_set_scroll(w, x, y); - if (w->toolbar != NULL) + if (w->toolbar != NULL) { SendMessage(w->toolbar, TB_SETSTATE, (WPARAM) NSWS_ID_NAV_STOP, MAKELONG(TBSTATE_INDETERMINATE, 0)); + } + return 0; +} + +static LRESULT +nsws_window_command(struct gui_window *gw, + int notification_code, + int identifier, + HWND ctrl_window) +{ + + switch(identifier) { + + case NSWS_ID_FILE_QUIT: + { + struct gui_window *w; + w = window_list; + while (w != NULL) { + browser_window_destroy(w->bw); + w = w->next; + } + netsurf_quit = true; + break; + } + + case NSWS_ID_FILE_OPEN_LOCATION: + SetFocus(gw->urlbar); + break; + + case NSWS_ID_FILE_OPEN_WINDOW: + browser_window_create(NULL, gw->bw, NULL, false, false); + break; + + case NSWS_ID_FILE_CLOSE_WINDOW: + PostMessage(gw->main, WM_CLOSE, 0, 0); + break; + + case NSWS_ID_FILE_SAVE_PAGE: + break; + + case NSWS_ID_FILE_SAVEAS_TEXT: + break; + + case NSWS_ID_FILE_SAVEAS_PDF: + break; + + case NSWS_ID_FILE_SAVEAS_DRAWFILE: + break; + + case NSWS_ID_FILE_SAVEAS_POSTSCRIPT: + break; + + case NSWS_ID_FILE_PRINT_PREVIEW: + break; + + case NSWS_ID_FILE_PRINT: + break; + + case NSWS_ID_EDIT_CUT: + OpenClipboard(gw->main); + EmptyClipboard(); + CloseClipboard(); + if (GetFocus() == gw->urlbar) { + SendMessage(gw->urlbar, WM_CUT, 0, 0); + } else if (gw->bw != NULL) { + browser_window_key_press(gw->bw, KEY_CUT_SELECTION); + } + break; + + case NSWS_ID_EDIT_COPY: + OpenClipboard(gw->main); + EmptyClipboard(); + CloseClipboard(); + if (GetFocus() == gw->urlbar) { + SendMessage(gw->urlbar, WM_COPY, 0, 0); + } else if (gw->bw != NULL) { + gui_copy_to_clipboard(gw->bw->sel); + } + break; + + case NSWS_ID_EDIT_PASTE: { + OpenClipboard(gw->main); + HANDLE h = GetClipboardData(CF_TEXT); + if (h != NULL) { + char *content = GlobalLock(h); + LOG(("pasting %s\n", content)); + GlobalUnlock(h); + } + CloseClipboard(); + if (GetFocus() == gw->urlbar) + SendMessage(gw->urlbar, WM_PASTE, 0, 0); + else + gui_paste_from_clipboard(gw, 0, 0); + break; + } + + case NSWS_ID_EDIT_DELETE: + if (GetFocus() == gw->urlbar) + SendMessage(gw->urlbar, WM_CUT, 0, 0); + else + browser_window_key_press(gw->bw, KEY_DELETE_RIGHT); + break; + + case NSWS_ID_EDIT_SELECT_ALL: + if (GetFocus() == gw->urlbar) + SendMessage(gw->urlbar, EM_SETSEL, 0, -1); + else + selection_select_all(gw->bw->sel); + break; + + case NSWS_ID_EDIT_SEARCH: + break; + + case NSWS_ID_EDIT_PREFERENCES: + nsws_prefs_dialog_init(gw->main); + break; + + case NSWS_ID_NAV_BACK: + if ((gw->bw != NULL) && + (history_back_available(gw->bw->history))) { + history_back(gw->bw, gw->bw->history); + } + nsws_window_update_forward_back(gw); + break; + + case NSWS_ID_NAV_FORWARD: + if ((gw->bw != NULL) && + (history_forward_available(gw->bw->history))) { + history_forward(gw->bw, gw->bw->history); + } + nsws_window_update_forward_back(gw); + break; + + case NSWS_ID_NAV_HOME: + browser_window_go(gw->bw, default_page, 0, true); + break; + + case NSWS_ID_NAV_STOP: + browser_window_stop(gw->bw); + break; + + case NSWS_ID_NAV_RELOAD: + browser_window_reload(gw->bw, true); + break; + + case NSWS_ID_NAV_LOCALHISTORY: + nsws_localhistory_init(gw); + break; + + case NSWS_ID_NAV_GLOBALHISTORY: + break; + + case NSWS_ID_VIEW_ZOOMPLUS: { + int x, y; + gui_window_get_scroll(gw, &x, &y); + if (gw->bw != NULL) { + browser_window_set_scale(gw->bw, gw->bw->scale * 1.1, true); + browser_window_reformat(gw->bw, gw->width, gw->height); + } + gui_window_redraw_window(gw); + gui_window_set_scroll(gw, x, y); + break; + } + + case NSWS_ID_VIEW_ZOOMMINUS: { + int x, y; + gui_window_get_scroll(gw, &x, &y); + if (gw->bw != NULL) { + browser_window_set_scale(gw->bw, + gw->bw->scale * 0.9, true); + browser_window_reformat(gw->bw, gw->width, gw->height); + } + gui_window_redraw_window(gw); + gui_window_set_scroll(gw, x, y); + break; + } + + case NSWS_ID_VIEW_ZOOMNORMAL: { + int x, y; + gui_window_get_scroll(gw, &x, &y); + if (gw->bw != NULL) { + browser_window_set_scale(gw->bw, 1.0, true); + browser_window_reformat(gw->bw, gw->width, gw->height); + } + gui_window_redraw_window(gw); + gui_window_set_scroll(gw, x, y); + break; + } + + case NSWS_ID_VIEW_SOURCE: + break; + + case NSWS_ID_VIEW_SAVE_WIN_METRICS: { + RECT r; + GetWindowRect(gw->main, &r); + option_window_x = r.left; + option_window_y = r.top; + option_window_width = r.right - r.left; + option_window_height = r.bottom - r.top; + options_write(options_file_location); + break; + } + + case NSWS_ID_VIEW_FULLSCREEN: { + RECT rdesk; + if (gw->fullscreen == NULL) { + HWND desktop = GetDesktopWindow(); + gw->fullscreen = malloc(sizeof(RECT)); + if ((desktop == NULL) || + (gw->fullscreen == NULL)) { + warn_user("NoMemory", 0); + break; + } + GetWindowRect(desktop, &rdesk); + GetWindowRect(gw->main, gw->fullscreen); + DeleteObject(desktop); + SetWindowLong(gw->main, GWL_STYLE, 0); + SetWindowPos(gw->main, HWND_TOPMOST, 0, 0, + rdesk.right - rdesk.left, + rdesk.bottom - rdesk.top, + SWP_SHOWWINDOW); + } else { + SetWindowLong(gw->main, GWL_STYLE, + WS_OVERLAPPEDWINDOW | + WS_HSCROLL | WS_VSCROLL | + WS_CLIPCHILDREN | + WS_CLIPSIBLINGS | CS_DBLCLKS); + SetWindowPos(gw->main, HWND_TOPMOST, + gw->fullscreen->left, + gw->fullscreen->top, + gw->fullscreen->right - + gw->fullscreen->left, + gw->fullscreen->bottom - + gw->fullscreen->top, + SWP_SHOWWINDOW | SWP_FRAMECHANGED); + free(gw->fullscreen); + gw->fullscreen = NULL; + } + break; + } + + case NSWS_ID_VIEW_DOWNLOADS: + break; + + case NSWS_ID_VIEW_TOGGLE_DEBUG_RENDERING: + html_redraw_debug = !html_redraw_debug; + if (gw->bw != NULL) { + browser_window_reformat(gw->bw, gw->width, gw->height); + } + break; + + case NSWS_ID_VIEW_DEBUGGING_SAVE_BOXTREE: + break; + + case NSWS_ID_VIEW_DEBUGGING_SAVE_DOMTREE: + break; + + case NSWS_ID_HELP_CONTENTS: + break; + + case NSWS_ID_HELP_GUIDE: + break; + + case NSWS_ID_HELP_INFO: + break; + + case NSWS_ID_HELP_ABOUT: + nsws_about_dialog_init(hinstance, gw->main); + break; + + case NSWS_ID_LAUNCH_URL: + { + if (GetFocus() != gw->urlbar) + break; + int len = SendMessage(gw->urlbar, WM_GETTEXTLENGTH, 0, 0); + char addr[len + 1]; + SendMessage(gw->urlbar, WM_GETTEXT, (WPARAM)(len + 1), (LPARAM)addr); + LOG(("launching %s\n", addr)); + browser_window_go(gw->bw, addr, 0, true); + break; + } + + case NSWS_ID_URLBAR: + break; + + default: + break; + } + return 0; /* control message handled */ } /** * callback for window events generally */ -LRESULT CALLBACK nsws_window_event_callback(HWND hwnd, UINT msg, WPARAM wparam, - LPARAM lparam) +LRESULT CALLBACK +nsws_window_event_callback(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { bool match = false; bool historyactive = false; - struct gui_window *w = window_list; - while (w != NULL) { - if (w->main == hwnd) { - match = true; - break; - } - w = w->next; + struct gui_window *gw; + + gw = nsws_get_gui_window(hwnd); + + LOG(("%s, hwnd %p, gw %p", msg_num_to_name(msg), hwnd, gw)); + + if (gw == NULL) { + LOG(("Unable to find gui window structure for hwnd %p", hwnd)); + return DefWindowProc(hwnd, msg, wparam, lparam); } - if (!match) { /* during initial window creation */ - w = window_list; - while (w != NULL) { - if (w->main == NULL) { - w->main = hwnd; - break; - } - w = w->next; - } - } - if ((match) && (current_gui == NULL)) { - /* local history window is active */ - if ((msg == WM_LBUTTONDOWN) || (msg == WM_PAINT)) - historyactive = true; - else if ((msg == WM_NCHITTEST) || (msg == WM_SETCURSOR)) - return DefWindowProc(hwnd, msg, wparam, lparam); - else - return 0; - } - current_gui = w; + + current_gui = gw; + switch(msg) { +/* case WM_LBUTTONDBLCLK: { int x,y; x = GET_X_LPARAM(lparam); y = GET_Y_LPARAM(lparam); - if ((w != NULL) && (w->bw != NULL) ) - browser_window_mouse_click(w->bw, + if ((gw != NULL) && (gw->bw != NULL) ) + browser_window_mouse_click(gw->bw, BROWSER_MOUSE_DOUBLE_CLICK, - (x + w->scrollx) / w->bw->scale, - (y + w->scrolly) / w->bw->scale); + (x + gw->scrollx) / gw->bw->scale, + (y + gw->scrolly) / gw->bw->scale); return DefWindowProc(hwnd, msg, wparam, lparam); break; } @@ -1127,300 +1457,30 @@ LRESULT CALLBACK nsws_window_event_callback(HWND hwnd, UINT msg, WPARAM wparam, break; +*/ + case WM_COMMAND: - { - switch(LOWORD(wparam)) { - case NSWS_ID_FILE_QUIT: - w = window_list; - while (w != NULL) { - browser_window_destroy(w->bw); - w = w->next; - } - netsurf_quit = true; - break; - - case NSWS_ID_FILE_OPEN_LOCATION: - SetFocus(w->urlbar); - break; - - case NSWS_ID_FILE_OPEN_WINDOW: - browser_window_create(NULL, w->bw, NULL, false, false); - break; - - case NSWS_ID_FILE_CLOSE_WINDOW: - PostMessage(hwnd, WM_CLOSE, 0, 0); - break; - case NSWS_ID_FILE_SAVE_PAGE: - break; - case NSWS_ID_FILE_SAVEAS_TEXT: - break; - case NSWS_ID_FILE_SAVEAS_PDF: - break; - case NSWS_ID_FILE_SAVEAS_DRAWFILE: - break; - case NSWS_ID_FILE_SAVEAS_POSTSCRIPT: - break; - case NSWS_ID_FILE_PRINT_PREVIEW: - break; - case NSWS_ID_FILE_PRINT: - break; - case NSWS_ID_EDIT_CUT: - OpenClipboard(hwnd); - EmptyClipboard(); - CloseClipboard(); - if (GetFocus() == w->urlbar) - SendMessage(w->urlbar, WM_CUT, 0, 0); - else if (w->bw != NULL) - browser_window_key_press(w->bw, - KEY_CUT_SELECTION); - break; - case NSWS_ID_EDIT_COPY: - OpenClipboard(hwnd); - EmptyClipboard(); - CloseClipboard(); - if (GetFocus() == w->urlbar) - SendMessage(w->urlbar, WM_COPY, 0, 0); - else if (w->bw != NULL) - gui_copy_to_clipboard(w->bw->sel); - break; - case NSWS_ID_EDIT_PASTE: { - OpenClipboard(hwnd); - HANDLE h = GetClipboardData(CF_TEXT); - if (h != NULL) { - char *content = GlobalLock(h); - LOG(("pasting %s\n", content)); - GlobalUnlock(h); - } - CloseClipboard(); - if (GetFocus() == w->urlbar) - SendMessage(w->urlbar, WM_PASTE, 0, 0); - else - gui_paste_from_clipboard(w, 0, 0); - break; - } - case NSWS_ID_EDIT_DELETE: - if (GetFocus() == w->urlbar) - SendMessage(w->urlbar, WM_CUT, 0, 0); - else - browser_window_key_press(w->bw, - KEY_DELETE_RIGHT); - break; - case NSWS_ID_EDIT_SELECT_ALL: - if (GetFocus() == w->urlbar) - SendMessage(w->urlbar, EM_SETSEL, 0, -1); - else - selection_select_all(w->bw->sel); - break; - case NSWS_ID_EDIT_SEARCH: - break; - case NSWS_ID_EDIT_PREFERENCES: - nsws_prefs_dialog_init(w->main); - break; - case NSWS_ID_NAV_BACK: - if ((w->bw != NULL) && (history_back_available( - w->bw->history))) { - history_back(w->bw, w->bw->history); - } - nsws_window_update_forward_back(w); - break; - case NSWS_ID_NAV_FORWARD: - if ((w->bw != NULL) && (history_forward_available( - w->bw->history))) { - history_forward(w->bw, w->bw->history); - } - nsws_window_update_forward_back(w); - break; - case NSWS_ID_NAV_HOME: - browser_window_go(w->bw, default_page, 0, true); - break; - case NSWS_ID_NAV_STOP: - browser_window_stop(w->bw); - break; - case NSWS_ID_NAV_RELOAD: - browser_window_reload(w->bw, true); - break; - case NSWS_ID_NAV_LOCALHISTORY: - nsws_localhistory_init(w); - break; - case NSWS_ID_NAV_GLOBALHISTORY: - break; - case NSWS_ID_VIEW_ZOOMPLUS: { - int x, y; - gui_window_get_scroll(w, &x, &y); - if (w->bw != NULL) { - browser_window_set_scale(w->bw, - w->bw->scale * 1.1, true); - browser_window_reformat(w->bw, w->width, - w->height); - } - gui_window_redraw_window(w); - gui_window_set_scroll(w, x, y); - break; - } - case NSWS_ID_VIEW_ZOOMMINUS: { - int x, y; - gui_window_get_scroll(w, &x, &y); - if (w->bw != NULL) { - browser_window_set_scale(w->bw, - w->bw->scale * 0.9, true); - browser_window_reformat(w->bw, w->width, - w->height); - } - gui_window_redraw_window(w); - gui_window_set_scroll(w, x, y); - break; - } - case NSWS_ID_VIEW_ZOOMNORMAL: { - int x, y; - gui_window_get_scroll(w, &x, &y); - if (w->bw != NULL) { - browser_window_set_scale(w->bw, - 1.0, true); - browser_window_reformat(w->bw, w->width, - w->height); - } - gui_window_redraw_window(w); - gui_window_set_scroll(w, x, y); - break; - } - case NSWS_ID_VIEW_SOURCE: - break; - case NSWS_ID_VIEW_SAVE_WIN_METRICS: { - RECT r; - GetWindowRect(hwnd, &r); - option_window_x = r.left; - option_window_y = r.top; - option_window_width = r.right - r.left; - option_window_height = r.bottom - r.top; - options_write(options_file_location); - break; - } -/* case NSWS_ID_VIEW_FULLSCREEN: { - RECT rdesk; - if (w->fullscreen == NULL) { - HWND desktop = GetDesktopWindow(); - w->fullscreen = malloc(sizeof(RECT)); - if ((desktop == NULL) || - (w->fullscreen == NULL)) { - warn_user("NoMemory", 0); - break; - } - GetWindowRect(desktop, &rdesk); - GetWindowRect(hwnd, w->fullscreen); - DeleteObject(desktop); - SetWindowLong(hwnd, GWL_STYLE, 0); - SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, - rdesk.right - rdesk.left, - rdesk.bottom - rdesk.top, - SWP_SHOWWINDOW); - } else { - SetWindowLong(hwnd, GWL_STYLE, - WS_OVERLAPPEDWINDOW | - WS_HSCROLL | WS_VSCROLL | - WS_CLIPCHILDREN | - WS_CLIPSIBLINGS | CS_DBLCLKS); - SetWindowPos(hwnd, HWND_TOPMOST, - w->fullscreen->left, - w->fullscreen->top, - w->fullscreen->right - - w->fullscreen->left, - w->fullscreen->bottom - - w->fullscreen->top, - SWP_SHOWWINDOW | - SWP_FRAMECHANGED); - free(w->fullscreen); - w->fullscreen = NULL; - } - break; - }*/ - case NSWS_ID_VIEW_DOWNLOADS: - break; - case NSWS_ID_VIEW_TOGGLE_DEBUG_RENDERING: - html_redraw_debug = !html_redraw_debug; - if (w->bw != NULL) { - browser_window_reformat(w->bw, w->width, w->height); - } - break; - case NSWS_ID_VIEW_DEBUGGING_SAVE_BOXTREE: - break; - case NSWS_ID_VIEW_DEBUGGING_SAVE_DOMTREE: - break; - case NSWS_ID_HELP_CONTENTS: - break; - case NSWS_ID_HELP_GUIDE: - break; - case NSWS_ID_HELP_INFO: - break; - case NSWS_ID_HELP_ABOUT: - nsws_about_dialog_init(hinstance, hwnd); - break; - case NSWS_ID_LAUNCH_URL: - { - if (GetFocus() != w->urlbar) - break; - int len = SendMessage(w->urlbar, WM_GETTEXTLENGTH, 0, - 0); - char addr[len + 1]; - SendMessage(w->urlbar, WM_GETTEXT, (WPARAM) (len + 1), - (LPARAM) addr); - LOG(("launching %s\n", addr)); - browser_window_go(w->bw, addr, 0, true); - break; - } - case NSWS_ID_URLBAR: - /* main message should already have been handled */ - break; - default: - break; - } - break; - } - case WM_CREATE: - { - HDC hdc = GetDC(hwnd); - int dpi = GetDeviceCaps(hdc,LOGPIXELSY); - if (dpi > 10) - nscss_screen_dpi = INTTOFIX(dpi); - ReleaseDC(hwnd, hdc); - return DefWindowProc(hwnd, msg, wparam, lparam); - break; - } - - case WM_PAINT: - { - DWORD ret = DefWindowProc(hwnd, msg, wparam, lparam); - if (historyactive) - current_gui = NULL; - return ret; - } + return nsws_window_command(gw, HIWORD(wparam), LOWORD(wparam), (HWND)lparam); case WM_SIZE: - SendMessage(w->statusbar, WM_SIZE, wparam, lparam); - SendMessage(w->toolbar, WM_SIZE, wparam, lparam); - nsws_window_resize(w, hwnd, wparam, lparam); - return DefWindowProc(hwnd, msg, wparam, lparam); + return nsws_window_resize(gw, hwnd, wparam, lparam); case WM_CLOSE: - if (--open_windows == 0) { + if (--open_windows <= 0) { netsurf_quit = true; } - browser_window_destroy(w->bw); + browser_window_destroy(gw->bw); break; - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProc(hwnd, msg, wparam, lparam); } - return 0; + return DefWindowProc(hwnd, msg, wparam, lparam); } static void create_local_windows_classes(void) { WNDCLASSEX w; + /* main window */ w.cbSize = sizeof(WNDCLASSEX); w.style = 0; w.lpfnWndProc = nsws_window_event_callback; @@ -1428,13 +1488,14 @@ static void create_local_windows_classes(void) { w.cbWndExtra = 0; w.hInstance = hinstance; w.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* -> NetSurf */ - w.hCursor = LoadCursor(NULL, IDC_ARROW); + w.hCursor = NULL; w.hbrBackground = (HBRUSH)(COLOR_MENU + 1); w.lpszMenuName = NULL; w.lpszClassName = windowclassname_main; w.hIconSm = LoadIcon(NULL, IDI_APPLICATION); /* -> NetSurf */ RegisterClassEx(&w); + /* drawable area */ w.lpfnWndProc = nsws_window_drawable_event_callback; w.hIcon = NULL; w.lpszMenuName = NULL; @@ -1450,9 +1511,15 @@ static void create_local_windows_classes(void) { */ static HWND nsws_window_statusbar_create(struct gui_window *w) { - HWND hwnd = CreateWindowEx(0, STATUSCLASSNAME, NULL, WS_CHILD | - WS_VISIBLE, 0, 0, 0, 0, w->main, - (HMENU) NSWS_ID_STATUSBAR, hinstance, NULL); + HWND hwnd = CreateWindowEx(0, + STATUSCLASSNAME, + NULL, + WS_CHILD | WS_VISIBLE, + 0, 0, 0, 0, + w->main, + (HMENU)NSWS_ID_STATUSBAR, + hinstance, + NULL); SendMessage(hwnd, SB_SETTEXT, 0, (LPARAM)"NetSurf"); return hwnd; } @@ -1492,22 +1559,25 @@ static HWND nsws_window_create(struct gui_window *gw) hinstance, NULL); + HDC hdc = GetDC(hwnd); + int dpi = GetDeviceCaps(hdc,LOGPIXELSY); + if (dpi > 10) + nscss_screen_dpi = INTTOFIX(dpi); + ReleaseDC(hwnd, hdc); + if ((option_window_width >= 100) && (option_window_height >= 100) && (option_window_x >= 0) && (option_window_y >= 0)) { - SetWindowPos(hwnd, HWND_TOPMOST, - option_window_x, option_window_y, - option_window_width, option_window_height, + SetWindowPos(hwnd, HWND_TOPMOST, + option_window_x, option_window_y, + option_window_width, option_window_height, SWP_SHOWWINDOW); } nsws_window_set_accels(gw); nsws_window_set_ico(gw); - gw->toolbar = nsws_window_toolbar_create(gw, hwnd); - gw->statusbar = nsws_window_statusbar_create(gw); - return hwnd; } @@ -1532,7 +1602,7 @@ gui_create_browser_window(struct browser_window *bw, gw->width = 800; gw->height = 600; - gw->toolbuttonsize = 24; + gw->toolbuttonsize = 24; gw->requestscrollx = 0; gw->requestscrolly = 0; gw->localhistory = NULL; @@ -1547,7 +1617,7 @@ gui_create_browser_window(struct browser_window *bw, gw->mouse->pressed_x = 0; gw->mouse->pressed_y = 0; - /* add window to list */ + /* add window to list */ if (window_list != NULL) window_list->prev = gw; gw->next = window_list; @@ -1556,32 +1626,36 @@ gui_create_browser_window(struct browser_window *bw, switch(bw->browser_window_type) { case BROWSER_WINDOW_NORMAL: gw->main = nsws_window_create(gw); + gw->toolbar = nsws_window_toolbar_create(gw); + gw->statusbar = nsws_window_statusbar_create(gw); gw->drawingarea = CreateWindow(windowclassname_drawable, - NULL, - WS_VISIBLE | WS_CHILD, - 0, 0, 0, 0, - gw->main, - NULL, - hinstance, - NULL); + NULL, + WS_VISIBLE | WS_CHILD, + 0, 0, 0, 0, + gw->main, + NULL, + hinstance, + NULL); /* set the gui window associated with this toolbar */ SetProp(gw->drawingarea, TEXT("GuiWnd"), (HANDLE)gw); + input_window = gw; open_windows++; ShowWindow(gw->main, SW_SHOWNORMAL); + break; case BROWSER_WINDOW_FRAME: gw->drawingarea = CreateWindow(windowclassname_drawable, - NULL, - WS_VISIBLE | WS_CHILD, - 0, 0, 0, 0, - bw->parent->window->drawingarea, - NULL, - hinstance, - NULL); + NULL, + WS_VISIBLE | WS_CHILD, + 0, 0, 0, 0, + bw->parent->window->drawingarea, + NULL, + hinstance, + NULL); /* set the gui window associated with this toolbar */ SetProp(gw->drawingarea, TEXT("GuiWnd"), (HANDLE)gw); @@ -1596,13 +1670,13 @@ gui_create_browser_window(struct browser_window *bw, case BROWSER_WINDOW_IFRAME: LOG(("create iframe")); gw->drawingarea = CreateWindow(windowclassname_drawable, - NULL, - WS_VISIBLE | WS_CHILD, - 0, 0, 0, 0, - bw->parent->window->drawingarea, - NULL, - hinstance, - NULL); + NULL, + WS_VISIBLE | WS_CHILD, + 0, 0, 0, 0, + bw->parent->window->drawingarea, + NULL, + hinstance, + NULL); /* set the gui window associated with this toolbar */ SetProp(gw->drawingarea, TEXT("GuiWnd"), (HANDLE)gw); @@ -1810,7 +1884,7 @@ void gui_window_redraw(struct gui_window *w, int x0, int y0, int x1, int y1) LOG(("redraw %p %d,%d %d,%d", w, x0, y0, x1, y1)); if (w == NULL) return; - + redrawrect.left = x0; redrawrect.top = y0; redrawrect.right = x1; @@ -1838,7 +1912,7 @@ void gui_window_update_box(struct gui_window *gw, return; RECT redrawrect; - + redrawrect.left = (long)data->redraw.x; redrawrect.top = (long)data->redraw.y; redrawrect.right =(long)(data->redraw.x + data->redraw.width); @@ -1969,6 +2043,8 @@ void gui_window_set_pointer(struct gui_window *w, gui_pointer_shape shape) { if (w == NULL) return; + + LOG(("shape %d", shape)); switch (shape) { case GUI_POINTER_POINT: /* link */ case GUI_POINTER_MENU: @@ -2173,8 +2249,8 @@ bool gui_window_frame_resize_start(struct gui_window *w) return true; } -void gui_window_save_link(struct gui_window *g, const char *url, - const char *title) +void gui_window_save_link(struct gui_window *g, const char *url, + const char *title) { } @@ -2295,9 +2371,9 @@ void gui_launch_url(const char *url) { } -void gui_cert_verify(const char *url, const struct ssl_cert_info *certs, - unsigned long num, - nserror (*cb)(bool proceed, void *pw), void *cbpw) +void gui_cert_verify(const char *url, const struct ssl_cert_info *certs, + unsigned long num, + nserror (*cb)(bool proceed, void *pw), void *cbpw) { cb(false, cbpw); } diff --git a/windows/localhistory.c b/windows/localhistory.c index aa80aeae3..4a07d5f24 100644 --- a/windows/localhistory.c +++ b/windows/localhistory.c @@ -73,7 +73,6 @@ void nsws_localhistory_init(struct gui_window *w) localhistory.height = 0; current_gui = NULL; current_hwnd = NULL; - doublebuffering = false; if ((bw != NULL) && (bw->history != NULL)) history_size(bw->history, &(localhistory.width), &(localhistory.height)); diff --git a/windows/plot.c b/windows/plot.c index 8fdb6d22b..f985d0870 100644 --- a/windows/plot.c +++ b/windows/plot.c @@ -48,9 +48,7 @@ HWND current_hwnd; struct gui_window *current_gui; -bool doublebuffering; bool thumbnail = false; -HDC bufferdc; static float nsws_plot_scale = 1.0; static RECT localhistory_clip; @@ -82,7 +80,7 @@ static bool line(int x0, int y0, int x1, int y1, const plot_style_t *style) { #if NSWS_PLOT_DEBUG LOG(("ligne from %d,%d to %d,%d thumbnail %d", x0, y0, x1, y1, - thumbnail)); + thumbnail)); #endif RECT *clipr = gui_window_clip_rect(current_gui); if (clipr == NULL) @@ -92,7 +90,7 @@ static bool line(int x0, int y0, int x1, int y1, const plot_style_t *style) return false; } - HDC hdc = doublebuffering ? bufferdc : GetDC(current_hwnd); + HDC hdc = GetDC(current_hwnd); if (hdc == NULL) { DeleteObject(clipregion); return false; @@ -100,23 +98,23 @@ static bool line(int x0, int y0, int x1, int y1, const plot_style_t *style) COLORREF col = (DWORD)(style->stroke_colour & 0x00FFFFFF); /* windows 0x00bbggrr */ DWORD penstyle = PS_GEOMETRIC | ((style->stroke_type == - PLOT_OP_TYPE_DOT) ? PS_DOT : - (style->stroke_type == PLOT_OP_TYPE_DASH) ? PS_DASH: - 0); + PLOT_OP_TYPE_DOT) ? PS_DOT : + (style->stroke_type == PLOT_OP_TYPE_DASH) ? PS_DASH: + 0); LOGBRUSH lb = {BS_SOLID, col, 0}; HPEN pen = ExtCreatePen(penstyle, style->stroke_width, &lb, 0, NULL); if (pen == NULL) { DeleteObject(clipregion); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } HGDIOBJ bak = SelectObject(hdc, (HGDIOBJ) pen); if (bak == NULL) { DeleteObject(pen); DeleteObject(clipregion); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } RECT r; @@ -133,50 +131,51 @@ static bool line(int x0, int y0, int x1, int y1, const plot_style_t *style) SelectClipRgn(hdc, NULL); /* ValidateRect(current_hwnd, &r); -*/ + */ pen = SelectObject(hdc, bak); DeleteObject(pen); DeleteObject(clipregion); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return true; } static bool rectangle(int x0, int y0, int x1, int y1, const plot_style_t - *style) + *style) { x1++; y1++; - x0 = MAX(x0, 0); +/* x0 = MAX(x0, 0); y0 = MAX(y0, 0); if (!((current_gui == NULL) || (thumbnail))) { - x1 = MIN(x1, gui_window_width(current_gui)); - y1 = MIN(y1, gui_window_height(current_gui)); + x1 = MIN(x1, gui_window_width(current_gui)); + y1 = MIN(y1, gui_window_height(current_gui)); } - +*/ #if NSWS_PLOT_DEBUG LOG(("rectangle from %d,%d to %d,%d thumbnail %d", x0, y0, x1, y1, - thumbnail)); + thumbnail)); #endif - HDC hdc = doublebuffering ? bufferdc : GetDC(current_hwnd); + HDC hdc = GetDC(current_hwnd); if (hdc == NULL) { return false; } - RECT *clipr = gui_window_clip_rect(current_gui); +/* RECT *clipr = gui_window_clip_rect(current_gui); if (clipr == NULL) clipr = &localhistory_clip; HRGN clipregion = CreateRectRgnIndirect(clipr); if (clipregion == NULL) { - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; - } + } +*/ COLORREF pencol = (DWORD)(style->stroke_colour & 0x00FFFFFF); DWORD penstyle = PS_GEOMETRIC | - (style->stroke_type == PLOT_OP_TYPE_DOT ? PS_DOT : - (style->stroke_type == PLOT_OP_TYPE_DASH ? PS_DASH : - (style->stroke_type == PLOT_OP_TYPE_NONE ? PS_NULL : - 0))); + (style->stroke_type == PLOT_OP_TYPE_DOT ? PS_DOT : + (style->stroke_type == PLOT_OP_TYPE_DASH ? PS_DASH : + (style->stroke_type == PLOT_OP_TYPE_NONE ? PS_NULL : + 0))); LOGBRUSH lb = {BS_SOLID, pencol, 0}; LOGBRUSH lb1 = {BS_SOLID, style->fill_colour, 0}; if (style->fill_type == PLOT_OP_TYPE_NONE) @@ -184,36 +183,36 @@ static bool rectangle(int x0, int y0, int x1, int y1, const plot_style_t HPEN pen = ExtCreatePen(penstyle, style->stroke_width, &lb, 0, NULL); if (pen == NULL) { - DeleteObject(clipregion); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); +// DeleteObject(clipregion); + + ReleaseDC(current_hwnd, hdc); return false; } HGDIOBJ penbak = SelectObject(hdc, (HGDIOBJ) pen); if (penbak == NULL) { - DeleteObject(clipregion); +// DeleteObject(clipregion); DeleteObject(pen); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } HBRUSH brush = CreateBrushIndirect(&lb1); if (brush == NULL) { - DeleteObject(clipregion); +// DeleteObject(clipregion); SelectObject(hdc, penbak); DeleteObject(pen); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } HGDIOBJ brushbak = SelectObject(hdc, (HGDIOBJ) brush); if (brushbak == NULL) { - DeleteObject(clipregion); +// DeleteObject(clipregion); SelectObject(hdc, penbak); DeleteObject(pen); DeleteObject(brush); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } RECT r; @@ -222,20 +221,20 @@ static bool rectangle(int x0, int y0, int x1, int y1, const plot_style_t r.right = x1; r.bottom = y1; - SelectClipRgn(hdc, clipregion); + //SelectClipRgn(hdc, clipregion); Rectangle(hdc, x0, y0, x1, y1); - SelectClipRgn(hdc, NULL); + //SelectClipRgn(hdc, NULL); /* ValidateRect(current_hwnd, &r); -*/ + */ pen = SelectObject(hdc, penbak); brush = SelectObject(hdc, brushbak); - DeleteObject(clipregion); +// DeleteObject(clipregion); DeleteObject(pen); DeleteObject(brush); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return true; } @@ -247,7 +246,7 @@ static bool polygon(const int *p, unsigned int n, const plot_style_t *style) #endif POINT points[n]; unsigned int i; - HDC hdc = doublebuffering ? bufferdc : GetDC(current_hwnd); + HDC hdc = GetDC(current_hwnd); if (hdc == NULL) { return false; } @@ -256,8 +255,8 @@ static bool polygon(const int *p, unsigned int n, const plot_style_t *style) clipr = &localhistory_clip; HRGN clipregion = CreateRectRgnIndirect(clipr); if (clipregion == NULL) { - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } COLORREF pencol = (DWORD)(style->fill_colour & 0x00FFFFFF); @@ -265,16 +264,15 @@ static bool polygon(const int *p, unsigned int n, const plot_style_t *style) HPEN pen = CreatePen(PS_GEOMETRIC | PS_NULL, 1, pencol); if (pen == NULL) { DeleteObject(clipregion); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + ReleaseDC(current_hwnd, hdc); return false; } HPEN penbak = SelectObject(hdc, pen); if (penbak == NULL) { DeleteObject(clipregion); DeleteObject(pen); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } HBRUSH brush = CreateSolidBrush(brushcol); @@ -282,8 +280,8 @@ static bool polygon(const int *p, unsigned int n, const plot_style_t *style) DeleteObject(clipregion); SelectObject(hdc, penbak); DeleteObject(pen); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } HBRUSH brushbak = SelectObject(hdc, brush); @@ -292,8 +290,8 @@ static bool polygon(const int *p, unsigned int n, const plot_style_t *style) SelectObject(hdc, penbak); DeleteObject(pen); DeleteObject(brush); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } SetPolyFillMode(hdc, WINDING); @@ -318,22 +316,22 @@ static bool polygon(const int *p, unsigned int n, const plot_style_t *style) DeleteObject(clipregion); DeleteObject(pen); DeleteObject(brush); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); #if NSWS_PLOT_DEBUG - printf("\n"); + printf("\n"); #endif return true; } static bool text(int x, int y, const char *text, size_t length, - const plot_font_style_t *style) + const plot_font_style_t *style) { #if NSWS_PLOT_DEBUG LOG(("words %s at %d,%d thumbnail %d", text, x, y, thumbnail)); #endif - HDC hdc = doublebuffering ? bufferdc : GetDC(current_hwnd); + HDC hdc = GetDC(current_hwnd); if (hdc == NULL) { return false; } @@ -342,16 +340,15 @@ static bool text(int x, int y, const char *text, size_t length, clipr = &localhistory_clip; HRGN clipregion = CreateRectRgnIndirect(clipr); if (clipregion == NULL) { - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + ReleaseDC(current_hwnd, hdc); return false; } HFONT fontbak, font = get_font(style); if (font == NULL) { DeleteObject(clipregion); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } int wlen; @@ -385,13 +382,13 @@ static bool text(int x, int y, const char *text, size_t length, SelectClipRgn(hdc, NULL); /* ValidateRect(current_hwnd, &r); -*/ + */ free(wstring); font = SelectObject(hdc, fontbak); DeleteObject(clipregion); DeleteObject(font); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return true; } @@ -400,7 +397,7 @@ static bool disc(int x, int y, int radius, const plot_style_t *style) #if NSWS_PLOT_DEBUG LOG(("disc at %d,%d radius %d thumbnail %d", x, y, radius, thumbnail)); #endif - HDC hdc = doublebuffering ? bufferdc : GetDC(current_hwnd); + HDC hdc = GetDC(current_hwnd); if (hdc == NULL) { return false; } @@ -409,26 +406,26 @@ static bool disc(int x, int y, int radius, const plot_style_t *style) clipr = &localhistory_clip; HRGN clipregion = CreateRectRgnIndirect(clipr); if (clipregion == NULL) { - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } COLORREF col = (DWORD)((style->fill_colour | style->stroke_colour) - & 0x00FFFFFF); + & 0x00FFFFFF); HPEN pen = CreatePen(PS_GEOMETRIC | PS_SOLID, 1, col); if (pen == NULL) { DeleteObject(clipregion); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } HGDIOBJ penbak = SelectObject(hdc, (HGDIOBJ) pen); if (penbak == NULL) { DeleteObject(clipregion); DeleteObject(pen); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } HBRUSH brush = CreateSolidBrush(col); @@ -436,8 +433,8 @@ static bool disc(int x, int y, int radius, const plot_style_t *style) DeleteObject(clipregion); SelectObject(hdc, penbak); DeleteObject(pen); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } HGDIOBJ brushbak = SelectObject(hdc, (HGDIOBJ) brush); @@ -446,8 +443,8 @@ static bool disc(int x, int y, int radius, const plot_style_t *style) SelectObject(hdc, penbak); DeleteObject(pen); DeleteObject(brush); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } RECT r; @@ -460,32 +457,32 @@ static bool disc(int x, int y, int radius, const plot_style_t *style) if (style->fill_type == PLOT_OP_TYPE_NONE) Arc(hdc, x - radius, y - radius, x + radius, y + radius, - x - radius, y - radius, - x - radius, y - radius); + x - radius, y - radius, + x - radius, y - radius); else Ellipse(hdc, x - radius, y - radius, x + radius, y + radius); SelectClipRgn(hdc, NULL); /* ValidateRect(current_hwnd, &r); -*/ + */ pen = SelectObject(hdc, penbak); brush = SelectObject(hdc, brushbak); DeleteObject(clipregion); DeleteObject(pen); DeleteObject(brush); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return true; } static bool arc(int x, int y, int radius, int angle1, int angle2, - const plot_style_t *style) + const plot_style_t *style) { #if NSWS_PLOT_DEBUG LOG(("arc centre %d,%d radius %d from %d to %d", x, y, radius, - angle1, angle2)); + angle1, angle2)); #endif - HDC hdc = doublebuffering ? bufferdc : GetDC(current_hwnd); + HDC hdc = GetDC(current_hwnd); if (hdc == NULL) { return false; } @@ -494,24 +491,24 @@ static bool arc(int x, int y, int radius, int angle1, int angle2, clipr = &localhistory_clip; HRGN clipregion = CreateRectRgnIndirect(clipr); if (clipregion == NULL) { - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } COLORREF col = (DWORD)(style->stroke_colour & 0x00FFFFFF); HPEN pen = CreatePen(PS_GEOMETRIC | PS_SOLID, 1, col); if (pen == NULL) { DeleteObject(clipregion); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } HGDIOBJ penbak = SelectObject(hdc, (HGDIOBJ) pen); if (penbak == NULL) { DeleteObject(clipregion); DeleteObject(pen); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } RECT r; @@ -576,32 +573,32 @@ static bool arc(int x, int y, int radius, int angle1, int angle2, SelectClipRgn(hdc, clipregion); Arc(hdc, x - radius, y - radius, x + radius, y + radius, - x + (int)(a1 * radius), y + (int)(b1 * radius), - x + (int)(a2 * radius), y + (int)(b2 * radius)); + x + (int)(a1 * radius), y + (int)(b1 * radius), + x + (int)(a2 * radius), y + (int)(b2 * radius)); SelectClipRgn(hdc, NULL); /* ValidateRect(current_hwnd, &r); -*/ + */ pen = SelectObject(hdc, penbak); DeleteObject(clipregion); DeleteObject(pen); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return true; } static bool bitmap(int x, int y, int width, int height, - struct bitmap *bitmap, colour bg, - bitmap_flags_t flags) + struct bitmap *bitmap, colour bg, + bitmap_flags_t flags) { #if NSWS_PLOT_DEBUG LOG(("%p bitmap %d,%d width %d height %d", current_hwnd, x, y, width, - height)); + height)); #endif if (bitmap == NULL) return false; - HDC hdc = doublebuffering ? bufferdc : GetDC(current_hwnd); + HDC hdc = GetDC(current_hwnd); if (hdc == NULL) { return false; } @@ -610,15 +607,14 @@ static bool bitmap(int x, int y, int width, int height, cliprect = &localhistory_clip; HRGN clipregion = CreateRectRgnIndirect(cliprect); if (clipregion == NULL) { - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } HDC Memhdc = CreateCompatibleDC(hdc); if (Memhdc == NULL) { DeleteObject(clipregion); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + ReleaseDC(current_hwnd, hdc); return false; } BITMAPINFOHEADER bmih; @@ -637,8 +633,8 @@ static bool bitmap(int x, int y, int width, int height, if ((flags & BITMAPF_REPEAT_X) || (flags & BITMAPF_REPEAT_Y)) { struct bitmap *prebitmap = bitmap_pretile(bitmap, - cliprect->right - x, - cliprect->bottom - y, flags); + cliprect->right - x, + cliprect->bottom - y, flags); if (prebitmap == NULL) return false; if (modifying) { @@ -650,29 +646,29 @@ static bool bitmap(int x, int y, int width, int height, } BITMAP MemBM; BITMAPINFO *bmi = (BITMAPINFO *) malloc(sizeof(BITMAPINFOHEADER) + - (bitmap->width * bitmap->height * 4)); + (bitmap->width * bitmap->height * 4)); if (bmi == NULL) { DeleteObject(clipregion); DeleteDC(Memhdc); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } HBITMAP MemBMh = CreateCompatibleBitmap( - hdc, bitmap->width, bitmap->height); + hdc, bitmap->width, bitmap->height); if (MemBMh == NULL){ DeleteObject(clipregion); free(bmi); DeleteDC(Memhdc); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return false; } /* save 'background' data for alpha channel work */ SelectObject(Memhdc, MemBMh); BitBlt(Memhdc, 0, 0, bitmap->width, bitmap->height, hdc, x, y, - SRCCOPY); + SRCCOPY); GetObject(MemBMh, sizeof(BITMAP), &MemBM); bmih.biSize = sizeof(bmih); @@ -689,77 +685,77 @@ static bool bitmap(int x, int y, int width, int height, bmi->bmiHeader = bmih; GetDIBits(hdc, MemBMh, 0, bitmap->height, bmi->bmiColors, bmi, - DIB_RGB_COLORS); + DIB_RGB_COLORS); /* then load 'foreground' bits from bitmap->pixdata */ width4 = bitmap->width * 4; for (v = 0, vv = 0, vi = (bitmap->height - 1) * width4; - v < bitmap->height; - v++, vv += bitmap->width, vi -= width4) { + v < bitmap->height; + v++, vv += bitmap->width, vi -= width4) { for (h = 0, hh = 0; h < bitmap->width; h++, hh += 4) { alpha = bitmap->pixdata[vi + hh + 3]; /* multiplication of alpha value; subject to profiling could be optional */ if (alpha == 0xFF) { bmi->bmiColors[vv + h].rgbBlue = - bitmap->pixdata[vi + hh + 2]; + bitmap->pixdata[vi + hh + 2]; bmi->bmiColors[vv + h].rgbGreen = - bitmap->pixdata[vi + hh + 1]; + bitmap->pixdata[vi + hh + 1]; bmi->bmiColors[vv + h].rgbRed = - bitmap->pixdata[vi + hh]; + bitmap->pixdata[vi + hh]; } else if (alpha > 0) { transparency = 0x100 - alpha; bmi->bmiColors[vv + h].rgbBlue = - (bmi->bmiColors[vv + h].rgbBlue - * transparency + - (bitmap->pixdata[vi + hh + 2]) * - alpha) >> 8; + (bmi->bmiColors[vv + h].rgbBlue + * transparency + + (bitmap->pixdata[vi + hh + 2]) * + alpha) >> 8; bmi->bmiColors[vv + h].rgbGreen = - (bmi->bmiColors[vv + h]. - rgbGreen - * transparency + - (bitmap->pixdata[vi + hh + 1]) * - alpha) >> 8; + (bmi->bmiColors[vv + h]. + rgbGreen + * transparency + + (bitmap->pixdata[vi + hh + 1]) * + alpha) >> 8; bmi->bmiColors[vv + h].rgbRed = - (bmi->bmiColors[vv + h].rgbRed - * transparency + - bitmap->pixdata[vi + hh] - * alpha) >> 8; + (bmi->bmiColors[vv + h].rgbRed + * transparency + + bitmap->pixdata[vi + hh] + * alpha) >> 8; } /* alternative simple 2/3 stage alpha value handling */ /* if (bitmap->pixdata[vi + hh + 3] > 0xAA) { - bmi->bmiColors[vv + h].rgbBlue = - bitmap->pixdata[vi + hh + 2]; - bmi->bmiColors[vv + h].rgbGreen = - bitmap->pixdata[vi + hh + 1]; - bmi->bmiColors[vv + h].rgbRed = - bitmap->pixdata[vi + hh]; + bmi->bmiColors[vv + h].rgbBlue = + bitmap->pixdata[vi + hh + 2]; + bmi->bmiColors[vv + h].rgbGreen = + bitmap->pixdata[vi + hh + 1]; + bmi->bmiColors[vv + h].rgbRed = + bitmap->pixdata[vi + hh]; } else if (bitmap->pixdata[vi + hh + 3] > 0x70){ - bmi->bmiColors[vv + h].rgbBlue = - (bmi->bmiColors[vv + h].rgbBlue + - bitmap->pixdata[vi + hh + 2]) / 2; - bmi->bmiColors[vv + h].rgbRed = - (bmi->bmiColors[vv + h].rgbRed + - bitmap->pixdata[vi + hh]) / 2; - bmi->bmiColors[vv + h].rgbGreen = - (bmi->bmiColors[vv + h].rgbGreen + - bitmap->pixdata[vi + hh + 1]) / 2; + bmi->bmiColors[vv + h].rgbBlue = + (bmi->bmiColors[vv + h].rgbBlue + + bitmap->pixdata[vi + hh + 2]) / 2; + bmi->bmiColors[vv + h].rgbRed = + (bmi->bmiColors[vv + h].rgbRed + + bitmap->pixdata[vi + hh]) / 2; + bmi->bmiColors[vv + h].rgbGreen = + (bmi->bmiColors[vv + h].rgbGreen + + bitmap->pixdata[vi + hh + 1]) / 2; } else if (bitmap->pixdata[vi + hh + 3] > 0x30){ - bmi->bmiColors[vv + h].rgbBlue = - (bmi->bmiColors[vv + h].rgbBlue * 3 + - bitmap->pixdata[vi + hh + 2]) / 4; - bmi->bmiColors[vv + h].rgbRed = - (bmi->bmiColors[vv + h].rgbRed * 3 + - bitmap->pixdata[vi + hh]) / 4; - bmi->bmiColors[vv + h].rgbGreen = - (bmi->bmiColors[vv + h].rgbGreen * 3 + - bitmap->pixdata[vi + hh + 1]) / 4; + bmi->bmiColors[vv + h].rgbBlue = + (bmi->bmiColors[vv + h].rgbBlue * 3 + + bitmap->pixdata[vi + hh + 2]) / 4; + bmi->bmiColors[vv + h].rgbRed = + (bmi->bmiColors[vv + h].rgbRed * 3 + + bitmap->pixdata[vi + hh]) / 4; + bmi->bmiColors[vv + h].rgbGreen = + (bmi->bmiColors[vv + h].rgbGreen * 3 + + bitmap->pixdata[vi + hh + 1]) / 4; } */ } } SetDIBitsToDevice(hdc, x, y, bitmap->width, bitmap->height, - 0, 0, 0, bitmap->height, (const void *) bmi->bmiColors, - bmi, DIB_RGB_COLORS); + 0, 0, 0, bitmap->height, (const void *) bmi->bmiColors, + bmi, DIB_RGB_COLORS); r.left = x; r.top = y; @@ -771,13 +767,13 @@ static bool bitmap(int x, int y, int width, int height, } /* ValidateRect(current_hwnd, &r); -*/ free(bmi); + */ free(bmi); /* SelectClipRgn(hdc, NULL); -*/ DeleteObject(clipregion); + */ DeleteObject(clipregion); DeleteObject(MemBMh); DeleteDC(Memhdc); - if (!doublebuffering) - ReleaseDC(current_hwnd, hdc); + + ReleaseDC(current_hwnd, hdc); return true; } diff --git a/windows/plot.h b/windows/plot.h index 1502412dd..157ce82df 100644 --- a/windows/plot.h +++ b/windows/plot.h @@ -21,8 +21,6 @@ extern HWND current_hwnd; extern struct gui_window *current_gui; -extern HDC bufferdc; -extern bool doublebuffering; extern bool thumbnail; void nsws_plot_set_scale(float s); diff --git a/windows/thumbnail.c b/windows/thumbnail.c index e96c32201..540511516 100644 --- a/windows/thumbnail.c +++ b/windows/thumbnail.c @@ -41,7 +41,7 @@ thumbnail_create(hlcache_handle *content, BITMAPINFOHEADER bmih; LOG(("creating thumbnail %p for url %s content %p", bitmap, url, content)); - + return false; bmi = malloc(sizeof(BITMAPINFOHEADER) + (bitmap->width * bitmap->height * 4)); if (bmi == NULL) { return false; @@ -59,7 +59,7 @@ thumbnail_create(hlcache_handle *content, bmih.biClrUsed = 0; bmih.biClrImportant = 0; bmi->bmiHeader = bmih; - +/* doublebuffering = true; if (bufferdc != NULL) @@ -85,9 +85,9 @@ thumbnail_create(hlcache_handle *content, content_redraw(content, 0, 0, width, height, 0, 0, width, height, 1.0, 0xFFFFFF); thumbnail = false; - +*/ /* scale bufferbm to minibm */ - +/* minidc = CreateCompatibleDC(hdc); if (minidc == NULL) { doublebuffering = false; @@ -123,9 +123,9 @@ thumbnail_create(hlcache_handle *content, return false; } SelectObject(minidc, minibm2); - +*/ /* save data from minibm bmi */ - GetDIBits(minidc, minibm, 0, 1 - bitmap->height, +/* GetDIBits(minidc, minibm, 0, 1 - bitmap->height, bmi->bmiColors, bmi, DIB_RGB_COLORS); pixdata = (uint8_t *)(bitmap->pixdata); @@ -147,4 +147,5 @@ thumbnail_create(hlcache_handle *content, doublebuffering = false; return true; +*/ } diff --git a/windows/windbg.c b/windows/windbg.c new file mode 100644 index 000000000..bfbf0a343 --- /dev/null +++ b/windows/windbg.c @@ -0,0 +1,612 @@ +#include + +#include "windbg.h" + +const char *msg_num_to_name(int msg) +{ + static char str[256]; + + switch (msg) { + case 32768: + return "WM_APP"; + + case 6: + return "WM_ACTIVATE "; + + case 28: + return "WM_ACTIVATEAPP "; + + case 864: + return "WM_AFXFIRST "; + + case 895: + return "WM_AFXLAST "; + + case 780: + return "WM_ASKCBFORMATNAME "; + + case 75: + return "WM_CANCELJOURNAL "; + + case 31: + return "WM_CANCELMODE "; + + case 533: + return "WM_CAPTURECHANGED "; + + case 781: + return "WM_CHANGECBCHAIN "; + + case 258: + return "WM_CHAR "; + + case 47: + return "WM_CHARTOITEM "; + + case 34: + return "WM_CHILDACTIVATE "; + + case 771: + return "WM_CLEAR "; + + case 16: + return "WM_CLOSE "; + + case 273: + return "WM_COMMAND "; + + case 68: + return "WM_COMMNOTIFY "; + + case 65: + return "WM_COMPACTING "; + + case 57: + return "WM_COMPAREITEM "; + + case 123: + return "WM_CONTEXTMENU "; + + case 769: + return "WM_COPY "; + + case 74: + return "WM_COPYDATA "; + + case 1: + return "WM_CREATE "; + + case 309: + return "WM_CTLCOLORBTN "; + + case 310: + return "WM_CTLCOLORDLG "; + + case 307: + return "WM_CTLCOLOREDIT "; + + case 308: + return "WM_CTLCOLORLISTBOX "; + + case 306: + return "WM_CTLCOLORMSGBOX "; + + case 311: + return "WM_CTLCOLORSCROLLBAR "; + + case 312: + return "WM_CTLCOLORSTATIC "; + + case 768: + return "WM_CUT "; + + case 259: + return "WM_DEADCHAR "; + + case 45: + return "WM_DELETEITEM "; + + case 2: + return "WM_DESTROY "; + + case 775: + return "WM_DESTROYCLIPBOARD "; + + case 537: + return "WM_DEVICECHANGE "; + + case 27: + return "WM_DEVMODECHANGE "; + + case 126: + return "WM_DISPLAYCHANGE "; + + case 776: + return "WM_DRAWCLIPBOARD "; + + case 43: + return "WM_DRAWITEM "; + + case 563: + return "WM_DROPFILES "; + + case 10: + return "WM_ENABLE "; + + case 22: + return "WM_ENDSESSION "; + + case 289: + return "WM_ENTERIDLE "; + + case 529: + return "WM_ENTERMENULOOP "; + + case 561: + return "WM_ENTERSIZEMOVE "; + + case 20: + return "WM_ERASEBKGND "; + + case 530: + return "WM_EXITMENULOOP "; + + case 562: + return "WM_EXITSIZEMOVE "; + + case 29: + return "WM_FONTCHANGE "; + + case 135: + return "WM_GETDLGCODE "; + + case 49: + return "WM_GETFONT "; + + case 51: + return "WM_GETHOTKEY "; + + case 127: + return "WM_GETICON "; + + case 36: + return "WM_GETMINMAXINFO "; + + case 13: + return "WM_GETTEXT "; + + case 14: + return "WM_GETTEXTLENGTH "; + + case 856: + return "WM_HANDHELDFIRST "; + + case 863: + return "WM_HANDHELDLAST "; + + case 83: + return "WM_HELP "; + + case 786: + return "WM_HOTKEY "; + + case 276: + return "WM_HSCROLL "; + + case 782: + return "WM_HSCROLLCLIPBOARD "; + + case 39: + return "WM_ICONERASEBKGND "; + + case 272: + return "WM_INITDIALOG "; + + case 278: + return "WM_INITMENU "; + + case 279: + return "WM_INITMENUPOPUP "; + + case 0x00FF: + return "WM_INPUT "; + + case 81: + return "WM_INPUTLANGCHANGE "; + + case 80: + return "WM_INPUTLANGCHANGEREQUEST "; + + case 256: + return "WM_KEYDOWN "; + + case 257: + return "WM_KEYUP "; + + case 8: + return "WM_KILLFOCUS "; + + case 546: + return "WM_MDIACTIVATE "; + + case 551: + return "WM_MDICASCADE "; + + case 544: + return "WM_MDICREATE "; + + case 545: + return "WM_MDIDESTROY "; + + case 553: + return "WM_MDIGETACTIVE "; + + case 552: + return "WM_MDIICONARRANGE "; + + case 549: + return "WM_MDIMAXIMIZE "; + + case 548: + return "WM_MDINEXT "; + + case 564: + return "WM_MDIREFRESHMENU "; + + case 547: + return "WM_MDIRESTORE "; + + case 560: + return "WM_MDISETMENU "; + + case 550: + return "WM_MDITILE "; + + case 44: + return "WM_MEASUREITEM "; + + case 0x003D: + return "WM_GETOBJECT "; + + case 0x0127: + return "WM_CHANGEUISTATE "; + + case 0x0128: + return "WM_UPDATEUISTATE "; + + case 0x0129: + return "WM_QUERYUISTATE "; + + case 0x0125: + return "WM_UNINITMENUPOPUP "; + + case 290: + return "WM_MENURBUTTONUP "; + + case 0x0126: + return "WM_MENUCOMMAND "; + + case 0x0124: + return "WM_MENUGETOBJECT "; + + case 0x0123: + return "WM_MENUDRAG "; + + case 0x0319: + return "WM_APPCOMMAND "; + + case 288: + return "WM_MENUCHAR "; + + case 287: + return "WM_MENUSELECT "; + + case 531: + return "WM_NEXTMENU "; + + case 3: + return "WM_MOVE "; + + case 534: + return "WM_MOVING "; + + case 134: + return "WM_NCACTIVATE "; + + case 131: + return "WM_NCCALCSIZE "; + + case 129: + return "WM_NCCREATE "; + + case 130: + return "WM_NCDESTROY "; + + case 132: + return "WM_NCHITTEST "; + + case 163: + return "WM_NCLBUTTONDBLCLK "; + + case 161: + return "WM_NCLBUTTONDOWN "; + + case 162: + return "WM_NCLBUTTONUP "; + + case 169: + return "WM_NCMBUTTONDBLCLK "; + + case 167: + return "WM_NCMBUTTONDOWN "; + + case 168: + return "WM_NCMBUTTONUP "; + + case 171: + return "WM_NCXBUTTONDOWN "; + + case 172: + return "WM_NCXBUTTONUP "; + + case 173: + return "WM_NCXBUTTONDBLCLK "; + + case 0x02A0: + return "WM_NCMOUSEHOVER "; + + case 0x02A2: + return "WM_NCMOUSELEAVE "; + + case 160: + return "WM_NCMOUSEMOVE "; + + case 133: + return "WM_NCPAINT "; + + case 166: + return "WM_NCRBUTTONDBLCLK "; + + case 164: + return "WM_NCRBUTTONDOWN "; + + case 165: + return "WM_NCRBUTTONUP "; + + case 40: + return "WM_NEXTDLGCTL "; + + case 78: + return "WM_NOTIFY "; + + case 85: + return "WM_NOTIFYFORMAT "; + + case 0: + return "WM_NULL "; + + case 15: + return "WM_PAINT "; + + case 777: + return "WM_PAINTCLIPBOARD "; + + case 38: + return "WM_PAINTICON "; + + case 785: + return "WM_PALETTECHANGED "; + + case 784: + return "WM_PALETTEISCHANGING "; + + case 528: + return "WM_PARENTNOTIFY "; + + case 770: + return "WM_PASTE "; + + case 896: + return "WM_PENWINFIRST "; + + case 911: + return "WM_PENWINLAST "; + + case 72: + return "WM_POWER "; + + case 536: + return "WM_POWERBROADCAST "; + + case 791: + return "WM_PRINT "; + + case 792: + return "WM_PRINTCLIENT "; + + case 55: + return "WM_QUERYDRAGICON "; + + case 17: + return "WM_QUERYENDSESSION "; + + case 783: + return "WM_QUERYNEWPALETTE "; + + case 19: + return "WM_QUERYOPEN "; + + case 35: + return "WM_QUEUESYNC "; + + case 18: + return "WM_QUIT "; + + case 774: + return "WM_RENDERALLFORMATS "; + + case 773: + return "WM_RENDERFORMAT "; + + case 32: + return "WM_SETCURSOR "; + + case 7: + return "WM_SETFOCUS "; + + case 48: + return "WM_SETFONT "; + + case 50: + return "WM_SETHOTKEY "; + + case 128: + return "WM_SETICON "; + + case 11: + return "WM_SETREDRAW "; + + case 12: + return "WM_SETTEXT "; + + case 26: + return "WM_SETTINGCHANGE "; + + case 24: + return "WM_SHOWWINDOW "; + + case 5: + return "WM_SIZE "; + + case 779: + return "WM_SIZECLIPBOARD "; + + case 532: + return "WM_SIZING "; + + case 42: + return "WM_SPOOLERSTATUS "; + + case 125: + return "WM_STYLECHANGED "; + + case 124: + return "WM_STYLECHANGING "; + + case 262: + return "WM_SYSCHAR "; + + case 21: + return "WM_SYSCOLORCHANGE "; + + case 274: + return "WM_SYSCOMMAND "; + + case 263: + return "WM_SYSDEADCHAR "; + + case 260: + return "WM_SYSKEYDOWN "; + + case 261: + return "WM_SYSKEYUP "; + + case 82: + return "WM_TCARD "; + + case 794: + return "WM_THEMECHANGED "; + + case 30: + return "WM_TIMECHANGE "; + + case 275: + return "WM_TIMER "; + + case 772: + return "WM_UNDO "; + + case 1024: + return "WM_USER "; + + case 84: + return "WM_USERCHANGED "; + + case 46: + return "WM_VKEYTOITEM "; + + case 277: + return "WM_VSCROLL "; + + case 778: + return "WM_VSCROLLCLIPBOARD "; + + case 71: + return "WM_WINDOWPOSCHANGED "; + + case 70: + return "WM_WINDOWPOSCHANGING "; + + case 264: + return "WM_KEYLAST "; + + case 136: + return "WM_SYNCPAINT "; + + case 33: + return "WM_MOUSEACTIVATE "; + + case 512: + return "WM_MOUSEMOVE "; + + case 513: + return "WM_LBUTTONDOWN "; + + case 514: + return "WM_LBUTTONUP "; + + case 515: + return "WM_LBUTTONDBLCLK "; + + case 516: + return "WM_RBUTTONDOWN "; + + case 517: + return "WM_RBUTTONUP "; + + case 518: + return "WM_RBUTTONDBLCLK "; + + case 519: + return "WM_MBUTTONDOWN "; + + case 520: + return "WM_MBUTTONUP "; + + case 521: + return "WM_MBUTTONDBLCLK "; + + case 522: + return "WM_MOUSEWHEEL "; + + case 523: + return "WM_XBUTTONDOWN "; + + case 524: + return "WM_XBUTTONUP "; + + case 525: + return "WM_XBUTTONDBLCLK "; + + case 0x2A1: + return "WM_MOUSEHOVER "; + + case 0x2A3: + return "WM_MOUSELEAVE "; + + } + + sprintf(str,"%d",msg); + + return str; +} diff --git a/windows/windbg.h b/windows/windbg.h new file mode 100644 index 000000000..d3f9099be --- /dev/null +++ b/windows/windbg.h @@ -0,0 +1 @@ +const char *msg_num_to_name(int msg);