|
|
| version 1.4, 2003/11/12 19:06:33 | version 1.5, 2003/11/13 15:52:04 |
|---|---|
| Line 16 typedef struct { | Line 16 typedef struct { |
| GDHandle hgd; | GDHandle hgd; |
| } _QDRAW, *QDRAW; | } _QDRAW, *QDRAW; |
| #ifdef NP2GCC | |
| #define macosx_only | |
| #endif | |
| static _QDRAW qdraw; | static _QDRAW qdraw; |
| static SCRNSURF scrnsurf; | static SCRNSURF scrnsurf; |
| #if !defined(macosx_only) | |
| static GWorldPtr gwp; | #define WINDOWTITLEOFFSET 22 |
| static GDHandle hgd; | |
| #endif | |
| static void changeclientsize(int width, int height, BYTE mode) { | static void changeclientsize(int width, int height, BYTE mode) { |
| Line 38 static void changeclientsize(int width, | Line 31 static void changeclientsize(int width, |
| if (!qd->exist) { | if (!qd->exist) { |
| return; | return; |
| } | } |
| if (opentoolwin) { | if (!(mode & SCRNMODE_FULLSCREEN)) { |
| toolwin_close(); | if (opentoolwin) { |
| } | toolwin_close(); |
| if (!(mode & SCRNMODE_ROTATE)) { | } |
| scrnwidth = width; | if (!(mode & SCRNMODE_ROTATE)) { |
| scrnheight = height; | scrnwidth = width; |
| } | scrnheight = height; |
| else { | } |
| scrnwidth = height; | else { |
| scrnheight = width; | scrnwidth = height; |
| } | scrnheight = width; |
| if (mode & SCRNMODE_FULLSCREEN) { | } |
| GetWindowBounds(hWndMain, kWindowContentRgn, &qd->rect); | |
| } | |
| else { | |
| SizeWindow(qd->hWnd, scrnwidth, scrnheight, TRUE); | SizeWindow(qd->hWnd, scrnwidth, scrnheight, TRUE); |
| SetRect(&qd->rect, 0, 0, scrnwidth, scrnheight); | SetRect(&qd->rect, 0, 0, scrnwidth, scrnheight); |
| if (opentoolwin) { | |
| toolwin_open(); | |
| } | |
| } | } |
| if (opentoolwin) { | else { |
| toolwin_open(); | GetWindowBounds(qd->hWnd, kWindowContentRgn, &qd->rect); |
| } | } |
| } | } |
| #if defined(macosx_only) | |
| #if defined(SUPPORT_16BPP) | #if defined(SUPPORT_16BPP) |
| UINT16 scrnmng_makepal16(RGB32 pal32) { | UINT16 scrnmng_makepal16(RGB32 pal32) { |
| //win9xのをちょこっと改造(tk800) | //win9xのをちょこっと改造(tk800) |
| Line 82 UINT16 scrnmng_makepal16(RGB32 pal32) { | Line 73 UINT16 scrnmng_makepal16(RGB32 pal32) { |
| int scrnmng_getbpp(void) { | int scrnmng_getbpp(void) { |
| return(CGDisplayBitsPerPixel(kCGDirectMainDisplay)); | return(CGDisplayBitsPerPixel(kCGDirectMainDisplay)); |
| } | } |
| #else | |
| int scrnmng_getbpp(void) { | |
| return(32); | |
| } | |
| #endif | |
| void scrnmng_initialize(void) { | void scrnmng_initialize(void) { |
| Line 102 BOOL scrnmng_create(BYTE mode) { | Line 88 BOOL scrnmng_create(BYTE mode) { |
| QDRAW qd; | QDRAW qd; |
| qd = &qdraw; | qd = &qdraw; |
| #if defined(macosx_only) | |
| //GWorldの代わりに直接ウィンドウバッファを設定(tk800) | //GWorldの代わりに直接ウィンドウバッファを設定(tk800) |
| GrafPtr dstport; | GrafPtr dstport; |
| dstport = GetWindowPort(hWndMain); | dstport = GetWindowPort(hWndMain); |
| Line 110 BOOL scrnmng_create(BYTE mode) { | Line 95 BOOL scrnmng_create(BYTE mode) { |
| 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); |
| changeclientsize(qd->width, qd->height, mode); | |
| } | |
| return(SUCCESS); | return(SUCCESS); |
| } | } |
| #else | |
| SetRect(&qd->rect, 0, 0, 640, 480); | |
| if (NewGWorld(&qd->gw, 32, &qd->rect, NULL, NULL, useTempMem) == noErr) { | |
| qd->pm = GetGWorldPixMap(qd->gw); | |
| qd->exist = TRUE; | |
| qd->hWnd = hWndMain; | |
| return(SUCCESS); | |
| } | |
| #endif | |
| else { | else { |
| (void)mode; | (void)mode; |
| return(FAILURE); | return(FAILURE); |
| Line 137 void scrnmng_destroy(void) { | Line 111 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); | |
| #endif | |
| } | } |
| } | } |
| Line 183 const SCRNSURF *scrnmng_surflock(void) { | Line 154 const SCRNSURF *scrnmng_surflock(void) { |
| scrnsurf.width = qd->width; | scrnsurf.width = qd->width; |
| scrnsurf.height = qd->height; | scrnsurf.height = qd->height; |
| #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.bpp = scrnmng_getbpp(); | scrnsurf.bpp = scrnmng_getbpp(); |
| if (!(scrnmode & SCRNMODE_ROTATE)) { | if (!(scrnmode & SCRNMODE_ROTATE)) { |
| scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm) + rowbyte*22; | scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm) + rowbyte*WINDOWTITLEOFFSET; |
| scrnsurf.xalign = scrnsurf.bpp >> 3; | scrnsurf.xalign = scrnsurf.bpp >> 3; |
| scrnsurf.yalign = rowbyte; | scrnsurf.yalign = rowbyte; |
| } | } |
| else if (!(scrnmode & SCRNMODE_ROTATEDIR)) { | else if (!(scrnmode & SCRNMODE_ROTATEDIR)) { |
| scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm) + rowbyte*22; | scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm) + rowbyte*WINDOWTITLEOFFSET; |
| scrnsurf.ptr += (scrnsurf.width - 1) * rowbyte; | scrnsurf.ptr += (scrnsurf.width - 1) * rowbyte; |
| scrnsurf.xalign = 0 - rowbyte; | scrnsurf.xalign = 0 - rowbyte; |
| scrnsurf.yalign = scrnsurf.bpp >> 3; | scrnsurf.yalign = scrnsurf.bpp >> 3; |
| } | } |
| else { | else { |
| scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm) + rowbyte*22; | scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm) + rowbyte*WINDOWTITLEOFFSET; |
| scrnsurf.ptr += (scrnsurf.height - 1) * (scrnsurf.bpp >> 3); | scrnsurf.ptr += (scrnsurf.height - 1) * (scrnsurf.bpp >> 3); |
| scrnsurf.xalign = rowbyte; | scrnsurf.xalign = rowbyte; |
| scrnsurf.yalign = 0 - (scrnsurf.bpp >> 3); | scrnsurf.yalign = 0 - (scrnsurf.bpp >> 3); |
| } | } |
| #else | |
| GetGWorld(&gwp, &hgd); | |
| LockPixels(qd->pm); | |
| SetGWorld(qd->gw, NULL); | |
| scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm); | |
| scrnsurf.xalign = 4; | |
| scrnsurf.yalign = ((*qd->pm)->rowBytes) & 0x3fff; | |
| scrnsurf.bpp = 32; | |
| #endif | |
| scrnsurf.extend = 0; | scrnsurf.extend = 0; |
| return(&scrnsurf); | return(&scrnsurf); |
| } | } |
| Line 227 void scrnmng_surfunlock(const SCRNSURF * | Line 187 void scrnmng_surfunlock(const SCRNSURF * |
| if (surf) { | if (surf) { |
| qd = &qdraw; | qd = &qdraw; |
| #if defined(macosx_only) | |
| //画面を更新するようWindow Serverに指示(tk800) | //画面を更新するようWindow Serverに指示(tk800) |
| GrafPtr dstport; | GrafPtr dstport; |
| dstport = GetWindowPort(hWndMain); | dstport = GetWindowPort(qd->hWnd); |
| QDAddRectToDirtyRegion(dstport, &qd->rect); | QDAddRectToDirtyRegion(dstport, &qd->rect); |
| UnlockPixels(qd->pm); | UnlockPixels(qd->pm); |
| UnlockPortBits(dstport); | UnlockPortBits(dstport); |
| #else | |
| #if TARGET_API_MAC_CARBON | |
| { | |
| GrafPtr thePort; | |
| RgnHandle theVisibleRgn = NewRgn(); | |
| theVisibleRgn = NewRgn(); | |
| if (!EmptyRgn(GetPortVisibleRegion(GetWindowPort(qd->hWnd), | |
| theVisibleRgn))) { | |
| LockPortBits(GetWindowPort(qd->hWnd)); | |
| LockPixels(qd->pm); | |
| GetPort(&thePort); | |
| SetPortWindowPort(qd->hWnd); | |
| CopyBits((BitMap*)(*qd->pm), | |
| GetPortBitMapForCopyBits(GetWindowPort(qd->hWnd)), | |
| &qd->rect, &qd->rect, srcCopy, theVisibleRgn); | |
| SetPort(thePort); | |
| UnlockPixels(qd->pm); | |
| UnlockPortBits(GetWindowPort(qd->hWnd)); | |
| } | |
| DisposeRgn(theVisibleRgn); | |
| } | |
| #else | |
| CopyBits((BitMap *)(*qd->pm), &(qd->hWnd->portBits), &qd->rect, | |
| &qd->rect, srcCopy, qd->hWnd->visRgn); | |
| #endif | |
| UnlockPixels(qd->pm); | |
| SetGWorld(gwp, hgd); | |
| #endif | |
| } | } |
| } | } |