mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-15 06:04:49 +01:00
align
This commit is contained in:
parent
be79bb8c8b
commit
dc93ff735f
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
20
src/dd.c
20
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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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 =
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
|
@ -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";
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
18
src/utils.c
18
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)
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user