2 * Copyright © 1998 Keith Packard
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation, and that the name of Keith Packard not be used in
9 * advertising or publicity pertaining to distribution of the software without
10 * specific, written prior permission. Keith Packard makes no
11 * representations about the suitability of this software for any purpose. It
12 * is provided "as is" without express or implied warranty.
14 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20 * PERFORMANCE OF THIS SOFTWARE.
23 #ifdef HAVE_DIX_CONFIG_H
24 #include <dix-config.h>
30 fbZeroLine(DrawablePtr pDrawable
, GCPtr pGC
, int mode
, int npt
, DDXPointPtr ppt
)
40 dashOffset
= pGC
->dashOffset
;
45 if (mode
== CoordModePrevious
) {
49 fbSegment(pDrawable
, pGC
, x1
+ x
, y1
+ y
,
51 npt
== 1 && pGC
->capStyle
!= CapNotLast
, &dashOffset
);
58 fbZeroSegment(DrawablePtr pDrawable
, GCPtr pGC
, int nseg
, xSegment
* pSegs
)
62 Bool drawLast
= pGC
->capStyle
!= CapNotLast
;
67 dashOffset
= pGC
->dashOffset
;
68 fbSegment(pDrawable
, pGC
,
69 pSegs
->x1
+ x
, pSegs
->y1
+ y
,
70 pSegs
->x2
+ x
, pSegs
->y2
+ y
, drawLast
, &dashOffset
);
76 fbFixCoordModePrevious(int npt
, DDXPointPtr ppt
)
91 fbPolyLine(DrawablePtr pDrawable
, GCPtr pGC
, int mode
, int npt
, DDXPointPtr ppt
)
93 void (*line
) (DrawablePtr
, GCPtr
, int mode
, int npt
, DDXPointPtr ppt
);
95 if (pGC
->lineWidth
== 0) {
97 if (pGC
->fillStyle
== FillSolid
&&
98 pGC
->lineStyle
== LineSolid
&&
99 RegionNumRects(fbGetCompositeClip(pGC
)) == 1) {
100 switch (pDrawable
->bitsPerPixel
) {
117 if (pGC
->lineStyle
!= LineSolid
)
122 (*line
) (pDrawable
, pGC
, mode
, npt
, ppt
);
126 fbPolySegment(DrawablePtr pDrawable
, GCPtr pGC
, int nseg
, xSegment
* pseg
)
128 void (*seg
) (DrawablePtr pDrawable
, GCPtr pGC
, int nseg
, xSegment
* pseg
);
130 if (pGC
->lineWidth
== 0) {
132 if (pGC
->fillStyle
== FillSolid
&&
133 pGC
->lineStyle
== LineSolid
&&
134 RegionNumRects(fbGetCompositeClip(pGC
)) == 1) {
135 switch (pDrawable
->bitsPerPixel
) {
137 seg
= fbPolySegment8
;
140 seg
= fbPolySegment16
;
143 seg
= fbPolySegment24
;
146 seg
= fbPolySegment32
;
154 (*seg
) (pDrawable
, pGC
, nseg
, pseg
);