--- np2/win9xc/scrnmng.cpp 2003/10/16 17:59:21 1.1.1.1 +++ np2/win9xc/scrnmng.cpp 2005/02/07 14:46:15 1.6 @@ -1,6 +1,8 @@ #include "compiler.h" #include +#ifndef __GNUC__ #include +#endif #include "resource.h" #include "np2.h" #include "mousemng.h" @@ -19,7 +21,8 @@ typedef struct { LPDIRECTDRAWSURFACE backsurf; LPDIRECTDRAWCLIPPER clipper; LPDIRECTDRAWPALETTE palette; - BYTE scrnmode; + UINT8 enable; + UINT8 scrnmode; int width; int height; int extend; @@ -28,9 +31,10 @@ typedef struct { RECT rect; #if defined(SUPPORT_16BPP) RGB32 pal16mask; - BYTE r16b; - BYTE l16r; - BYTE l16g; + UINT8 r16b; + UINT8 l16r; + UINT8 l16g; + UINT8 padding16; #endif #if defined(SUPPORT_8BPP) PALETTEENTRY pal[256]; @@ -60,10 +64,8 @@ static void setwindowsize(int width, int 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; @@ -108,14 +110,12 @@ static void renewalclientsize(void) { int width; int height; - int extend; int multiple; int scrnwidth; int scrnheight; width = min(scrnstat.width, ddraw.width); height = min(scrnstat.height, ddraw.height); - extend = 0; // ÉÁ²èÈϰϡÁ if (ddraw.scrnmode & SCRNMODE_FULLSCREEN) { @@ -129,35 +129,28 @@ static void renewalclientsize(void) { else { multiple = scrnstat.multiple; if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) { - if (np2oscfg.paddingx) { - extend = min(scrnstat.extend, ddraw.extend); - } scrnwidth = (width * multiple) >> 3; scrnheight = (height * multiple) >> 3; - ddraw.rect.right = width + extend; + ddraw.rect.right = width; ddraw.rect.bottom = height; - ddraw.scrn.left = np2oscfg.paddingx - extend; - ddraw.scrn.top = np2oscfg.paddingy; + ddraw.scrn.left = 0; + ddraw.scrn.top = 0; } else { - if (np2oscfg.paddingy) { - extend = min(scrnstat.extend, ddraw.extend); - } scrnwidth = (height * multiple) >> 3; scrnheight = (width * multiple) >> 3; ddraw.rect.right = height; - ddraw.rect.bottom = width + extend; - ddraw.scrn.left = np2oscfg.paddingx; - ddraw.scrn.top = np2oscfg.paddingy - extend; + ddraw.rect.bottom = width; + ddraw.scrn.left = 0; + ddraw.scrn.top = 0; } - ddraw.scrn.right = np2oscfg.paddingx + scrnwidth; - ddraw.scrn.bottom = np2oscfg.paddingy + scrnheight; + ddraw.scrn.right = scrnwidth; + ddraw.scrn.bottom = scrnheight; setwindowsize(scrnwidth, scrnheight); setwindowsize(scrnwidth, scrnheight); } scrnsurf.width = width; scrnsurf.height = height; - scrnsurf.extend = extend; } static void clearoutofrect(const RECT *target, const RECT *base) { @@ -256,30 +249,30 @@ static void paletteset(void) { #if defined(SUPPORT_16BPP) static void make16mask(DWORD bmask, DWORD rmask, DWORD gmask) { - BYTE sft; + UINT8 sft; sft = 0; while((!(bmask & 0x80)) && (sft < 32)) { bmask <<= 1; sft++; } - ddraw.pal16mask.p.b = (BYTE)bmask; + ddraw.pal16mask.p.b = (UINT8)bmask; ddraw.r16b = sft; sft = 0; - while((rmask & 0xffffff0) && (sft < 32)) { + while((rmask & 0xffffff00) && (sft < 32)) { rmask >>= 1; sft++; } - ddraw.pal16mask.p.r = (BYTE)rmask; + ddraw.pal16mask.p.r = (UINT8)rmask; ddraw.l16r = sft; sft = 0; - while((gmask & 0xffffff0) && (sft < 32)) { + while((gmask & 0xffffff00) && (sft < 32)) { gmask >>= 1; sft++; } - ddraw.pal16mask.p.g = (BYTE)gmask; + ddraw.pal16mask.p.g = (UINT8)gmask; ddraw.l16g = sft; } #endif @@ -291,12 +284,12 @@ void scrnmng_initialize(void) { scrnstat.width = 640; scrnstat.height = 400; - scrnstat.extend = 1; + scrnstat.extend = 0; scrnstat.multiple = 8; setwindowsize(640, 400); } -BOOL scrnmng_create(BYTE scrnmode) { +BOOL scrnmng_create(UINT8 scrnmode) { DWORD winstyle; DWORD winstyleex; @@ -336,12 +329,21 @@ BOOL scrnmng_create(BYTE scrnmode) { ddraw.ddraw1->QueryInterface(IID_IDirectDraw2, (void **)&ddraw2); ddraw.ddraw2 = ddraw2; +#if defined(SUPPORT_PC9821) + scrnmode |= SCRNMODE_HIGHCOLOR; +#endif if (scrnmode & SCRNMODE_FULLSCREEN) { ddraw2->SetCooperativeLevel(hWndMain, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT); if (!(scrnmode & SCRNMODE_HIGHCOLOR)) { #if defined(SUPPORT_8BPP) bitcolor = 8; +#elif defined(SUPPORT_16BPP) + bitcolor = 16; +#elif defined(SUPPORT_32BPP) + bitcolor = 32; +#elif defined(SUPPORT_24BPP) + bitcolor = 24; #else goto scre_err; #endif @@ -414,12 +416,12 @@ BOOL scrnmng_create(BYTE scrnmode) { ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; if (!(scrnmode & SCRNMODE_ROTATE)) { - ddsd.dwWidth = 641; + ddsd.dwWidth = 640; ddsd.dwHeight = 480; } else { ddsd.dwWidth = 480; - ddsd.dwHeight = 641; + ddsd.dwHeight = 640; } if (ddraw2->CreateSurface(&ddsd, &ddraw.backsurf, NULL) != DD_OK) { @@ -454,8 +456,9 @@ BOOL scrnmng_create(BYTE scrnmode) { else { goto scre_err; } - scrnmng.bpp = (BYTE)bitcolor; + scrnmng.bpp = (UINT8)bitcolor; scrnsurf.bpp = bitcolor; + ddraw.enable = TRUE; ddraw.scrnmode = scrnmode; ddraw.width = 640; ddraw.height = 480; @@ -514,19 +517,23 @@ UINT16 scrnmng_makepal16(RGB32 pal32) { void scrnmng_topwinui(void) { - mouse_running(MOUSE_STOP); + mousemng_disable(MOUSEPROC_WINUI); if (!ddraw.cliping++) { // ver0.28 if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { ddraw.primsurf->SetClipper(ddraw.clipper); } +#ifndef __GNUC__ WINNLSEnableIME(hWndMain, TRUE); +#endif } } void scrnmng_clearwinui(void) { if ((ddraw.cliping > 0) && (!(--ddraw.cliping))) { +#ifndef __GNUC__ WINNLSEnableIME(hWndMain, FALSE); +#endif if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { ddraw.primsurf->SetClipper(0); } @@ -534,7 +541,7 @@ void scrnmng_clearwinui(void) { if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { clearoutfullscreen(); } - mouse_running(MOUSE_CONT); + mousemng_enable(MOUSEPROC_WINUI); } void scrnmng_setwidth(int posx, int width) { @@ -545,8 +552,7 @@ void scrnmng_setwidth(int posx, int widt void scrnmng_setextend(int extend) { - scrnstat.extend = extend; - renewalclientsize(); + (void)extend; } void scrnmng_setheight(int posy, int height) { @@ -565,18 +571,18 @@ const SCRNSURF *scrnmng_surflock(void) { return(NULL); } if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) { - scrnsurf.ptr = (BYTE *)destscrn.lpSurface; + scrnsurf.ptr = (UINT8 *)destscrn.lpSurface; scrnsurf.xalign = scrnsurf.bpp >> 3; scrnsurf.yalign = destscrn.lPitch; } else if (!(ddraw.scrnmode & SCRNMODE_ROTATEDIR)) { - scrnsurf.ptr = (BYTE *)destscrn.lpSurface; + scrnsurf.ptr = (UINT8 *)destscrn.lpSurface; scrnsurf.ptr += (scrnsurf.width - 1) * destscrn.lPitch; scrnsurf.xalign = 0 - destscrn.lPitch; scrnsurf.yalign = scrnsurf.bpp >> 3; } else { - scrnsurf.ptr = (BYTE *)destscrn.lpSurface; + scrnsurf.ptr = (UINT8 *)destscrn.lpSurface; scrnsurf.ptr += (scrnsurf.height - 1) * (scrnsurf.bpp >> 3); scrnsurf.xalign = destscrn.lPitch; scrnsurf.yalign = 0 - (scrnsurf.bpp >> 3); @@ -634,3 +640,10 @@ void scrnmng_update(void) { } } +void scrnmng_restoresize(void) { + + if ((ddraw.enable) && (!(ddraw.scrnmode & SCRNMODE_FULLSCREEN))) { + renewalclientsize(); + } +} +