|
|
| version 1.1.1.1, 2003/10/16 17:58:47 | version 1.6, 2003/10/26 12:12:12 |
|---|---|
| Line 1 | Line 1 |
| #include "compiler.h" | #include "compiler.h" |
| #include <ddraw.h> | #include <ddraw.h> |
| #ifndef __GNUC__ | |
| #include <winnls32.h> | #include <winnls32.h> |
| #endif | |
| #include "resource.h" | #include "resource.h" |
| #include "np2.h" | #include "np2.h" |
| #include "mousemng.h" | #include "mousemng.h" |
| #include "scrnmng.h" | #include "scrnmng.h" |
| #include "sysmng.h" | #include "sysmng.h" |
| #include "pccore.h" | |
| #include "scrndraw.h" | |
| #include "palettes.h" | |
| #include "dclock.h" | #include "dclock.h" |
| #include "menu.h" | #include "menu.h" |
| #include "scrndraw.h" | |
| #include "palettes.h" | |
| typedef struct { | typedef struct { |
| Line 30 typedef struct { | Line 31 typedef struct { |
| BYTE r16b; | BYTE r16b; |
| BYTE l16r; | BYTE l16r; |
| BYTE l16g; | BYTE l16g; |
| BYTE menudisp; | |
| int menusize; | |
| HMENU menuhdl; | |
| RECT scrn; | RECT scrn; |
| RECT rect; | RECT rect; |
| PALETTEENTRY pal[256]; | PALETTEENTRY pal[256]; |
| Line 127 static void renewalclientsize(void) { | Line 131 static void renewalclientsize(void) { |
| else { | else { |
| multiple = scrnstat.multiple; | multiple = scrnstat.multiple; |
| if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) { | if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) { |
| if (np2oscfg.paddingx) { | if ((np2oscfg.paddingx) && (multiple == 8)) { |
| extend = min(scrnstat.extend, ddraw.extend); | extend = min(scrnstat.extend, ddraw.extend); |
| } | } |
| scrnwidth = (width * multiple) >> 3; | scrnwidth = (width * multiple) >> 3; |
| Line 138 static void renewalclientsize(void) { | Line 142 static void renewalclientsize(void) { |
| ddraw.scrn.top = np2oscfg.paddingy; | ddraw.scrn.top = np2oscfg.paddingy; |
| } | } |
| else { | else { |
| if (np2oscfg.paddingy) { | if ((np2oscfg.paddingy) && (multiple == 8)) { |
| extend = min(scrnstat.extend, ddraw.extend); | extend = min(scrnstat.extend, ddraw.extend); |
| } | } |
| scrnwidth = (height * multiple) >> 3; | scrnwidth = (height * multiple) >> 3; |
| Line 204 static void clearoutofrect(const RECT *t | Line 208 static void clearoutofrect(const RECT *t |
| static void clearoutscreen(void) { | static void clearoutscreen(void) { |
| RECT base; | RECT base; |
| POINT clipt; | |
| RECT target; | RECT target; |
| GetClientRect(hWndMain, &base); | 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.left = base.left + ddraw.scrn.left; |
| target.top = base.top + ddraw.scrn.top; | target.top = base.top + ddraw.scrn.top; |
| target.right = base.left + ddraw.scrn.right; | target.right = base.left + ddraw.scrn.right; |
| Line 216 static void clearoutscreen(void) { | Line 228 static void clearoutscreen(void) { |
| static void clearoutfullscreen(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(); | dclock_redraw(); |
| } | } |
| Line 229 static void paletteinit(void) { | Line 247 static void paletteinit(void) { |
| GetSystemPaletteEntries(hdc, 0, 256, ddraw.pal); | GetSystemPaletteEntries(hdc, 0, 256, ddraw.pal); |
| ReleaseDC(hWndMain, hdc); | ReleaseDC(hWndMain, hdc); |
| for (i=0; i<4; i++) { | for (i=0; i<4; i++) { |
| ddraw.pal[i+START_PALORG].peBlue = dclock_pal[i].p.b; | ddraw.pal[i+START_PALORG].peBlue = dclockpal.pal32[i].p.b; |
| ddraw.pal[i+START_PALORG].peRed = dclock_pal[i].p.r; | ddraw.pal[i+START_PALORG].peRed = dclockpal.pal32[i].p.r; |
| ddraw.pal[i+START_PALORG].peGreen = dclock_pal[i].p.g; | ddraw.pal[i+START_PALORG].peGreen = dclockpal.pal32[i].p.g; |
| ddraw.pal[i+START_PALORG].peFlags = PC_RESERVED | PC_NOCOLLAPSE; | ddraw.pal[i+START_PALORG].peFlags = PC_RESERVED | PC_NOCOLLAPSE; |
| } | } |
| for (i=0; i<NP2PAL_TOTAL; i++) { | for (i=0; i<NP2PAL_TOTAL; i++) { |
| Line 269 static void make16mask(DWORD bmask, DWOR | Line 287 static void make16mask(DWORD bmask, DWOR |
| ddraw.r16b = sft; | ddraw.r16b = sft; |
| sft = 0; | sft = 0; |
| while((rmask & 0xffffff0) && (sft < 32)) { | while((rmask & 0xffffff00) && (sft < 32)) { |
| rmask >>= 1; | rmask >>= 1; |
| sft++; | sft++; |
| } | } |
| Line 277 static void make16mask(DWORD bmask, DWOR | Line 295 static void make16mask(DWORD bmask, DWOR |
| ddraw.l16r = sft; | ddraw.l16r = sft; |
| sft = 0; | sft = 0; |
| while((gmask & 0xffffff0) && (sft < 32)) { | while((gmask & 0xffffff00) && (sft < 32)) { |
| gmask >>= 1; | gmask >>= 1; |
| sft++; | sft++; |
| } | } |
| Line 320 BOOL scrnmng_create(BYTE scrnmode) { | Line 338 BOOL scrnmng_create(BYTE scrnmode) { |
| 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.menusize = GetSystemMetrics(SM_CYMENU); | |
| ddraw.menuhdl = GetMenu(hWndMain); | |
| SetMenu(hWndMain, NULL); | |
| } | } |
| else { | else { |
| scrnmng.flag = SCRNFLAG_HAVEEXTEND; | scrnmng.flag = SCRNFLAG_HAVEEXTEND; |
| Line 445 BOOL scrnmng_create(BYTE scrnmode) { | Line 467 BOOL scrnmng_create(BYTE scrnmode) { |
| else { | else { |
| goto scre_err; | goto scre_err; |
| } | } |
| ddraw.extend = 1; | |
| } | } |
| scrnmng.bpp = (BYTE)bitcolor; | scrnmng.bpp = (BYTE)bitcolor; |
| scrnsurf.bpp = bitcolor; | scrnsurf.bpp = bitcolor; |
| Line 486 void scrnmng_destroy(void) { | Line 509 void scrnmng_destroy(void) { |
| if (ddraw.ddraw1) { | if (ddraw.ddraw1) { |
| ddraw.ddraw1->Release(); | ddraw.ddraw1->Release(); |
| } | } |
| scrnmng_enablemenubar(); | |
| ZeroMemory(&ddraw, sizeof(ddraw)); | ZeroMemory(&ddraw, sizeof(ddraw)); |
| } | } |
| Line 496 void scrnmng_querypalette(void) { | Line 520 void scrnmng_querypalette(void) { |
| } | } |
| } | } |
| UINT16 scrnmng_makepal16(RGB32 pal32) { | RGB16 scrnmng_makepal16(RGB32 pal32) { |
| RGB32 pal; | RGB32 pal; |
| pal.d = pal32.d & ddraw.pal16mask.d; | 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))); | (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) { | void scrnmng_topwinui(void) { |
| mouse_running(MOUSE_STOP); | mouse_running(MOUSE_STOP); |
| Line 512 void scrnmng_topwinui(void) { | Line 572 void scrnmng_topwinui(void) { |
| if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { | if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { |
| ddraw.primsurf->SetClipper(ddraw.clipper); | ddraw.primsurf->SetClipper(ddraw.clipper); |
| } | } |
| #ifndef __GNUC__ | |
| WINNLSEnableIME(hWndMain, TRUE); | WINNLSEnableIME(hWndMain, TRUE); |
| #endif | |
| } | } |
| } | } |
| void scrnmng_clearwinui(void) { | void scrnmng_clearwinui(void) { |
| if ((ddraw.cliping > 0) && (!(--ddraw.cliping))) { | if ((ddraw.cliping > 0) && (!(--ddraw.cliping))) { |
| #ifndef __GNUC__ | |
| WINNLSEnableIME(hWndMain, FALSE); | WINNLSEnableIME(hWndMain, FALSE); |
| #endif | |
| if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { | if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { |
| ddraw.primsurf->SetClipper(0); | ddraw.primsurf->SetClipper(0); |
| } | } |
| } | } |
| if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { | if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { |
| scrnmng_disablemenubar(); | |
| clearoutfullscreen(); | clearoutfullscreen(); |
| ddraw.menudisp = 0; | |
| } | } |
| mouse_running(MOUSE_CONT); | mouse_running(MOUSE_CONT); |
| } | } |
| Line 628 void scrnmng_update(void) { | Line 694 void scrnmng_update(void) { |
| // ---- | // ---- |
| void scrnmng_setmultiple(int multiple) { | |
| if (scrnstat.multiple != multiple) { | |
| scrnstat.multiple = multiple; | |
| renewalclientsize(); | |
| } | |
| } | |
| static const RECT rectclk = {0, 0, DCLOCK_X, DCLOCK_Y}; | static const RECT rectclk = {0, 0, DCLOCK_X, DCLOCK_Y}; |
| void scrnmng_dispclock(void) { | void scrnmng_dispclock(void) { |