Diff for /np2/win9x/scrnmng.cpp between versions 1.7 and 1.8

version 1.7, 2003/10/28 22:05:46 version 1.8, 2003/11/01 22:23:04
Line 53  static SCRNSTAT scrnstat; Line 53  static SCRNSTAT scrnstat;
 static  SCRNSURF        scrnsurf;  static  SCRNSURF        scrnsurf;
   
   
 static void setwindowsize(int width, int height) {  static void setwindowsize(HWND hWnd, int width, int height) {
   
           RECT    workrc;
           int             scx;
           int             scy;
           UINT    cnt;
         RECT    rectwindow;          RECT    rectwindow;
         RECT    rectclient;          RECT    rectclient;
         RECT    workrc;          int             cx;
         int             scx, scy;          int             cy;
         UINT    update;          UINT    update;
   
         GetWindowRect(hWndMain, &rectwindow);  
         GetClientRect(hWndMain, &rectclient);  
         width += np2oscfg.paddingx * 2;  
         width += rectwindow.right - rectwindow.left;  
         width -= rectclient.right - rectclient.left;  
         height += np2oscfg.paddingy * 2;  
         height += rectwindow.bottom - rectwindow.top;  
         height -= rectclient.bottom - rectclient.top;  
   
         SystemParametersInfo(SPI_GETWORKAREA, 0, &workrc, 0);          SystemParametersInfo(SPI_GETWORKAREA, 0, &workrc, 0);
         scx = GetSystemMetrics(SM_CXSCREEN);          scx = GetSystemMetrics(SM_CXSCREEN);
         scy = GetSystemMetrics(SM_CYSCREEN);          scy = GetSystemMetrics(SM_CYSCREEN);
   
         update = 0;          cnt = 2;
         if (scx < width) {          do {
                 np2oscfg.winx = (scx - width) / 2;                  GetWindowRect(hWnd, &rectwindow);
                 update |= SYS_UPDATEOSCFG;                  GetClientRect(hWnd, &rectclient);
         }                  cx = width;
         else {                  cx += np2oscfg.paddingx * 2;
                 if ((np2oscfg.winx + width) > workrc.right) {                  cx += rectwindow.right - rectwindow.left;
                         np2oscfg.winx = workrc.right - width;                  cx -= rectclient.right - rectclient.left;
                   cy = height;
                   cy += np2oscfg.paddingy * 2;
                   cy += rectwindow.bottom - rectwindow.top;
                   cy -= rectclient.bottom - rectclient.top;
   
                   update = 0;
                   if (scx < cx) {
                           np2oscfg.winx = (scx - cx) / 2;
                         update |= SYS_UPDATEOSCFG;                          update |= SYS_UPDATEOSCFG;
                 }                  }
                 if (np2oscfg.winx < workrc.left) {                  else {
                         np2oscfg.winx = workrc.left;                          if ((np2oscfg.winx + cx) > workrc.right) {
                         update |= SYS_UPDATEOSCFG;                                  np2oscfg.winx = workrc.right - cx;
                                   update |= SYS_UPDATEOSCFG;
                           }
                           if (np2oscfg.winx < workrc.left) {
                                   np2oscfg.winx = workrc.left;
                                   update |= SYS_UPDATEOSCFG;
                           }
                 }                  }
         }                  if (scy < cy) {
         if (scy < height) {                          np2oscfg.winy = (scy - cy) / 2;
                 np2oscfg.winy = (scy - height) / 2;  
                 update |= SYS_UPDATEOSCFG;  
         }  
         else {  
                 if ((np2oscfg.winy + height) > workrc.bottom) {  
                         np2oscfg.winy = workrc.bottom - height;  
                         update |= SYS_UPDATEOSCFG;                          update |= SYS_UPDATEOSCFG;
                 }                  }
                 if (np2oscfg.winy < workrc.top) {                  else {
                         np2oscfg.winy = workrc.top;                          if ((np2oscfg.winy + cy) > workrc.bottom) {
                         update |= SYS_UPDATEOSCFG;                                  np2oscfg.winy = workrc.bottom - cy;
                                   update |= SYS_UPDATEOSCFG;
                           }
                           if (np2oscfg.winy < workrc.top) {
                                   np2oscfg.winy = workrc.top;
                                   update |= SYS_UPDATEOSCFG;
                           }
                 }                  }
         }                  sysmng_update(update);
         sysmng_update(update);                  MoveWindow(hWnd, np2oscfg.winx, np2oscfg.winy, cx, cy, TRUE);
         MoveWindow(hWndMain, np2oscfg.winx, np2oscfg.winy, width, height, TRUE);          } while(--cnt);
 }  }
   
 static void renewalclientsize(void) {  static void renewalclientsize(void) {
Line 155  static void renewalclientsize(void) { Line 164  static void renewalclientsize(void) {
                 }                  }
                 ddraw.scrn.right = np2oscfg.paddingx + scrnwidth;                  ddraw.scrn.right = np2oscfg.paddingx + scrnwidth;
                 ddraw.scrn.bottom = np2oscfg.paddingy + scrnheight;                  ddraw.scrn.bottom = np2oscfg.paddingy + scrnheight;
                 setwindowsize(scrnwidth, scrnheight);                  setwindowsize(hWndMain, scrnwidth, scrnheight);
                 setwindowsize(scrnwidth, scrnheight);  
         }          }
         scrnsurf.width = width;          scrnsurf.width = width;
         scrnsurf.height = height;          scrnsurf.height = height;
