1
/* $XFree86: xc/programs/Xserver/hw/xfree86/xaa/xaaLineMisc.c,v 1.4 1998/09/27 04:43:45 dawes Exp $ */
3
#ifdef HAVE_XORG_CONFIG_H
4
#include <xorg-config.h>
9
#include "xf86_ansic.h"
10
#include "xf86_OSproc.h"
13
#include "scrnintstr.h"
21
XAASolidHorVertLineAsRects(
23
int x, int y, int len, int dir
25
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
28
(*infoRec->SubsequentSolidFillRect)(pScrn, x, y, len, 1);
30
(*infoRec->SubsequentSolidFillRect)(pScrn, x, y, 1, len);
35
XAASolidHorVertLineAsTwoPoint(
37
int x, int y, int len, int dir
39
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
44
(*infoRec->SubsequentSolidTwoPointLine)(pScrn, x, y, x + len, y, 0);
46
(*infoRec->SubsequentSolidTwoPointLine)(pScrn, x, y, x, y + len, 0);
50
XAASolidHorVertLineAsBresenham(
52
int x, int y, int len, int dir
54
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
57
(*infoRec->SubsequentSolidBresenhamLine)(
58
pScrn, x, y, len << 1, 0, -len, len, 0);
60
(*infoRec->SubsequentSolidBresenhamLine)(
61
pScrn, x, y, len << 1, 0, -len, len, YMAJOR);
66
XAAComputeDash(GCPtr pGC)
68
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
69
XAAGCPtr pGCPriv = (XAAGCPtr) (pGC)->devPrivates[XAAGCIndex].ptr;
70
Bool EvenDash = (pGC->numInDashList & 0x01) ? FALSE : TRUE;
71
int PatternLength = 0;
72
unsigned char* DashPtr = (unsigned char*)pGC->dash;
74
int count = pGC->numInDashList;
75
int shift, value, direction;
78
if(pGCPriv->DashPattern)
79
xfree(pGCPriv->DashPattern);
81
pGCPriv->DashPattern = NULL;
82
pGCPriv->DashLength = 0;
85
PatternLength += *(DashPtr++);
90
if(PatternLength > infoRec->DashPatternMaxLength)
93
if((infoRec->DashedLineFlags & LINE_PATTERN_POWER_OF_2_ONLY) &&
94
(PatternLength & (PatternLength - 1)))
97
pGCPriv->DashPattern = xcalloc((PatternLength + 31) >> 5, 4);
98
if(!pGCPriv->DashPattern) return;
99
pGCPriv->DashLength = PatternLength;
101
if(infoRec->DashedLineFlags & (LINE_PATTERN_LSBFIRST_MSBJUSTIFIED |
102
LINE_PATTERN_LSBFIRST_LSBJUSTIFIED)) {
105
DashPtr = (unsigned char*)pGC->dash;
109
DashPtr = (unsigned char*)pGC->dash + pGC->numInDashList - 1;
112
if(infoRec->DashedLineFlags & (LINE_PATTERN_LSBFIRST_MSBJUSTIFIED |
113
LINE_PATTERN_MSBFIRST_MSBJUSTIFIED))
114
shift = 32 - (PatternLength & 31);
118
ptr = (CARD32*)(pGCPriv->DashPattern);
122
count = pGC->numInDashList;
126
DashPtr += direction;
128
if(value < (32 - shift)) {
129
if(set) *ptr |= XAAShiftMasks[value] << shift;
133
if(set) *ptr |= ~0L << shift;
134
value -= (32 - shift);
145
if(infoRec->DashedLineFlags & (LINE_PATTERN_LSBFIRST_MSBJUSTIFIED |
146
LINE_PATTERN_LSBFIRST_LSBJUSTIFIED))
147
DashPtr = (unsigned char*)pGC->dash;
149
DashPtr = (unsigned char*)pGC->dash + pGC->numInDashList;