|
|
| version 1.7, 2003/10/28 22:05:46 | version 1.8, 2003/11/01 22:23:04 |
|---|---|
| Line 53 static SCRNSTAT scrnstat; | Line 53 static SCRNSTAT scrnstat; |
| static SCRNSURF scrnsurf; | static SCRNSURF scrnsurf; |
| static void setwindowsize(int width, int height) { | static void setwindowsize(HWND hWnd, int width, int height) { |
| RECT workrc; | |
| int scx; | |
| int scy; | |
| UINT cnt; | |
| RECT rectwindow; | RECT rectwindow; |
| RECT rectclient; | RECT rectclient; |
| RECT workrc; | int cx; |
| int scx, scy; | int cy; |
| UINT update; | UINT update; |
| GetWindowRect(hWndMain, &rectwindow); | |
| GetClientRect(hWndMain, &rectclient); | |
| width += np2oscfg.paddingx * 2; | |
| width += rectwindow.right - rectwindow.left; | |
| width -= rectclient.right - rectclient.left; | |
| height += np2oscfg.paddingy * 2; | |
| height += rectwindow.bottom - rectwindow.top; | |
| height -= rectclient.bottom - rectclient.top; | |
| SystemParametersInfo(SPI_GETWORKAREA, 0, &workrc, 0); | SystemParametersInfo(SPI_GETWORKAREA, 0, &workrc, 0); |
| scx = GetSystemMetrics(SM_CXSCREEN); | scx = GetSystemMetrics(SM_CXSCREEN); |
| scy = GetSystemMetrics(SM_CYSCREEN); | scy = GetSystemMetrics(SM_CYSCREEN); |
| update = 0; | cnt = 2; |
| if (scx < width) { | do { |
| np2oscfg.winx = (scx - width) / 2; | GetWindowRect(hWnd, &rectwindow); |
| update |= SYS_UPDATEOSCFG; | GetClientRect(hWnd, &rectclient); |
| } | cx = width; |
| else { | cx += np2oscfg.paddingx * 2; |
| if ((np2oscfg.winx + width) > workrc.right) { | cx += rectwindow.right - rectwindow.left; |
| np2oscfg.winx = workrc.right - width; | cx -= rectclient.right - rectclient.left; |
| cy = height; | |
| cy += np2oscfg.paddingy * 2; | |
| cy += rectwindow.bottom - rectwindow.top; | |
| cy -= rectclient.bottom - rectclient.top; | |
| update = 0; | |
| if (scx < cx) { | |
| np2oscfg.winx = (scx - cx) / 2; | |
| update |= SYS_UPDATEOSCFG; | update |= SYS_UPDATEOSCFG; |
| } | } |
| if (np2oscfg.winx < workrc.left) { | else { |
| np2oscfg.winx = workrc.left; | if ((np2oscfg.winx + cx) > workrc.right) { |
| update |= SYS_UPDATEOSCFG; | np2oscfg.winx = workrc.right - cx; |
| update |= SYS_UPDATEOSCFG; | |
| } | |
| if (np2oscfg.winx < workrc.left) { | |
| np2oscfg.winx = workrc.left; | |
| update |= SYS_UPDATEOSCFG; | |
| } | |
| } | } |
| } | if (scy < cy) { |
| if (scy < height) { | np2oscfg.winy = (scy - cy) / 2; |
| np2oscfg.winy = (scy - height) / 2; | |
| update |= SYS_UPDATEOSCFG; | |
| } | |
| else { | |
| if ((np2oscfg.winy + height) > workrc.bottom) { | |
| np2oscfg.winy = workrc.bottom - height; | |
| update |= SYS_UPDATEOSCFG; | update |= SYS_UPDATEOSCFG; |
| } | } |
| if (np2oscfg.winy < workrc.top) { | else { |
| np2oscfg.winy = workrc.top; | if ((np2oscfg.winy + cy) > workrc.bottom) { |
| update |= SYS_UPDATEOSCFG; | np2oscfg.winy = workrc.bottom - cy; |
| update |= SYS_UPDATEOSCFG; | |
| } | |
| if (np2oscfg.winy < workrc.top) { | |
| np2oscfg.winy = workrc.top; | |
| update |= SYS_UPDATEOSCFG; | |
| } | |
| } | } |
| } | sysmng_update(update); |
| sysmng_update(update); | MoveWindow(hWnd, np2oscfg.winx, np2oscfg.winy, cx, cy, TRUE); |
| MoveWindow(hWndMain, np2oscfg.winx, np2oscfg.winy, width, height, TRUE); | } while(--cnt); |
| } | } |
| static void renewalclientsize(void) { | static void renewalclientsize(void) { |
| Line 155 static void renewalclientsize(void) { | Line 164 static void renewalclientsize(void) { |
| } | } |
| ddraw.scrn.right = np2oscfg.paddingx + scrnwidth; | ddraw.scrn.right = np2oscfg.paddingx + scrnwidth; |
| ddraw.scrn.bottom = np2oscfg.paddingy + scrnheight; | ddraw.scrn.bottom = np2oscfg.paddingy + scrnheight; |
| setwindowsize(scrnwidth, scrnheight); | setwindowsize(hWndMain, scrnwidth, scrnheight); |
| setwindowsize(scrnwidth, scrnheight); | |
| } | } |
| scrnsurf.width = width; | scrnsurf.width = width; |
| scrnsurf.height = height; | scrnsurf.height = height; |
| Line 313 void scrnmng_initialize(void) { | Line 321 void scrnmng_initialize(void) { |
| scrnstat.height = 400; | scrnstat.height = 400; |
| scrnstat.extend = 1; | scrnstat.extend = 1; |
| scrnstat.multiple = 8; | scrnstat.multiple = 8; |
| setwindowsize(640, 400); | setwindowsize(hWndMain, 640, 400); |
| } | } |
| BOOL scrnmng_create(BYTE scrnmode) { | BOOL scrnmng_create(BYTE scrnmode) { |
| Line 495 void scrnmng_destroy(void) { | Line 503 void scrnmng_destroy(void) { |
| scrnmng_enablemenubar(); | scrnmng_enablemenubar(); |
| if (ddraw.clocksurf) { | if (ddraw.clocksurf) { |
| ddraw.clocksurf->Release(); | ddraw.clocksurf->Release(); |
| ddraw.clocksurf = NULL; | |
| } | } |
| if (ddraw.backsurf) { | if (ddraw.backsurf) { |
| ddraw.backsurf->Release(); | ddraw.backsurf->Release(); |
| ddraw.backsurf = NULL; | |
| } | } |
| if (ddraw.palette) { | if (ddraw.palette) { |
| ddraw.palette->Release(); | ddraw.palette->Release(); |
| ddraw.palette = NULL; | |
| } | } |
| if (ddraw.clipper) { | if (ddraw.clipper) { |
| ddraw.clipper->Release(); | ddraw.clipper->Release(); |
| ddraw.clipper = NULL; | |
| } | } |
| if (ddraw.primsurf) { | if (ddraw.primsurf) { |
| ddraw.primsurf->Release(); | ddraw.primsurf->Release(); |
| ddraw.primsurf = NULL; | |
| } | } |
| if (ddraw.ddraw2) { | if (ddraw.ddraw2) { |
| if (ddraw.scrnmode & SCRNMODE_FULLSCREEN) { | if (ddraw.scrnmode & SCRNMODE_FULLSCREEN) { |
| ddraw.ddraw2->SetCooperativeLevel(hWndMain, DDSCL_NORMAL); | ddraw.ddraw2->SetCooperativeLevel(hWndMain, DDSCL_NORMAL); |
| } | } |
| ddraw.ddraw2->Release(); | ddraw.ddraw2->Release(); |
| ddraw.ddraw2 = NULL; | |
| } | } |
| if (ddraw.ddraw1) { | if (ddraw.ddraw1) { |
| ddraw.ddraw1->Release(); | ddraw.ddraw1->Release(); |
| ddraw.ddraw1 = NULL; | |
| } | } |
| ZeroMemory(&ddraw, sizeof(ddraw)); | ZeroMemory(&ddraw, sizeof(ddraw)); |
| } | } |
| Line 624 void scrnmng_setheight(int posy, int hei | Line 639 void scrnmng_setheight(int posy, int hei |
| const SCRNSURF *scrnmng_surflock(void) { | const SCRNSURF *scrnmng_surflock(void) { |
| DDSURFACEDESC destscrn; | DDSURFACEDESC destscrn; |
| HRESULT r; | |
| ZeroMemory(&destscrn, sizeof(destscrn)); | ZeroMemory(&destscrn, sizeof(destscrn)); |
| destscrn.dwSize = sizeof(destscrn); | destscrn.dwSize = sizeof(destscrn); |
| if (ddraw.backsurf->Lock(NULL, &destscrn, DDLOCK_WAIT, NULL) != DD_OK) { | if (ddraw.backsurf == NULL) { |
| return(NULL); | |
| } | |
| r = ddraw.backsurf->Lock(NULL, &destscrn, DDLOCK_WAIT, NULL); | |
| if (r == DDERR_SURFACELOST) { | |
| ddraw.backsurf->Restore(); | |
| r = ddraw.backsurf->Lock(NULL, &destscrn, DDLOCK_WAIT, NULL); | |
| } | |
| if (r != DD_OK) { | |
| // TRACEOUT(("backsurf lock error: %d (%d)", r)); | |
| return(NULL); | return(NULL); |
| } | } |
| if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) { | if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) { |
| Line 660 void scrnmng_update(void) { | Line 685 void scrnmng_update(void) { |
| POINT clip; | POINT clip; |
| RECT dst; | RECT dst; |
| HRESULT r; | |
| if (scrnmng.palchanged) { | if (scrnmng.palchanged) { |
| scrnmng.palchanged = FALSE; | scrnmng.palchanged = FALSE; |
| Line 671 void scrnmng_update(void) { | Line 697 void scrnmng_update(void) { |
| scrnmng.allflash = 0; | scrnmng.allflash = 0; |
| clearoutfullscreen(); | clearoutfullscreen(); |
| } | } |
| if (ddraw.primsurf->Blt(&ddraw.scrn, ddraw.backsurf, &ddraw.rect, | r = ddraw.primsurf->Blt(&ddraw.scrn, ddraw.backsurf, &ddraw.rect, |
| DDBLT_WAIT, NULL) == DDERR_SURFACELOST) { | DDBLT_WAIT, NULL); |
| ddraw.primsurf->Restore(); | if (r == DDERR_SURFACELOST) { |
| ddraw.backsurf->Restore(); | ddraw.backsurf->Restore(); |
| ddraw.primsurf->Restore(); | |
| ddraw.primsurf->Blt(&ddraw.scrn, ddraw.backsurf, &ddraw.rect, | |
| DDBLT_WAIT, NULL); | |
| } | } |
| } | } |
| else { | else { |
| Line 689 void scrnmng_update(void) { | Line 718 void scrnmng_update(void) { |
| dst.top = clip.y + ddraw.scrn.top; | dst.top = clip.y + ddraw.scrn.top; |
| dst.right = clip.x + ddraw.scrn.right; | dst.right = clip.x + ddraw.scrn.right; |
| dst.bottom = clip.y + ddraw.scrn.bottom; | dst.bottom = clip.y + ddraw.scrn.bottom; |
| if (ddraw.primsurf->Blt(&dst, ddraw.backsurf, &ddraw.rect, | r = ddraw.primsurf->Blt(&dst, ddraw.backsurf, &ddraw.rect, |
| DDBLT_WAIT, NULL) == DDERR_SURFACELOST) { | DDBLT_WAIT, NULL); |
| ddraw.primsurf->Restore(); | if (r == DDERR_SURFACELOST) { |
| ddraw.backsurf->Restore(); | ddraw.backsurf->Restore(); |
| ddraw.primsurf->Restore(); | |
| ddraw.primsurf->Blt(&dst, ddraw.backsurf, &ddraw.rect, | |
| DDBLT_WAIT, NULL); | |
| } | } |
| } | } |
| } | } |