xserver

xserver with xephyr scale patch
git clone https://git.neptards.moe/u3shit/xserver.git
Log | Files | Refs | README | LICENSE

fbsolid.c (2217B)


      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 
     31 void
     32 fbSolid(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 }