|
|
| version 1.3, 2003/10/19 14:48:07 | version 1.4, 2003/11/12 19:06:33 |
|---|---|
| Line 1 | Line 1 |
| #include "compiler.h" | #include "compiler.h" |
| #include "np2.h" | #include "np2.h" |
| #include "scrnmng.h" | #include "scrnmng.h" |
| #include "toolwin.h" | |
| typedef struct { | typedef struct { |
| int width; | |
| int height; | |
| BOOL exist; | BOOL exist; |
| WindowPtr hWnd; | WindowPtr hWnd; |
| GWorldPtr gw; | GWorldPtr gw; |
| PixMapHandle pm; | PixMapHandle pm; |
| Rect rect; | Rect rect; |
| GWorldPtr gwp; | |
| GDHandle hgd; | |
| } _QDRAW, *QDRAW; | } _QDRAW, *QDRAW; |
| Line 23 static GWorldPtr gwp; | Line 28 static GWorldPtr gwp; |
| static GDHandle hgd; | static GDHandle hgd; |
| #endif | #endif |
| static void changeclientsize(int width, int height, BYTE mode) { | |
| QDRAW qd; | |
| int scrnwidth, scrnheight; | |
| BYTE opentoolwin = np2oscfg.toolwin; | |
| qd = &qdraw; | |
| if (!qd->exist) { | |
| return; | |
| } | |
| if (opentoolwin) { | |
| toolwin_close(); | |
| } | |
| if (!(mode & SCRNMODE_ROTATE)) { | |
| scrnwidth = width; | |
| scrnheight = height; | |
| } | |
| else { | |
| scrnwidth = height; | |
| scrnheight = width; | |
| } | |
| if (mode & SCRNMODE_FULLSCREEN) { | |
| GetWindowBounds(hWndMain, kWindowContentRgn, &qd->rect); | |
| } | |
| else { | |
| SizeWindow(qd->hWnd, scrnwidth, scrnheight, TRUE); | |
| SetRect(&qd->rect, 0, 0, scrnwidth, scrnheight); | |
| } | |
| if (opentoolwin) { | |
| toolwin_open(); | |
| } | |
| } | |
| #if defined(macosx_only) | #if defined(macosx_only) |
| #if defined(SUPPORT_16BPP) | #if defined(SUPPORT_16BPP) |
| UINT16 scrnmng_makepal16(RGB32 pal32) { | UINT16 scrnmng_makepal16(RGB32 pal32) { |
| Line 50 int scrnmng_getbpp(void) { | Line 89 int scrnmng_getbpp(void) { |
| #endif | #endif |
| void scrnmng_initialize(void) { | void scrnmng_initialize(void) { |
| QDRAW qd; | |
| qd = &qdraw; | |
| qd->width = 640; | |
| qd->height = 400; | |
| } | } |
| BOOL scrnmng_create(BYTE scrnmode) { | BOOL scrnmng_create(BYTE mode) { |
| QDRAW qd; | QDRAW qd; |
| qd = &qdraw; | qd = &qdraw; |
| SetRect(&qd->rect, 0, 0, 640, 480); | |
| #if defined(macosx_only) | #if defined(macosx_only) |
| //GWorldの代わりに直接ウィンドウバッファを設定(tk800) | //GWorldの代わりに直接ウィンドウバッファを設定(tk800) |
| GrafPtr dstport; | GrafPtr dstport; |
| Line 66 BOOL scrnmng_create(BYTE scrnmode) { | Line 110 BOOL scrnmng_create(BYTE scrnmode) { |
| qd->pm = GetPortPixMap(dstport); | qd->pm = GetPortPixMap(dstport); |
| qd->exist = TRUE; | qd->exist = TRUE; |
| qd->hWnd = hWndMain; | qd->hWnd = hWndMain; |
| if (!(mode & SCRNMODE_FULLSCREEN)) { | |
| changeclientsize(qd->width, qd->height, mode); | |
| } | |
| return(SUCCESS); | return(SUCCESS); |
| } | } |
| #else | #else |
| SetRect(&qd->rect, 0, 0, 640, 480); | |
| if (NewGWorld(&qd->gw, 32, &qd->rect, NULL, NULL, useTempMem) == noErr) { | if (NewGWorld(&qd->gw, 32, &qd->rect, NULL, NULL, useTempMem) == noErr) { |
| qd->pm = GetGWorldPixMap(qd->gw); | qd->pm = GetGWorldPixMap(qd->gw); |
| qd->exist = TRUE; | qd->exist = TRUE; |
| Line 77 BOOL scrnmng_create(BYTE scrnmode) { | Line 125 BOOL scrnmng_create(BYTE scrnmode) { |
| } | } |
| #endif | #endif |
| else { | else { |
| (void)scrnmode; | (void)mode; |
| return(FAILURE); | return(FAILURE); |
| } | } |
| } | } |
| Line 89 void scrnmng_destroy(void) { | Line 137 void scrnmng_destroy(void) { |
| qd = &qdraw; | qd = &qdraw; |
| if (qd->exist) { | if (qd->exist) { |
| qd->exist = FALSE; | qd->exist = FALSE; |
| #if defined(macosx_only) | |
| DisposeGWorld(qd->gw); | DisposeGWorld(qd->gw); |
| #endif | |
| } | } |
| } | } |
| void scrnmng_setwidth(int posx, int width) { | void scrnmng_setwidth(int posx, int width) { |
| QDRAW qd; | |
| qd = &qdraw; | |
| if (qd->width != width) { | |
| qd->width = width; | |
| changeclientsize(width, qd->height, scrnmode); | |
| } | |
| (void)posx; | (void)posx; |
| (void)width; | |
| } | } |
| void scrnmng_setextend(int extend) { | void scrnmng_setextend(int extend) { |
| Line 106 void scrnmng_setextend(int extend) { | Line 162 void scrnmng_setextend(int extend) { |
| void scrnmng_setheight(int posy, int height) { | void scrnmng_setheight(int posy, int height) { |
| QDRAW qd; | |
| qd = &qdraw; | |
| if (qd->height != height) { | |
| qd->height = height; | |
| changeclientsize(qd->width, height, scrnmode); | |
| } | |
| (void)posy; | (void)posy; |
| (void)height; | |
| } | } |
| const SCRNSURF *scrnmng_surflock(void) { | const SCRNSURF *scrnmng_surflock(void) { |
| Line 119 const SCRNSURF *scrnmng_surflock(void) { | Line 181 const SCRNSURF *scrnmng_surflock(void) { |
| return(NULL); | return(NULL); |
| } | } |
| scrnsurf.width = qd->width; | |
| scrnsurf.height = qd->height; | |
| #if defined(macosx_only) | #if defined(macosx_only) |
| //描画位置をウィンドウバーの下に設定(tk800) | //描画位置をウィンドウバーの下に設定(tk800) |
| LockPortBits(GetWindowPort(hWndMain));//こうしないと描画位置がおかしくなる(tk800) | LockPortBits(GetWindowPort(hWndMain));//こうしないと描画位置がおかしくなる(tk800) |
| LockPixels(qd->pm); | LockPixels(qd->pm); |
| long rowbyte = GetPixRowBytes(qd->pm); | long rowbyte = GetPixRowBytes(qd->pm); |
| scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm) + rowbyte*22; | scrnsurf.bpp = scrnmng_getbpp(); |
| scrnsurf.xalign = rowbyte/640; | if (!(scrnmode & SCRNMODE_ROTATE)) { |
| scrnsurf.yalign = rowbyte; | scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm) + rowbyte*22; |
| scrnsurf.bpp = rowbyte/640 * 8; | scrnsurf.xalign = scrnsurf.bpp >> 3; |
| scrnsurf.yalign = rowbyte; | |
| } | |
| else if (!(scrnmode & SCRNMODE_ROTATEDIR)) { | |
| scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm) + rowbyte*22; | |
| scrnsurf.ptr += (scrnsurf.width - 1) * rowbyte; | |
| scrnsurf.xalign = 0 - rowbyte; | |
| scrnsurf.yalign = scrnsurf.bpp >> 3; | |
| } | |
| else { | |
| scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm) + rowbyte*22; | |
| scrnsurf.ptr += (scrnsurf.height - 1) * (scrnsurf.bpp >> 3); | |
| scrnsurf.xalign = rowbyte; | |
| scrnsurf.yalign = 0 - (scrnsurf.bpp >> 3); | |
| } | |
| #else | #else |
| GetGWorld(&gwp, &hgd); | GetGWorld(&gwp, &hgd); |
| LockPixels(qd->pm); | LockPixels(qd->pm); |
| Line 136 const SCRNSURF *scrnmng_surflock(void) { | Line 214 const SCRNSURF *scrnmng_surflock(void) { |
| scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm); | scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm); |
| scrnsurf.xalign = 4; | scrnsurf.xalign = 4; |
| scrnsurf.yalign = ((*qd->pm)->rowBytes) & 0x3fff; | scrnsurf.yalign = ((*qd->pm)->rowBytes) & 0x3fff; |
| scrnsurf.bpp = 32; | |
| #endif | #endif |
| scrnsurf.width = 640; | |
| scrnsurf.height = 400; | |
| scrnsurf.extend = 0; | scrnsurf.extend = 0; |
| return(&scrnsurf); | return(&scrnsurf); |
| } | } |