148 lines
3.4 KiB
C
148 lines
3.4 KiB
C
/* $XFree86$ */
|
|
|
|
#include "X.h"
|
|
#include "Xmd.h"
|
|
#include "misc.h"
|
|
#include "servermd.h"
|
|
#include "scrnintstr.h"
|
|
#include "pixmapstr.h"
|
|
#include "resource.h"
|
|
#include "colormap.h"
|
|
#include "colormapst.h"
|
|
|
|
#include "mfb.h"
|
|
#define PSZ 8
|
|
#include "cfb.h"
|
|
#undef PSZ
|
|
#include "cfb16.h"
|
|
#include "cfb24.h"
|
|
#include "cfb32.h"
|
|
|
|
#include "cfb8_32wid.h"
|
|
|
|
static void
|
|
WidFillBox1(DrawablePtr pixWid, DrawablePtr pWinDraw, int nbox, BoxPtr pBox)
|
|
{
|
|
WindowPtr pWin = (WindowPtr) pWinDraw;
|
|
cfb8_32WidScreenPtr pScreenPriv =
|
|
CFB8_32WID_GET_SCREEN_PRIVATE(pWin->drawable.pScreen);
|
|
unsigned int wid = pScreenPriv->WIDOps->WidGet(pWin);
|
|
|
|
if (wid & 1)
|
|
mfbSolidWhiteArea((DrawablePtr)pWin, nbox, pBox, GXset, NullPixmap);
|
|
else
|
|
mfbSolidBlackArea((DrawablePtr)pWin, nbox, pBox, GXset, NullPixmap);
|
|
}
|
|
|
|
static void
|
|
WidCopyArea1(DrawablePtr pixWid, RegionPtr pRgn, DDXPointPtr pptSrc)
|
|
{
|
|
mfbDoBitbltCopy(pixWid, pixWid, GXcopy, pRgn, pptSrc);
|
|
}
|
|
|
|
static void
|
|
WidFillBox8(DrawablePtr pixWid, DrawablePtr pWinDraw, int nbox, BoxPtr pBox)
|
|
{
|
|
WindowPtr pWin = (WindowPtr) pWinDraw;
|
|
cfb8_32WidScreenPtr pScreenPriv =
|
|
CFB8_32WID_GET_SCREEN_PRIVATE(pWin->drawable.pScreen);
|
|
unsigned int wid = pScreenPriv->WIDOps->WidGet(pWin);
|
|
|
|
cfbFillBoxSolid(pixWid, nbox, pBox, wid);
|
|
}
|
|
|
|
static void
|
|
WidCopyArea8(DrawablePtr pixWid, RegionPtr pRgn, DDXPointPtr pptSrc)
|
|
{
|
|
cfbDoBitbltCopy(pixWid, pixWid, GXcopy, pRgn, pptSrc, ~0L);
|
|
}
|
|
|
|
static void
|
|
WidFillBox16(DrawablePtr pixWid, DrawablePtr pWinDraw, int nbox, BoxPtr pBox)
|
|
{
|
|
WindowPtr pWin = (WindowPtr) pWinDraw;
|
|
cfb8_32WidScreenPtr pScreenPriv =
|
|
CFB8_32WID_GET_SCREEN_PRIVATE(pWin->drawable.pScreen);
|
|
unsigned int wid = pScreenPriv->WIDOps->WidGet(pWin);
|
|
|
|
cfb16FillBoxSolid(pixWid, nbox, pBox, wid);
|
|
}
|
|
|
|
static void
|
|
WidCopyArea16(DrawablePtr pixWid, RegionPtr pRgn, DDXPointPtr pptSrc)
|
|
{
|
|
cfb16DoBitbltCopy(pixWid, pixWid, GXcopy, pRgn, pptSrc, ~0L);
|
|
}
|
|
|
|
static void
|
|
WidFillBox24(DrawablePtr pixWid, DrawablePtr pWinDraw, int nbox, BoxPtr pBox)
|
|
{
|
|
WindowPtr pWin = (WindowPtr) pWinDraw;
|
|
cfb8_32WidScreenPtr pScreenPriv =
|
|
CFB8_32WID_GET_SCREEN_PRIVATE(pWin->drawable.pScreen);
|
|
unsigned int wid = pScreenPriv->WIDOps->WidGet(pWin);
|
|
|
|
cfb24FillBoxSolid(pixWid, nbox, pBox, wid);
|
|
}
|
|
|
|
static void
|
|
WidCopyArea24(DrawablePtr pixWid, RegionPtr pRgn, DDXPointPtr pptSrc)
|
|
{
|
|
cfb24DoBitbltCopy(pixWid, pixWid, GXcopy, pRgn, pptSrc, ~0L);
|
|
}
|
|
|
|
static void
|
|
WidFillBox32(DrawablePtr pixWid, DrawablePtr pWinDraw, int nbox, BoxPtr pBox)
|
|
{
|
|
WindowPtr pWin = (WindowPtr) pWinDraw;
|
|
cfb8_32WidScreenPtr pScreenPriv =
|
|
CFB8_32WID_GET_SCREEN_PRIVATE(pWin->drawable.pScreen);
|
|
unsigned int wid = pScreenPriv->WIDOps->WidGet(pWin);
|
|
|
|
cfb32FillBoxSolid(pixWid, nbox, pBox, wid);
|
|
}
|
|
|
|
static void
|
|
WidCopyArea32(DrawablePtr pixWid, RegionPtr pRgn, DDXPointPtr pptSrc)
|
|
{
|
|
cfb32DoBitbltCopy(pixWid, pixWid, GXcopy, pRgn, pptSrc, ~0L);
|
|
}
|
|
|
|
Bool
|
|
cfb8_32WidGenericOpsInit(cfb8_32WidScreenPtr pScreenPriv)
|
|
{
|
|
cfb8_32WidOps *WIDOps = pScreenPriv->WIDOps;
|
|
|
|
switch (pScreenPriv->bitsPerWid) {
|
|
case 1:
|
|
WIDOps->WidFillBox = WidFillBox1;
|
|
WIDOps->WidCopyArea = WidCopyArea1;
|
|
break;
|
|
|
|
case 8:
|
|
WIDOps->WidFillBox = WidFillBox8;
|
|
WIDOps->WidCopyArea = WidCopyArea8;
|
|
break;
|
|
|
|
case 16:
|
|
WIDOps->WidFillBox = WidFillBox16;
|
|
WIDOps->WidCopyArea = WidCopyArea16;
|
|
break;
|
|
|
|
case 24:
|
|
WIDOps->WidFillBox = WidFillBox24;
|
|
WIDOps->WidCopyArea = WidCopyArea24;
|
|
break;
|
|
|
|
case 32:
|
|
WIDOps->WidFillBox = WidFillBox32;
|
|
WIDOps->WidCopyArea = WidCopyArea32;
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
};
|
|
|
|
return TRUE;
|
|
}
|