|
|
| version 1.12, 2003/11/07 20:29:19 | version 1.22, 2006/12/24 00:52:29 |
|---|---|
| Line 9 | Line 9 |
| #include "mousemng.h" | #include "mousemng.h" |
| #include "scrnmng.h" | #include "scrnmng.h" |
| #include "sysmng.h" | #include "sysmng.h" |
| #include "dclock.h" | |
| #include "menu.h" | #include "menu.h" |
| #include "np2class.h" | #include "np2class.h" |
| #include "pccore.h" | #include "pccore.h" |
| #include "scrndraw.h" | #include "scrndraw.h" |
| #include "palettes.h" | #include "palettes.h" |
| #if defined(SUPPORT_DCLOCK) | |
| #include "dclock.h" | |
| #endif | |
| extern WINLOCEX np2_winlocexallwin(HWND base); | extern WINLOCEX np2_winlocexallwin(HWND base); |
| Line 25 typedef struct { | Line 27 typedef struct { |
| LPDIRECTDRAW2 ddraw2; | LPDIRECTDRAW2 ddraw2; |
| LPDIRECTDRAWSURFACE primsurf; | LPDIRECTDRAWSURFACE primsurf; |
| LPDIRECTDRAWSURFACE backsurf; | LPDIRECTDRAWSURFACE backsurf; |
| #if defined(SUPPORT_DCLOCK) | |
| LPDIRECTDRAWSURFACE clocksurf; | LPDIRECTDRAWSURFACE clocksurf; |
| #endif | |
| LPDIRECTDRAWCLIPPER clipper; | LPDIRECTDRAWCLIPPER clipper; |
| LPDIRECTDRAWPALETTE palette; | LPDIRECTDRAWPALETTE palette; |
| BYTE scrnmode; | UINT scrnmode; |
| int width; | int width; |
| int height; | int height; |
| int extend; | int extend; |
| int cliping; | int cliping; |
| RGB32 pal16mask; | RGB32 pal16mask; |
| BYTE r16b; | UINT8 r16b; |
| BYTE l16r; | UINT8 l16r; |
| BYTE l16g; | UINT8 l16g; |
| BYTE menudisp; | UINT8 menudisp; |
| int menusize; | int menusize; |
| RECT scrn; | RECT scrn; |
| RECT rect; | RECT rect; |
| Line 256 static void clearoutfullscreen(void) { | Line 260 static void clearoutfullscreen(void) { |
| base.right = ddraw.width; // (+ ddraw.extend) | base.right = ddraw.width; // (+ ddraw.extend) |
| base.bottom = ddraw.height; | base.bottom = ddraw.height; |
| clearoutofrect(&ddraw.scrn, &base); | clearoutofrect(&ddraw.scrn, &base); |
| #if defined(SUPPORT_DCLOCK) | |
| dclock_redraw(); | dclock_redraw(); |
| #endif | |
| } | } |
| static void paletteinit(void) { | static void paletteinit(void) { |
| Line 267 static void paletteinit(void) { | Line 273 static void paletteinit(void) { |
| hdc = GetDC(hWndMain); | hdc = GetDC(hWndMain); |
| GetSystemPaletteEntries(hdc, 0, 256, ddraw.pal); | GetSystemPaletteEntries(hdc, 0, 256, ddraw.pal); |
| ReleaseDC(hWndMain, hdc); | ReleaseDC(hWndMain, hdc); |
| #if defined(SUPPORT_DCLOCK) | |
| for (i=0; i<4; i++) { | for (i=0; i<4; i++) { |
| ddraw.pal[i+START_PALORG].peBlue = dclockpal.pal32[i].p.b; | 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].peRed = dclockpal.pal32[i].p.r; |
| ddraw.pal[i+START_PALORG].peGreen = dclockpal.pal32[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; |
| } | } |
| #endif | |
| for (i=0; i<NP2PAL_TOTAL; i++) { | for (i=0; i<NP2PAL_TOTAL; i++) { |
| ddraw.pal[i+START_PAL].peFlags = PC_RESERVED | PC_NOCOLLAPSE; | ddraw.pal[i+START_PAL].peFlags = PC_RESERVED | PC_NOCOLLAPSE; |
| } | } |
| Line 297 static void paletteset(void) { | Line 305 static void paletteset(void) { |
| static void make16mask(DWORD bmask, DWORD rmask, DWORD gmask) { | static void make16mask(DWORD bmask, DWORD rmask, DWORD gmask) { |
| BYTE sft; | UINT8 sft; |
| sft = 0; | sft = 0; |
| while((!(bmask & 0x80)) && (sft < 32)) { | while((!(bmask & 0x80)) && (sft < 32)) { |
| bmask <<= 1; | bmask <<= 1; |
| sft++; | sft++; |
| } | } |
| ddraw.pal16mask.p.b = (BYTE)bmask; | ddraw.pal16mask.p.b = (UINT8)bmask; |
| ddraw.r16b = sft; | ddraw.r16b = sft; |
| sft = 0; | sft = 0; |
| Line 312 static void make16mask(DWORD bmask, DWOR | Line 320 static void make16mask(DWORD bmask, DWOR |
| rmask >>= 1; | rmask >>= 1; |
| sft++; | sft++; |
| } | } |
| ddraw.pal16mask.p.r = (BYTE)rmask; | ddraw.pal16mask.p.r = (UINT8)rmask; |
| ddraw.l16r = sft; | ddraw.l16r = sft; |
| sft = 0; | sft = 0; |
| Line 320 static void make16mask(DWORD bmask, DWOR | Line 328 static void make16mask(DWORD bmask, DWOR |
| gmask >>= 1; | gmask >>= 1; |
| sft++; | sft++; |
| } | } |
| ddraw.pal16mask.p.g = (BYTE)gmask; | ddraw.pal16mask.p.g = (UINT8)gmask; |
| ddraw.l16g = sft; | ddraw.l16g = sft; |
| } | } |
| Line 336 void scrnmng_initialize(void) { | Line 344 void scrnmng_initialize(void) { |
| setwindowsize(hWndMain, 640, 400); | setwindowsize(hWndMain, 640, 400); |
| } | } |
| BOOL scrnmng_create(BYTE scrnmode) { | BRESULT scrnmng_create(UINT8 scrnmode) { |
| DWORD winstyle; | DWORD winstyle; |
| DWORD winstyleex; | DWORD winstyleex; |
| Line 365 BOOL scrnmng_create(BYTE scrnmode) { | Line 373 BOOL scrnmng_create(BYTE scrnmode) { |
| } | } |
| else { | else { |
| scrnmng.flag = SCRNFLAG_HAVEEXTEND; | scrnmng.flag = SCRNFLAG_HAVEEXTEND; |
| winstyle |= WS_SYSMENU | WS_THICKFRAME; | winstyle |= WS_SYSMENU; |
| if (np2oscfg.thickframe) { | |
| winstyle |= WS_THICKFRAME; | |
| } | |
| if (np2oscfg.wintype < 2) { | if (np2oscfg.wintype < 2) { |
| winstyle |= WS_CAPTION; | winstyle |= WS_CAPTION; |
| } | } |
| Line 384 BOOL scrnmng_create(BYTE scrnmode) { | Line 395 BOOL scrnmng_create(BYTE scrnmode) { |
| ddraw.ddraw2 = ddraw2; | ddraw.ddraw2 = ddraw2; |
| if (scrnmode & SCRNMODE_FULLSCREEN) { | if (scrnmode & SCRNMODE_FULLSCREEN) { |
| #if defined(SUPPORT_DCLOCK) | |
| dclock_init(); | dclock_init(); |
| #if 1 | #endif |
| ddraw2->SetCooperativeLevel(hWndMain, | ddraw2->SetCooperativeLevel(hWndMain, |
| DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); | 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 | #else |
| ddraw2->SetCooperativeLevel(hWndMain, | bitcolor = 16; |
| DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT); | |
| #endif | #endif |
| height = (np2oscfg.force400)?400:480; | } |
| bitcolor = (scrnmode & SCRNMODE_HIGHCOLOR)?16:8; | |
| if (ddraw2->SetDisplayMode(640, height, bitcolor, 0, 0) != DD_OK) { | if (ddraw2->SetDisplayMode(640, height, bitcolor, 0, 0) != DD_OK) { |
| goto scre_err; | goto scre_err; |
| } | } |
| Line 426 BOOL scrnmng_create(BYTE scrnmode) { | Line 441 BOOL scrnmng_create(BYTE scrnmode) { |
| } | } |
| if (bitcolor == 8) { | if (bitcolor == 8) { |
| paletteinit(); | paletteinit(); |
| dclock_init8(); | } |
| else if (bitcolor == 16) { | |
| make16mask(ddpf.dwBBitMask, ddpf.dwRBitMask, ddpf.dwGBitMask); | |
| } | |
| else if (bitcolor == 24) { | |
| } | |
| else if (bitcolor == 32) { | |
| } | } |
| else { | else { |
| make16mask(ddpf.dwBBitMask, ddpf.dwRBitMask, | goto scre_err; |
| ddpf.dwGBitMask); | |
| dclock_init16(); | |
| } | } |
| #if defined(SUPPORT_DCLOCK) | |
| dclock_palset(bitcolor); | |
| ZeroMemory(&ddsd, sizeof(ddsd)); | ZeroMemory(&ddsd, sizeof(ddsd)); |
| ddsd.dwSize = sizeof(ddsd); | ddsd.dwSize = sizeof(ddsd); |
| ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; | ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; |
| ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; | ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; |
| ddsd.dwWidth = DCLOCK_X; | ddsd.dwWidth = DCLOCK_WIDTH; |
| ddsd.dwHeight = DCLOCK_Y; | ddsd.dwHeight = DCLOCK_HEIGHT; |
| ddraw2->CreateSurface(&ddsd, &ddraw.clocksurf, NULL); | ddraw2->CreateSurface(&ddsd, &ddraw.clocksurf, NULL); |
| dclock_reset(); | dclock_reset(); |
| #endif | |
| } | } |
| else { | else { |
| ddraw2->SetCooperativeLevel(hWndMain, DDSCL_NORMAL); | ddraw2->SetCooperativeLevel(hWndMain, DDSCL_NORMAL); |
| Line 497 BOOL scrnmng_create(BYTE scrnmode) { | Line 518 BOOL scrnmng_create(BYTE scrnmode) { |
| } | } |
| ddraw.extend = 1; | ddraw.extend = 1; |
| } | } |
| scrnmng.bpp = (BYTE)bitcolor; | scrnmng.bpp = (UINT8)bitcolor; |
| scrnsurf.bpp = bitcolor; | scrnsurf.bpp = bitcolor; |
| ddraw.scrnmode = scrnmode; | ddraw.scrnmode = scrnmode; |
| ddraw.width = 640; | ddraw.width = 640; |
| Line 517 void scrnmng_destroy(void) { | Line 538 void scrnmng_destroy(void) { |
| if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { | if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { |
| np2class_enablemenu(hWndMain, (!np2oscfg.wintype)); | np2class_enablemenu(hWndMain, (!np2oscfg.wintype)); |
| } | } |
| #if defined(SUPPORT_DCLOCK) | |
| if (ddraw.clocksurf) { | if (ddraw.clocksurf) { |
| ddraw.clocksurf->Release(); | ddraw.clocksurf->Release(); |
| ddraw.clocksurf = NULL; | ddraw.clocksurf = NULL; |
| } | } |
| #endif | |
| if (ddraw.backsurf) { | if (ddraw.backsurf) { |
| ddraw.backsurf->Release(); | ddraw.backsurf->Release(); |
| ddraw.backsurf = NULL; | ddraw.backsurf = NULL; |
| Line 569 RGB16 scrnmng_makepal16(RGB32 pal32) { | Line 592 RGB16 scrnmng_makepal16(RGB32 pal32) { |
| void scrnmng_fullscrnmenu(int y) { | void scrnmng_fullscrnmenu(int y) { |
| BYTE menudisp; | UINT8 menudisp; |
| if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { | if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { |
| menudisp = ((y >= 0) && (y < ddraw.menusize))?1:0; | menudisp = ((y >= 0) && (y < ddraw.menusize))?1:0; |
| Line 632 void scrnmng_setwidth(int posx, int widt | Line 655 void scrnmng_setwidth(int posx, int widt |
| void scrnmng_setextend(int extend) { | void scrnmng_setextend(int extend) { |
| scrnstat.extend = extend; | scrnstat.extend = extend; |
| scrnmng.allflash = TRUE; | |
| renewalclientsize(TRUE); | renewalclientsize(TRUE); |
| } | } |
| Line 661 const SCRNSURF *scrnmng_surflock(void) { | Line 685 const SCRNSURF *scrnmng_surflock(void) { |
| return(NULL); | return(NULL); |
| } | } |
| if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) { | if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) { |
| scrnsurf.ptr = (BYTE *)destscrn.lpSurface; | scrnsurf.ptr = (UINT8 *)destscrn.lpSurface; |
| scrnsurf.xalign = scrnsurf.bpp >> 3; | scrnsurf.xalign = scrnsurf.bpp >> 3; |
| scrnsurf.yalign = destscrn.lPitch; | scrnsurf.yalign = destscrn.lPitch; |
| } | } |
| else if (!(ddraw.scrnmode & SCRNMODE_ROTATEDIR)) { | else if (!(ddraw.scrnmode & SCRNMODE_ROTATEDIR)) { |
| scrnsurf.ptr = (BYTE *)destscrn.lpSurface; | scrnsurf.ptr = (UINT8 *)destscrn.lpSurface; |
| scrnsurf.ptr += (scrnsurf.width - 1) * destscrn.lPitch; | scrnsurf.ptr += (scrnsurf.width - 1) * destscrn.lPitch; |
| scrnsurf.xalign = 0 - destscrn.lPitch; | scrnsurf.xalign = 0 - destscrn.lPitch; |
| scrnsurf.yalign = scrnsurf.bpp >> 3; | scrnsurf.yalign = scrnsurf.bpp >> 3; |
| } | } |
| else { | else { |
| scrnsurf.ptr = (BYTE *)destscrn.lpSurface; | scrnsurf.ptr = (UINT8 *)destscrn.lpSurface; |
| scrnsurf.ptr += (scrnsurf.height - 1) * (scrnsurf.bpp >> 3); | scrnsurf.ptr += (scrnsurf.height - 1) * (scrnsurf.bpp >> 3); |
| scrnsurf.xalign = destscrn.lPitch; | scrnsurf.xalign = destscrn.lPitch; |
| scrnsurf.yalign = 0 - (scrnsurf.bpp >> 3); | scrnsurf.yalign = 0 - (scrnsurf.bpp >> 3); |
| Line 746 void scrnmng_setmultiple(int multiple) { | Line 770 void scrnmng_setmultiple(int multiple) { |
| } | } |
| } | } |
| static const RECT rectclk = {0, 0, DCLOCK_X, DCLOCK_Y}; | |
| // ---- | |
| #if defined(SUPPORT_DCLOCK) | |
| static const RECT rectclk = {0, 0, DCLOCK_WIDTH, DCLOCK_HEIGHT}; | |
| void scrnmng_dispclock(void) { | void scrnmng_dispclock(void) { |
| DDSURFACEDESC dest; | DDSURFACEDESC dest; |
| // ver0.26 | // ver0.26 |
| if ((ddraw.clocksurf) && | if ((ddraw.clocksurf) && |
| (ddraw.scrn.top >= DCLOCK_Y) && (dclock_disp())) { | (ddraw.scrn.top >= DCLOCK_HEIGHT) && (dclock_disp())) { |
| dclock_make(); | dclock_make(); |
| ZeroMemory(&dest, sizeof(dest)); | ZeroMemory(&dest, sizeof(dest)); |
| dest.dwSize = sizeof(dest); | dest.dwSize = sizeof(dest); |
| Line 761 void scrnmng_dispclock(void) { | Line 789 void scrnmng_dispclock(void) { |
| if (scrnmng.bpp == 8) { | if (scrnmng.bpp == 8) { |
| dclock_out8(dest.lpSurface, dest.lPitch); | dclock_out8(dest.lpSurface, dest.lPitch); |
| } | } |
| else { | else if (scrnmng.bpp == 16) { |
| dclock_out16(dest.lpSurface, dest.lPitch); | 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); | ddraw.clocksurf->Unlock(NULL); |
| } | } |
| if (ddraw.primsurf->BltFast(640 - DCLOCK_X - 4, | if (ddraw.primsurf->BltFast(640 - DCLOCK_WIDTH - 4, |
| ddraw.height - DCLOCK_Y, | ddraw.height - DCLOCK_HEIGHT, |
| ddraw.clocksurf, (RECT *)&rectclk, | ddraw.clocksurf, (RECT *)&rectclk, |
| DDBLTFAST_WAIT) == DDERR_SURFACELOST) { | DDBLTFAST_WAIT) == DDERR_SURFACELOST) { |
| ddraw.primsurf->Restore(); | ddraw.primsurf->Restore(); |
| Line 776 void scrnmng_dispclock(void) { | Line 810 void scrnmng_dispclock(void) { |
| dclock_cntdown(np2oscfg.DRAW_SKIP); | dclock_cntdown(np2oscfg.DRAW_SKIP); |
| } | } |
| } | } |
| #endif | |
| // ---- | // ---- |