r4493@vps: verhaegs | 2007-04-19 14:44:00 -0400
[AROS.git] / rom / graphics / rectfill.c
blobdbd34ab290cf29a971d9d2d8b07b6c1942c1c183
1 /*
2 Copyright © 1995-2001, The AROS Development Team. All rights reserved.
3 $Id$ $Log
5 Desc: Graphics function RectFill()
6 Lang: english
7 */
8 #include "graphics_intern.h"
9 #include "gfxfuncsupport.h"
10 #include <proto/oop.h>
12 /*****************************************************************************
14 NAME */
15 #include <graphics/rastport.h>
16 #include <proto/graphics.h>
18 AROS_LH5(void, RectFill,
20 /* SYNOPSIS */
21 AROS_LHA(struct RastPort *, rp, A1),
22 AROS_LHA(LONG , xMin, D0),
23 AROS_LHA(LONG , yMin, D1),
24 AROS_LHA(LONG , xMax, D2),
25 AROS_LHA(LONG , yMax, D3),
27 /* LOCATION */
28 struct GfxBase *, GfxBase, 51, Graphics)
30 /* FUNCTION
31 Fills a rectangular area with the current pens, drawing mode
32 and areafill pattern. If no areafill pattern is defined fill
33 with foreground pen.
35 INPUTS
36 rp - RastPort
37 xMin,yMin - upper left corner
38 xMax,yMax - lower right corner
40 RESULT
42 NOTES
44 EXAMPLE
46 BUGS
48 SEE ALSO
50 INTERNALS
52 HISTORY
53 29-10-95 digulla automatically created from
54 graphics_lib.fd and clib/graphics_protos.h
56 *****************************************************************************/
58 AROS_LIBFUNC_INIT
59 AROS_LIBBASE_EXT_DECL(struct GfxBase *,GfxBase)
61 FIX_GFXCOORD(xMin);
62 FIX_GFXCOORD(yMin);
63 FIX_GFXCOORD(xMax);
64 FIX_GFXCOORD(yMax);
66 if ((xMax >= xMin) && (yMax >= yMin))
68 if (rp->AreaPtrn)
70 /* When rasport has areaptrn, let BltPattern do the job */
71 BltPattern(rp, NULL, xMin, yMin, xMax, yMax, 0);
74 else if (OBTAIN_DRIVERDATA(rp, GfxBase))
76 UBYTE rp_drmd;
77 HIDDT_DrawMode drmd = 0;
78 IPTR pix;
80 /* Get drawmode */
81 rp_drmd = GetDrMd(rp);
83 OOP_GetAttr(RP_DRIVERDATA(rp)->dd_GC,
84 ((rp_drmd & INVERSVID) ? aHidd_GC_Background : aHidd_GC_Foreground),
85 &pix);
87 if (rp_drmd & JAM2)
89 drmd = vHidd_GC_DrawMode_Copy;
91 else if (rp_drmd & COMPLEMENT)
93 drmd = vHidd_GC_DrawMode_Invert;
95 else if ((rp_drmd & (~INVERSVID)) == JAM1)
97 drmd = vHidd_GC_DrawMode_Copy;
100 fillrect_pendrmd(rp, xMin, yMin, xMax, yMax, pix, drmd, GfxBase);
102 RELEASE_DRIVERDATA(rp, GfxBase);
105 } /* if ((xMax >= xMin) && (yMax >= yMin)) */
107 AROS_LIBFUNC_EXIT
109 } /* RectFill */