]> git.sesse.net Git - rdpsrv/blobdiff - Xserver/programs/Xserver/cfb/cfbigblt8.c
Import X server from vnc-3.3.7.
[rdpsrv] / Xserver / programs / Xserver / cfb / cfbigblt8.c
diff --git a/Xserver/programs/Xserver/cfb/cfbigblt8.c b/Xserver/programs/Xserver/cfb/cfbigblt8.c
new file mode 100644 (file)
index 0000000..db24781
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * $XConsortium: cfbigblt8.c,v 1.9 94/04/17 20:28:52 dpw Exp $
+ *
+Copyright (c) 1990  X Consortium
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the X Consortium shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the X Consortium.
+ *
+ * Author:  Keith Packard, MIT X Consortium
+ */
+
+#include       "X.h"
+#include       "Xmd.h"
+#include       "Xproto.h"
+#include       "cfb.h"
+#include       "fontstruct.h"
+#include       "dixfontstr.h"
+#include       "gcstruct.h"
+#include       "windowstr.h"
+#include       "scrnintstr.h"
+#include       "pixmapstr.h"
+#include       "regionstr.h"
+#include       "cfbmskbits.h"
+#include       "cfb8bit.h"
+
+void
+cfbImageGlyphBlt8 (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase)
+    DrawablePtr            pDrawable;
+    GCPtr          pGC;
+    int                    x, y;
+    unsigned int    nglyph;
+    CharInfoPtr            *ppci;
+    pointer        pglyphBase;
+{
+    ExtentInfoRec info;                /* used by QueryGlyphExtents() */
+    xRectangle backrect;
+    int                fillStyle;
+    int                alu;
+    int                fgPixel;
+    int                rop;
+    int                xor;
+    int                and;
+    int                pm;
+    cfbPrivGC      *priv;
+
+    QueryGlyphExtents(pGC->font, ppci, (unsigned long)nglyph, &info);
+
+    if (info.overallWidth >= 0)
+    {
+       backrect.x = x;
+       backrect.width = info.overallWidth;
+    }
+    else
+    {
+       backrect.x = x + info.overallWidth;
+       backrect.width = -info.overallWidth;
+    }
+    backrect.y = y - FONTASCENT(pGC->font);
+    backrect.height = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font);
+
+    priv = cfbGetGCPrivate(pGC);
+
+    /* this code cheats by knowing that ValidateGC isn't
+     * necessary for PolyFillRect
+     */
+
+    fgPixel = pGC->fgPixel;
+
+    pGC->fgPixel = pGC->bgPixel;
+    priv->xor = PFILL(pGC->bgPixel);
+
+    (*pGC->ops->PolyFillRect) (pDrawable, pGC, 1, &backrect);
+
+    pGC->fgPixel = fgPixel;
+
+    priv->xor = PFILL(pGC->fgPixel);
+
+    (*pGC->ops->PolyGlyphBlt) (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
+    
+}