xserver

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

fbgetsp.c (2265B)


      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 #ifdef HAVE_DIX_CONFIG_H
     24 #include <dix-config.h>
     25 #endif
     26 
     27 #include "fb.h"
     28 
     29 void
     30 fbGetSpans(DrawablePtr pDrawable,
     31            int wMax,
     32            DDXPointPtr ppt, int *pwidth, int nspans, char *pchardstStart)
     33 {
     34     FbBits *src, *dst;
     35     FbStride srcStride;
     36     int srcBpp;
     37     int srcXoff, srcYoff;
     38     int xoff;
     39 
     40     /*
     41      * XFree86 DDX empties the root borderClip when the VT is
     42      * switched away; this checks for that case
     43      */
     44     if (!fbDrawableEnabled(pDrawable))
     45         return;
     46 
     47     fbGetDrawable(pDrawable, src, srcStride, srcBpp, srcXoff, srcYoff);
     48 
     49     while (nspans--) {
     50         xoff = (int) (((long) pchardstStart) & (FB_MASK >> 3));
     51         dst = (FbBits *) (pchardstStart - xoff);
     52         xoff <<= 3;
     53         fbBlt(src + (ppt->y + srcYoff) * srcStride, srcStride,
     54               (ppt->x + srcXoff) * srcBpp,
     55               dst,
     56               1,
     57               xoff,
     58               *pwidth * srcBpp, 1, GXcopy, FB_ALLONES, srcBpp, FALSE, FALSE);
     59         pchardstStart += PixmapBytePad(*pwidth, pDrawable->depth);
     60         ppt++;
     61         pwidth++;
     62     }
     63 
     64     fbFinishAccess(pDrawable);
     65 }