mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-21 15:09:14 +02:00
* floodfill uses scanline data from previous loop if line is adjacent
This commit is contained in:
parent
c8541db634
commit
3e14491ff2
@ -83,7 +83,7 @@ type
|
|||||||
var t : graph_int;
|
var t : graph_int;
|
||||||
begin
|
begin
|
||||||
t:=Trunc(x);
|
t:=Trunc(x);
|
||||||
If (x > 0) and (frac(x)>0) then inc(t);
|
If (frac(x)>0) then inc(t);
|
||||||
ceil := t;
|
ceil := t;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -92,21 +92,21 @@ type
|
|||||||
var t : graph_int;
|
var t : graph_int;
|
||||||
begin
|
begin
|
||||||
t:=Trunc(x);
|
t:=Trunc(x);
|
||||||
If (x < 0) and (frac(x)>0) then dec(t);
|
If (frac(x)<0) then dec(t);
|
||||||
floor := t;
|
floor := t;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ simple descriptive name }
|
{ simple descriptive name }
|
||||||
function max(a, b : graph_int) : graph_int;
|
function max(a, b : graph_int) : graph_int;
|
||||||
begin
|
begin
|
||||||
if (a > b) then max := a
|
if (a >= b) then max := a
|
||||||
else max := b;
|
else max := b;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ here too }
|
{ here too }
|
||||||
function min(a, b : graph_int) : graph_int;
|
function min(a, b : graph_int) : graph_int;
|
||||||
begin
|
begin
|
||||||
if (a < b) then min := a
|
if (a <= b) then min := a
|
||||||
else min := b;
|
else min := b;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -249,8 +249,8 @@ begin
|
|||||||
xr := trunc(activetable^[j+1].x-0.5);
|
xr := trunc(activetable^[j+1].x-0.5);
|
||||||
if frac(activetable^[j+1].x-0.5)<0 then dec(xr);
|
if frac(activetable^[j+1].x-0.5)<0 then dec(xr);
|
||||||
|
|
||||||
if (xl <= xr) then
|
if (xl < xr) then
|
||||||
PatternLine(xl,xr,y);
|
PatternLine(xl,xr,y);
|
||||||
{ line(xl, y, xr+1, y);}
|
{ line(xl, y, xr+1, y);}
|
||||||
{ increment both edges' coordinates }
|
{ increment both edges' coordinates }
|
||||||
with activetable^[j] do begin
|
with activetable^[j] do begin
|
||||||
@ -304,8 +304,6 @@ var
|
|||||||
{ need to draw. Doesn't add the point if there is a }
|
{ need to draw. Doesn't add the point if there is a }
|
||||||
{ buffer overflow. }
|
{ buffer overflow. }
|
||||||
{********************************************************}
|
{********************************************************}
|
||||||
var
|
|
||||||
i: integer;
|
|
||||||
Begin
|
Begin
|
||||||
If Buffer.WordIndex<(StdBufferSize DIV 2)-3 then
|
If Buffer.WordIndex<(StdBufferSize DIV 2)-3 then
|
||||||
Begin
|
Begin
|
||||||
@ -401,13 +399,16 @@ var
|
|||||||
{ coordinates are local/viewport relative. }
|
{ coordinates are local/viewport relative. }
|
||||||
{********************************************************}
|
{********************************************************}
|
||||||
Var
|
Var
|
||||||
|
stemp: PWordArray;
|
||||||
Beginx : Integer;
|
Beginx : Integer;
|
||||||
d, e, a : Byte;
|
d, e, a : Byte;
|
||||||
Cont : Boolean;
|
Cont : Boolean;
|
||||||
BackupColor : Word;
|
BackupColor : Word;
|
||||||
x1, x2: integer;
|
x1, x2, prevy: integer;
|
||||||
Index : Integer;
|
Index : Integer;
|
||||||
Begin
|
Begin
|
||||||
|
{ init prevy }
|
||||||
|
prevy := 32767;
|
||||||
{ Save current drawing color }
|
{ Save current drawing color }
|
||||||
BackupColor := CurrentColor;
|
BackupColor := CurrentColor;
|
||||||
CurrentColor := FillSettings.Color;
|
CurrentColor := FillSettings.Color;
|
||||||
@ -433,12 +434,28 @@ var
|
|||||||
Begin
|
Begin
|
||||||
PopPoint (x,y);
|
PopPoint (x,y);
|
||||||
{ Get the complete lines for the following }
|
{ Get the complete lines for the following }
|
||||||
|
If (prevy - y = 1) then
|
||||||
|
{ previous line was one below the new one, so the previous s2 }
|
||||||
|
{ = new s1 }
|
||||||
|
Begin
|
||||||
|
stemp := s1;
|
||||||
|
s1 := s2;
|
||||||
|
s2 := stemp;
|
||||||
|
End
|
||||||
|
Else If (y - prevy = 1) then
|
||||||
|
{ previous line was one above the new one, so the previous s3 }
|
||||||
|
{ = new s1 }
|
||||||
|
Begin
|
||||||
|
stemp := s1;
|
||||||
|
s1 := s3;
|
||||||
|
s3 := stemp;
|
||||||
|
End
|
||||||
|
Else GetScanline (y,s1^);
|
||||||
GetScanline (y-1,s2^);
|
GetScanline (y-1,s2^);
|
||||||
GetScanline (y,s1^);
|
|
||||||
GetScanline (y+1,s3^);
|
GetScanline (y+1,s3^);
|
||||||
|
prevy := y;
|
||||||
{ check the current scan line }
|
{ check the current scan line }
|
||||||
While (s1^[x]<>Border) And (x<ViewWidth) Do Inc (x);
|
While (s1^[x]<>Border) And (x<=ViewWidth) Do Inc (x);
|
||||||
d:=0;
|
d:=0;
|
||||||
e:=0;
|
e:=0;
|
||||||
dec(x);
|
dec(x);
|
||||||
@ -492,7 +509,10 @@ var
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.8 1999-09-18 22:21:09 jonas
|
Revision 1.9 1999-09-24 14:23:08 jonas
|
||||||
|
* floodfill uses scanline data from previous loop if line is adjacent
|
||||||
|
|
||||||
|
Revision 1.8 1999/09/18 22:21:09 jonas
|
||||||
+ hlinevesa256 and vlinevesa256
|
+ hlinevesa256 and vlinevesa256
|
||||||
+ support for not/xor/or/andput in vesamodes with 32k/64k colors
|
+ support for not/xor/or/andput in vesamodes with 32k/64k colors
|
||||||
* lots of changes to avoid warnings under FPC
|
* lots of changes to avoid warnings under FPC
|
||||||
|
Loading…
Reference in New Issue
Block a user