Pārlūkot izejas kodu

* setviewport was sometimes called with parameters from the previous
active mode, either directly from setgraphmode or from
setbkcolor

Jonas Maebe 25 gadi atpakaļ
vecāks
revīzija
71184303bd
2 mainītis faili ar 51 papildinājumiem un 5 dzēšanām
  1. 31 2
      rtl/inc/graph/graph.inc
  2. 20 3
      rtl/inc/graph/modes.inc

+ 31 - 2
rtl/inc/graph/graph.inc

@@ -1171,11 +1171,21 @@ Procedure SetViewPort(X1, Y1, X2, Y2: smallint; Clip: Boolean);
 Begin
   if (X1 > GetMaxX) or (X2 > GetMaxX) or (X1 > X2) or (X1 < 0) then
   Begin
+{$ifdef logging}
+    logln('invalid setviewport parameters: ('
+      +strf(x1)+','+strf(y1)+'), ('+strf(x2)+','+strf(y2)+')');
+    logln('maxx = '+strf(getmaxx)+', maxy = '+strf(getmaxy));
+{$endif logging}
     _GraphResult := grError;
     exit;
   end;
   if (Y1 > GetMaxY) or (Y2 > GetMaxY) or (Y1 > Y2) or (Y1 < 0) then
   Begin
+{$ifdef logging}
+    logln('invalid setviewport parameters: ('
+      +strf(x1)+','+strf(y1)+'), ('+strf(x2)+','+strf(y2)+')');
+    logln('maxx = '+strf(getmaxx)+', maxy = '+strf(getmaxy));
+{$endif logging}
     _GraphResult := grError;
     exit;
   end;
@@ -1756,6 +1766,9 @@ end;
      { unchanged.                                         }
      if (Pattern > UserFill) or (Color > GetMaxColor) then
       begin
+{$ifdef logging}
+           logln('invalid fillstyle parameters');
+{$endif logging}
            _GraphResult := grError;
            exit;
       end;
@@ -1777,6 +1790,9 @@ end;
    begin
      if Color > GetMaxColor then
        begin
+{$ifdef logging}
+            logln('invalid fillpattern parameters');
+{$endif logging}
             _GraphResult := grError;
             exit;
        end;
@@ -1917,7 +1933,13 @@ end;
      ViewPort: ViewportType;
    Begin
      GetViewSettings(Viewport);
+{$ifdef logging}
+      logln('calling setviewport from setbkcolor');
+{$endif logging}
      SetViewPort(0,0,MaxX,MaxY,FALSE);
+{$ifdef logging}
+      logln('calling setviewport from setbkcolor done');
+{$endif logging}
      CurrentBkColor := ColorNum;
      {ClearViewPort;}
      if not DirectColor and (ColorNum<256) then
@@ -2046,7 +2068,6 @@ end;
 
 
      CurrentColor:=white;
-     SetBkColor(Black);
 
 
      ClipPixels := TRUE;
@@ -2055,10 +2076,13 @@ end;
      StartYViewPort := 0;
      ViewWidth := MaxX;
      ViewHeight := MaxY;
+
      { Reset CP }
      CurrentX := 0;
      CurrentY := 0;
 
+     SetBkColor(Black);
+
      { normal write mode }
      CurrentWriteMode := CopyPut;
 
@@ -2406,7 +2430,12 @@ begin
 end;
 {
   $Log$
-  Revision 1.36  2000-06-18 18:41:18  peter
+  Revision 1.37  2000-06-23 19:56:37  jonas
+    * setviewport was sometimes called with parameters from the previous
+      active mode, either directly from setgraphmode or from
+      setbkcolor
+
+  Revision 1.36  2000/06/18 18:41:18  peter
     * detectmode between ifdef
 
   Revision 1.35  2000/06/18 08:11:53  jonas

+ 20 - 3
rtl/inc/graph/modes.inc

@@ -92,6 +92,9 @@ end;
       { Yes, add the mode }
       if not assigned(newModeList.modeinfo[driverNr]) then
         begin
+{$ifdef logging}
+          logln('Adding resolution '+strf(modenr)+' for drivernr '+strf(drivernr));
+{$endif logging}
           new(newModeList.modeinfo[driverNr]);
           newModeList.modeinfo[driverNr]^ := mode;
           with newModeList.modeinfo[driverNr]^ do
@@ -122,6 +125,9 @@ end;
              (list^.maxx = mode.maxx) and
              (list^.maxy = mode.maxy) then
             begin
+{$ifdef logging}
+              logln('replacing resolution '+strf(modenr)+' for drivernr '+strf(drivernr));
+{$endif logging}
               { save/restore next, drivernr and drivermode in list }
               driverNr := list^.driverNumber;
               modeNr := list^.modeNumber;
@@ -138,6 +144,9 @@ end;
               inc(newModeList.loHiModeNr[driverNr].hi);
               newLst^ := mode;
               newLst^.driverNumber := driverNr;
+{$ifdef logging}
+              logln('Adding resolution '+strf(modenr)+' for drivernr '+strf(drivernr));
+{$endif logging}
               if assigned(list) then
                 newLst^.next := list^.next
               else
@@ -396,7 +405,7 @@ end;
            exit;
          end;
        {$ifdef logging}
-       LogLn('GetModeRange : Mode 0 found');
+       LogLn('GetModeRange : Mode '+strf(lomode)+' found');
        {$endif}
        { now it exists... find highest available mode... }
        hiMode := -32767;
@@ -514,6 +523,9 @@ end;
       YAspect := modeinfo^.YAspect;
       MaxX := modeinfo^.MaxX;
       MaxY := modeinfo^.MaxY;
+{$ifdef logging}
+      logln('maxx = '+strf(maxx)+', maxy = '+strf(maxy));
+{$endif logging}
       HardwarePages := modeInfo^.HardwarePages;
       MaxColor := modeinfo^.MaxColor;
       PaletteSize := modeinfo^.PaletteSize;
@@ -538,8 +550,8 @@ end;
       { those variables.                            }
       SetActivePage(0);
       SetVisualPage(0);
-      GraphDefaults;
       SetViewPort(0,0,MaxX,MaxY,TRUE);
+      GraphDefaults;
     end;
 
     procedure RestoreCrtMode;
@@ -559,7 +571,12 @@ end;
 
 {
 $Log$
-Revision 1.26  2000-06-22 18:36:19  peter
+Revision 1.27  2000-06-23 19:56:38  jonas
+  * setviewport was sometimes called with parameters from the previous
+    active mode, either directly from setgraphmode or from
+    setbkcolor
+
+Revision 1.26  2000/06/22 18:36:19  peter
   * removed notes
 
 Revision 1.25  2000/06/19 01:18:49  carl