--- np2/win9x/scrnmng.cpp 2003/10/18 10:00:29 1.2 +++ np2/win9x/scrnmng.cpp 2003/10/28 22:05:46 1.7 @@ -1,16 +1,18 @@ #include "compiler.h" #include +#ifndef __GNUC__ #include +#endif #include "resource.h" #include "np2.h" #include "mousemng.h" #include "scrnmng.h" #include "sysmng.h" +#include "dclock.h" +#include "menu.h" #include "pccore.h" #include "scrndraw.h" #include "palettes.h" -#include "dclock.h" -#include "menu.h" typedef struct { @@ -30,6 +32,9 @@ typedef struct { BYTE r16b; BYTE l16r; BYTE l16g; + BYTE menudisp; + int menusize; + HMENU menuhdl; RECT scrn; RECT rect; PALETTEENTRY pal[256]; @@ -204,9 +209,17 @@ static void clearoutofrect(const RECT *t static void clearoutscreen(void) { RECT base; + POINT clipt; RECT target; GetClientRect(hWndMain, &base); + clipt.x = 0; + clipt.y = 0; + ClientToScreen(hWndMain, &clipt); + base.left += clipt.x; + base.top += clipt.y; + base.right += clipt.x; + base.bottom += clipt.y; target.left = base.left + ddraw.scrn.left; target.top = base.top + ddraw.scrn.top; target.right = base.left + ddraw.scrn.right; @@ -216,7 +229,13 @@ static void clearoutscreen(void) { static void clearoutfullscreen(void) { - clearoutofrect(&ddraw.scrn, &ddraw.rect); + RECT r; + + r.left = 0; + r.top = (ddraw.menuhdl)?0:ddraw.menusize; + r.right = ddraw.width; // (+ ddraw.extend) + r.bottom = ddraw.height; + clearoutofrect(&ddraw.scrn, &r); dclock_redraw(); } @@ -229,9 +248,9 @@ static void paletteinit(void) { GetSystemPaletteEntries(hdc, 0, 256, ddraw.pal); ReleaseDC(hWndMain, hdc); for (i=0; i<4; i++) { - ddraw.pal[i+START_PALORG].peBlue = dclock_pal[i].p.b; - ddraw.pal[i+START_PALORG].peRed = dclock_pal[i].p.r; - ddraw.pal[i+START_PALORG].peGreen = dclock_pal[i].p.g; + ddraw.pal[i+START_PALORG].peBlue = dclockpal.pal32[i].p.b; + ddraw.pal[i+START_PALORG].peRed = dclockpal.pal32[i].p.r; + ddraw.pal[i+START_PALORG].peGreen = dclockpal.pal32[i].p.g; ddraw.pal[i+START_PALORG].peFlags = PC_RESERVED | PC_NOCOLLAPSE; } for (i=0; iSetCooperativeLevel(hWndMain, + DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); +#else ddraw2->SetCooperativeLevel(hWndMain, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT); +#endif height = (np2oscfg.force400)?400:480; bitcolor = (scrnmode & SCRNMODE_HIGHCOLOR)?16:8; if (ddraw2->SetDisplayMode(640, height, bitcolor, 0, 0) != DD_OK) { @@ -454,6 +482,7 @@ BOOL scrnmng_create(BYTE scrnmode) { ddraw.height = height; ddraw.cliping = 0; renewalclientsize(); + screenupdate = 3; // update! return(SUCCESS); scre_err: @@ -463,6 +492,7 @@ scre_err: void scrnmng_destroy(void) { + scrnmng_enablemenubar(); if (ddraw.clocksurf) { ddraw.clocksurf->Release(); } @@ -497,15 +527,51 @@ void scrnmng_querypalette(void) { } } -UINT16 scrnmng_makepal16(RGB32 pal32) { +RGB16 scrnmng_makepal16(RGB32 pal32) { RGB32 pal; pal.d = pal32.d & ddraw.pal16mask.d; - return((UINT16)((pal.p.g << ddraw.l16g) + + return((RGB16)((pal.p.g << ddraw.l16g) + (pal.p.r << ddraw.l16r) + (pal.p.b >> ddraw.r16b))); } +void scrnmng_enablemenubar(void) { + + if (ddraw.menuhdl) { + SetMenu(hWndMain, ddraw.menuhdl); + ddraw.menuhdl = NULL; + DrawMenuBar(hWndMain); + } +} + +void scrnmng_disablemenubar(void) { + + if (ddraw.menuhdl == NULL) { + ddraw.menuhdl = GetMenu(hWndMain); + SetMenu(hWndMain, NULL); + } +} + +void scrnmng_fullscrnmenu(int y) { + + BYTE menudisp; + + if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { + menudisp = ((y >= 0) && (y < ddraw.menusize))?1:0; + if (ddraw.menudisp != menudisp) { + ddraw.menudisp = menudisp; + if (menudisp == 1) { + scrnmng_enablemenubar(); + } + else { + scrnmng_disablemenubar(); + clearoutfullscreen(); + } + } + } +} + void scrnmng_topwinui(void) { mouse_running(MOUSE_STOP); @@ -513,20 +579,26 @@ void scrnmng_topwinui(void) { 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); } } if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { + scrnmng_disablemenubar(); clearoutfullscreen(); + ddraw.menudisp = 0; } mouse_running(MOUSE_CONT); }