Diff for /np2/win9x/scrnmng.cpp between versions 1.4 and 1.27

version 1.4, 2003/10/21 14:57:41 version 1.27, 2011/03/07 09:54:11
Line 1 Line 1
 #include        "compiler.h"  /**
 #include        <ddraw.h>   * @file        scrnmng.cpp
    * @brief       Screen Manager (DirectDraw2)
    *
    * @author      $Author$
    * @date        $Date$
    */
   
   #include "compiler.h"
   #include <ddraw.h>
 #ifndef __GNUC__  #ifndef __GNUC__
 #include        <winnls32.h>  #include <winnls32.h>
   #endif
   #include "resource.h"
   #include "np2.h"
   #include "winloc.h"
   #include "mousemng.h"
   #include "scrnmng.h"
   #include "sysmng.h"
   #include "menu.h"
   #include "np2class.h"
   #include "pccore.h"
   #include "scrndraw.h"
   #include "palettes.h"
   
   #if defined(SUPPORT_DCLOCK)
   #include "dclock.h"
 #endif  #endif
 #include        "resource.h"  
 #include        "np2.h"  #if !defined(__GNUC__)
 #include        "mousemng.h"  #pragma comment(lib, "ddraw.lib")
 #include        "scrnmng.h"  #pragma comment(lib, "dxguid.lib")
 #include        "sysmng.h"  #endif  // !defined(__GNUC__)
 #include        "dclock.h"  
 #include        "menu.h"  extern WINLOCEX np2_winlocexallwin(HWND base);
 #include        "scrndraw.h"  
 #include        "palettes.h"  
   
   
 typedef struct {  typedef struct {
Line 19  typedef struct { Line 40  typedef struct {
         LPDIRECTDRAW2           ddraw2;          LPDIRECTDRAW2           ddraw2;
         LPDIRECTDRAWSURFACE     primsurf;          LPDIRECTDRAWSURFACE     primsurf;
         LPDIRECTDRAWSURFACE     backsurf;          LPDIRECTDRAWSURFACE     backsurf;
   #if defined(SUPPORT_DCLOCK)
         LPDIRECTDRAWSURFACE     clocksurf;          LPDIRECTDRAWSURFACE     clocksurf;
   #endif
         LPDIRECTDRAWCLIPPER     clipper;          LPDIRECTDRAWCLIPPER     clipper;
         LPDIRECTDRAWPALETTE     palette;          LPDIRECTDRAWPALETTE     palette;
         BYTE                            scrnmode;          UINT                            scrnmode;
         int                                     width;          int                                     width;
         int                                     height;          int                                     height;
         int                                     extend;          int                                     extend;
         int                                     cliping;          int                                     cliping;
         RGB32                           pal16mask;          RGB32                           pal16mask;
         BYTE                            r16b;          UINT8                           r16b;
         BYTE                            l16r;          UINT8                           l16r;
         BYTE                            l16g;          UINT8                           l16g;
           UINT8                           menudisp;
           int                                     menusize;
         RECT                            scrn;          RECT                            scrn;
         RECT                            rect;          RECT                            rect;
           RECT                            scrnclip;
           RECT                            rectclip;
         PALETTEENTRY            pal[256];          PALETTEENTRY            pal[256];
 } DDRAW;  } DDRAW;
   
Line 49  static SCRNSTAT scrnstat; Line 76  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(BOOL winloc) {
   
         int             width;          int                     width;
         int             height;          int                     height;
         int             extend;          int                     extend;
         int             multiple;          UINT            fscrnmod;
         int             scrnwidth;          int                     multiple;
         int             scrnheight;          int                     scrnwidth;
           int                     scrnheight;
           int                     tmpcy;
           WINLOCEX        wlex;
   
         width = min(scrnstat.width, ddraw.width);          width = min(scrnstat.width, ddraw.width);
         height = min(scrnstat.height, ddraw.height);          height = min(scrnstat.height, ddraw.height);
Line 120  static void renewalclientsize(void) { Line 159  static void renewalclientsize(void) {
         if (ddraw.scrnmode & SCRNMODE_FULLSCREEN) {          if (ddraw.scrnmode & SCRNMODE_FULLSCREEN) {
                 ddraw.rect.right = width;                  ddraw.rect.right = width;
                 ddraw.rect.bottom = height;                  ddraw.rect.bottom = height;
                 ddraw.scrn.left = (ddraw.width - width) / 2;                  scrnwidth = width;
                 ddraw.scrn.top = (ddraw.height - height) / 2;                  scrnheight = height;
                 ddraw.scrn.right = ddraw.scrn.left + width;                  fscrnmod = np2oscfg.fscrnmod & FSCRNMOD_ASPECTMASK;
                 ddraw.scrn.bottom = ddraw.scrn.top + height;                  switch(fscrnmod) {
                           default:
                           case FSCRNMOD_NORESIZE:
                                   break;
   
                           case FSCRNMOD_ASPECTFIX8:
                                   scrnwidth = (ddraw.width << 3) / width;
                                   scrnheight = (ddraw.height << 3) / height;
                                   multiple = min(scrnwidth, scrnheight);
                                   scrnwidth = (width * multiple) >> 3;
                                   scrnheight = (height * multiple) >> 3;
                                   break;
   
                           case FSCRNMOD_ASPECTFIX:
                                   scrnwidth = ddraw.width;
                                   scrnheight = (scrnwidth * height) / width;
                                   if (scrnheight >= ddraw.height) {
                                           scrnheight = ddraw.height;
                                           scrnwidth = (scrnheight * width) / height;
                                   }
                                   break;
   
                           case FSCRNMOD_LARGE:
                                   scrnwidth = ddraw.width;
                                   scrnheight = ddraw.height;
                                   break;
                   }
                   ddraw.scrn.left = (ddraw.width - scrnwidth) / 2;
                   ddraw.scrn.top = (ddraw.height - scrnheight) / 2;
                   ddraw.scrn.right = ddraw.scrn.left + scrnwidth;
                   ddraw.scrn.bottom = ddraw.scrn.top + scrnheight;
   
                   // メニュー表示時の描画領域
                   ddraw.rectclip = ddraw.rect;
                   ddraw.scrnclip = ddraw.scrn;
                   if (ddraw.scrnclip.top < ddraw.menusize) {
                           ddraw.scrnclip.top = ddraw.menusize;
                           tmpcy = ddraw.height - ddraw.menusize;
                           if (scrnheight > tmpcy) {
                                   switch(fscrnmod) {
                                           default:
                                           case FSCRNMOD_NORESIZE:
                                                   tmpcy = min(tmpcy, height);
                                                   ddraw.rectclip.bottom = tmpcy;
                                                   break;
   
                                           case FSCRNMOD_ASPECTFIX8:
                                           case FSCRNMOD_ASPECTFIX:
                                                   ddraw.rectclip.bottom = (tmpcy * height) / scrnheight;
                                                   break;
   
                                           case FSCRNMOD_LARGE:
                                                   break;
                                   }
                           }
                           ddraw.scrnclip.bottom = ddraw.menusize + tmpcy;
                   }
         }          }
         else {          else {
                 multiple = scrnstat.multiple;                  multiple = scrnstat.multiple;
Line 151  static void renewalclientsize(void) { Line 246  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(scrnwidth, scrnheight);                  wlex = NULL;
                   if (winloc) {
                           wlex = np2_winlocexallwin(g_hWndMain);
                   }
                   winlocex_setholdwnd(wlex, g_hWndMain);
                   setwindowsize(g_hWndMain, scrnwidth, scrnheight);
                   winlocex_move(wlex);
                   winlocex_destroy(wlex);
         }          }
         scrnsurf.width = width;          scrnsurf.width = width;
         scrnsurf.height = height;          scrnsurf.height = height;
Line 205  static void clearoutofrect(const RECT *t Line 307  static void clearoutofrect(const RECT *t
 static void clearoutscreen(void) {  static void clearoutscreen(void) {
   
         RECT    base;          RECT    base;
           POINT   clipt;
         RECT    target;          RECT    target;
   
         GetClientRect(hWndMain, &base);          GetClientRect(g_hWndMain, &base);
           clipt.x = 0;
           clipt.y = 0;
           ClientToScreen(g_hWndMain, &clipt);
           base.left += clipt.x;
           base.top += clipt.y;
           base.right += clipt.x;
           base.bottom += clipt.y;
         target.left = base.left + ddraw.scrn.left;          target.left = base.left + ddraw.scrn.left;
         target.top = base.top + ddraw.scrn.top;          target.top = base.top + ddraw.scrn.top;
         target.right = base.left + ddraw.scrn.right;          target.right = base.left + ddraw.scrn.right;
Line 217  static void clearoutscreen(void) { Line 327  static void clearoutscreen(void) {
   
 static void clearoutfullscreen(void) {  static void clearoutfullscreen(void) {
   
         clearoutofrect(&ddraw.scrn, &ddraw.rect);          RECT    base;
   const RECT      *scrn;
   
           base.left = 0;
           base.top = 0;
           base.right = ddraw.width;
           base.bottom = ddraw.height;
           if (GetWindowLongPtr(g_hWndMain, NP2GWLP_HMENU)) {
                   scrn = &ddraw.scrn;
                   base.top = 0;
           }
           else {
                   scrn = &ddraw.scrnclip;
                   base.top = ddraw.menusize;
           }
           clearoutofrect(scrn, &base);
   #if defined(SUPPORT_DCLOCK)
         dclock_redraw();          dclock_redraw();
   #endif
 }  }
   
 static void paletteinit(void) {  static void paletteinit(void) {
Line 226  static void paletteinit(void) { Line 353  static void paletteinit(void) {
         HDC     hdc;          HDC     hdc;
         UINT    i;          UINT    i;
   
         hdc = GetDC(hWndMain);          hdc = GetDC(g_hWndMain);
         GetSystemPaletteEntries(hdc, 0, 256, ddraw.pal);          GetSystemPaletteEntries(hdc, 0, 256, ddraw.pal);
         ReleaseDC(hWndMain, hdc);          ReleaseDC(g_hWndMain, hdc);
   #if defined(SUPPORT_DCLOCK)
         for (i=0; i<4; i++) {          for (i=0; i<4; i++) {
                 ddraw.pal[i+START_PALORG].peBlue = dclockpal.pal32[i].p.b;                  ddraw.pal[i+START_PALORG].peBlue = dclockpal.pal32[i].p.b;
                 ddraw.pal[i+START_PALORG].peRed = dclockpal.pal32[i].p.r;                  ddraw.pal[i+START_PALORG].peRed = dclockpal.pal32[i].p.r;
                 ddraw.pal[i+START_PALORG].peGreen = dclockpal.pal32[i].p.g;                  ddraw.pal[i+START_PALORG].peGreen = dclockpal.pal32[i].p.g;
                 ddraw.pal[i+START_PALORG].peFlags = PC_RESERVED | PC_NOCOLLAPSE;                  ddraw.pal[i+START_PALORG].peFlags = PC_RESERVED | PC_NOCOLLAPSE;
         }          }
   #endif
         for (i=0; i<NP2PAL_TOTAL; i++) {          for (i=0; i<NP2PAL_TOTAL; i++) {
                 ddraw.pal[i+START_PAL].peFlags = PC_RESERVED | PC_NOCOLLAPSE;                  ddraw.pal[i+START_PAL].peFlags = PC_RESERVED | PC_NOCOLLAPSE;
         }          }
Line 259  static void paletteset(void) { Line 388  static void paletteset(void) {
   
 static void make16mask(DWORD bmask, DWORD rmask, DWORD gmask) {  static void make16mask(DWORD bmask, DWORD rmask, DWORD gmask) {
   
         BYTE    sft;          UINT8   sft;
   
         sft = 0;          sft = 0;
         while((!(bmask & 0x80)) && (sft < 32)) {          while((!(bmask & 0x80)) && (sft < 32)) {
                 bmask <<= 1;                  bmask <<= 1;
                 sft++;                  sft++;
         }          }
         ddraw.pal16mask.p.b = (BYTE)bmask;          ddraw.pal16mask.p.b = (UINT8)bmask;
         ddraw.r16b = sft;          ddraw.r16b = sft;
   
         sft = 0;          sft = 0;
Line 274  static void make16mask(DWORD bmask, DWOR Line 403  static void make16mask(DWORD bmask, DWOR
                 rmask >>= 1;                  rmask >>= 1;
                 sft++;                  sft++;
         }          }
         ddraw.pal16mask.p.r = (BYTE)rmask;          ddraw.pal16mask.p.r = (UINT8)rmask;
         ddraw.l16r = sft;          ddraw.l16r = sft;
   
         sft = 0;          sft = 0;
Line 282  static void make16mask(DWORD bmask, DWOR Line 411  static void make16mask(DWORD bmask, DWOR
                 gmask >>= 1;                  gmask >>= 1;
                 sft++;                  sft++;
         }          }
         ddraw.pal16mask.p.g = (BYTE)gmask;          ddraw.pal16mask.p.g = (UINT8)gmask;
         ddraw.l16g = sft;          ddraw.l16g = sft;
 }  }
   
Line 295  void scrnmng_initialize(void) { Line 424  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(g_hWndMain, 640, 400);
 }  }
   
 BOOL scrnmng_create(BYTE scrnmode) {  BRESULT scrnmng_create(UINT8 scrnmode) {
   
         DWORD                   winstyle;          DWORD                   winstyle;
         DWORD                   winstyleex;          DWORD                   winstyleex;
Line 306  BOOL scrnmng_create(BYTE scrnmode) { Line 435  BOOL scrnmng_create(BYTE scrnmode) {
         LPDIRECTDRAW2   ddraw2;          LPDIRECTDRAW2   ddraw2;
         DDSURFACEDESC   ddsd;          DDSURFACEDESC   ddsd;
         DDPIXELFORMAT   ddpf;          DDPIXELFORMAT   ddpf;
         UINT                    bitcolor;          int                             width;
         int                             height;          int                             height;
           UINT                    bitcolor;
           UINT                    fscrnmod;
           DEVMODE                 devmode;
   
         ZeroMemory(&scrnmng, sizeof(scrnmng));          ZeroMemory(&scrnmng, sizeof(scrnmng));
         winstyle = GetWindowLong(hWndMain, GWL_STYLE);          winstyle = GetWindowLong(g_hWndMain, GWL_STYLE);
         winstyleex = GetWindowLong(hWndMain, GWL_EXSTYLE);          winstyleex = GetWindowLong(g_hWndMain, GWL_EXSTYLE);
         hmenu = GetMenu(hWndMain);          hmenu = GetMenu(g_hWndMain);
         if (scrnmode & SCRNMODE_FULLSCREEN) {          if (scrnmode & SCRNMODE_FULLSCREEN) {
                 scrnmode &= ~SCRNMODE_ROTATEMASK;                  scrnmode &= ~SCRNMODE_ROTATEMASK;
                 scrnmng.flag = SCRNFLAG_FULLSCREEN;                  scrnmng.flag = SCRNFLAG_FULLSCREEN;
                 winstyle &= ~(WS_CAPTION | WS_OVERLAPPED | WS_SYSMENU);                  winstyle &= ~(WS_CAPTION | WS_SYSMENU | WS_THICKFRAME);
                 winstyle |= WS_POPUP;                  winstyle |= WS_POPUP;
                 winstyleex |= WS_EX_TOPMOST;                  winstyleex |= WS_EX_TOPMOST;
                 CheckMenuItem(hmenu, IDM_WINDOW, MF_UNCHECKED);                  CheckMenuItem(hmenu, IDM_WINDOW, MF_UNCHECKED);
                 CheckMenuItem(hmenu, IDM_FULLSCREEN, MF_CHECKED);                  CheckMenuItem(hmenu, IDM_FULLSCREEN, MF_CHECKED);
                   ddraw.menudisp = 0;
                   ddraw.menusize = GetSystemMetrics(SM_CYMENU);
                   np2class_enablemenu(g_hWndMain, FALSE);
         }          }
         else {          else {
                 scrnmng.flag = SCRNFLAG_HAVEEXTEND;                  scrnmng.flag = SCRNFLAG_HAVEEXTEND;
                 winstyle |= WS_CAPTION | WS_OVERLAPPED | WS_SYSMENU;                  winstyle |= WS_SYSMENU;
                   if (np2oscfg.thickframe) {
                           winstyle |= WS_THICKFRAME;
                   }
                   if (np2oscfg.wintype < 2) {
                           winstyle |= WS_CAPTION;
                   }
                 winstyle &= ~WS_POPUP;                  winstyle &= ~WS_POPUP;
                 winstyleex &= ~WS_EX_TOPMOST;                  winstyleex &= ~WS_EX_TOPMOST;
                 CheckMenuItem(hmenu, IDM_WINDOW, MF_CHECKED);                  CheckMenuItem(hmenu, IDM_WINDOW, MF_CHECKED);
                 CheckMenuItem(hmenu, IDM_FULLSCREEN, MF_UNCHECKED);                  CheckMenuItem(hmenu, IDM_FULLSCREEN, MF_UNCHECKED);
         }          }
         SetWindowLong(hWndMain, GWL_STYLE, winstyle);          SetWindowLong(g_hWndMain, GWL_STYLE, winstyle);
         SetWindowLong(hWndMain, GWL_EXSTYLE, winstyleex);          SetWindowLong(g_hWndMain, GWL_EXSTYLE, winstyleex);
   
         if (DirectDrawCreate(NULL, &ddraw.ddraw1, NULL) != DD_OK) {          if (DirectDrawCreate(NULL, &ddraw.ddraw1, NULL) != DD_OK) {
                 goto scre_err;                  goto scre_err;
Line 340  BOOL scrnmng_create(BYTE scrnmode) { Line 481  BOOL scrnmng_create(BYTE scrnmode) {
         ddraw.ddraw2 = ddraw2;          ddraw.ddraw2 = ddraw2;
   
         if (scrnmode & SCRNMODE_FULLSCREEN) {          if (scrnmode & SCRNMODE_FULLSCREEN) {
   #if defined(SUPPORT_DCLOCK)
                 dclock_init();                  dclock_init();
                 ddraw2->SetCooperativeLevel(hWndMain,  #endif
                                         DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT);                  ddraw2->SetCooperativeLevel(g_hWndMain,
                 height = (np2oscfg.force400)?400:480;                                                                                  DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
                 bitcolor = (scrnmode & SCRNMODE_HIGHCOLOR)?16:8;                  width = np2oscfg.fscrn_cx;
                 if (ddraw2->SetDisplayMode(640, height, bitcolor, 0, 0) != DD_OK) {                  height = np2oscfg.fscrn_cy;
                   bitcolor = np2oscfg.fscrnbpp;
                   fscrnmod = np2oscfg.fscrnmod;
                   if ((fscrnmod & (FSCRNMOD_SAMERES | FSCRNMOD_SAMEBPP)) &&
                           (EnumDisplaySettings(NULL, ENUM_REGISTRY_SETTINGS, &devmode))) {
                           if (fscrnmod & FSCRNMOD_SAMERES) {
                                   width = devmode.dmPelsWidth;
                                   height = devmode.dmPelsHeight;
                           }
                           if (fscrnmod & FSCRNMOD_SAMEBPP) {
                                   bitcolor = devmode.dmBitsPerPel;
                           }
                   }
                   if ((width == 0) || (height == 0)) {
                           width = 640;
                           height = (np2oscfg.force400)?400:480;
                   }
                   if (bitcolor == 0) {
   #if !defined(SUPPORT_PC9821)
                           bitcolor = (scrnmode & SCRNMODE_HIGHCOLOR)?16:8;
   #else
                           bitcolor = 16;
   #endif
                   }
                   if (ddraw2->SetDisplayMode(width, height, bitcolor, 0, 0) != DD_OK) {
                         goto scre_err;                          goto scre_err;
                 }                  }
                 ddraw2->CreateClipper(0, &ddraw.clipper, NULL);                  ddraw2->CreateClipper(0, &ddraw.clipper, NULL);
                 ddraw.clipper->SetHWnd(0, hWndMain);                  ddraw.clipper->SetHWnd(0, g_hWndMain);
   
                 ZeroMemory(&ddsd, sizeof(ddsd));                  ZeroMemory(&ddsd, sizeof(ddsd));
                 ddsd.dwSize = sizeof(ddsd);                  ddsd.dwSize = sizeof(ddsd);
Line 371  BOOL scrnmng_create(BYTE scrnmode) { Line 537  BOOL scrnmng_create(BYTE scrnmode) {
                 ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;                  ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
                 ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;                  ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
                 ddsd.dwWidth = 640;                  ddsd.dwWidth = 640;
                 ddsd.dwHeight = height;                  ddsd.dwHeight = 480;
                 if (ddraw2->CreateSurface(&ddsd, &ddraw.backsurf, NULL) != DD_OK) {                  if (ddraw2->CreateSurface(&ddsd, &ddraw.backsurf, NULL) != DD_OK) {
                         goto scre_err;                          goto scre_err;
                 }                  }
                 if (bitcolor == 8) {                  if (bitcolor == 8) {
                         paletteinit();                          paletteinit();
                         dclock_init8();                  }
                   else if (bitcolor == 16) {
                           make16mask(ddpf.dwBBitMask, ddpf.dwRBitMask, ddpf.dwGBitMask);
                   }
                   else if (bitcolor == 24) {
                   }
                   else if (bitcolor == 32) {
                 }                  }
                 else {                  else {
                         make16mask(ddpf.dwBBitMask, ddpf.dwRBitMask,                          goto scre_err;
                                                                                                                 ddpf.dwGBitMask);  
                         dclock_init16();  
                 }                  }
   #if defined(SUPPORT_DCLOCK)
                   dclock_palset(bitcolor);
                 ZeroMemory(&ddsd, sizeof(ddsd));                  ZeroMemory(&ddsd, sizeof(ddsd));
                 ddsd.dwSize = sizeof(ddsd);                  ddsd.dwSize = sizeof(ddsd);
                 ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;                  ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
                 ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;                  ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
                 ddsd.dwWidth = DCLOCK_X;                  ddsd.dwWidth = DCLOCK_WIDTH;
                 ddsd.dwHeight = DCLOCK_Y;                  ddsd.dwHeight = DCLOCK_HEIGHT;
                 ddraw2->CreateSurface(&ddsd, &ddraw.clocksurf, NULL);                  ddraw2->CreateSurface(&ddsd, &ddraw.clocksurf, NULL);
                 dclock_reset();                  dclock_reset();
   #endif
         }          }
         else {          else {
                 ddraw2->SetCooperativeLevel(hWndMain, DDSCL_NORMAL);                  ddraw2->SetCooperativeLevel(g_hWndMain, DDSCL_NORMAL);
   
                 ZeroMemory(&ddsd, sizeof(ddsd));                  ZeroMemory(&ddsd, sizeof(ddsd));
                 ddsd.dwSize = sizeof(ddsd);                  ddsd.dwSize = sizeof(ddsd);
Line 406  BOOL scrnmng_create(BYTE scrnmode) { Line 578  BOOL scrnmng_create(BYTE scrnmode) {
                 }                  }
   
                 ddraw2->CreateClipper(0, &ddraw.clipper, NULL);                  ddraw2->CreateClipper(0, &ddraw.clipper, NULL);
                 ddraw.clipper->SetHWnd(0, hWndMain);                  ddraw.clipper->SetHWnd(0, g_hWndMain);
                 ddraw.primsurf->SetClipper(ddraw.clipper);                  ddraw.primsurf->SetClipper(ddraw.clipper);
   
                 ZeroMemory(&ddpf, sizeof(ddpf));                  ZeroMemory(&ddpf, sizeof(ddpf));
Line 420  BOOL scrnmng_create(BYTE scrnmode) { Line 592  BOOL scrnmng_create(BYTE scrnmode) {
                 ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;                  ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
                 ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;                  ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
                 if (!(scrnmode & SCRNMODE_ROTATE)) {                  if (!(scrnmode & SCRNMODE_ROTATE)) {
                         ddsd.dwWidth = 641;                          ddsd.dwWidth = 640 + 1;
                         ddsd.dwHeight = 480;                          ddsd.dwHeight = 480;
                 }                  }
                 else {                  else {
                         ddsd.dwWidth = 480;                          ddsd.dwWidth = 480;
                         ddsd.dwHeight = 641;                          ddsd.dwHeight = 640 + 1;
                 }                  }
                   width = 640;
                 height = 480;                  height = 480;
   
                 if (ddraw2->CreateSurface(&ddsd, &ddraw.backsurf, NULL) != DD_OK) {                  if (ddraw2->CreateSurface(&ddsd, &ddraw.backsurf, NULL) != DD_OK) {
Line 448  BOOL scrnmng_create(BYTE scrnmode) { Line 621  BOOL scrnmng_create(BYTE scrnmode) {
                 }                  }
                 ddraw.extend = 1;                  ddraw.extend = 1;
         }          }
         scrnmng.bpp = (BYTE)bitcolor;          scrnmng.bpp = (UINT8)bitcolor;
         scrnsurf.bpp = bitcolor;          scrnsurf.bpp = bitcolor;
         ddraw.scrnmode = scrnmode;          ddraw.scrnmode = scrnmode;
         ddraw.width = 640;          ddraw.width = width;
         ddraw.height = height;          ddraw.height = height;
         ddraw.cliping = 0;          ddraw.cliping = 0;
         renewalclientsize();          renewalclientsize(FALSE);
   //      screenupdate = 3;                                       // update!
         return(SUCCESS);          return(SUCCESS);
   
 scre_err:  scre_err:
Line 464  scre_err: Line 638  scre_err:
   
 void scrnmng_destroy(void) {  void scrnmng_destroy(void) {
   
           if (scrnmng.flag & SCRNFLAG_FULLSCREEN) {
                   np2class_enablemenu(g_hWndMain, (!np2oscfg.wintype));
           }
   #if defined(SUPPORT_DCLOCK)
         if (ddraw.clocksurf) {          if (ddraw.clocksurf) {
                 ddraw.clocksurf->Release();                  ddraw.clocksurf->Release();
                   ddraw.clocksurf = NULL;
         }          }
   #endif
         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(g_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 507  RGB16 scrnmng_makepal16(RGB32 pal32) { Line 693  RGB16 scrnmng_makepal16(RGB32 pal32) {
                                                 (pal.p.r << ddraw.l16r) + (pal.p.b >> ddraw.r16b)));                                                  (pal.p.r << ddraw.l16r) + (pal.p.b >> ddraw.r16b)));
 }  }
   
   void scrnmng_fullscrnmenu(int y) {
   
           UINT8   menudisp;
   
           if (scrnmng.flag & SCRNFLAG_FULLSCREEN) {
                   menudisp = ((y >= 0) && (y < ddraw.menusize))?1:0;
                   if (ddraw.menudisp != menudisp) {
                           ddraw.menudisp = menudisp;
                           if (menudisp == 1) {
                                   np2class_enablemenu(g_hWndMain, TRUE);
                           }
                           else {
                                   np2class_enablemenu(g_hWndMain, FALSE);
                                   clearoutfullscreen();
                           }
                   }
           }
   }
   
 void scrnmng_topwinui(void) {  void scrnmng_topwinui(void) {
   
         mouse_running(MOUSE_STOP);          mousemng_disable(MOUSEPROC_WINUI);
         if (!ddraw.cliping++) {                                                                                 // ver0.28          if (!ddraw.cliping++) {                                                                                 // ver0.28
                 if (scrnmng.flag & SCRNFLAG_FULLSCREEN) {                  if (scrnmng.flag & SCRNFLAG_FULLSCREEN) {
                         ddraw.primsurf->SetClipper(ddraw.clipper);                          ddraw.primsurf->SetClipper(ddraw.clipper);
                 }                  }
 #ifndef __GNUC__  #ifndef __GNUC__
                 WINNLSEnableIME(hWndMain, TRUE);                  WINNLSEnableIME(g_hWndMain, TRUE);
 #endif  #endif
         }          }
 }  }
Line 524  void scrnmng_clearwinui(void) { Line 729  void scrnmng_clearwinui(void) {
   
         if ((ddraw.cliping > 0) && (!(--ddraw.cliping))) {          if ((ddraw.cliping > 0) && (!(--ddraw.cliping))) {
 #ifndef __GNUC__  #ifndef __GNUC__
                 WINNLSEnableIME(hWndMain, FALSE);                  WINNLSEnableIME(g_hWndMain, FALSE);
 #endif  #endif
                 if (scrnmng.flag & SCRNFLAG_FULLSCREEN) {                  if (scrnmng.flag & SCRNFLAG_FULLSCREEN) {
                         ddraw.primsurf->SetClipper(0);                          ddraw.primsurf->SetClipper(0);
                 }                  }
         }          }
         if (scrnmng.flag & SCRNFLAG_FULLSCREEN) {          if (scrnmng.flag & SCRNFLAG_FULLSCREEN) {
                   np2class_enablemenu(g_hWndMain, FALSE);
                 clearoutfullscreen();                  clearoutfullscreen();
                   ddraw.menudisp = 0;
         }          }
         mouse_running(MOUSE_CONT);          else {
                   if (np2oscfg.wintype) {
                           np2class_enablemenu(g_hWndMain, FALSE);
                           InvalidateRect(g_hWndMain, NULL, TRUE);
                   }
           }
           mousemng_enable(MOUSEPROC_WINUI);
 }  }
   
 void scrnmng_setwidth(int posx, int width) {  void scrnmng_setwidth(int posx, int width) {
   
         scrnstat.width = width;          scrnstat.width = width;
         renewalclientsize();          renewalclientsize(TRUE);
 }  }
   
 void scrnmng_setextend(int extend) {  void scrnmng_setextend(int extend) {
   
         scrnstat.extend = extend;          scrnstat.extend = extend;
         renewalclientsize();          scrnmng.allflash = TRUE;
           renewalclientsize(TRUE);
 }  }
   
 void scrnmng_setheight(int posy, int height) {  void scrnmng_setheight(int posy, int height) {
   
         scrnstat.height = height;          scrnstat.height = height;
         renewalclientsize();          renewalclientsize(TRUE);
 }  }
   
 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)) {
                 scrnsurf.ptr = (BYTE *)destscrn.lpSurface;                  scrnsurf.ptr = (UINT8 *)destscrn.lpSurface;
                 scrnsurf.xalign = scrnsurf.bpp >> 3;                  scrnsurf.xalign = scrnsurf.bpp >> 3;
                 scrnsurf.yalign = destscrn.lPitch;                  scrnsurf.yalign = destscrn.lPitch;
         }          }
         else if (!(ddraw.scrnmode & SCRNMODE_ROTATEDIR)) {          else if (!(ddraw.scrnmode & SCRNMODE_ROTATEDIR)) {
                 scrnsurf.ptr = (BYTE *)destscrn.lpSurface;                  scrnsurf.ptr = (UINT8 *)destscrn.lpSurface;
                 scrnsurf.ptr += (scrnsurf.width - 1) * destscrn.lPitch;                  scrnsurf.ptr += (scrnsurf.width - 1) * destscrn.lPitch;
                 scrnsurf.xalign = 0 - destscrn.lPitch;                  scrnsurf.xalign = 0 - destscrn.lPitch;
                 scrnsurf.yalign = scrnsurf.bpp >> 3;                  scrnsurf.yalign = scrnsurf.bpp >> 3;
         }          }
         else {          else {
                 scrnsurf.ptr = (BYTE *)destscrn.lpSurface;                  scrnsurf.ptr = (UINT8 *)destscrn.lpSurface;
                 scrnsurf.ptr += (scrnsurf.height - 1) * (scrnsurf.bpp >> 3);                  scrnsurf.ptr += (scrnsurf.height - 1) * (scrnsurf.bpp >> 3);
                 scrnsurf.xalign = destscrn.lPitch;                  scrnsurf.xalign = destscrn.lPitch;
                 scrnsurf.yalign = 0 - (scrnsurf.bpp >> 3);                  scrnsurf.yalign = 0 - (scrnsurf.bpp >> 3);
Line 593  void scrnmng_update(void) { Line 817  void scrnmng_update(void) {
   
         POINT   clip;          POINT   clip;
         RECT    dst;          RECT    dst;
           RECT    *rect;
           RECT    *scrn;
           HRESULT r;
   
         if (scrnmng.palchanged) {          if (scrnmng.palchanged) {
                 scrnmng.palchanged = FALSE;                  scrnmng.palchanged = FALSE;
Line 604  void scrnmng_update(void) { Line 831  void scrnmng_update(void) {
                                 scrnmng.allflash = 0;                                  scrnmng.allflash = 0;
                                 clearoutfullscreen();                                  clearoutfullscreen();
                         }                          }
                         if (ddraw.primsurf->Blt(&ddraw.scrn, ddraw.backsurf, &ddraw.rect,                          if (GetWindowLongPtr(g_hWndMain, NP2GWLP_HMENU)) {
                                                                         DDBLT_WAIT, NULL) == DDERR_SURFACELOST) {                                  rect = &ddraw.rect;
                                 ddraw.primsurf->Restore();                                  scrn = &ddraw.scrn;
                           }
                           else {
                                   rect = &ddraw.rectclip;
                                   scrn = &ddraw.scrnclip;
                           }
                           r = ddraw.primsurf->Blt(scrn, ddraw.backsurf, rect,
                                                                                                                           DDBLT_WAIT, NULL);
                           if (r == DDERR_SURFACELOST) {
                                 ddraw.backsurf->Restore();                                  ddraw.backsurf->Restore();
                                   ddraw.primsurf->Restore();
                                   ddraw.primsurf->Blt(scrn, ddraw.backsurf, rect,
                                                                                                                           DDBLT_WAIT, NULL);
                         }                          }
                 }                  }
                 else {                  else {
Line 617  void scrnmng_update(void) { Line 855  void scrnmng_update(void) {
                         }                          }
                         clip.x = 0;                          clip.x = 0;
                         clip.y = 0;                          clip.y = 0;
                         ClientToScreen(hWndMain, &clip);                          ClientToScreen(g_hWndMain, &clip);
                         dst.left = clip.x + ddraw.scrn.left;                          dst.left = clip.x + ddraw.scrn.left;
                         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);
                         }                          }
                 }                  }
         }          }
Line 638  void scrnmng_setmultiple(int multiple) { Line 879  void scrnmng_setmultiple(int multiple) {
   
         if (scrnstat.multiple != multiple) {          if (scrnstat.multiple != multiple) {
                 scrnstat.multiple = multiple;                  scrnstat.multiple = multiple;
                 renewalclientsize();                  renewalclientsize(TRUE);
         }          }
 }  }
   
 static const RECT rectclk = {0, 0, DCLOCK_X, DCLOCK_Y};  
   // ----
   
   #if defined(SUPPORT_DCLOCK)
   static const RECT rectclk = {0, 0, DCLOCK_WIDTH, DCLOCK_HEIGHT};
   
   BOOL scrnmng_isdispclockclick(const POINT *pt) {
   
           if (pt->y >= (ddraw.height - DCLOCK_HEIGHT)) {
                   return(TRUE);
           }
           else {
                   return(FALSE);
           }
   }
   
 void scrnmng_dispclock(void) {  void scrnmng_dispclock(void) {
   
         DDSURFACEDESC   dest;          DDSURFACEDESC   dest;
   const RECT                      *scrn;
                                                                                                                                 // ver0.26                                                                                                                                  // ver0.26
         if ((ddraw.clocksurf) &&          if (!ddraw.clocksurf) {
                 (ddraw.scrn.top >= DCLOCK_Y) && (dclock_disp())) {                  return;
                 dclock_make();          }
                 ZeroMemory(&dest, sizeof(dest));          if (!dclock_disp()) {
                 dest.dwSize = sizeof(dest);                  return;
                 if (ddraw.clocksurf->Lock(NULL, &dest, DDLOCK_WAIT, NULL) == DD_OK) {          }
                         if (scrnmng.bpp == 8) {          if (GetWindowLongPtr(g_hWndMain, NP2GWLP_HMENU)) {
                                 dclock_out8(dest.lpSurface, dest.lPitch);                  scrn = &ddraw.scrn;
                         }          }
                         else {          else {
                                 dclock_out16(dest.lpSurface, dest.lPitch);                  scrn = &ddraw.scrnclip;
                         }          }
                         ddraw.clocksurf->Unlock(NULL);          if ((scrn->bottom + DCLOCK_HEIGHT) > ddraw.height) {
                   return;
           }
           dclock_make();
           ZeroMemory(&dest, sizeof(dest));
           dest.dwSize = sizeof(dest);
           if (ddraw.clocksurf->Lock(NULL, &dest, DDLOCK_WAIT, NULL) == DD_OK) {
                   if (scrnmng.bpp == 8) {
                           dclock_out8(dest.lpSurface, dest.lPitch);
                   }
                   else if (scrnmng.bpp == 16) {
                           dclock_out16(dest.lpSurface, dest.lPitch);
                   }
                   else if (scrnmng.bpp == 24) {
                           dclock_out24(dest.lpSurface, dest.lPitch);
                 }                  }
                 if (ddraw.primsurf->BltFast(640 - DCLOCK_X - 4,                  else if (scrnmng.bpp == 32) {
                                                                         ddraw.height - DCLOCK_Y,                           dclock_out32(dest.lpSurface, dest.lPitch);
                   }
                   ddraw.clocksurf->Unlock(NULL);
           }
           if (ddraw.primsurf->BltFast(ddraw.width - DCLOCK_WIDTH - 4,
                                                                           ddraw.height - DCLOCK_HEIGHT,
                                                                         ddraw.clocksurf, (RECT *)&rectclk,                                                                          ddraw.clocksurf, (RECT *)&rectclk,
                                                                         DDBLTFAST_WAIT) == DDERR_SURFACELOST) {                                                                          DDBLTFAST_WAIT) == DDERR_SURFACELOST) {
                         ddraw.primsurf->Restore();                  ddraw.primsurf->Restore();
                         ddraw.clocksurf->Restore();                  ddraw.clocksurf->Restore();
                 }          }
                 dclock_cntdown(np2oscfg.DRAW_SKIP);          dclock_cntdown(np2oscfg.DRAW_SKIP);
   }
   #endif
   
   
   // ----
   
   typedef struct {
           int             bx;
           int             by;
           int             cx;
           int             cy;
           int             mul;
   } SCRNSIZING;
   
   static  SCRNSIZING      scrnsizing;
   
   enum {
           SIZING_ADJUST   = 12
   };
   
   void scrnmng_entersizing(void) {
   
           RECT    rectwindow;
           RECT    rectclient;
           int             cx;
           int             cy;
   
           GetWindowRect(g_hWndMain, &rectwindow);
           GetClientRect(g_hWndMain, &rectclient);
           scrnsizing.bx = (np2oscfg.paddingx * 2) +
                                           (rectwindow.right - rectwindow.left) -
                                           (rectclient.right - rectclient.left);
           scrnsizing.by = (np2oscfg.paddingy * 2) +
                                           (rectwindow.bottom - rectwindow.top) -
                                           (rectclient.bottom - rectclient.top);
           cx = min(scrnstat.width, ddraw.width);
           cx = (cx + 7) >> 3;
           cy = min(scrnstat.height, ddraw.height);
           cy = (cy + 7) >> 3;
           if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) {
                   scrnsizing.cx = cx;
                   scrnsizing.cy = cy;
           }
           else {
                   scrnsizing.cx = cy;
                   scrnsizing.cy = cx;
           }
           scrnsizing.mul = scrnstat.multiple;
   }
   
   void scrnmng_sizing(UINT side, RECT *rect) {
   
           int             width;
           int             height;
           int             mul;
   
           if ((side != WMSZ_TOP) && (side != WMSZ_BOTTOM)) {
                   width = rect->right - rect->left - scrnsizing.bx + SIZING_ADJUST;
                   width /= scrnsizing.cx;
           }
           else {
                   width = 16;
           }
           if ((side != WMSZ_LEFT) && (side != WMSZ_RIGHT)) {
                   height = rect->bottom - rect->top - scrnsizing.by + SIZING_ADJUST;
                   height /= scrnsizing.cy;
           }
           else {
                   height = 16;
         }          }
           mul = min(width, height);
           if (mul <= 0) {
                   mul = 1;
           }
           else if (mul > 16) {
                   mul = 16;
           }
           width = scrnsizing.bx + (scrnsizing.cx * mul);
           height = scrnsizing.by + (scrnsizing.cy * mul);
           switch(side) {
                   case WMSZ_LEFT:
                   case WMSZ_TOPLEFT:
                   case WMSZ_BOTTOMLEFT:
                           rect->left = rect->right - width;
                           break;
   
                   case WMSZ_RIGHT:
                   case WMSZ_TOP:
                   case WMSZ_TOPRIGHT:
                   case WMSZ_BOTTOM:
                   case WMSZ_BOTTOMRIGHT:
                   default:
                           rect->right = rect->left + width;
                           break;
           }
   
           switch(side) {
                   case WMSZ_TOP:
                   case WMSZ_TOPLEFT:
                   case WMSZ_TOPRIGHT:
                           rect->top = rect->bottom - height;
                           break;
   
                   case WMSZ_LEFT:
                   case WMSZ_RIGHT:
                   case WMSZ_BOTTOM:
                   case WMSZ_BOTTOMLEFT:
                   case WMSZ_BOTTOMRIGHT:
                   default:
                           rect->bottom = rect->top + height;
                           break;
           }
           scrnsizing.mul = mul;
   }
   
   void scrnmng_exitsizing(void) {
   
           sysmenu_setscrnmul(scrnsizing.mul);
           scrnmng_setmultiple(scrnsizing.mul);
           InvalidateRect(g_hWndMain, NULL, TRUE);         // ugh
 }  }
   

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


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