* XAspect and YAspect are now words instead of smallints, they

overflowed for resolutions > 640x480 otherwise
  * the number of pixels required for an ellipse in internalellipsedef
    is now calculated after the aspectratios have been taken into
    account
This commit is contained in:
Jonas Maebe 1999-12-26 10:33:06 +00:00
parent f13d2bd66d
commit 39d5e1c70a

View File

@ -531,10 +531,10 @@ TYPE
ModeNumber: smallint;
MaxColor: Longint; { Maximum colors on screen }
PaletteSize : Longint; { Maximum palette entry we can change }
XAspect : smallint; { XAspect ratio correction factor }
YAspect : smallint; { YAspect ratio correction factor }
MaxX: smallint; { Max-X row }
MaxY: smallint; { Max. column. }
XAspect : word; { XAspect ratio correction factor }
YAspect : word; { YAspect ratio correction factor }
MaxX: word; { Max-X row }
MaxY: word; { Max. column. }
DirectColor: boolean; { Is this a direct color mode?? }
Hardwarepages: byte; { total number of image pages - 1 }
ModeName: String[18];
@ -804,8 +804,8 @@ var
{ Should be set in InitGraph once only. }
IntCurrentMode : smallint;
IntCurrentDriver : smallint; { Currently loaded driver }
XAspect : smallint;
YAspect : smallint;
XAspect : word;
YAspect : word;
MaxX : smallint; { Maximum resolution - ABSOLUTE }
MaxY : smallint; { Maximum resolution - ABSOLUTE }
MaxColor : Longint;
@ -1353,7 +1353,7 @@ var
{$ifdef fpc}@{$endif fpc}DummyPatternLine);
InternalEllipseDefault(x,y,XRadius+1,YRadius+1,StAngle,EndAngle,
{$ifdef fpc}@{$endif fpc}DummyPatternLine);
If (XRadius <> 0) and (YRadius <> 0) Then
If (XRadius > 0) and (YRadius > 0) Then
{ draw the smallest ellipse last, since that one will use the }
{ original pl, so it could possibly draw patternlines (JM) }
Begin
@ -1364,6 +1364,11 @@ var
{ restore line thickness }
LineInfo.Thickness := OldLineWidth;
End;
{ Adjust for screen aspect ratio }
XRadius:=(longint(XRadius)*10000) div XAspect;
YRadius:=(longint(YRadius)*10000) div YAspect;
If xradius = 0 then inc(xradius);
if yradius = 0 then inc(yradius);
{ check for an ellipse with negligable x and y radius }
If (xradius <= 1) and (yradius <= 1) then
begin
@ -1376,10 +1381,6 @@ var
ArcCall.YEnd := Y;
exit;
end;
{ for restoring after PatternLine }
BackupColor := CurrentColor;
If xradius = 0 then inc(xradius);
if yradius = 0 then inc(yradius);
{ check if valid angles }
stangle := stAngle mod 361;
EndAngle := EndAngle mod 361;
@ -1398,10 +1399,9 @@ var
{ less pixels have to be calculated now }
NumOfPixels:=Round(Sqrt(3)*sqrt(sqr(XRadius)+sqr(YRadius)));
{ Calculate the angle precision required }
Delta := 90.0 / (NumOfPixels);
{ Adjust for screen aspect ratio }
XRadius:=(longint(XRadius)*10000) div XAspect;
YRadius:=(longint(YRadius)*10000) div YAspect;
Delta := 90.0 / NumOfPixels;
{ for restoring after PatternLine }
BackupColor := CurrentColor;
{ removed from inner loop to make faster }
{ store some arccall info }
ArcCall.X := X;
@ -1460,7 +1460,7 @@ var
PutPixel(xp,ym,CurrentColor);
end;
If (ynext <> ytemp) and
(xp <> xm) then
(xp - xm >= 1) then
begin
CurrentColor := FillSettings.Color;
pl(plxmyp+1,plxpyp-1,yp);
@ -1709,8 +1709,7 @@ End;
else
begin
{ number of times to go throuh the 8x8 pattern }
NrIterations := abs(x2 - x1+1) div 8;
Inc(NrIterations);
NrIterations := abs(x2 - x1+8) div 8;
For i:= 0 to NrIterations do
Begin
for j:=0 to 7 do
@ -3043,7 +3042,14 @@ SetGraphBufSize
{
$Log$
Revision 1.50 1999-12-21 17:42:17 jonas
Revision 1.51 1999-12-26 10:33:06 jonas
* XAspect and YAspect are now words instead of smallints, they
overflowed for resolutions > 640x480 otherwise
* the number of pixels required for an ellipse in internalellipsedef
is now calculated after the aspectratios have been taken into
account
Revision 1.50 1999/12/21 17:42:17 jonas
* changed vesa.inc do it doesn't try to use linear modes anymore (doesn't work
yet!!)
* fixed mode detection so the low modenumber of a driver doesn't have to be zero