|
|
| version 1.8, 2003/11/01 22:23:04 | version 1.9, 2003/11/04 15:44:59 |
|---|---|
| Line 10 | Line 10 |
| #include "sysmng.h" | #include "sysmng.h" |
| #include "dclock.h" | #include "dclock.h" |
| #include "menu.h" | #include "menu.h" |
| #include "np2class.h" | |
| #include "pccore.h" | #include "pccore.h" |
| #include "scrndraw.h" | #include "scrndraw.h" |
| #include "palettes.h" | #include "palettes.h" |
| Line 34 typedef struct { | Line 35 typedef struct { |
| BYTE l16g; | BYTE l16g; |
| BYTE menudisp; | BYTE menudisp; |
| int menusize; | int menusize; |
| HMENU menuhdl; | // HMENU menuhdl; |
| RECT scrn; | RECT scrn; |
| RECT rect; | RECT rect; |
| PALETTEENTRY pal[256]; | PALETTEENTRY pal[256]; |
| Line 240 static void clearoutfullscreen(void) { | Line 241 static void clearoutfullscreen(void) { |
| RECT r; | RECT r; |
| r.left = 0; | r.left = 0; |
| r.top = (ddraw.menuhdl)?0:ddraw.menusize; | r.top = (GetWindowLong(hWndMain, NP2GWL_HMENU))?0:ddraw.menusize; |
| r.right = ddraw.width; // (+ ddraw.extend) | r.right = ddraw.width; // (+ ddraw.extend) |
| r.bottom = ddraw.height; | r.bottom = ddraw.height; |
| clearoutofrect(&ddraw.scrn, &r); | clearoutofrect(&ddraw.scrn, &r); |
| Line 342 BOOL scrnmng_create(BYTE scrnmode) { | Line 343 BOOL scrnmng_create(BYTE scrnmode) { |
| if (scrnmode & SCRNMODE_FULLSCREEN) { | if (scrnmode & SCRNMODE_FULLSCREEN) { |
| scrnmode &= ~SCRNMODE_ROTATEMASK; | scrnmode &= ~SCRNMODE_ROTATEMASK; |
| scrnmng.flag = SCRNFLAG_FULLSCREEN; | scrnmng.flag = SCRNFLAG_FULLSCREEN; |
| winstyle &= ~(WS_CAPTION | WS_OVERLAPPED | WS_SYSMENU); | winstyle &= ~(WS_CAPTION | WS_SYSMENU | WS_THICKFRAME); |
| winstyle |= WS_POPUP; | winstyle |= WS_POPUP; |
| winstyleex |= WS_EX_TOPMOST; | winstyleex |= WS_EX_TOPMOST; |
| CheckMenuItem(hmenu, IDM_WINDOW, MF_UNCHECKED); | CheckMenuItem(hmenu, IDM_WINDOW, MF_UNCHECKED); |
| CheckMenuItem(hmenu, IDM_FULLSCREEN, MF_CHECKED); | CheckMenuItem(hmenu, IDM_FULLSCREEN, MF_CHECKED); |
| ddraw.menudisp = 0; | ddraw.menudisp = 0; |
| ddraw.menusize = GetSystemMetrics(SM_CYMENU); | ddraw.menusize = GetSystemMetrics(SM_CYMENU); |
| ddraw.menuhdl = GetMenu(hWndMain); | np2class_enablemenu(hWndMain, FALSE); |
| SetMenu(hWndMain, NULL); | |
| } | } |
| else { | else { |
| scrnmng.flag = SCRNFLAG_HAVEEXTEND; | scrnmng.flag = SCRNFLAG_HAVEEXTEND; |
| winstyle |= WS_CAPTION | WS_OVERLAPPED | WS_SYSMENU; | winstyle |= WS_SYSMENU | WS_THICKFRAME; |
| if (np2oscfg.wintype < 2) { | |
| winstyle |= WS_CAPTION; | |
| } | |
| winstyle &= ~WS_POPUP; | winstyle &= ~WS_POPUP; |
| winstyleex &= ~WS_EX_TOPMOST; | winstyleex &= ~WS_EX_TOPMOST; |
| CheckMenuItem(hmenu, IDM_WINDOW, MF_CHECKED); | CheckMenuItem(hmenu, IDM_WINDOW, MF_CHECKED); |
| Line 491 BOOL scrnmng_create(BYTE scrnmode) { | Line 494 BOOL scrnmng_create(BYTE scrnmode) { |
| ddraw.cliping = 0; | ddraw.cliping = 0; |
| renewalclientsize(); | renewalclientsize(); |
| screenupdate = 3; // update! | screenupdate = 3; // update! |
| if (!(scrnmode & SCRNMODE_FULLSCREEN)) { | |
| np2class_enablemenu(hWndMain, (!np2oscfg.wintype)); | |
| } | |
| return(SUCCESS); | return(SUCCESS); |
| scre_err: | scre_err: |
| Line 500 scre_err: | Line 506 scre_err: |
| void scrnmng_destroy(void) { | void scrnmng_destroy(void) { |
| scrnmng_enablemenubar(); | // np2class_enablemenu(hWndMain, TRUE); |
| if (ddraw.clocksurf) { | if (ddraw.clocksurf) { |
| ddraw.clocksurf->Release(); | ddraw.clocksurf->Release(); |
| ddraw.clocksurf = NULL; | ddraw.clocksurf = NULL; |
| Line 551 RGB16 scrnmng_makepal16(RGB32 pal32) { | Line 557 RGB16 scrnmng_makepal16(RGB32 pal32) { |
| (pal.p.r << ddraw.l16r) + (pal.p.b >> ddraw.r16b))); | (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) { | void scrnmng_fullscrnmenu(int y) { |
| BYTE menudisp; | BYTE menudisp; |
| Line 577 void scrnmng_fullscrnmenu(int y) { | Line 566 void scrnmng_fullscrnmenu(int y) { |
| if (ddraw.menudisp != menudisp) { | if (ddraw.menudisp != menudisp) { |
| ddraw.menudisp = menudisp; | ddraw.menudisp = menudisp; |
| if (menudisp == 1) { | if (menudisp == 1) { |
| scrnmng_enablemenubar(); | np2class_enablemenu(hWndMain, TRUE); |
| } | } |
| else { | else { |
| scrnmng_disablemenubar(); | np2class_enablemenu(hWndMain, FALSE); |
| clearoutfullscreen(); | clearoutfullscreen(); |
| } | } |
| } | } |
| Line 589 void scrnmng_fullscrnmenu(int y) { | Line 578 void scrnmng_fullscrnmenu(int y) { |
| void scrnmng_topwinui(void) { | void scrnmng_topwinui(void) { |
| mouse_running(MOUSE_STOP); | mousemng_disable(MOUSEPROC_WINUI); |
| if (!ddraw.cliping++) { // ver0.28 | if (!ddraw.cliping++) { // ver0.28 |
| if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { | if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { |
| ddraw.primsurf->SetClipper(ddraw.clipper); | ddraw.primsurf->SetClipper(ddraw.clipper); |
| Line 611 void scrnmng_clearwinui(void) { | Line 600 void scrnmng_clearwinui(void) { |
| } | } |
| } | } |
| if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { | if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { |
| scrnmng_disablemenubar(); | np2class_enablemenu(hWndMain, FALSE); |
| clearoutfullscreen(); | clearoutfullscreen(); |
| ddraw.menudisp = 0; | ddraw.menudisp = 0; |
| } | } |
| mouse_running(MOUSE_CONT); | mousemng_enable(MOUSEPROC_WINUI); |
| } | } |
| void scrnmng_setwidth(int posx, int width) { | void scrnmng_setwidth(int posx, int width) { |
| Line 772 void scrnmng_dispclock(void) { | Line 761 void scrnmng_dispclock(void) { |
| } | } |
| } | } |
| // ---- | |
| typedef struct { | |
| int bx; | |
| int by; | |
| int cx; | |
| int cy; | |
| int mul; | |
| } SCRNSIZING; | |
| static SCRNSIZING scrnsizing; | |
| enum { | |
| SIZING_ADJUST = 12 | |
| }; | |
| void scrnmng_entersizing(void) { | |
| RECT rectwindow; | |
| RECT rectclient; | |
| int cx; | |
| int cy; | |
| GetWindowRect(hWndMain, &rectwindow); | |
| GetClientRect(hWndMain, &rectclient); | |
| scrnsizing.bx = (np2oscfg.paddingx * 2) + | |
| (rectwindow.right - rectwindow.left) - | |
| (rectclient.right - rectclient.left); | |
| scrnsizing.by = (np2oscfg.paddingy * 2) + | |
| (rectwindow.bottom - rectwindow.top) - | |
| (rectclient.bottom - rectclient.top); | |
| cx = min(scrnstat.width, ddraw.width); | |
| cx = (cx + 7) >> 3; | |
| cy = min(scrnstat.height, ddraw.height); | |
| cy = (cy + 7) >> 3; | |
| if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) { | |
| scrnsizing.cx = cx; | |
| scrnsizing.cy = cy; | |
| } | |
| else { | |
| scrnsizing.cx = cy; | |
| scrnsizing.cy = cx; | |
| } | |
| scrnsizing.mul = scrnstat.multiple; | |
| } | |
| void scrnmng_sizing(UINT side, RECT *rect) { | |
| int width; | |
| int height; | |
| int mul; | |
| if ((side != WMSZ_TOP) && (side != WMSZ_BOTTOM)) { | |
| width = rect->right - rect->left - scrnsizing.bx + SIZING_ADJUST; | |
| width /= scrnsizing.cx; | |
| } | |
| else { | |
| width = 16; | |
| } | |
| if ((side != WMSZ_LEFT) && (side != WMSZ_RIGHT)) { | |
| height = rect->bottom - rect->top - scrnsizing.by + SIZING_ADJUST; | |
| height /= scrnsizing.cy; | |
| } | |
| else { | |
| height = 16; | |
| } | |
| mul = min(width, height); | |
| if (mul <= 0) { | |
| mul = 1; | |
| } | |
| else if (mul > 16) { | |
| mul = 16; | |
| } | |
| width = scrnsizing.bx + (scrnsizing.cx * mul); | |
| height = scrnsizing.by + (scrnsizing.cy * mul); | |
| switch(side) { | |
| case WMSZ_LEFT: | |
| case WMSZ_TOPLEFT: | |
| case WMSZ_BOTTOMLEFT: | |
| rect->left = rect->right - width; | |
| break; | |
| case WMSZ_RIGHT: | |
| case WMSZ_TOP: | |
| case WMSZ_TOPRIGHT: | |
| case WMSZ_BOTTOM: | |
| case WMSZ_BOTTOMRIGHT: | |
| default: | |
| rect->right = rect->left + width; | |
| break; | |
| } | |
| switch(side) { | |
| case WMSZ_TOP: | |
| case WMSZ_TOPLEFT: | |
| case WMSZ_TOPRIGHT: | |
| rect->top = rect->bottom - height; | |
| break; | |
| case WMSZ_LEFT: | |
| case WMSZ_RIGHT: | |
| case WMSZ_BOTTOM: | |
| case WMSZ_BOTTOMLEFT: | |
| case WMSZ_BOTTOMRIGHT: | |
| default: | |
| rect->bottom = rect->top + height; | |
| break; | |
| } | |
| scrnsizing.mul = mul; | |
| } | |
| void scrnmng_exitsizing(void) { | |
| sysmenu_setscrnmul(scrnsizing.mul); | |
| scrnmng_setmultiple(scrnsizing.mul); | |
| InvalidateRect(hWndMain, NULL, TRUE); // ugh | |
| } | |