Be more flexible with cnc-plugin, also now transparently just works without touching the ini
This commit is contained in:
parent
2b47947742
commit
30f5b46e6c
4 changed files with 53 additions and 23 deletions
58
main.c
58
main.c
|
@ -206,13 +206,17 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
|
|||
This->render.height = This->height;
|
||||
}
|
||||
|
||||
This->render.run = TRUE;
|
||||
|
||||
if (This->renderer == render_dummy_main)
|
||||
{
|
||||
if(This->render.thread == NULL)
|
||||
{
|
||||
This->render.thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)This->renderer, NULL, 0, NULL);
|
||||
}
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
This->render.run = TRUE;
|
||||
|
||||
mouse_unlock();
|
||||
|
||||
if(This->windowed)
|
||||
|
@ -275,21 +279,17 @@ LRESULT CALLBACK dummy_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara
|
|||
{
|
||||
switch(uMsg)
|
||||
{
|
||||
/* if the plugin window changes */
|
||||
case WM_USER:
|
||||
ddraw->render.width = LOWORD(wParam);
|
||||
ddraw->render.height = HIWORD(wParam);
|
||||
ddraw->render.hDC = GetDC((HWND)lParam);
|
||||
if (!ddraw->render.thread)
|
||||
ddraw->hWnd = (HWND)lParam;
|
||||
ddraw->render.hDC = GetDC(ddraw->hWnd);
|
||||
case WM_ACTIVATEAPP:
|
||||
if (wParam == TRUE)
|
||||
{
|
||||
ddraw->render.run = TRUE;
|
||||
ddraw->render.thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ddraw->renderer, NULL, 0, NULL);
|
||||
break;
|
||||
}
|
||||
uMsg = WM_ACTIVATEAPP;
|
||||
wParam = TRUE;
|
||||
break;
|
||||
case WM_SIZE:
|
||||
case WM_NCACTIVATE:
|
||||
case WM_ACTIVATEAPP:
|
||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||
case WM_MOUSEMOVE:
|
||||
case WM_NCMOUSEMOVE:
|
||||
|
@ -439,16 +439,22 @@ HRESULT __stdcall ddraw_SetCooperativeLevel(IDirectDrawImpl *This, HWND hWnd, DW
|
|||
return DDERR_INVALIDPARAMS;
|
||||
}
|
||||
|
||||
This->hWnd = hWnd;
|
||||
if (This->hWnd == NULL)
|
||||
{
|
||||
This->hWnd = hWnd;
|
||||
}
|
||||
|
||||
mouse_init(hWnd);
|
||||
|
||||
This->WndProc = (LRESULT CALLBACK (*)(HWND, UINT, WPARAM, LPARAM))GetWindowLong(This->hWnd, GWL_WNDPROC);
|
||||
This->WndProc = (LRESULT CALLBACK (*)(HWND, UINT, WPARAM, LPARAM))GetWindowLong(hWnd, GWL_WNDPROC);
|
||||
|
||||
if (This->renderer == render_dummy_main)
|
||||
{
|
||||
SetWindowLong(This->hWnd, GWL_WNDPROC, (LONG)dummy_WndProc);
|
||||
ShowWindow(This->hWnd, SW_HIDE);
|
||||
This->render.hDC = GetDC(This->hWnd);
|
||||
SetWindowLong(hWnd, GWL_WNDPROC, (LONG)dummy_WndProc);
|
||||
ShowWindow(hWnd, SW_HIDE);
|
||||
PostMessage(hWnd, WM_ACTIVATEAPP, TRUE, TRUE);
|
||||
PostMessage(This->hWnd, WM_USER, 0, (LPARAM)hWnd);
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
|
@ -816,5 +822,25 @@ HRESULT WINAPI DirectDrawCreate(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnk
|
|||
This->renderer = render_main;
|
||||
}
|
||||
|
||||
/* last minute check for cnc-plugin */
|
||||
if (GetEnvironmentVariable("DDRAW_WINDOW", tmp, sizeof(tmp)) > 0)
|
||||
{
|
||||
This->hWnd = (HWND)atoi(tmp);
|
||||
This->renderer = render_dummy_main;
|
||||
This->windowed = TRUE;
|
||||
|
||||
if (GetEnvironmentVariable("DDRAW_WIDTH", tmp, sizeof(tmp)) > 0)
|
||||
{
|
||||
This->render.width = atoi(tmp);
|
||||
}
|
||||
|
||||
if (GetEnvironmentVariable("DDRAW_HEIGHT", tmp, sizeof(tmp)) > 0)
|
||||
{
|
||||
This->render.height = atoi(tmp);
|
||||
}
|
||||
|
||||
printf("DirectDrawCreate: Detected cnc-plugin at window %08X in %dx%d\n", (unsigned int)This->hWnd, This->render.width, This->render.height);
|
||||
}
|
||||
|
||||
return DD_OK;
|
||||
}
|
||||
|
|
12
palette.c
12
palette.c
|
@ -36,10 +36,14 @@ HRESULT __stdcall ddraw_palette_SetEntries(IDirectDrawPaletteImpl *This, DWORD d
|
|||
for(i=0;i<256;i++)
|
||||
{
|
||||
This->data_bgr[i] = (lpEntries[i].peBlue<<16)|(lpEntries[i].peGreen<<8)|lpEntries[i].peRed;
|
||||
This->data_rgb[i].rgbRed = lpEntries[i].peRed;
|
||||
This->data_rgb[i].rgbGreen = lpEntries[i].peGreen;
|
||||
This->data_rgb[i].rgbBlue = lpEntries[i].peBlue;
|
||||
This->data_rgb[i].rgbReserved = 0;
|
||||
|
||||
if (This->data_rgb)
|
||||
{
|
||||
This->data_rgb[i].rgbRed = lpEntries[i].peRed;
|
||||
This->data_rgb[i].rgbGreen = lpEntries[i].peGreen;
|
||||
This->data_rgb[i].rgbBlue = lpEntries[i].peBlue;
|
||||
This->data_rgb[i].rgbReserved = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(ddraw->primary && !(ddraw->primary->flags & DDSD_BACKBUFFERCOUNT) && ddraw->render.run)
|
||||
|
|
|
@ -31,7 +31,7 @@ typedef struct IDirectDrawPaletteImpl
|
|||
ULONG Ref;
|
||||
|
||||
int data_bgr[256];
|
||||
RGBQUAD data_rgb[256];
|
||||
RGBQUAD *data_rgb;
|
||||
|
||||
} IDirectDrawPaletteImpl;
|
||||
|
||||
|
|
|
@ -77,9 +77,9 @@ DWORD WINAPI render_soft_main(void)
|
|||
|
||||
if (ddraw->primary && (ddraw->primary->palette || ddraw->bpp == 16))
|
||||
{
|
||||
if (ddraw->primary->palette)
|
||||
if (ddraw->primary->palette && ddraw->primary->palette->data_rgb == NULL)
|
||||
{
|
||||
memcpy(bmi->bmiColors, ddraw->primary->palette->data_rgb, sizeof(RGBQUAD) * 256);
|
||||
ddraw->primary->palette->data_rgb = &bmi->bmiColors[0];
|
||||
}
|
||||
|
||||
if (ddraw->render.width != ddraw->width || ddraw->render.height != ddraw->height)
|
||||
|
|
Loading…
Reference in a new issue