|
|
| version 1.1.1.1, 2003/10/16 17:59:21 | version 1.6, 2005/02/07 14:46:15 |
|---|---|
| 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" |
| Line 19 typedef struct { | Line 21 typedef struct { |
| LPDIRECTDRAWSURFACE backsurf; | LPDIRECTDRAWSURFACE backsurf; |
| LPDIRECTDRAWCLIPPER clipper; | LPDIRECTDRAWCLIPPER clipper; |
| LPDIRECTDRAWPALETTE palette; | LPDIRECTDRAWPALETTE palette; |
| BYTE scrnmode; | UINT8 enable; |
| UINT8 scrnmode; | |
| int width; | int width; |
| int height; | int height; |
| int extend; | int extend; |
| Line 28 typedef struct { | Line 31 typedef struct { |
| RECT rect; | RECT rect; |
| #if defined(SUPPORT_16BPP) | #if defined(SUPPORT_16BPP) |
| RGB32 pal16mask; | RGB32 pal16mask; |
| BYTE r16b; | UINT8 r16b; |
| BYTE l16r; | UINT8 l16r; |
| BYTE l16g; | UINT8 l16g; |
| UINT8 padding16; | |
| #endif | #endif |
| #if defined(SUPPORT_8BPP) | #if defined(SUPPORT_8BPP) |
| PALETTEENTRY pal[256]; | PALETTEENTRY pal[256]; |
| Line 60 static void setwindowsize(int width, int | Line 64 static void setwindowsize(int width, int |
| GetWindowRect(hWndMain, &rectwindow); | GetWindowRect(hWndMain, &rectwindow); |
| GetClientRect(hWndMain, &rectclient); | GetClientRect(hWndMain, &rectclient); |
| width += np2oscfg.paddingx * 2; | |
| width += rectwindow.right - rectwindow.left; | width += rectwindow.right - rectwindow.left; |
| width -= rectclient.right - rectclient.left; | width -= rectclient.right - rectclient.left; |
| height += np2oscfg.paddingy * 2; | |
| height += rectwindow.bottom - rectwindow.top; | height += rectwindow.bottom - rectwindow.top; |
| height -= rectclient.bottom - rectclient.top; | height -= rectclient.bottom - rectclient.top; |
| Line 108 static void renewalclientsize(void) { | Line 110 static void renewalclientsize(void) { |
| int width; | int width; |
| int height; | int height; |
| int extend; | |
| int multiple; | int multiple; |
| int scrnwidth; | int scrnwidth; |
| int scrnheight; | int scrnheight; |
| width = min(scrnstat.width, ddraw.width); | width = min(scrnstat.width, ddraw.width); |
| height = min(scrnstat.height, ddraw.height); | height = min(scrnstat.height, ddraw.height); |
| extend = 0; | |
| // ÉÁ²èÈϰϡÁ | // ÉÁ²èÈϰϡÁ |
| if (ddraw.scrnmode & SCRNMODE_FULLSCREEN) { | if (ddraw.scrnmode & SCRNMODE_FULLSCREEN) { |
| Line 129 static void renewalclientsize(void) { | Line 129 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) { | |
| extend = min(scrnstat.extend, ddraw.extend); | |
| } | |
| scrnwidth = (width * multiple) >> 3; | scrnwidth = (width * multiple) >> 3; |
| scrnheight = (height * multiple) >> 3; | scrnheight = (height * multiple) >> 3; |
| ddraw.rect.right = width + extend; | ddraw.rect.right = width; |
| ddraw.rect.bottom = height; | ddraw.rect.bottom = height; |
| ddraw.scrn.left = np2oscfg.paddingx - extend; | ddraw.scrn.left = 0; |
| ddraw.scrn.top = np2oscfg.paddingy; | ddraw.scrn.top = 0; |
| } | } |
| else { | else { |
| if (np2oscfg.paddingy) { | |
| extend = min(scrnstat.extend, ddraw.extend); | |
| } | |
| scrnwidth = (height * multiple) >> 3; | scrnwidth = (height * multiple) >> 3; |
| scrnheight = (width * multiple) >> 3; | scrnheight = (width * multiple) >> 3; |
| ddraw.rect.right = height; | ddraw.rect.right = height; |
| ddraw.rect.bottom = width + extend; | ddraw.rect.bottom = width; |
| ddraw.scrn.left = np2oscfg.paddingx; | ddraw.scrn.left = 0; |
| ddraw.scrn.top = np2oscfg.paddingy - extend; | ddraw.scrn.top = 0; |
| } | } |
| ddraw.scrn.right = np2oscfg.paddingx + scrnwidth; | ddraw.scrn.right = scrnwidth; |
| ddraw.scrn.bottom = np2oscfg.paddingy + scrnheight; | ddraw.scrn.bottom = scrnheight; |
| setwindowsize(scrnwidth, scrnheight); | setwindowsize(scrnwidth, scrnheight); |
| setwindowsize(scrnwidth, scrnheight); | setwindowsize(scrnwidth, scrnheight); |
| } | } |
| scrnsurf.width = width; | scrnsurf.width = width; |
| scrnsurf.height = height; | scrnsurf.height = height; |
| scrnsurf.extend = extend; | |
| } | } |
| static void clearoutofrect(const RECT *target, const RECT *base) { | static void clearoutofrect(const RECT *target, const RECT *base) { |
| Line 256 static void paletteset(void) { | Line 249 static void paletteset(void) { |
| #if defined(SUPPORT_16BPP) | #if defined(SUPPORT_16BPP) |
| 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; |
| while((rmask & 0xffffff0) && (sft < 32)) { | while((rmask & 0xffffff00) && (sft < 32)) { |
| 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; |
| while((gmask & 0xffffff0) && (sft < 32)) { | while((gmask & 0xffffff00) && (sft < 32)) { |
| gmask >>= 1; | gmask >>= 1; |
| sft++; | sft++; |
| } | } |
| ddraw.pal16mask.p.g = (BYTE)gmask; | ddraw.pal16mask.p.g = (UINT8)gmask; |
| ddraw.l16g = sft; | ddraw.l16g = sft; |
| } | } |
| #endif | #endif |
| Line 291 void scrnmng_initialize(void) { | Line 284 void scrnmng_initialize(void) { |
| scrnstat.width = 640; | scrnstat.width = 640; |
| scrnstat.height = 400; | scrnstat.height = 400; |
| scrnstat.extend = 1; | scrnstat.extend = 0; |
| scrnstat.multiple = 8; | scrnstat.multiple = 8; |
| setwindowsize(640, 400); | setwindowsize(640, 400); |
| } | } |
| BOOL scrnmng_create(BYTE scrnmode) { | BOOL scrnmng_create(UINT8 scrnmode) { |
| DWORD winstyle; | DWORD winstyle; |
| DWORD winstyleex; | DWORD winstyleex; |
| Line 336 BOOL scrnmng_create(BYTE scrnmode) { | Line 329 BOOL scrnmng_create(BYTE scrnmode) { |
| ddraw.ddraw1->QueryInterface(IID_IDirectDraw2, (void **)&ddraw2); | ddraw.ddraw1->QueryInterface(IID_IDirectDraw2, (void **)&ddraw2); |
| ddraw.ddraw2 = ddraw2; | ddraw.ddraw2 = ddraw2; |
| #if defined(SUPPORT_PC9821) | |
| scrnmode |= SCRNMODE_HIGHCOLOR; | |
| #endif | |
| if (scrnmode & SCRNMODE_FULLSCREEN) { | if (scrnmode & SCRNMODE_FULLSCREEN) { |
| ddraw2->SetCooperativeLevel(hWndMain, | ddraw2->SetCooperativeLevel(hWndMain, |
| DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT); | DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT); |
| if (!(scrnmode & SCRNMODE_HIGHCOLOR)) { | if (!(scrnmode & SCRNMODE_HIGHCOLOR)) { |
| #if defined(SUPPORT_8BPP) | #if defined(SUPPORT_8BPP) |
| bitcolor = 8; | bitcolor = 8; |
| #elif defined(SUPPORT_16BPP) | |
| bitcolor = 16; | |
| #elif defined(SUPPORT_32BPP) | |
| bitcolor = 32; | |
| #elif defined(SUPPORT_24BPP) | |
| bitcolor = 24; | |
| #else | #else |
| goto scre_err; | goto scre_err; |
| #endif | #endif |
| Line 414 BOOL scrnmng_create(BYTE scrnmode) { | Line 416 BOOL scrnmng_create(BYTE scrnmode) { |
| 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; |
| if (!(scrnmode & SCRNMODE_ROTATE)) { | if (!(scrnmode & SCRNMODE_ROTATE)) { |
| ddsd.dwWidth = 641; | ddsd.dwWidth = 640; |
| ddsd.dwHeight = 480; | ddsd.dwHeight = 480; |
| } | } |
| else { | else { |
| ddsd.dwWidth = 480; | ddsd.dwWidth = 480; |
| ddsd.dwHeight = 641; | ddsd.dwHeight = 640; |
| } | } |
| if (ddraw2->CreateSurface(&ddsd, &ddraw.backsurf, NULL) != DD_OK) { | if (ddraw2->CreateSurface(&ddsd, &ddraw.backsurf, NULL) != DD_OK) { |
| Line 454 BOOL scrnmng_create(BYTE scrnmode) { | Line 456 BOOL scrnmng_create(BYTE scrnmode) { |
| else { | else { |
| goto scre_err; | goto scre_err; |
| } | } |
| scrnmng.bpp = (BYTE)bitcolor; | scrnmng.bpp = (UINT8)bitcolor; |
| scrnsurf.bpp = bitcolor; | scrnsurf.bpp = bitcolor; |
| ddraw.enable = TRUE; | |
| ddraw.scrnmode = scrnmode; | ddraw.scrnmode = scrnmode; |
| ddraw.width = 640; | ddraw.width = 640; |
| ddraw.height = 480; | ddraw.height = 480; |
| Line 514 UINT16 scrnmng_makepal16(RGB32 pal32) { | Line 517 UINT16 scrnmng_makepal16(RGB32 pal32) { |
| 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); |
| } | } |
| #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); |
| } | } |
| Line 534 void scrnmng_clearwinui(void) { | Line 541 void scrnmng_clearwinui(void) { |
| if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { | if (scrnmng.flag & SCRNFLAG_FULLSCREEN) { |
| clearoutfullscreen(); | clearoutfullscreen(); |
| } | } |
| mouse_running(MOUSE_CONT); | mousemng_enable(MOUSEPROC_WINUI); |
| } | } |
| void scrnmng_setwidth(int posx, int width) { | void scrnmng_setwidth(int posx, int width) { |
| Line 545 void scrnmng_setwidth(int posx, int widt | Line 552 void scrnmng_setwidth(int posx, int widt |
| void scrnmng_setextend(int extend) { | void scrnmng_setextend(int extend) { |
| scrnstat.extend = extend; | (void)extend; |
| renewalclientsize(); | |
| } | } |
| void scrnmng_setheight(int posy, int height) { | void scrnmng_setheight(int posy, int height) { |
| Line 565 const SCRNSURF *scrnmng_surflock(void) { | Line 571 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 634 void scrnmng_update(void) { | Line 640 void scrnmng_update(void) { |
| } | } |
| } | } |
| void scrnmng_restoresize(void) { | |
| if ((ddraw.enable) && (!(ddraw.scrnmode & SCRNMODE_FULLSCREEN))) { | |
| renewalclientsize(); | |
| } | |
| } | |