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

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

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


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