Rootless: Removed safeAlphaXXXX() in favor of using fb/pixman
This commit is contained in:
parent
509827a598
commit
f03202ad15
|
@ -2068,7 +2068,6 @@ miext/damage/Makefile
|
||||||
miext/shadow/Makefile
|
miext/shadow/Makefile
|
||||||
miext/cw/Makefile
|
miext/cw/Makefile
|
||||||
miext/rootless/Makefile
|
miext/rootless/Makefile
|
||||||
miext/rootless/safeAlpha/Makefile
|
|
||||||
miext/rootless/accel/Makefile
|
miext/rootless/accel/Makefile
|
||||||
os/Makefile
|
os/Makefile
|
||||||
randr/Makefile
|
randr/Makefile
|
||||||
|
|
|
@ -318,12 +318,9 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) set_front_process:unused {
|
- (void) set_front_process:unused {
|
||||||
/* Hackery needed due to argv[0] hackery */
|
QuartzMessageServerThread(kXDarwinBringAllToFront, 0);
|
||||||
// [self activateX:YES];
|
|
||||||
ProcessSerialNumber psn = { 0, kCurrentProcess };
|
ProcessSerialNumber psn = { 0, kCurrentProcess };
|
||||||
SetFrontProcess(&psn);
|
SetFrontProcess(&psn);
|
||||||
|
|
||||||
QuartzMessageServerThread(kXDarwinBringAllToFront, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) set_can_quit:(NSNumber *)state {
|
- (void) set_can_quit:(NSNumber *)state {
|
||||||
|
|
|
@ -4,8 +4,7 @@ AM_CFLAGS = $(XSERVER_CFLAGS) $(DIX_CFLAGS)
|
||||||
AM_CPPFLAGS = \
|
AM_CPPFLAGS = \
|
||||||
-I$(srcdir) -I$(srcdir)/.. \
|
-I$(srcdir) -I$(srcdir)/.. \
|
||||||
-I$(top_srcdir)/miext \
|
-I$(top_srcdir)/miext \
|
||||||
-I$(top_srcdir)/miext/rootless \
|
-I$(top_srcdir)/miext/rootless
|
||||||
-I$(top_srcdir)/miext/rootless/safeAlpha
|
|
||||||
|
|
||||||
Xquartz_SOURCES = \
|
Xquartz_SOURCES = \
|
||||||
appledri.c \
|
appledri.c \
|
||||||
|
@ -41,7 +40,6 @@ Xquartz_LDADD = \
|
||||||
$(top_builddir)/record/librecord.la \
|
$(top_builddir)/record/librecord.la \
|
||||||
$(top_builddir)/XTrap/libxtrap.la \
|
$(top_builddir)/XTrap/libxtrap.la \
|
||||||
$(top_builddir)/miext/rootless/librootless.la \
|
$(top_builddir)/miext/rootless/librootless.la \
|
||||||
$(top_builddir)/miext/rootless/safeAlpha/libsafeAlpha.la \
|
|
||||||
$(top_builddir)/miext/rootless/accel/librlAccel.la \
|
$(top_builddir)/miext/rootless/accel/librlAccel.la \
|
||||||
$(DARWIN_LIBS) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) -lXplugin
|
$(DARWIN_LIBS) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) -lXplugin
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
#include "pseudoramiX.h"
|
#include "pseudoramiX.h"
|
||||||
#include "darwin.h"
|
#include "darwin.h"
|
||||||
#include "rootless.h"
|
#include "rootless.h"
|
||||||
#include "safeAlpha/safeAlpha.h"
|
|
||||||
#include "dri.h"
|
#include "dri.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
#include "Xplugin.h"
|
#include "Xplugin.h"
|
||||||
|
@ -341,15 +340,6 @@ xprAddScreen(int index, ScreenPtr pScreen)
|
||||||
static Bool
|
static Bool
|
||||||
xprSetupScreen(int index, ScreenPtr pScreen)
|
xprSetupScreen(int index, ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
// Add alpha protecting replacements for fb screen functions
|
|
||||||
|
|
||||||
#ifdef RENDER
|
|
||||||
{
|
|
||||||
PictureScreenPtr ps = GetPictureScreen(pScreen);
|
|
||||||
ps->Composite = SafeAlphaComposite;
|
|
||||||
}
|
|
||||||
#endif /* RENDER */
|
|
||||||
|
|
||||||
// Initialize accelerated rootless drawing
|
// Initialize accelerated rootless drawing
|
||||||
// Note that this must be done before DamageSetup().
|
// Note that this must be done before DamageSetup().
|
||||||
RootlessAccelInit(pScreen);
|
RootlessAccelInit(pScreen);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
AM_CFLAGS = $(DIX_CFLAGS) $(XSERVER_CFLAGS)
|
AM_CFLAGS = $(DIX_CFLAGS) $(XSERVER_CFLAGS)
|
||||||
AM_CPPFLAGS = -I$(top_srcdir)/hw/xfree86/os-support
|
AM_CPPFLAGS = -I$(top_srcdir)/hw/xfree86/os-support
|
||||||
|
|
||||||
SUBDIRS = safeAlpha accel
|
SUBDIRS = accel
|
||||||
|
|
||||||
noinst_LTLIBRARIES = librootless.la
|
noinst_LTLIBRARIES = librootless.la
|
||||||
librootless_la_SOURCES = \
|
librootless_la_SOURCES = \
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
AM_CFLAGS = $(DIX_CFLAGS) $(XSERVER_CFLAGS)
|
|
||||||
AM_CPPFLAGS = -I$(srcdir)/.. -I$(top_srcdir)/hw/xfree86/os-support
|
|
||||||
|
|
||||||
noinst_LTLIBRARIES = libsafeAlpha.la
|
|
||||||
libsafeAlpha_la_SOURCES = \
|
|
||||||
safeAlphaPicture.c \
|
|
||||||
safeAlphaWindow.c
|
|
||||||
|
|
||||||
EXTRA_DIST = safeAlpha.h
|
|
|
@ -1,44 +0,0 @@
|
||||||
/*
|
|
||||||
* Replacement functions to protect the alpha channel
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2002-2003 Torrey T. Lyons. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* 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 ABOVE LISTED COPYRIGHT HOLDER(S) 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(s) of the above copyright
|
|
||||||
* holders shall not be used in advertising or otherwise to promote the sale,
|
|
||||||
* use or other dealings in this Software without prior written authorization.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _SAFEALPHA_H
|
|
||||||
#define _SAFEALPHA_H
|
|
||||||
|
|
||||||
#include "picturestr.h"
|
|
||||||
|
|
||||||
void SafeAlphaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what);
|
|
||||||
|
|
||||||
#ifdef RENDER
|
|
||||||
void
|
|
||||||
SafeAlphaComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
|
|
||||||
INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask,
|
|
||||||
INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
|
|
||||||
#endif /* RENDER */
|
|
||||||
|
|
||||||
#endif /* _SAFEALPHA_H */
|
|
|
@ -1,211 +0,0 @@
|
||||||
/*
|
|
||||||
* Support for RENDER extension while protecting the alpha channel
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2002-2003 Torrey T. Lyons. All Rights Reserved.
|
|
||||||
* Copyright (c) 2002 Apple Computer, Inc. All Rights reserved.
|
|
||||||
*
|
|
||||||
* 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 ABOVE LISTED COPYRIGHT HOLDER(S) 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(s) of the above copyright
|
|
||||||
* holders shall not be used in advertising or otherwise to promote the sale,
|
|
||||||
* use or other dealings in this Software without prior written authorization.
|
|
||||||
*/
|
|
||||||
/* This file is largely based on fbcompose.c and fbpict.c, which contain
|
|
||||||
* the following copyright:
|
|
||||||
*
|
|
||||||
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_DIX_CONFIG_H
|
|
||||||
#include <dix-config.h>
|
|
||||||
#endif
|
|
||||||
#ifdef RENDER
|
|
||||||
|
|
||||||
#include <stddef.h> /* For NULL */
|
|
||||||
#include "fb.h"
|
|
||||||
#include "picturestr.h"
|
|
||||||
#include "mipict.h"
|
|
||||||
#include "fbpict.h"
|
|
||||||
#include "safeAlpha.h"
|
|
||||||
#include "rootlessCommon.h"
|
|
||||||
# define mod(a,b) ((b) == 1 ? 0 : (a) >= 0 ? (a) % (b) : (b) - (-a) % (b))
|
|
||||||
|
|
||||||
/* Optimized version of fbCompositeSolidMask_nx8x8888 */
|
|
||||||
void
|
|
||||||
SafeAlphaCompositeSolidMask_nx8x8888(
|
|
||||||
CARD8 op,
|
|
||||||
PicturePtr pSrc,
|
|
||||||
PicturePtr pMask,
|
|
||||||
PicturePtr pDst,
|
|
||||||
INT16 xSrc,
|
|
||||||
INT16 ySrc,
|
|
||||||
INT16 xMask,
|
|
||||||
INT16 yMask,
|
|
||||||
INT16 xDst,
|
|
||||||
INT16 yDst,
|
|
||||||
CARD16 width,
|
|
||||||
CARD16 height)
|
|
||||||
{
|
|
||||||
CARD32 src, srca;
|
|
||||||
CARD32 *dstLine, *dst, d, dstMask;
|
|
||||||
CARD8 *maskLine, *mask, m;
|
|
||||||
FbStride dstStride, maskStride;
|
|
||||||
CARD16 w;
|
|
||||||
|
|
||||||
fbComposeGetSolid(pSrc, src, pDst->format);
|
|
||||||
|
|
||||||
dstMask = FbFullMask (pDst->pDrawable->depth);
|
|
||||||
srca = src >> 24;
|
|
||||||
if (src == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
fbComposeGetStart (pDst, xDst, yDst, CARD32, dstStride, dstLine, 1);
|
|
||||||
fbComposeGetStart (pMask, xMask, yMask, CARD8, maskStride, maskLine, 1);
|
|
||||||
|
|
||||||
if (dstMask == FB_ALLONES && pDst->pDrawable->bitsPerPixel == 32 &&
|
|
||||||
width * height > rootless_CompositePixels_threshold &&
|
|
||||||
SCREENREC(pDst->pDrawable->pScreen)->imp->CompositePixels)
|
|
||||||
{
|
|
||||||
void *srcp[2], *destp[2];
|
|
||||||
unsigned int dest_rowbytes[2];
|
|
||||||
unsigned int fn;
|
|
||||||
|
|
||||||
srcp[0] = &src; srcp[1] = &src;
|
|
||||||
/* null rowbytes pointer means use first value as a constant */
|
|
||||||
destp[0] = dstLine; destp[1] = dstLine;
|
|
||||||
dest_rowbytes[0] = dstStride * 4; dest_rowbytes[1] = dest_rowbytes[0];
|
|
||||||
fn = RL_COMPOSITE_FUNCTION(RL_COMPOSITE_OVER, RL_DEPTH_ARGB8888,
|
|
||||||
RL_DEPTH_A8, RL_DEPTH_ARGB8888);
|
|
||||||
|
|
||||||
if (SCREENREC(pDst->pDrawable->pScreen)->imp->CompositePixels(
|
|
||||||
width, height, fn, srcp, NULL,
|
|
||||||
maskLine, maskStride,
|
|
||||||
destp, dest_rowbytes) == Success)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (height--)
|
|
||||||
{
|
|
||||||
dst = dstLine;
|
|
||||||
dstLine += dstStride;
|
|
||||||
mask = maskLine;
|
|
||||||
maskLine += maskStride;
|
|
||||||
w = width;
|
|
||||||
|
|
||||||
while (w--)
|
|
||||||
{
|
|
||||||
m = *mask++;
|
|
||||||
if (m == 0xff)
|
|
||||||
{
|
|
||||||
if (srca == 0xff)
|
|
||||||
*dst = src & dstMask;
|
|
||||||
else
|
|
||||||
*dst = fbOver (src, *dst) & dstMask;
|
|
||||||
}
|
|
||||||
else if (m)
|
|
||||||
{
|
|
||||||
d = fbIn (src, m);
|
|
||||||
*dst = fbOver (d, *dst) & dstMask;
|
|
||||||
}
|
|
||||||
dst++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
SafeAlphaComposite (CARD8 op,
|
|
||||||
PicturePtr pSrc,
|
|
||||||
PicturePtr pMask,
|
|
||||||
PicturePtr pDst,
|
|
||||||
INT16 xSrc,
|
|
||||||
INT16 ySrc,
|
|
||||||
INT16 xMask,
|
|
||||||
INT16 yMask,
|
|
||||||
INT16 xDst,
|
|
||||||
INT16 yDst,
|
|
||||||
CARD16 width,
|
|
||||||
CARD16 height)
|
|
||||||
{
|
|
||||||
if (!pSrc) {
|
|
||||||
ErrorF("SafeAlphaComposite: pSrc must not be null!\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pDst) {
|
|
||||||
ErrorF("SafeAlphaComposite: pDst must not be null!\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int oldDepth = pDst->pDrawable->depth;
|
|
||||||
int oldFormat = pDst->format;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We can use the more optimized fbpict code, but it sets bits above
|
|
||||||
* the depth to zero. Temporarily adjust destination depth if needed.
|
|
||||||
*/
|
|
||||||
if (pDst->pDrawable->type == DRAWABLE_WINDOW
|
|
||||||
&& pDst->pDrawable->depth == 24
|
|
||||||
&& pDst->pDrawable->bitsPerPixel == 32)
|
|
||||||
{
|
|
||||||
pDst->pDrawable->depth = 32;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* For rootless preserve the alpha in x8r8g8b8 which really is
|
|
||||||
* a8r8g8b8
|
|
||||||
*/
|
|
||||||
if (oldFormat == PICT_x8r8g8b8)
|
|
||||||
{
|
|
||||||
pDst->format = PICT_a8r8g8b8;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pSrc->pDrawable && pMask && pMask->pDrawable &&
|
|
||||||
!pSrc->transform && !pMask->transform &&
|
|
||||||
!pSrc->alphaMap && !pMask->alphaMap &&
|
|
||||||
!pMask->repeat && !pMask->componentAlpha && !pDst->alphaMap &&
|
|
||||||
pMask->format == PICT_a8 &&
|
|
||||||
pSrc->repeatType == RepeatNormal &&
|
|
||||||
pSrc->pDrawable->width == 1 &&
|
|
||||||
pSrc->pDrawable->height == 1 &&
|
|
||||||
(pDst->format == PICT_a8r8g8b8 ||
|
|
||||||
pDst->format == PICT_x8r8g8b8 ||
|
|
||||||
pDst->format == PICT_a8b8g8r8 ||
|
|
||||||
pDst->format == PICT_x8b8g8r8))
|
|
||||||
{
|
|
||||||
fbWalkCompositeRegion (op, pSrc, pMask, pDst,
|
|
||||||
xSrc, ySrc, xMask, yMask, xDst, yDst,
|
|
||||||
width, height,
|
|
||||||
TRUE /* srcRepeat */,
|
|
||||||
FALSE /* maskRepeat */,
|
|
||||||
SafeAlphaCompositeSolidMask_nx8x8888);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fbComposite (op, pSrc, pMask, pDst,
|
|
||||||
xSrc, ySrc, xMask, yMask, xDst, yDst, width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
pDst->pDrawable->depth = oldDepth;
|
|
||||||
pDst->format = oldFormat;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* RENDER */
|
|
|
@ -1,177 +0,0 @@
|
||||||
/*
|
|
||||||
* Specialized window functions to protect the alpha channel
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2002-2003 Torrey T. Lyons. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* 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 ABOVE LISTED COPYRIGHT HOLDER(S) 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(s) of the above copyright
|
|
||||||
* holders shall not be used in advertising or otherwise to promote the sale,
|
|
||||||
* use or other dealings in this Software without prior written authorization.
|
|
||||||
*/
|
|
||||||
/* Portions of this file are based on fbwindow.c, which contains the
|
|
||||||
* following copyright:
|
|
||||||
*
|
|
||||||
* Copyright © 1998 Keith Packard
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_DIX_CONFIG_H
|
|
||||||
#include <dix-config.h>
|
|
||||||
#endif
|
|
||||||
#include "fb.h"
|
|
||||||
#include "safeAlpha.h"
|
|
||||||
#include "rootlessCommon.h"
|
|
||||||
|
|
||||||
#ifdef PANORAMIX
|
|
||||||
#include "panoramiX.h"
|
|
||||||
#include "panoramiXsrv.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SafeAlphaFillRegionTiled
|
|
||||||
* Fill using a tile while leaving the alpha channel untouched.
|
|
||||||
* Based on fbfillRegionTiled.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
SafeAlphaFillRegionTiled(
|
|
||||||
DrawablePtr pDrawable,
|
|
||||||
RegionPtr pRegion,
|
|
||||||
PixmapPtr pTile)
|
|
||||||
{
|
|
||||||
FbBits *dst;
|
|
||||||
FbStride dstStride;
|
|
||||||
int dstBpp;
|
|
||||||
int dstXoff, dstYoff;
|
|
||||||
FbBits *tile;
|
|
||||||
FbStride tileStride;
|
|
||||||
int tileBpp;
|
|
||||||
int tileXoff, tileYoff; /* XXX assumed to be zero */
|
|
||||||
int tileWidth, tileHeight;
|
|
||||||
int n = REGION_NUM_RECTS(pRegion);
|
|
||||||
BoxPtr pbox = REGION_RECTS(pRegion);
|
|
||||||
int xRot = pDrawable->x;
|
|
||||||
int yRot = pDrawable->y;
|
|
||||||
FbBits planeMask;
|
|
||||||
|
|
||||||
#ifdef PANORAMIX
|
|
||||||
if(!noPanoramiXExtension)
|
|
||||||
{
|
|
||||||
int index = pDrawable->pScreen->myNum;
|
|
||||||
if(&WindowTable[index]->drawable == pDrawable)
|
|
||||||
{
|
|
||||||
xRot -= panoramiXdataPtr[index].x;
|
|
||||||
yRot -= panoramiXdataPtr[index].y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
|
|
||||||
fbGetDrawable (&pTile->drawable, tile, tileStride, tileBpp,
|
|
||||||
tileXoff, tileYoff);
|
|
||||||
tileWidth = pTile->drawable.width;
|
|
||||||
tileHeight = pTile->drawable.height;
|
|
||||||
xRot += dstXoff;
|
|
||||||
yRot += dstYoff;
|
|
||||||
planeMask = FB_ALLONES & ~RootlessAlphaMask(dstBpp);
|
|
||||||
|
|
||||||
while (n--)
|
|
||||||
{
|
|
||||||
fbTile (dst + (pbox->y1 + dstYoff) * dstStride,
|
|
||||||
dstStride,
|
|
||||||
(pbox->x1 + dstXoff) * dstBpp,
|
|
||||||
(pbox->x2 - pbox->x1) * dstBpp,
|
|
||||||
pbox->y2 - pbox->y1,
|
|
||||||
tile,
|
|
||||||
tileStride,
|
|
||||||
tileWidth * dstBpp,
|
|
||||||
tileHeight,
|
|
||||||
GXcopy,
|
|
||||||
planeMask,
|
|
||||||
dstBpp,
|
|
||||||
xRot * dstBpp,
|
|
||||||
yRot - pbox->y1);
|
|
||||||
pbox++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SafeAlphaPaintWindow
|
|
||||||
* Paint the window while filling in the alpha channel with all on.
|
|
||||||
* We can't use fbPaintWindow because it zeros the alpha channel.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
SafeAlphaPaintWindow(
|
|
||||||
WindowPtr pWin,
|
|
||||||
RegionPtr pRegion,
|
|
||||||
int what)
|
|
||||||
{
|
|
||||||
switch (what) {
|
|
||||||
case PW_BACKGROUND:
|
|
||||||
|
|
||||||
switch (pWin->backgroundState) {
|
|
||||||
case None:
|
|
||||||
break;
|
|
||||||
case ParentRelative:
|
|
||||||
do {
|
|
||||||
pWin = pWin->parent;
|
|
||||||
} while (pWin->backgroundState == ParentRelative);
|
|
||||||
(*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion,
|
|
||||||
what);
|
|
||||||
break;
|
|
||||||
case BackgroundPixmap:
|
|
||||||
SafeAlphaFillRegionTiled (&pWin->drawable,
|
|
||||||
pRegion,
|
|
||||||
pWin->background.pixmap);
|
|
||||||
break;
|
|
||||||
case BackgroundPixel:
|
|
||||||
{
|
|
||||||
Pixel pixel = pWin->background.pixel |
|
|
||||||
RootlessAlphaMask(pWin->drawable.bitsPerPixel);
|
|
||||||
fbFillRegionSolid (&pWin->drawable, pRegion, 0,
|
|
||||||
fbReplicatePixel (pixel,
|
|
||||||
pWin->drawable.bitsPerPixel));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case PW_BORDER:
|
|
||||||
if (pWin->borderIsPixel)
|
|
||||||
{
|
|
||||||
Pixel pixel = pWin->border.pixel |
|
|
||||||
RootlessAlphaMask(pWin->drawable.bitsPerPixel);
|
|
||||||
fbFillRegionSolid (&pWin->drawable, pRegion, 0,
|
|
||||||
fbReplicatePixel (pixel,
|
|
||||||
pWin->drawable.bitsPerPixel));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WindowPtr pBgWin;
|
|
||||||
for (pBgWin = pWin; pBgWin->backgroundState == ParentRelative;
|
|
||||||
pBgWin = pBgWin->parent);
|
|
||||||
|
|
||||||
SafeAlphaFillRegionTiled (&pBgWin->drawable,
|
|
||||||
pRegion,
|
|
||||||
pWin->border.pixmap);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
fbValidateDrawable (&pWin->drawable);
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user