Skip to content
This repository has been archived by the owner on Mar 14, 2018. It is now read-only.

Commit

Permalink
Be more flexible with cnc-plugin, also now transparently just works w…
Browse files Browse the repository at this point in the history
…ithout touching the ini
  • Loading branch information
hifi committed Aug 22, 2011
1 parent 2b47947 commit 30f5b46
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 23 deletions.
58 changes: 42 additions & 16 deletions main.c
Expand Up @@ -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)
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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 changes: 8 additions & 4 deletions palette.c
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion palette.h
Expand Up @@ -31,7 +31,7 @@ typedef struct IDirectDrawPaletteImpl
ULONG Ref;

int data_bgr[256];
RGBQUAD data_rgb[256];
RGBQUAD *data_rgb;

} IDirectDrawPaletteImpl;

Expand Down
4 changes: 2 additions & 2 deletions render_soft.c
Expand Up @@ -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)
Expand Down

0 comments on commit 30f5b46

Please sign in to comment.