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

version 1.8, 2003/11/01 22:23:04 version 1.9, 2003/11/04 15:44:59
Line 10 Line 10
 #include        "sysmng.h"  #include        "sysmng.h"
 #include        "dclock.h"  #include        "dclock.h"
 #include        "menu.h"  #include        "menu.h"
   #include        "np2class.h"
 #include        "pccore.h"  #include        "pccore.h"
 #include        "scrndraw.h"  #include        "scrndraw.h"
 #include        "palettes.h"  #include        "palettes.h"
Line 34  typedef struct { Line 35  typedef struct {
         BYTE                            l16g;          BYTE                            l16g;
         BYTE                            menudisp;          BYTE                            menudisp;
         int                                     menusize;          int                                     menusize;
         HMENU                           menuhdl;  //      HMENU                           menuhdl;
         RECT                            scrn;          RECT                            scrn;
         RECT                            rect;          RECT                            rect;
         PALETTEENTRY            pal[256];          PALETTEENTRY            pal[256];
Line 240  static void clearoutfullscreen(void) { Line 241  static void clearoutfullscreen(void) {
         RECT    r;          RECT    r;
   
         r.left = 0;          r.left = 0;
         r.top = (ddraw.menuhdl)?0:ddraw.menusize;          r.top = (GetWindowLong(hWndMain, NP2GWL_HMENU))?0:ddraw.menusize;
         r.right = ddraw.width;                  // (+ ddraw.extend)          r.right = ddraw.width;                  // (+ ddraw.extend)
         r.bottom = ddraw.height;          r.bottom = ddraw.height;
         clearoutofrect(&ddraw.scrn, &r);          clearoutofrect(&ddraw.scrn, &r);
Line 342  BOOL scrnmng_create(BYTE scrnmode) { Line 343  BOOL scrnmng_create(BYTE scrnmode) {
         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.menudisp = 0;
                 ddraw.menusize = GetSystemMetrics(SM_CYMENU);                  ddraw.menusize = GetSystemMetrics(SM_CYMENU);
                 ddraw.menuhdl = GetMenu(hWndMain);                  np2class_enablemenu(hWndMain, FALSE);
                 SetMenu(hWndMain, NULL);  
         }          }
         else {          else {
                 scrnmng.flag = SCRNFLAG_HAVEEXTEND;                  scrnmng.flag = SCRNFLAG_HAVEEXTEND;
                 winstyle |= WS_CAPTION | WS_OVERLAPPED | WS_SYSMENU;                  winstyle |= WS_SYSMENU | 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);
Line 491  BOOL scrnmng_create(BYTE scrnmode) { Line 494  BOOL scrnmng_create(BYTE scrnmode) {
         ddraw.cliping = 0;          ddraw.cliping = 0;
         renewalclientsize();          renewalclientsize();
         screenupdate = 3;                                       // update!          screenupdate = 3;                                       // update!
           if (!(scrnmode & SCRNMODE_FULLSCREEN)) {
                   np2class_enablemenu(hWndMain, (!np2oscfg.wintype));
           }
         return(SUCCESS);          return(SUCCESS);
   
 scre_err:  scre_err:
Line 500  scre_err: Line 506  scre_err:
   
 void scrnmng_destroy(void) {  void scrnmng_destroy(void) {
   
         scrnmng_enablemenubar();  //      np2class_enablemenu(hWndMain, TRUE);
         if (ddraw.clocksurf) {          if (ddraw.clocksurf) {
                 ddraw.clocksurf->Release();                  ddraw.clocksurf->Release();
                 ddraw.clocksurf = NULL;                  ddraw.clocksurf = NULL;
Line 551  RGB16 scrnmng_makepal16(RGB32 pal32) { Line 557  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_enablemenubar(void) {  
   
         if (ddraw.menuhdl) {  
                 SetMenu(hWndMain, ddraw.menuhdl);  
                 ddraw.menuhdl = NULL;  
                 DrawMenuBar(hWndMain);  
         }  
 }  
   
 void scrnmng_disablemenubar(void) {  
   
         if (ddraw.menuhdl == NULL) {  
                 ddraw.menuhdl = GetMenu(hWndMain);  
                 SetMenu(hWndMain, NULL);  
         }  
 }  
   
 void scrnmng_fullscrnmenu(int y) {  void scrnmng_fullscrnmenu(int y) {
   
         BYTE    menudisp;          BYTE    menudisp;
Line 577  void scrnmng_fullscrnmenu(int y) { Line 566  void scrnmng_fullscrnmenu(int y) {
                 if (ddraw.menudisp != menudisp) {                  if (ddraw.menudisp != menudisp) {
                         ddraw.menudisp = menudisp;                          ddraw.menudisp = menudisp;
                         if (menudisp == 1) {                          if (menudisp == 1) {
                                 scrnmng_enablemenubar();                                  np2class_enablemenu(hWndMain, TRUE);
                         }                          }
                         else {                          else {
                                 scrnmng_disablemenubar();                                  np2class_enablemenu(hWndMain, FALSE);
                                 clearoutfullscreen();                                  clearoutfullscreen();
                         }                          }
                 }                  }
Line 589  void scrnmng_fullscrnmenu(int y) { Line 578  void scrnmng_fullscrnmenu(int y) {
   
 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);
Line 611  void scrnmng_clearwinui(void) { Line 600  void scrnmng_clearwinui(void) {
                 }                  }
         }          }
         if (scrnmng.flag & SCRNFLAG_FULLSCREEN) {          if (scrnmng.flag & SCRNFLAG_FULLSCREEN) {
                 scrnmng_disablemenubar();                  np2class_enablemenu(hWndMain, FALSE);
                 clearoutfullscreen();                  clearoutfullscreen();
                 ddraw.menudisp = 0;                  ddraw.menudisp = 0;
         }          }
         mouse_running(MOUSE_CONT);          mousemng_enable(MOUSEPROC_WINUI);
 }  }
   
 void scrnmng_setwidth(int posx, int width) {  void scrnmng_setwidth(int posx, int width) {
Line 772  void scrnmng_dispclock(void) { Line 761  void scrnmng_dispclock(void) {
         }          }
 }  }
   
   
   // ----
   
   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(hWndMain, &rectwindow);
           GetClientRect(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(hWndMain, NULL, TRUE);           // ugh
   }
   

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


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