Diff for /np2/macosx/scrnmng.cpp between versions 1.4 and 1.5

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  
         }          }
 }  }

Removed from v.1.4  
changed lines
  Added in v.1.5


RetroPC.NET-CVS <cvs@retropc.net>