1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00
This commit is contained in:
FunkyFr3sh 2020-10-13 21:58:04 +02:00
parent be79bb8c8b
commit dc93ff735f
18 changed files with 127 additions and 31 deletions

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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 =

View File

@ -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;
}

View File

@ -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)
{

View File

@ -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)

View File

@ -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";

View File

@ -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));
}
}
}
}

View File

@ -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));
}
}
}
}

View File

@ -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));
}
}
}
}

View File

@ -20,7 +20,8 @@ BOOL ss_take_screenshot(struct IDirectDrawSurfaceImpl *src)
strncpy(title, g_ddraw->title, sizeof(g_ddraw->title));
for (i = 0; i<strlen(title); i++) {
for (i = 0; i<strlen(title); i++)
{
if (title[i] == ' ')
{
title[i] = '_';
@ -54,7 +55,9 @@ BOOL ss_take_screenshot(struct IDirectDrawSurfaceImpl *src)
state.encoder.auto_convert = 0;
unsigned int error = lodepng_encode(&png, &pngsize, src->surface, 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);

View File

@ -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)

View File

@ -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);

View File

@ -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;