Flood fill is a technique for filling an arbitrary shape with a color. The Amiga flood-fill routines can use a plain color or do the fill using a combination of the drawing mode, FgPen, BgPen and the area pattern. Flood-fill requires a TmpRas structure at least as large as the RastPort in which the flood-fill will be done. This is to ensure that even if the flood-filling operation "leaks", it will not flow outside the TmpRas and corrupt another task's memory. You use the Flood() routine for flood fill. The syntax for this routine is as follows: Flood(&rastPort, mode, x, y); The rastPort argument specifies the RastPort you want to draw into. The x and y arguments specify the starting coordinate within the BitMap. The mode argument tells how to do the fill. There are two different modes for flood fill: Outline Mode In outline mode, you specify an x,y coordinate, and from that point the system searches outward in all directions for a pixel whose color is the same as that specified in the area outline pen (AOlPen). All horizontally or vertically adjacent pixels not of that color are filled with a colored pattern or plain color. The fill stops at the outline color. Outline mode is selected when the mode argument to Flood() is set to a 0. Color Mode In color mode, you specify an x,y coordinate, and whatever pixel color is found at that position defines the area to be filled. The system searches for all horizontally or vertically adjacent pixels whose color is the same as this one and replaces them with the colored pattern or plain color. Color mode is selected when the mode argument ot Flood() is set to a one. The following sample program fragment creates and then flood-fills a triangular region. The overall effect is exactly the same as shown in the preceding area-fill example above, except that flood-fill is slightly slower than area-fill. Mode 0 (fill to a pixel that has the color of the outline pen) is used in the example. BYTE oldAPen; UWORD oldDrPt; struct RastPort *rastPort = Window->RPort; /* Save the old values of the foreground pen and draw pattern. */ oldAPen = rastPort->FgPen; oldDrPt = rastPort->LinePtrn; /* Use AreaOutline pen color for foreground pen. */ SetAPen(rastPort, rastPort->AOlPen); SetDrPt(rastPort, ~0); /* Insure a solid draw pattern. */ Move(rastPort, 0, 0); /* Using mode 0 to create a triangular shape */ Draw(rastPort, 0, 100); Draw(rastPort, 100, 100); Draw(rastPort, 0, 0); /* close it */ SetAPen(rastPort, oldAPen); /* Restore original foreground pen. */ Flood(rastPort, 0, 10, 50); /* Start Flood() inside triangle. */ SetDrPt(rastPort, oldDrPt); /* Restore original draw mode. */ This example saves the current FgPen value and draws the shape in the same color as AOlPen. Then FgPen is restored to its original color so that FgPen, BgPen, DrawMode, and AreaPtrn can be used to define the fill within the outline.