Diff for /np2/win9x/scrnmng.cpp between versions 1.1 and 1.6

version 1.1, 2003/10/16 17:58:47 version 1.6, 2003/10/26 12:12:12
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
 #include        <ddraw.h>  #include        <ddraw.h>
   #ifndef __GNUC__
 #include        <winnls32.h>  #include        <winnls32.h>
   #endif
 #include        "resource.h"  #include        "resource.h"
 #include        "np2.h"  #include        "np2.h"
 #include        "mousemng.h"  #include        "mousemng.h"
 #include        "scrnmng.h"  #include        "scrnmng.h"
 #include        "sysmng.h"  #include        "sysmng.h"
 #include        "pccore.h"  
 #include        "scrndraw.h"  
 #include        "palettes.h"  
 #include        "dclock.h"  #include        "dclock.h"
 #include        "menu.h"  #include        "menu.h"
   #include        "scrndraw.h"
   #include        "palettes.h"
   
   
 typedef struct {  typedef struct {
Line 30  typedef struct { Line 31  typedef struct {
         BYTE                            r16b;          BYTE                            r16b;
         BYTE                            l16r;          BYTE                            l16r;
         BYTE                            l16g;          BYTE                            l16g;
           BYTE                            menudisp;
           int                                     menusize;
           HMENU                           menuhdl;
         RECT                            scrn;          RECT                            scrn;
         RECT                            rect;          RECT                            rect;
         PALETTEENTRY            pal[256];          PALETTEENTRY            pal[256];
Line 127  static void renewalclientsize(void) { Line 131  static void renewalclientsize(void) {
         else {          else {
                 multiple = scrnstat.multiple;                  multiple = scrnstat.multiple;
                 if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) {                  if (!(ddraw.scrnmode & SCRNMODE_ROTATE)) {
                         if (np2oscfg.paddingx) {                          if ((np2oscfg.paddingx) && (multiple == 8)) {
                                 extend = min(scrnstat.extend, ddraw.extend);                                  extend = min(scrnstat.extend, ddraw.extend);
                         }                          }
                         scrnwidth = (width * multiple) >> 3;                          scrnwidth = (width * multiple) >> 3;
Line 138  static void renewalclientsize(void) { Line 142  static void renewalclientsize(void) {
                         ddraw.scrn.top = np2oscfg.paddingy;                          ddraw.scrn.top = np2oscfg.paddingy;
                 }                  }
                 else {                  else {
                         if (np2oscfg.paddingy) {                          if ((np2oscfg.paddingy) && (multiple == 8)) {
                                 extend = min(scrnstat.extend, ddraw.extend);                                  extend = min(scrnstat.extend, ddraw.extend);
                         }                          }
                         scrnwidth = (height * multiple) >> 3;                          scrnwidth = (height * multiple) >> 3;
Line 204  static void clearoutofrect(const RECT *t Line 208  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(hWndMain, &base);
           clipt.x = 0;
           clipt.y = 0;
           ClientToScreen(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 216  static void clearoutscreen(void) { Line 228  static void clearoutscreen(void) {
   
 static void clearoutfullscreen(void) {  static void clearoutfullscreen(void) {
   
         clearoutofrect(&ddraw.scrn, &ddraw.rect);          RECT    r;
   
           r.left = 0;
           r.top = (ddraw.menuhdl)?0:ddraw.menusize;
           r.right = ddraw.width;                  // (+ ddraw.extend)
           r.bottom = ddraw.height;
           clearoutofrect(&ddraw.scrn, &r);
         dclock_redraw();          dclock_redraw();
 }  }
   
Line 229  static void paletteinit(void) { Line 247  static void paletteinit(void) {
         GetSystemPaletteEntries(hdc, 0, 256, ddraw.pal);          GetSystemPaletteEntries(hdc, 0, 256, ddraw.pal);
         ReleaseDC(hWndMain, hdc);          ReleaseDC(hWndMain, hdc);
         for (i=0; i<4; i++) {          for (i=0; i<4; i++) {
                 ddraw.pal[i+START_PALORG].peBlue = dclock_pal[i].p.b;                  ddraw.pal[i+START_PALORG].peBlue = dclockpal.pal32[i].p.b;
                 ddraw.pal[i+START_PALORG].peRed = dclock_pal[i].p.r;                  ddraw.pal[i+START_PALORG].peRed = dclockpal.pal32[i].p.r;
                 ddraw.pal[i+START_PALORG].peGreen = dclock_pal[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;
         }          }
         for (i=0; i<NP2PAL_TOTAL; i++) {          for (i=0; i<NP2PAL_TOTAL; i++) {
Line 269  static void make16mask(DWORD bmask, DWOR Line 287  static void make16mask(DWORD bmask, DWOR
         ddraw.r16b = sft;          ddraw.r16b = sft;
   
         sft = 0;          sft = 0;
         while((rmask & 0xffffff0) && (sft < 32)) {          while((rmask & 0xffffff00) && (sft < 32)) {
                 rmask >>= 1;                  rmask >>= 1;
                 sft++;                  sft++;
         }          }
Line 277  static void make16mask(DWORD bmask, DWOR Line 295  static void make16mask(DWORD bmask, DWOR
         ddraw.l16r = sft;          ddraw.l16r = sft;
   
         sft = 0;          sft = 0;
         while((gmask & 0xffffff0) && (sft < 32)) {          while((gmask & 0xffffff00) && (sft < 32)) {
                 gmask >>= 1;                  gmask >>= 1;
                 sft++;                  sft++;
         }          }
Line 320  BOOL scrnmng_create(BYTE scrnmode) { Line 338  BOOL scrnmng_create(BYTE scrnmode) {
                 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);
                   ddraw.menuhdl = GetMenu(hWndMain);
                   SetMenu(hWndMain, NULL);
         }          }
         else {          else {
                 scrnmng.flag = SCRNFLAG_HAVEEXTEND;                  scrnmng.flag = SCRNFLAG_HAVEEXTEND;
Line 445  BOOL scrnmng_create(BYTE scrnmode) { Line 467  BOOL scrnmng_create(BYTE scrnmode) {
                 else {                  else {
                         goto scre_err;                          goto scre_err;
                 }                  }
                   ddraw.extend = 1;
         }          }
         scrnmng.bpp = (BYTE)bitcolor;          scrnmng.bpp = (BYTE)bitcolor;
         scrnsurf.bpp = bitcolor;          scrnsurf.bpp = bitcolor;
Line 486  void scrnmng_destroy(void) { Line 509  void scrnmng_destroy(void) {
         if (ddraw.ddraw1) {          if (ddraw.ddraw1) {
                 ddraw.ddraw1->Release();                  ddraw.ddraw1->Release();
         }          }
           scrnmng_enablemenubar();
         ZeroMemory(&ddraw, sizeof(ddraw));          ZeroMemory(&ddraw, sizeof(ddraw));
 }  }
   
Line 496  void scrnmng_querypalette(void) { Line 520  void scrnmng_querypalette(void) {
         }          }
 }  }
   
 UINT16 scrnmng_makepal16(RGB32 pal32) {  RGB16 scrnmng_makepal16(RGB32 pal32) {
   
         RGB32   pal;          RGB32   pal;
   
         pal.d = pal32.d & ddraw.pal16mask.d;          pal.d = pal32.d & ddraw.pal16mask.d;
         return((UINT16)((pal.p.g << ddraw.l16g) +          return((RGB16)((pal.p.g << ddraw.l16g) +
                                                 (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) {
   
           BYTE    menudisp;
   
           if (scrnmng.flag & SCRNFLAG_FULLSCREEN) {
                   menudisp = ((y >= 0) && (y < ddraw.menusize))?1:0;
                   if (ddraw.menudisp != menudisp) {
                           ddraw.menudisp = menudisp;
                           if (menudisp == 1) {
                                   scrnmng_enablemenubar();
                           }
                           else {
                                   scrnmng_disablemenubar();
                                   clearoutfullscreen();
                           }
                   }
           }
   }
   
 void scrnmng_topwinui(void) {  void scrnmng_topwinui(void) {
   
         mouse_running(MOUSE_STOP);          mouse_running(MOUSE_STOP);
Line 512  void scrnmng_topwinui(void) { Line 572  void scrnmng_topwinui(void) {
                 if (scrnmng.flag & SCRNFLAG_FULLSCREEN) {                  if (scrnmng.flag & SCRNFLAG_FULLSCREEN) {
                         ddraw.primsurf->SetClipper(ddraw.clipper);                          ddraw.primsurf->SetClipper(ddraw.clipper);
                 }                  }
   #ifndef __GNUC__
                 WINNLSEnableIME(hWndMain, TRUE);                  WINNLSEnableIME(hWndMain, TRUE);
   #endif
         }          }
 }  }
   
 void scrnmng_clearwinui(void) {  void scrnmng_clearwinui(void) {
   
         if ((ddraw.cliping > 0) && (!(--ddraw.cliping))) {          if ((ddraw.cliping > 0) && (!(--ddraw.cliping))) {
   #ifndef __GNUC__
                 WINNLSEnableIME(hWndMain, FALSE);                  WINNLSEnableIME(hWndMain, FALSE);
   #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) {
                   scrnmng_disablemenubar();
                 clearoutfullscreen();                  clearoutfullscreen();
                   ddraw.menudisp = 0;
         }          }
         mouse_running(MOUSE_CONT);          mouse_running(MOUSE_CONT);
 }  }
Line 628  void scrnmng_update(void) { Line 694  void scrnmng_update(void) {
   
 // ----  // ----
   
   void scrnmng_setmultiple(int multiple) {
   
           if (scrnstat.multiple != multiple) {
                   scrnstat.multiple = multiple;
                   renewalclientsize();
           }
   }
   
 static const RECT rectclk = {0, 0, DCLOCK_X, DCLOCK_Y};  static const RECT rectclk = {0, 0, DCLOCK_X, DCLOCK_Y};
   
 void scrnmng_dispclock(void) {  void scrnmng_dispclock(void) {

Removed from v.1.1  
changed lines
  Added in v.1.6


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