From dc93ff735f988b53202eb77179d55c99b23b37b9 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Tue, 13 Oct 2020 21:58:04 +0200 Subject: [PATCH] align --- src/IDirectDraw/IDirectDraw.c | 2 ++ src/IDirectDraw/IDirectDrawPalette.c | 2 ++ src/IDirectDraw/IDirectDrawSurface.c | 4 +++ src/config.c | 1 + src/dd.c | 20 ++++++++++----- src/ddsurface.c | 17 ++++++++++--- src/debug.c | 3 ++- src/directinput.c | 1 + src/dllmain.c | 2 ++ src/mouse.c | 8 ++++-- src/opengl_utils.c | 6 +++++ src/render_d3d9.c | 15 ++++++++++- src/render_gdi.c | 4 +++ src/render_ogl.c | 6 +++-- src/screenshot.c | 7 +++-- src/utils.c | 18 +++++++++++++ src/winapi_hooks.c | 4 +++ src/wndproc.c | 38 ++++++++++++++++++---------- 18 files changed, 127 insertions(+), 31 deletions(-) diff --git a/src/IDirectDraw/IDirectDraw.c b/src/IDirectDraw/IDirectDraw.c index bf3a4d4..eab373e 100644 --- a/src/IDirectDraw/IDirectDraw.c +++ b/src/IDirectDraw/IDirectDraw.c @@ -25,6 +25,7 @@ HRESULT __stdcall IDirectDraw__QueryInterface(IDirectDrawImpl* This, REFIID riid *obj = dd; IDirectDraw_AddRef(dd); + ret = S_OK; } else @@ -57,6 +58,7 @@ ULONG __stdcall IDirectDraw__Release(IDirectDrawImpl* This) if (This->ref == 0) { dprintf(" Released (%p)\n", This); + HeapFree(GetProcessHeap(), 0, This); } diff --git a/src/IDirectDraw/IDirectDrawPalette.c b/src/IDirectDraw/IDirectDrawPalette.c index 74dcc19..cf08328 100644 --- a/src/IDirectDraw/IDirectDrawPalette.c +++ b/src/IDirectDraw/IDirectDrawPalette.c @@ -29,8 +29,10 @@ ULONG __stdcall IDirectDrawPalette__Release(IDirectDrawPaletteImpl* This) if (This->ref == 0) { dprintf(" Released (%p)\n", This); + if (g_ddraw) g_ddraw->last_freed_palette = This; + HeapFree(GetProcessHeap(), 0, This); } diff --git a/src/IDirectDraw/IDirectDrawSurface.c b/src/IDirectDraw/IDirectDrawSurface.c index 8b22601..b8279a2 100644 --- a/src/IDirectDraw/IDirectDrawSurface.c +++ b/src/IDirectDraw/IDirectDrawSurface.c @@ -48,9 +48,13 @@ ULONG __stdcall IDirectDrawSurface__Release(IDirectDrawSurfaceImpl *This) } if (This->bitmap) + { DeleteObject(This->bitmap); + } else if (This->surface) + { HeapFree(GetProcessHeap(), 0, This->surface); + } if (This->hdc) DeleteDC(This->hdc); diff --git a/src/config.c b/src/config.c index 839e531..df5faba 100644 --- a/src/config.c +++ b/src/config.c @@ -112,6 +112,7 @@ void cfg_load() DWORD system_affinity; DWORD proc_affinity; HANDLE proc = GetCurrentProcess(); + if (GetProcessAffinityMask(proc, &proc_affinity, &system_affinity)) SetProcessAffinityMask(proc, system_affinity); } diff --git a/src/dd.c b/src/dd.c index f08d5f7..c9a587b 100644 --- a/src/dd.c +++ b/src/dd.c @@ -31,6 +31,7 @@ HRESULT dd_EnumDisplayModes(DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVO DWORD flags = 99998; DWORD fixed_output = 99998; DEVMODE m; + memset(&m, 0, sizeof(DEVMODE)); m.dmSize = sizeof(DEVMODE); @@ -88,7 +89,7 @@ HRESULT dd_EnumDisplayModes(DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVO if (lpEnumModesCallback(&s, lpContext) == DDENUMRET_CANCEL) { - dprintf(" DDENUMRET_CANCEL returned, stopping\n"); + dprintf(" DDENUMRET_CANCEL returned, stopping\n"); break; } } @@ -127,7 +128,7 @@ HRESULT dd_EnumDisplayModes(DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVO if (lpEnumModesCallback(&s, lpContext) == DDENUMRET_CANCEL) { - dprintf(" DDENUMRET_CANCEL returned, stopping\n"); + dprintf(" DDENUMRET_CANCEL returned, stopping\n"); break; } @@ -139,7 +140,7 @@ HRESULT dd_EnumDisplayModes(DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVO if (lpEnumModesCallback(&s, lpContext) == DDENUMRET_CANCEL) { - dprintf(" DDENUMRET_CANCEL returned, stopping\n"); + dprintf(" DDENUMRET_CANCEL returned, stopping\n"); break; } } @@ -178,7 +179,7 @@ HRESULT dd_GetCaps(LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDEmulCaps) HRESULT dd_RestoreDisplayMode() { - if(!g_ddraw->render.run) + if (!g_ddraw->render.run) { return DD_OK; } @@ -198,13 +199,17 @@ HRESULT dd_RestoreDisplayMode() } if (g_ddraw->renderer == d3d9_render_main) + { d3d9_release(); + } } - if(!g_ddraw->windowed) + if (!g_ddraw->windowed) { if (g_ddraw->renderer != d3d9_render_main) + { ChangeDisplaySettings(NULL, 0); + } } return DD_OK; @@ -325,6 +330,7 @@ HRESULT dd_SetDisplayMode(DWORD width, DWORD height, DWORD bpp) { g_ddraw->render.width = g_ddraw->width; } + if (g_ddraw->render.height < g_ddraw->height) { g_ddraw->render.height = g_ddraw->height; @@ -340,6 +346,7 @@ HRESULT dd_SetDisplayMode(DWORD width, DWORD height, DWORD bpp) g_ddraw->render.mode.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT; g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width; g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height; + if(g_ddraw->render.bpp) { g_ddraw->render.mode.dmFields |= DM_BITSPERPEL; @@ -605,7 +612,7 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) PIXELFORMATDESCRIPTOR pfd; /* Red Alert for some weird reason does this on Windows XP */ - if(hwnd == NULL) + if (hwnd == NULL) { return DD_OK; } @@ -634,6 +641,7 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = g_ddraw->render.bpp ? g_ddraw->render.bpp : g_ddraw->mode.dmBitsPerPel; pfd.iLayerType = PFD_MAIN_PLANE; + SetPixelFormat(g_ddraw->render.hdc, ChoosePixelFormat(g_ddraw->render.hdc, &pfd), &pfd); } diff --git a/src/ddsurface.c b/src/ddsurface.c index 818de72..dc2687a 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -170,7 +170,7 @@ HRESULT dds_Blt(IDirectDrawSurfaceImpl *This, LPRECT lpDestRect, LPDIRECTDRAWSUR } else { - dprintf(" DDBLT_KEYSRC / DDBLT_KEYSRCOVERRIDE does not support stretching\n"); + dprintfex(" DDBLT_KEYSRC / DDBLT_KEYSRCOVERRIDE does not support stretching\n"); } } else @@ -602,7 +602,7 @@ HRESULT dds_GetDC(IDirectDrawSurfaceImpl *This, HDC FAR *a) { if ((This->width % 4)) { - dprintf(" GetDC: width=%d height=%d\n", This->width, This->height); + dprintf(" GetDC: width=%d height=%d\n", This->width, This->height); } RGBQUAD *data = @@ -832,8 +832,11 @@ HRESULT dd_CreateSurface(LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE FA dst_surface->bmi->bmiHeader.biCompression = dst_surface->bpp == 16 ? BI_BITFIELDS : BI_RGB; WORD clr_bits = (WORD)(dst_surface->bmi->bmiHeader.biPlanes * dst_surface->bmi->bmiHeader.biBitCount); + if (clr_bits < 24) + { dst_surface->bmi->bmiHeader.biClrUsed = (1 << clr_bits); + } dst_surface->bmi->bmiHeader.biSizeImage = ((dst_surface->width * clr_bits + 31) & ~31) / 8 * dst_surface->height; @@ -863,10 +866,18 @@ HRESULT dd_CreateSurface(LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE FA dst_surface->bmi->bmiHeader.biHeight = -dst_surface->height; if (!dst_surface->bitmap) - dst_surface->surface = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dst_surface->l_pitch * (dst_surface->height + 200) * dst_surface->lx_pitch); + { + dst_surface->surface = + HeapAlloc( + GetProcessHeap(), + HEAP_ZERO_MEMORY, + dst_surface->l_pitch * (dst_surface->height + 200) * dst_surface->lx_pitch); + } if (lpDDSurfaceDesc->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) + { g_fake_primary_surface_export = dst_surface->surface; + } SelectObject(dst_surface->hdc, dst_surface->bitmap); } diff --git a/src/debug.c b/src/debug.c index d882df1..17a07fc 100644 --- a/src/debug.c +++ b/src/debug.c @@ -18,9 +18,10 @@ void dbg_init() if (!stdout_open) { + stdout_open = 1; + freopen("cnc-ddraw.log", "w", stdout); setvbuf(stdout, NULL, _IOLBF, 1024); - stdout_open = 1; HKEY hkey; LONG status = diff --git a/src/directinput.c b/src/directinput.c index b6a5c51..2a032e5 100644 --- a/src/directinput.c +++ b/src/directinput.c @@ -24,6 +24,7 @@ static PROC hook_func(PROC *org_func, PROC new_func) { *org_func = new_func; VirtualProtect(org_func, sizeof(PROC), old_protect, &old_protect); + return org; } diff --git a/src/dllmain.c b/src/dllmain.c index 634875f..a3e8c69 100644 --- a/src/dllmain.c +++ b/src/dllmain.c @@ -161,7 +161,9 @@ HRESULT WINAPI DirectDrawCreate(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnk IDirectDraw_AddRef(dst_ddraw); if (!g_ddraw->real_dll) + { g_ddraw->real_dll = LoadLibrary("system32\\ddraw.dll"); + } if (g_ddraw->real_dll && !g_ddraw->DirectDrawCreate) { diff --git a/src/mouse.c b/src/mouse.c index 5e45712..06eb2ea 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -38,6 +38,7 @@ void mouse_lock() // Convert the client area to screen coordinates. POINT pt = { rc.left, rc.top }; POINT pt2 = { rc.right, rc.bottom }; + real_ClientToScreen(g_ddraw->hwnd, &pt); real_ClientToScreen(g_ddraw->hwnd, &pt2); @@ -69,6 +70,7 @@ void mouse_lock() g_ddraw->hidecursor = FALSE; real_ShowCursor(FALSE); } + real_ClipCursor(&rc); } @@ -88,12 +90,12 @@ void mouse_unlock() return; } - if(!g_hook_active) + if (!g_hook_active) { return; } - if(g_ddraw->locked) + if (g_ddraw->locked) { g_ddraw->locked = FALSE; @@ -103,8 +105,10 @@ void mouse_unlock() // Convert the client area to screen coordinates. POINT pt = { rc.left, rc.top }; POINT pt2 = { rc.right, rc.bottom }; + real_ClientToScreen(g_ddraw->hwnd, &pt); real_ClientToScreen(g_ddraw->hwnd, &pt2); + SetRect(&rc, pt.x, pt.y, pt2.x, pt2.y); if (g_ddraw->handlemouse) diff --git a/src/opengl_utils.c b/src/opengl_utils.c index 9d96c28..b96f8a3 100644 --- a/src/opengl_utils.c +++ b/src/opengl_utils.c @@ -196,7 +196,9 @@ void oglu_init() strtok(g_oglu_version, deli); } else + { g_oglu_version[0] = '0'; + } g_oglu_got_version2 = glGetUniformLocation && glActiveTexture && glUniform1i; @@ -210,6 +212,7 @@ void oglu_init() BOOL oglu_ext_exists(char *ext, HDC hdc) { char *glext = (char *)glGetString(GL_EXTENSIONS); + if (glext) { if (strstr(glext, ext)) @@ -219,6 +222,7 @@ BOOL oglu_ext_exists(char *ext, HDC hdc) if (wglGetExtensionsStringARB) { char *wglext = (char *)wglGetExtensionsStringARB(hdc); + if (wglext) { if (strstr(wglext, ext)) @@ -317,6 +321,7 @@ GLuint oglu_build_program_from_file(const char *file_path) fseek(file, 0, SEEK_SET); char *source = file_size > 0 ? calloc(file_size + 1, 1) : NULL; + if (source) { fread(source, file_size, 1, file); @@ -328,6 +333,7 @@ GLuint oglu_build_program_from_file(const char *file_path) if (frag_source && vert_source) { char *version_start = strstr(source, "#version"); + if (version_start) { const char deli[2] = "\n"; diff --git a/src/render_d3d9.c b/src/render_d3d9.c index cb9272c..9bfe54e 100644 --- a/src/render_d3d9.c +++ b/src/render_d3d9.c @@ -90,7 +90,9 @@ BOOL d3d9_create() BOOL d3d9_on_device_lost() { if (g_d3d9.device && IDirect3DDevice9_TestCooperativeLevel(g_d3d9.device) == D3DERR_DEVICENOTRESET) + { return d3d9_reset(); + } return FALSE; } @@ -103,7 +105,9 @@ BOOL d3d9_reset() g_d3d9.params.BackBufferFormat = g_d3d9.bits_per_pixel == 16 ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8; if (g_d3d9.device && SUCCEEDED(IDirect3DDevice9_Reset(g_d3d9.device, &g_d3d9.params))) + { return d3d9_set_states(); + } return FALSE; } @@ -173,7 +177,12 @@ static BOOL d3d9_create_resouces() err = err || FAILED( IDirect3DDevice9_CreateVertexBuffer( - g_d3d9.device, sizeof(CUSTOMVERTEX) * 4, 0, D3DFVF_XYZRHW | D3DFVF_TEX1, D3DPOOL_MANAGED, &g_d3d9.vertex_buf, NULL)); + g_d3d9.device, + sizeof(CUSTOMVERTEX) * 4, 0, + D3DFVF_XYZRHW | D3DFVF_TEX1, + D3DPOOL_MANAGED, + &g_d3d9.vertex_buf, + NULL)); err = err || !d3d9_update_vertices(InterlockedExchangeAdd(&g_ddraw->incutscene, 0), TRUE); @@ -414,7 +423,9 @@ DWORD WINAPI d3d9_render_main(void) IDirect3DDevice9_EndScene(g_d3d9.device); if (g_ddraw->bnet_active) + { IDirect3DDevice9_Clear(g_d3d9.device, 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0); + } if (FAILED(IDirect3DDevice9_Present(g_d3d9.device, NULL, NULL, NULL, NULL))) { @@ -459,7 +470,9 @@ DWORD WINAPI d3d9_render_main(void) tick_end = timeGetTime(); if (tick_end - tick_start < g_ddraw->fps_limiter.tick_length) + { Sleep(g_ddraw->fps_limiter.tick_length - (tick_end - tick_start)); + } } } } diff --git a/src/render_gdi.c b/src/render_gdi.c index c09b99e..de77e8f 100644 --- a/src/render_gdi.c +++ b/src/render_gdi.c @@ -71,7 +71,9 @@ DWORD WINAPI gdi_render_main(void) DrawText(g_ddraw->primary->hdc, warning_text, -1, &rc, DT_NOCLIP | DT_CENTER); } else + { warning_text[0] = 0; + } } BOOL scale_cutscene = g_ddraw->vhack && util_detect_cutscene(); @@ -173,7 +175,9 @@ DWORD WINAPI gdi_render_main(void) tick_end = timeGetTime(); if (tick_end - tick_start < g_ddraw->fps_limiter.tick_length) + { Sleep(g_ddraw->fps_limiter.tick_length - (tick_end - tick_start)); + } } } } diff --git a/src/render_ogl.c b/src/render_ogl.c index 455137d..77e20bd 100644 --- a/src/render_ogl.c +++ b/src/render_ogl.c @@ -407,10 +407,10 @@ static void ogl_init_scale_program() glBindBuffer(GL_ARRAY_BUFFER, g_ogl.scale_vbos[1]); GLfloat tex_coord[] = { - 0.0f, 0.0f, + 0.0f, 0.0f, g_ogl.scale_w, 0.0f, g_ogl.scale_w, g_ogl.scale_h, - 0.0f, g_ogl.scale_h, + 0.0f, g_ogl.scale_h, }; glBufferData(GL_ARRAY_BUFFER, sizeof(tex_coord), tex_coord, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); @@ -820,7 +820,9 @@ static void ogl_render() tick_end = timeGetTime(); if (tick_end - tick_start < g_ddraw->fps_limiter.tick_length) + { Sleep(g_ddraw->fps_limiter.tick_length - (tick_end - tick_start)); + } } } } diff --git a/src/screenshot.c b/src/screenshot.c index ca9c4a3..adbe17e 100644 --- a/src/screenshot.c +++ b/src/screenshot.c @@ -20,7 +20,8 @@ BOOL ss_take_screenshot(struct IDirectDrawSurfaceImpl *src) strncpy(title, g_ddraw->title, sizeof(g_ddraw->title)); - for (i = 0; isurface, src->width, src->height, &state); - if (!error) lodepng_save_file(png, pngsize, filename); + + if (!error) + lodepng_save_file(png, pngsize, filename); lodepng_state_cleanup(&state); free(png); diff --git a/src/utils.c b/src/utils.c index e481d46..d581c69 100644 --- a/src/utils.c +++ b/src/utils.c @@ -31,19 +31,26 @@ void util_limit_game_ticks() else { static DWORD next_game_tick; + if (!next_game_tick) { next_game_tick = timeGetTime(); return; } + next_game_tick += g_ddraw->ticks_limiter.tick_length; DWORD tick_count = timeGetTime(); int sleep_time = next_game_tick - tick_count; + if (sleep_time <= 0 || sleep_time > g_ddraw->ticks_limiter.tick_length) + { next_game_tick = tick_count; + } else + { Sleep(sleep_time); + } } } @@ -169,6 +176,7 @@ BOOL util_get_lowest_resolution(float ratio, SIZE *out_res, DWORD min_width, DWO out_res->cy = lowest.cy = m.dmPelsHeight; } } + memset(&m, 0, sizeof(DEVMODE)); m.dmSize = sizeof(DEVMODE); i++; @@ -185,11 +193,13 @@ void util_toggle_fullscreen() if (g_ddraw->windowed) { mouse_unlock(); + g_config.window_state = g_ddraw->windowed = FALSE; real_SetWindowLongA(g_ddraw->hwnd, GWL_STYLE, GetWindowLong(g_ddraw->hwnd, GWL_STYLE) & ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU)); g_ddraw->altenter = TRUE; dd_SetDisplayMode(g_ddraw->width, g_ddraw->height, g_ddraw->bpp); util_update_bnet_pos(0, 0); + mouse_lock(); } else @@ -198,9 +208,13 @@ void util_toggle_fullscreen() g_config.window_state = g_ddraw->windowed = TRUE; if (g_ddraw->renderer == d3d9_render_main) + { d3d9_reset(); + } else + { ChangeDisplaySettings(NULL, g_ddraw->bnet_active ? CDS_FULLSCREEN : 0); + } dd_SetDisplayMode(g_ddraw->width, g_ddraw->height, g_ddraw->bpp); mouse_lock(); @@ -213,6 +227,7 @@ BOOL util_unadjust_window_rect(LPRECT prc, DWORD dwStyle, BOOL fMenu, DWORD dwEx SetRectEmpty(&rc); BOOL fRc = AdjustWindowRectEx(&rc, dwStyle, fMenu, dwExStyle); + if (fRc) { prc->left -= rc.left; @@ -290,7 +305,9 @@ BOOL util_detect_cutscene() static BYTE* should_stretch = (BYTE*)0x00607D78; if (g_ddraw->width <= CUTSCENE_WIDTH || g_ddraw->height <= CUTSCENE_HEIGHT) + { return FALSE; + } if (g_ddraw->isredalert) { @@ -298,6 +315,7 @@ BOOL util_detect_cutscene() { return TRUE; } + return FALSE; } else if (g_ddraw->iscnc1) diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c index a6c26d6..9fd24ee 100644 --- a/src/winapi_hooks.c +++ b/src/winapi_hooks.c @@ -21,6 +21,7 @@ BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint) { //fallback solution for possible ClipCursor failure int diffx = 0, diffy = 0; + int max_width = g_ddraw->adjmouse ? g_ddraw->render.viewport.width : g_ddraw->width; int max_height = g_ddraw->adjmouse ? g_ddraw->render.viewport.height : g_ddraw->height; @@ -348,6 +349,7 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd) { int width = g_ddraw->bnet_win_rect.right - g_ddraw->bnet_win_rect.left; int height = g_ddraw->bnet_win_rect.bottom - g_ddraw->bnet_win_rect.top; + UINT flags = width != g_ddraw->width || height != g_ddraw->height ? 0 : SWP_NOMOVE; util_set_window_rect(g_ddraw->bnet_win_rect.left, g_ddraw->bnet_win_rect.top, width, height, flags); @@ -389,8 +391,10 @@ HWND WINAPI fake_CreateWindowExA( int width = g_ddraw->bnet_win_rect.right - g_ddraw->bnet_win_rect.left; int height = g_ddraw->bnet_win_rect.bottom - g_ddraw->bnet_win_rect.top; + int x = g_ddraw->bnet_pos.x || g_ddraw->bnet_pos.y ? g_ddraw->bnet_pos.x : -32000; int y = g_ddraw->bnet_pos.x || g_ddraw->bnet_pos.y ? g_ddraw->bnet_pos.y : -32000; + UINT flags = width != g_ddraw->width || height != g_ddraw->height ? 0 : SWP_NOMOVE; util_set_window_rect(x, y, g_ddraw->width, g_ddraw->height, flags); diff --git a/src/wndproc.c b/src/wndproc.c index 7cba714..e31214d 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -135,7 +135,9 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam WINDOWPOS *pos = (WINDOWPOS *)lParam; if (g_ddraw->wine && !g_ddraw->windowed && (pos->x > 0 || pos->y > 0) && g_ddraw->last_set_window_pos_tick + 500 < timeGetTime()) + { PostMessage(g_ddraw->hwnd, WM_WINEFULLSCREEN, 0, 0); + } break; } @@ -329,7 +331,9 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam int y = (int)(short)HIWORD(lParam); if (x != -32000 && y != -32000) + { util_update_bnet_pos(x, y); + } if (in_size_move || g_ddraw->wine) { @@ -470,17 +474,20 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam util_toggle_fullscreen(); return 0; } + break; } case WM_KEYDOWN: - if(wParam == VK_CONTROL || wParam == VK_TAB) + { + if (wParam == VK_CONTROL || wParam == VK_TAB) { - if(GetAsyncKeyState(VK_CONTROL) & 0x8000 && GetAsyncKeyState(VK_TAB) & 0x8000) + if (GetAsyncKeyState(VK_CONTROL) & 0x8000 && GetAsyncKeyState(VK_TAB) & 0x8000) { mouse_unlock(); return 0; } } + if (wParam == VK_CONTROL || wParam == VK_MENU) { if ((GetAsyncKeyState(VK_RMENU) & 0x8000) && GetAsyncKeyState(VK_RCONTROL) & 0x8000) @@ -489,32 +496,34 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam return 0; } } - break; + break; + } case WM_KEYUP: + { if (wParam == VK_SNAPSHOT) ss_take_screenshot(g_ddraw->primary); break; - - + } /* button up messages reactivate cursor lock */ case WM_LBUTTONUP: case WM_RBUTTONUP: case WM_MBUTTONUP: + { if (!g_ddraw->devmode && !g_ddraw->locked) { int x = GET_X_LPARAM(lParam); int y = GET_Y_LPARAM(lParam); - - if (x > g_ddraw->render.viewport.x + g_ddraw->render.viewport.width || - x < g_ddraw->render.viewport.x || + + if (x > g_ddraw->render.viewport.x + g_ddraw->render.viewport.width || + x < g_ddraw->render.viewport.x || y > g_ddraw->render.viewport.y + g_ddraw->render.viewport.height || y < g_ddraw->render.viewport.y) { g_ddraw->cursor.x = g_ddraw->width / 2; g_ddraw->cursor.y = g_ddraw->height / 2; - } + } else { g_ddraw->cursor.x = (x - g_ddraw->render.viewport.x) * g_ddraw->render.unscale_w; @@ -525,7 +534,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam return 0; } /* fall through for lParam */ - + } /* down messages are ignored if we have no cursor lock */ case WM_XBUTTONDBLCLK: case WM_XBUTTONDOWN: @@ -539,15 +548,15 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam case WM_RBUTTONDOWN: case WM_MBUTTONDOWN: case WM_MOUSEMOVE: - + { if (!g_ddraw->devmode) { if (!g_ddraw->locked) { return 0; } - - if(g_ddraw->adjmouse) + + if (g_ddraw->adjmouse) { fake_GetCursorPos(NULL); /* update our own cursor */ lParam = MAKELPARAM(g_ddraw->cursor.x, g_ddraw->cursor.y); @@ -561,7 +570,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam g_ddraw->cursor.y = GET_Y_LPARAM(lParam); } break; - + } case WM_PARENTNOTIFY: { if (!g_ddraw->handlemouse) @@ -585,6 +594,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam g_ddraw->cursor.y = (y - g_ddraw->render.viewport.y) * g_ddraw->render.unscale_h; g_ddraw->hidecursor = FALSE; + mouse_lock(); } break;