2 * ReactOS W32 Subsystem
3 * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 * COPYRIGHT: See COPYING in the top level directory
22 * PROJECT: ReactOS kernel
23 * PURPOSE: GDI Driver Paint Functions
24 * FILE: subsys/win32k/eng/paint.c
25 * PROGRAMER: Jason Filby
35 BOOL APIENTRY
FillSolid(SURFOBJ
*pso
, PRECTL pRect
, ULONG iColor
)
43 psurf
= CONTAINING_RECORD(pso
, SURFACE
, SurfObj
);
44 LineWidth
= pRect
->right
- pRect
->left
;
45 DPRINT(" LineWidth: %d, top: %d, bottom: %d\n", LineWidth
, pRect
->top
, pRect
->bottom
);
46 for (y
= pRect
->top
; y
< pRect
->bottom
; y
++)
48 DibFunctionsForBitmapFormat
[pso
->iBitmapFormat
].DIB_HLine(
49 pso
, pRect
->left
, pRect
->right
, y
, iColor
);
55 EngPaintRgn(SURFOBJ
*pso
, CLIPOBJ
*ClipRegion
, ULONG iColor
, MIX Mix
,
56 BRUSHOBJ
*BrushObj
, POINTL
*BrushPoint
)
65 DPRINT("ClipRegion->iMode:%d, ClipRegion->iDComplexity: %d\n Color: %d", ClipRegion
->iMode
, ClipRegion
->iDComplexity
, iColor
);
66 switch(ClipRegion
->iMode
) {
70 /* Rectangular clipping can be handled without enumeration.
71 Note that trivial clipping is not possible, since the clipping
72 region defines the area to fill */
74 if (ClipRegion
->iDComplexity
== DC_RECT
)
76 FillSolid(pso
, &(ClipRegion
->rclBounds
), iColor
);
79 /* Enumerate all the rectangles and draw them */
80 CLIPOBJ_cEnumStart(ClipRegion
, FALSE
, CT_RECTANGLES
, CD_ANY
, 0);
83 EnumMore
= CLIPOBJ_bEnum(ClipRegion
, sizeof(RectEnum
), (PVOID
) &RectEnum
);
84 for (i
= 0; i
< RectEnum
.c
; i
++) {
85 FillSolid(pso
, RectEnum
.arcl
+ i
, iColor
);
101 EngPaint(IN SURFOBJ
*pso
,
102 IN CLIPOBJ
*ClipRegion
,
104 IN POINTL
*BrushOrigin
,
109 // FIXME: We only support a brush's solid color attribute
110 ret
= EngPaintRgn(pso
, ClipRegion
, Brush
->iSolidColor
, Mix
, Brush
, BrushOrigin
);
116 IntEngPaint(IN SURFOBJ
*pso
,
117 IN CLIPOBJ
*ClipRegion
,
119 IN POINTL
*BrushOrigin
,
122 SURFACE
*psurf
= CONTAINING_RECORD(pso
, SURFACE
, SurfObj
);
125 DPRINT("pso->iType == %d\n", pso
->iType
);
126 /* Is the surface's Paint function hooked? */
127 if((pso
->iType
!=STYPE_BITMAP
) && (psurf
->flHooks
& HOOK_PAINT
))
129 // Call the driver's DrvPaint
130 ret
= GDIDEVFUNCS(pso
).Paint(
131 pso
, ClipRegion
, Brush
, BrushOrigin
, Mix
);
134 return EngPaint(pso
, ClipRegion
, Brush
, BrushOrigin
, Mix
);