--- np2/win9x/scrnmng.cpp 2003/11/04 15:44:59 1.9 +++ np2/win9x/scrnmng.cpp 2005/05/14 19:38:59 1.21 @@ -5,6 +5,7 @@ #endif #include "resource.h" #include "np2.h" +#include "winloc.h" #include "mousemng.h" #include "scrnmng.h" #include "sysmng.h" @@ -16,6 +17,9 @@ #include "palettes.h" +extern WINLOCEX np2_winlocexallwin(HWND base); + + typedef struct { LPDIRECTDRAW ddraw1; LPDIRECTDRAW2 ddraw2; @@ -24,18 +28,17 @@ typedef struct { LPDIRECTDRAWSURFACE clocksurf; LPDIRECTDRAWCLIPPER clipper; LPDIRECTDRAWPALETTE palette; - BYTE scrnmode; + UINT scrnmode; int width; int height; int extend; int cliping; RGB32 pal16mask; - BYTE r16b; - BYTE l16r; - BYTE l16g; - BYTE menudisp; + UINT8 r16b; + UINT8 l16r; + UINT8 l16g; + UINT8 menudisp; int menusize; -// HMENU menuhdl; RECT scrn; RECT rect; PALETTEENTRY pal[256]; @@ -117,14 +120,15 @@ static void setwindowsize(HWND hWnd, int } while(--cnt); } -static void renewalclientsize(void) { +static void renewalclientsize(BOOL winloc) { - int width; - int height; - int extend; - int multiple; - int scrnwidth; - int scrnheight; + int width; + int height; + int extend; + int multiple; + int scrnwidth; + int scrnheight; + WINLOCEX wlex; width = min(scrnstat.width, ddraw.width); height = min(scrnstat.height, ddraw.height); @@ -165,7 +169,14 @@ static void renewalclientsize(void) { } ddraw.scrn.right = np2oscfg.paddingx + scrnwidth; ddraw.scrn.bottom = np2oscfg.paddingy + scrnheight; + wlex = NULL; + if (winloc) { + wlex = np2_winlocexallwin(hWndMain); + } + winlocex_setholdwnd(wlex, hWndMain); setwindowsize(hWndMain, scrnwidth, scrnheight); + winlocex_move(wlex); + winlocex_destroy(wlex); } scrnsurf.width = width; scrnsurf.height = height; @@ -238,13 +249,13 @@ static void clearoutscreen(void) { static void clearoutfullscreen(void) { - RECT r; + RECT base; - r.left = 0; - r.top = (GetWindowLong(hWndMain, NP2GWL_HMENU))?0:ddraw.menusize; - r.right = ddraw.width; // (+ ddraw.extend) - r.bottom = ddraw.height; - clearoutofrect(&ddraw.scrn, &r); + base.left = 0; + base.top = (GetWindowLong(hWndMain, NP2GWL_HMENU))?0:ddraw.menusize; + base.right = ddraw.width; // (+ ddraw.extend) + base.bottom = ddraw.height; + clearoutofrect(&ddraw.scrn, &base); dclock_redraw(); } @@ -286,14 +297,14 @@ static void paletteset(void) { 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; @@ -301,7 +312,7 @@ static void make16mask(DWORD bmask, DWOR rmask >>= 1; sft++; } - ddraw.pal16mask.p.r = (BYTE)rmask; + ddraw.pal16mask.p.r = (UINT8)rmask; ddraw.l16r = sft; sft = 0; @@ -309,7 +320,7 @@ static void make16mask(DWORD bmask, DWOR gmask >>= 1; sft++; } - ddraw.pal16mask.p.g = (BYTE)gmask; + ddraw.pal16mask.p.g = (UINT8)gmask; ddraw.l16g = sft; } @@ -325,7 +336,7 @@ void scrnmng_initialize(void) { setwindowsize(hWndMain, 640, 400); } -BOOL scrnmng_create(BYTE scrnmode) { +BRESULT scrnmng_create(UINT8 scrnmode) { DWORD winstyle; DWORD winstyleex; @@ -354,7 +365,10 @@ BOOL scrnmng_create(BYTE scrnmode) { } else { scrnmng.flag = SCRNFLAG_HAVEEXTEND; - winstyle |= WS_SYSMENU | WS_THICKFRAME; + winstyle |= WS_SYSMENU; + if (np2oscfg.thickframe) { + winstyle |= WS_THICKFRAME; + } if (np2oscfg.wintype < 2) { winstyle |= WS_CAPTION; } @@ -374,15 +388,17 @@ BOOL scrnmng_create(BYTE scrnmode) { if (scrnmode & SCRNMODE_FULLSCREEN) { dclock_init(); -#if 1 ddraw2->SetCooperativeLevel(hWndMain, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + height = (np2oscfg.force400)?400:480; + bitcolor = np2oscfg.fscrnbpp; + if (bitcolor == 0) { +#if !defined(SUPPORT_PC9821) + bitcolor = (scrnmode & SCRNMODE_HIGHCOLOR)?16:8; #else - ddraw2->SetCooperativeLevel(hWndMain, - DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT); + bitcolor = 16; #endif - height = (np2oscfg.force400)?400:480; - bitcolor = (scrnmode & SCRNMODE_HIGHCOLOR)?16:8; + } if (ddraw2->SetDisplayMode(640, height, bitcolor, 0, 0) != DD_OK) { goto scre_err; } @@ -415,20 +431,25 @@ BOOL scrnmng_create(BYTE scrnmode) { } if (bitcolor == 8) { paletteinit(); - dclock_init8(); + } + else if (bitcolor == 16) { + make16mask(ddpf.dwBBitMask, ddpf.dwRBitMask, ddpf.dwGBitMask); + } + else if (bitcolor == 24) { + } + else if (bitcolor == 32) { } else { - make16mask(ddpf.dwBBitMask, ddpf.dwRBitMask, - ddpf.dwGBitMask); - dclock_init16(); + goto scre_err; } + dclock_palset(bitcolor); ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; - ddsd.dwWidth = DCLOCK_X; - ddsd.dwHeight = DCLOCK_Y; + ddsd.dwWidth = DCLOCK_WIDTH; + ddsd.dwHeight = DCLOCK_HEIGHT; ddraw2->CreateSurface(&ddsd, &ddraw.clocksurf, NULL); dclock_reset(); } @@ -486,17 +507,14 @@ BOOL scrnmng_create(BYTE scrnmode) { } ddraw.extend = 1; } - scrnmng.bpp = (BYTE)bitcolor; + scrnmng.bpp = (UINT8)bitcolor; scrnsurf.bpp = bitcolor; ddraw.scrnmode = scrnmode; ddraw.width = 640; ddraw.height = height; ddraw.cliping = 0; - renewalclientsize(); + renewalclientsize(FALSE); screenupdate = 3; // update! - if (!(scrnmode & SCRNMODE_FULLSCREEN)) { - np2class_enablemenu(hWndMain, (!np2oscfg.wintype)); - } return(SUCCESS); scre_err: @@ -506,7 +524,9 @@ scre_err: void scrnmng_destroy(void) { -// np2class_enablemenu(hWndMain, TRUE); + if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { + np2class_enablemenu(hWndMain, (!np2oscfg.wintype)); + } if (ddraw.clocksurf) { ddraw.clocksurf->Release(); ddraw.clocksurf = NULL; @@ -559,7 +579,7 @@ RGB16 scrnmng_makepal16(RGB32 pal32) { void scrnmng_fullscrnmenu(int y) { - BYTE menudisp; + UINT8 menudisp; if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { menudisp = ((y >= 0) && (y < ddraw.menusize))?1:0; @@ -604,25 +624,32 @@ void scrnmng_clearwinui(void) { clearoutfullscreen(); ddraw.menudisp = 0; } + else { + if (np2oscfg.wintype) { + np2class_enablemenu(hWndMain, FALSE); + InvalidateRect(hWndMain, NULL, TRUE); + } + } mousemng_enable(MOUSEPROC_WINUI); } void scrnmng_setwidth(int posx, int width) { scrnstat.width = width; - renewalclientsize(); + renewalclientsize(TRUE); } void scrnmng_setextend(int extend) { scrnstat.extend = extend; - renewalclientsize(); + scrnmng.allflash = TRUE; + renewalclientsize(TRUE); } void scrnmng_setheight(int posy, int height) { scrnstat.height = height; - renewalclientsize(); + renewalclientsize(TRUE); } const SCRNSURF *scrnmng_surflock(void) { @@ -645,18 +672,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); @@ -726,18 +753,18 @@ void scrnmng_setmultiple(int multiple) { if (scrnstat.multiple != multiple) { scrnstat.multiple = multiple; - renewalclientsize(); + renewalclientsize(TRUE); } } -static const RECT rectclk = {0, 0, DCLOCK_X, DCLOCK_Y}; +static const RECT rectclk = {0, 0, DCLOCK_WIDTH, DCLOCK_HEIGHT}; void scrnmng_dispclock(void) { DDSURFACEDESC dest; // ver0.26 if ((ddraw.clocksurf) && - (ddraw.scrn.top >= DCLOCK_Y) && (dclock_disp())) { + (ddraw.scrn.top >= DCLOCK_HEIGHT) && (dclock_disp())) { dclock_make(); ZeroMemory(&dest, sizeof(dest)); dest.dwSize = sizeof(dest); @@ -745,13 +772,19 @@ void scrnmng_dispclock(void) { if (scrnmng.bpp == 8) { dclock_out8(dest.lpSurface, dest.lPitch); } - else { + else if (scrnmng.bpp == 16) { dclock_out16(dest.lpSurface, dest.lPitch); } + else if (scrnmng.bpp == 24) { + dclock_out24(dest.lpSurface, dest.lPitch); + } + else if (scrnmng.bpp == 32) { + dclock_out32(dest.lpSurface, dest.lPitch); + } ddraw.clocksurf->Unlock(NULL); } - if (ddraw.primsurf->BltFast(640 - DCLOCK_X - 4, - ddraw.height - DCLOCK_Y, + if (ddraw.primsurf->BltFast(640 - DCLOCK_WIDTH - 4, + ddraw.height - DCLOCK_HEIGHT, ddraw.clocksurf, (RECT *)&rectclk, DDBLTFAST_WAIT) == DDERR_SURFACELOST) { ddraw.primsurf->Restore();