--- np2/win9x/scrnmng.cpp 2003/11/04 15:44:59 1.9 +++ np2/win9x/scrnmng.cpp 2004/05/21 14:09:27 1.16 @@ -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; + UINT8 r16b; + UINT8 l16r; + UINT8 l16g; BYTE 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(); } @@ -374,15 +385,14 @@ BOOL scrnmng_create(BYTE scrnmode) { if (scrnmode & SCRNMODE_FULLSCREEN) { dclock_init(); -#if 1 ddraw2->SetCooperativeLevel(hWndMain, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); -#else - ddraw2->SetCooperativeLevel(hWndMain, - DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT); -#endif height = (np2oscfg.force400)?400:480; +#if !defined(SUPPORT_PC9821) bitcolor = (scrnmode & SCRNMODE_HIGHCOLOR)?16:8; +#else + bitcolor = 16; +#endif if (ddraw2->SetDisplayMode(640, height, bitcolor, 0, 0) != DD_OK) { goto scre_err; } @@ -472,7 +482,11 @@ BOOL scrnmng_create(BYTE scrnmode) { } bitcolor = ddpf.dwRGBBitCount; if (bitcolor == 8) { +#if !defined(SUPPORT_PC9821) paletteinit(); +#else + goto scre_err; +#endif } else if (bitcolor == 16) { make16mask(ddpf.dwBBitMask, ddpf.dwRBitMask, ddpf.dwGBitMask); @@ -486,17 +500,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 +517,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; @@ -604,25 +617,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) { @@ -726,7 +746,7 @@ void scrnmng_setmultiple(int multiple) { if (scrnstat.multiple != multiple) { scrnstat.multiple = multiple; - renewalclientsize(); + renewalclientsize(TRUE); } }