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
)
42 LineWidth
= pRect
->right
- pRect
->left
;
43 DPRINT(" LineWidth: %d, top: %d, bottom: %d\n", LineWidth
, pRect
->top
, pRect
->bottom
);
44 for (y
= pRect
->top
; y
< pRect
->bottom
; y
++)
46 DibFunctionsForBitmapFormat
[pso
->iBitmapFormat
].DIB_HLine(
47 pso
, pRect
->left
, pRect
->right
, y
, iColor
);
53 EngPaintRgn(SURFOBJ
*pso
, CLIPOBJ
*ClipRegion
, ULONG iColor
, MIX Mix
,
54 BRUSHOBJ
*BrushObj
, POINTL
*BrushPoint
)
63 DPRINT("ClipRegion->iMode:%d, ClipRegion->iDComplexity: %d\n Color: %d", ClipRegion
->iMode
, ClipRegion
->iDComplexity
, iColor
);
64 switch(ClipRegion
->iMode
) {
68 /* Rectangular clipping can be handled without enumeration.
69 Note that trivial clipping is not possible, since the clipping
70 region defines the area to fill */
72 if (ClipRegion
->iDComplexity
== DC_RECT
)
74 FillSolid(pso
, &(ClipRegion
->rclBounds
), iColor
);
77 /* Enumerate all the rectangles and draw them */
78 CLIPOBJ_cEnumStart(ClipRegion
, FALSE
, CT_RECTANGLES
, CD_ANY
, 0);
81 EnumMore
= CLIPOBJ_bEnum(ClipRegion
, sizeof(RectEnum
), (PVOID
) &RectEnum
);
82 for (i
= 0; i
< RectEnum
.c
; i
++) {
83 FillSolid(pso
, RectEnum
.arcl
+ i
, iColor
);
99 EngPaint(IN SURFOBJ
*pso
,
100 IN CLIPOBJ
*ClipRegion
,
102 IN POINTL
*BrushOrigin
,
107 // FIXME: We only support a brush's solid color attribute
108 ret
= EngPaintRgn(pso
, ClipRegion
, Brush
->iSolidColor
, Mix
, Brush
, BrushOrigin
);
114 IntEngPaint(IN SURFOBJ
*pso
,
115 IN CLIPOBJ
*ClipRegion
,
117 IN POINTL
*BrushOrigin
,
120 SURFACE
*psurf
= CONTAINING_RECORD(pso
, SURFACE
, SurfObj
);
123 DPRINT("pso->iType == %d\n", pso
->iType
);
124 /* Is the surface's Paint function hooked? */
125 if((pso
->iType
!=STYPE_BITMAP
) && (psurf
->flags
& HOOK_PAINT
))
127 // Call the driver's DrvPaint
128 ret
= GDIDEVFUNCS(pso
).Paint(
129 pso
, ClipRegion
, Brush
, BrushOrigin
, Mix
);
132 return EngPaint(pso
, ClipRegion
, Brush
, BrushOrigin
, Mix
);