1/* 2 * Copyright © 1998 Keith Packard 3 * 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. 13 * 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. 21 */ 22 23#define FbSelectPart(xor,o,t) xor 24 25#ifdef HAVE_DIX_CONFIG_H 26#include <dix-config.h> 27#endif 28 29#include "fb.h" 30 31void 32fbSolid(FbBits * dst, 33 FbStride dstStride, 34 int dstX, int bpp, int width, int height, FbBits and, FbBits xor) 35{ 36 FbBits startmask, endmask; 37 int n, nmiddle; 38 int startbyte, endbyte; 39 40 dst += dstX >> FB_SHIFT; 41 dstX &= FB_MASK; 42 FbMaskBitsBytes(dstX, width, and == 0, startmask, startbyte, 43 nmiddle, endmask, endbyte); 44 if (startmask) 45 dstStride--; 46 dstStride -= nmiddle; 47 while (height--) { 48 if (startmask) { 49 FbDoLeftMaskByteRRop(dst, startbyte, startmask, and, xor); 50 dst++; 51 } 52 n = nmiddle; 53 if (!and) 54 while (n--) 55 WRITE(dst++, xor); 56 else 57 while (n--) { 58 WRITE(dst, FbDoRRop(READ(dst), and, xor)); 59 dst++; 60 } 61 if (endmask) 62 FbDoRightMaskByteRRop(dst, endbyte, endmask, and, xor); 63 dst += dstStride; 64 } 65} 66