Line 313  void scrnmng_initialize(void) { Line 321  void scrnmng_initialize(void) {
         scrnstat.height = 400;          scrnstat.height = 400;
         scrnstat.extend = 1;          scrnstat.extend = 1;
         scrnstat.multiple = 8;          scrnstat.multiple = 8;
         setwindowsize(640, 400);          setwindowsize(hWndMain, 640, 400);
 }  }
   
 BOOL scrnmng_create(BYTE scrnmode) {  BOOL scrnmng_create(BYTE scrnmode) {
Line 495  void scrnmng_destroy(void) { Line 503  void scrnmng_destroy(void) {
         scrnmng_enablemenubar();          scrnmng_enablemenubar();
         if (ddraw.clocksurf) {          if (ddraw.clocksurf) {
                 ddraw.clocksurf->Release();                  ddraw.clocksurf->Release();
                   ddraw.clocksurf = NULL;
         }          }
         if (ddraw.backsurf) {          if (ddraw.backsurf) {
                 ddraw.backsurf->Release();                  ddraw.backsurf->Release();
                   ddraw.backsurf = NULL;
         }          }
         if (ddraw.palette) {          if (ddraw.palette) {
                 ddraw.palette->Release();                  ddraw.palette->Release();
                   ddraw.palette = NULL;
         }          }
         if (ddraw.clipper) {          if (ddraw.clipper) {
                 ddraw.clipper->Release();                  ddraw.clipper->Release();
                   ddraw.clipper = NULL;
         }          }
         if (ddraw.primsurf) {          if (ddraw.primsurf) {
                 ddraw.primsurf->Release();                  ddraw.primsurf->Release();
                   ddraw.primsurf = NULL;
         }          }
         if (ddraw.ddraw2) {          if (ddraw.ddraw2) {
                 if (ddraw.scrnmode & SCRNMODE_FULLSCREEN) {                  if (ddraw.scrnmode & SCRNMODE_FULLSCREEN) {
                         ddraw.ddraw2->SetCooperativeLevel(hWndMain, DDSCL_NORMAL);                          ddraw.ddraw2->SetCooperativeLevel(hWndMain, DDSCL_NORMAL);
                 }                  }
                 ddraw.ddraw2->Release();                  ddraw.ddraw2->Release();
                   ddraw.ddraw2 = NULL;
         }          }
         if (ddraw.ddraw1) {          if (ddraw.ddraw1) {
                 ddraw.ddraw1->Release();                  ddraw.ddraw1->Release();
                   ddraw.ddraw1 = NULL;
         }          }
         ZeroMemory(&ddraw, sizeof(ddraw));          ZeroMemory(&ddraw, sizeof(ddraw));
 }  }
Line 624  void scrnmng_setheight(int posy, int hei Line 639  void scrnmng_setheight(int posy, int hei
 const SCRNSURF *scrnmng_surflock(void) {  const SCRNSURF *scrnmng_surflock(void) {
   
         DDSURFACEDESC   destscrn;          DDSURFACEDESC   destscrn;
           HRESULT                 r;
   
         ZeroMemory(&destscrn, sizeof(destscrn));          ZeroMemory(&destscrn, sizeof(destscrn));
         destscrn.dwSize = sizeof(destscrn);          destscrn.dwSize = sizeof(destscrn);
         if (ddraw.backsurf->Lock(NULL, &destscrn, DDLOCK_WAIT, NULL) != DD_OK) {          if (ddraw.backsurf == NULL) {
                   return(NULL);
           }
           r = ddraw.backsurf->Lock(NULL, &destscrn, DDLOCK_WAIT, NULL);
           if (r == DDERR_SURFACELOST) {
                   ddraw.backsurf->Restore();
                   r = ddraw.backsurf->Lock(NULL, &destscrn, DDLOCK_WAIT, NULL);
           }
           if (r != DD_OK) {
   //              TRACEOUT(("backsurf lock error: %d (%d)", r));
                 return(NULL);                  return(NULL);
         }          }
         if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) {          if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) {
Line 660  void scrnmng_update(void) { Line 685  void scrnmng_update(void) {
   
         POINT   clip;          POINT   clip;
         RECT    dst;          RECT    dst;
           HRESULT r;
   
         if (scrnmng.palchanged) {          if (scrnmng.palchanged) {
                 scrnmng.palchanged = FALSE;                  scrnmng.palchanged = FALSE;
Line 671  void scrnmng_update(void) { Line 697  void scrnmng_update(void) {
                                 scrnmng.allflash = 0;                                  scrnmng.allflash = 0;
                                 clearoutfullscreen();                                  clearoutfullscreen();
                         }                          }
                         if (ddraw.primsurf->Blt(&ddraw.scrn, ddraw.backsurf, &ddraw.rect,                          r = ddraw.primsurf->Blt(&ddraw.scrn, ddraw.backsurf, &ddraw.rect,
                                                                         DDBLT_WAIT, NULL) == DDERR_SURFACELOST) {                                                                                                                          DDBLT_WAIT, NULL);
                                 ddraw.primsurf->Restore();                          if (r == DDERR_SURFACELOST) {
                                 ddraw.backsurf->Restore();                                  ddraw.backsurf->Restore();
                                   ddraw.primsurf->Restore();
                                   ddraw.primsurf->Blt(&ddraw.scrn, ddraw.backsurf, &ddraw.rect,
                                                                                                                           DDBLT_WAIT, NULL);
                         }                          }
                 }                  }
                 else {                  else {
Line 689  void scrnmng_update(void) { Line 718  void scrnmng_update(void) {
                         dst.top = clip.y + ddraw.scrn.top;                          dst.top = clip.y + ddraw.scrn.top;
                         dst.right = clip.x + ddraw.scrn.right;                          dst.right = clip.x + ddraw.scrn.right;
                         dst.bottom = clip.y + ddraw.scrn.bottom;                          dst.bottom = clip.y + ddraw.scrn.bottom;
                         if (ddraw.primsurf->Blt(&dst, ddraw.backsurf, &ddraw.rect,                          r = ddraw.primsurf->Blt(&dst, ddraw.backsurf, &ddraw.rect,
                                                                         DDBLT_WAIT, NULL) == DDERR_SURFACELOST) {                                                                          DDBLT_WAIT, NULL);
                                 ddraw.primsurf->Restore();                          if (r == DDERR_SURFACELOST) {
                                 ddraw.backsurf->Restore();                                  ddraw.backsurf->Restore();
                                   ddraw.primsurf->Restore();
                                   ddraw.primsurf->Blt(&dst, ddraw.backsurf, &ddraw.rect,
                                                                                                                   DDBLT_WAIT, NULL);
                         }                          }
                 }                  }
         }          }

Removed from v.1.7  
changed lines
  Added in v.1.8


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