Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / reactos / win32ss / gdi / eng / xlateobj.c
diff --git a/reactos/win32ss/gdi/eng/xlateobj.c b/reactos/win32ss/gdi/eng/xlateobj.c
deleted file mode 100644 (file)
index 53d2ceb..0000000
+++ /dev/null
@@ -1,773 +0,0 @@
-/*
- * COPYRIGHT:        See COPYING in the top level directory
- * PROJECT:          ReactOS Win32k subsystem
- * PURPOSE:          GDI Color Translation Functions
- * FILE:             win32ss/gdi/eng/xlateobj.c
- * PROGRAMER:        Timo Kreuzer (timo.kreuzer@reactos.org)
- */
-
-#include <win32k.h>
-
-#define NDEBUG
-#include <debug.h>
-
-_Post_satisfies_(return==iColor)
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateTrivial(
-    _In_ PEXLATEOBJ pexlo,
-    _In_ ULONG iColor);
-
-/** Globals *******************************************************************/
-
-EXLATEOBJ gexloTrivial = {{0, XO_TRIVIAL, 0, 0, 0, 0}, EXLATEOBJ_iXlateTrivial};
-
-static ULONG giUniqueXlate = 0;
-
-static const BYTE gajXlate5to8[32] =
-{  0,  8, 16, 25, 33, 41, 49, 58, 66, 74, 82, 90, 99,107,115,123,
- 132,140,148,156,165,173,181,189,197,206,214,222,231,239,247,255};
-
-static const BYTE gajXlate6to8[64] =
-{ 0,  4,  8, 12, 16, 20, 24, 28, 32, 36, 40, 45, 49, 52, 57, 61,
- 65, 69, 73, 77, 81, 85, 89, 93, 97,101,105,109,113,117,121,125,
-130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,
-194,198,202,207,210,215,219,223,227,231,235,239,243,247,251,255};
-
-
-/** iXlate functions **********************************************************/
-
-_Post_satisfies_(return==iColor)
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateTrivial(
-    _In_ PEXLATEOBJ pexlo,
-    _In_ ULONG iColor)
-{
-    return iColor;
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateToMono(_In_ PEXLATEOBJ pexlo, ULONG iColor)
-{
-    return (iColor == pexlo->xlo.pulXlate[0]);
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateTable(PEXLATEOBJ pexlo, ULONG iColor)
-{
-    if (iColor >= pexlo->xlo.cEntries) return 0;
-    return pexlo->xlo.pulXlate[iColor];
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateRGBtoBGR(PEXLATEOBJ pxlo, ULONG iColor)
-{
-    ULONG iNewColor;
-
-    /* Copy green */
-    iNewColor = iColor & 0xff00ff00;
-
-    /* Mask red and blue */
-    iColor &= 0x00ff00ff;
-
-    /* Shift and copy red and blue */
-    iNewColor |= iColor >> 16;
-    iNewColor |= iColor << 16;
-
-    return iNewColor;
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateRGBto555(PEXLATEOBJ pxlo, ULONG iColor)
-{
-    ULONG iNewColor;
-
-    /* Copy red */
-    iColor <<= 7;
-    iNewColor = iColor & 0x7C00;
-
-    /* Copy green */
-    iColor >>= 13;
-    iNewColor |= iColor & 0x3E0;
-
-    /* Copy blue */
-    iColor >>= 13;
-    iNewColor |= iColor & 0x1F;
-
-    return iNewColor;
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateBGRto555(PEXLATEOBJ pxlo, ULONG iColor)
-{
-    ULONG iNewColor;
-
-    /* Copy blue */
-    iColor >>= 3;
-    iNewColor = iColor & 0x1f;
-
-    /* Copy green */
-    iColor >>= 3;
-    iNewColor |= (iColor & 0x3E0);
-
-    /* Copy red */
-    iColor >>= 3;
-    iNewColor |= (iColor & 0x7C00);
-
-    return iNewColor;
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateRGBto565(PEXLATEOBJ pxlo, ULONG iColor)
-{
-    ULONG iNewColor;
-
-    /* Copy red */
-    iColor <<= 8;
-    iNewColor = iColor & 0xF800;
-
-    /* Copy green */
-    iColor >>= 13;
-    iNewColor |= iColor & 0x7E0;
-
-    /* Copy green */
-    iColor >>= 14;
-    iNewColor |= iColor & 0x1F;
-
-    return iNewColor;
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateBGRto565(PEXLATEOBJ pxlo, ULONG iColor)
-{
-    ULONG iNewColor;
-
-    /* Copy blue */
-    iColor >>= 3;
-    iNewColor = iColor & 0x1f;
-
-    /* Copy green */
-    iColor >>= 2;
-    iNewColor |= (iColor & 0x7E0);
-
-    /* Copy red */
-    iColor >>= 3;
-    iNewColor |= (iColor & 0xF800);
-
-    return iNewColor;
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateRGBtoPal(PEXLATEOBJ pexlo, ULONG iColor)
-{
-    return PALETTE_ulGetNearestPaletteIndex(pexlo->ppalDst, iColor);
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlate555toRGB(PEXLATEOBJ pxlo, ULONG iColor)
-{
-    ULONG iNewColor;
-
-    /* Copy blue */
-    iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
-
-    /* Copy green */
-    iColor >>= 5;
-    iNewColor |= gajXlate5to8[iColor & 0x1F] << 8;
-
-    /* Copy red */
-    iColor >>= 5;
-    iNewColor |= gajXlate5to8[iColor & 0x1F];
-
-    return iNewColor;
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlate555toBGR(PEXLATEOBJ pxlo, ULONG iColor)
-{
-    ULONG iNewColor;
-
-    /* Copy blue */
-    iNewColor = gajXlate5to8[iColor & 0x1F];
-
-    /* Copy green */
-    iColor >>= 5;
-    iNewColor |= gajXlate5to8[iColor & 0x1F] << 8;
-
-    /* Copy red */
-    iColor >>= 5;
-    iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
-
-    return iNewColor;
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlate555to565(PEXLATEOBJ pxlo, ULONG iColor)
-{
-    ULONG iNewColor;
-
-    /* Copy blue */
-    iNewColor = iColor & 0x1f;
-
-    /* Copy red and green */
-    iColor <<= 1;
-    iNewColor |= iColor & 0xFFC0;
-
-    /* Duplicate highest green bit */
-    iColor >>= 5;
-    iNewColor |= (iColor & 0x20);
-
-    return iNewColor;
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlate555toPal(PEXLATEOBJ pexlo, ULONG iColor)
-{
-    iColor = EXLATEOBJ_iXlate555toRGB(pexlo, iColor);
-
-    return PALETTE_ulGetNearestPaletteIndex(pexlo->ppalDst, iColor);
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlate565to555(PEXLATEOBJ pxlo, ULONG iColor)
-{
-    ULONG iNewColor;
-
-    /* Copy blue */
-    iNewColor = iColor & 0x1f;
-
-    /* Copy red and green */
-    iColor >>= 1;
-    iNewColor |= iColor & 0x7FE0;
-
-    return iNewColor;
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlate565toRGB(PEXLATEOBJ pexlo, ULONG iColor)
-{
-    ULONG iNewColor;
-
-    /* Copy blue */
-    iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
-
-    /* Copy green */
-    iColor >>= 5;
-    iNewColor |= gajXlate6to8[iColor & 0x3F] << 8;
-
-    /* Copy red */
-    iColor >>= 6;
-    iNewColor |= gajXlate5to8[iColor & 0x1F];
-
-    return iNewColor;
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlate565toBGR(PEXLATEOBJ pexlo, ULONG iColor)
-{
-    ULONG iNewColor;
-
-    /* Copy blue */
-    iNewColor = gajXlate5to8[iColor & 0x1F];
-
-    /* Copy green */
-    iColor >>= 5;
-    iNewColor |= gajXlate6to8[iColor & 0x3F] << 8;
-
-    /* Copy blue */
-    iColor >>= 6;
-    iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
-
-    return iNewColor;
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlate565toPal(EXLATEOBJ *pexlo, ULONG iColor)
-{
-    iColor = EXLATEOBJ_iXlate565toRGB(pexlo, iColor);
-
-    return PALETTE_ulGetNearestPaletteIndex(pexlo->ppalDst, iColor);
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateShiftAndMask(PEXLATEOBJ pexlo, ULONG iColor)
-{
-    ULONG iNewColor;
-
-    iNewColor = _rotl(iColor, pexlo->ulRedShift) & pexlo->ulRedMask;
-    iNewColor |= _rotl(iColor, pexlo->ulGreenShift) & pexlo->ulGreenMask;
-    iNewColor |= _rotl(iColor, pexlo->ulBlueShift) & pexlo->ulBlueMask;
-
-    return iNewColor;
-}
-
-_Function_class_(FN_XLATE)
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateBitfieldsToPal(PEXLATEOBJ pexlo, ULONG iColor)
-{
-    /* Convert bitfields to RGB */
-    iColor = EXLATEOBJ_iXlateShiftAndMask(pexlo, iColor);
-
-    /* Return nearest index */
-    return PALETTE_ulGetNearestPaletteIndex(pexlo->ppalDst, iColor);
-}
-
-
-/** Private Functions *********************************************************/
-
-VOID
-NTAPI
-EXLATEOBJ_vInitialize(
-    _Out_ PEXLATEOBJ pexlo,
-    _In_opt_ PALETTE *ppalSrc,
-    _In_opt_ PALETTE *ppalDst,
-    _In_ COLORREF crSrcBackColor,
-    _In_ COLORREF crDstBackColor,
-    _In_ COLORREF crDstForeColor)
-{
-    ULONG cEntries;
-    ULONG i, ulColor;
-
-    if (!ppalSrc) ppalSrc = &gpalRGB;
-    if (!ppalDst) ppalDst = &gpalRGB;
-
-    pexlo->xlo.iUniq = InterlockedIncrement((LONG*)&giUniqueXlate);
-    pexlo->xlo.cEntries = 0;
-    pexlo->xlo.flXlate = 0;
-    pexlo->xlo.pulXlate = pexlo->aulXlate;
-    pexlo->pfnXlate = EXLATEOBJ_iXlateTrivial;
-    pexlo->hColorTransform = NULL;
-    pexlo->ppalSrc = ppalSrc;
-    pexlo->ppalDst = ppalDst;
-    pexlo->xlo.iSrcType = (USHORT)ppalSrc->flFlags;
-    pexlo->xlo.iDstType = (USHORT)ppalDst->flFlags;
-    pexlo->ppalDstDc = &gpalRGB;
-
-    if (ppalDst == ppalSrc)
-    {
-        pexlo->xlo.flXlate |= XO_TRIVIAL;
-        return;
-    }
-
-    /* Check if both of the pallettes are indexed */
-    if (!(ppalSrc->flFlags & PAL_INDEXED) || !(ppalDst->flFlags & PAL_INDEXED))
-    {
-        /* At least one palette is not indexed, calculate shifts/masks */
-        ULONG aulMasksSrc[3], aulMasksDst[3];
-
-        PALETTE_vGetBitMasks(ppalSrc, aulMasksSrc);
-        PALETTE_vGetBitMasks(ppalDst, aulMasksDst);
-
-        pexlo->ulRedMask = aulMasksDst[0];
-        pexlo->ulGreenMask = aulMasksDst[1];
-        pexlo->ulBlueMask = aulMasksDst[2];
-
-        pexlo->ulRedShift = CalculateShift(aulMasksSrc[0], aulMasksDst[0]);
-        pexlo->ulGreenShift = CalculateShift(aulMasksSrc[1], aulMasksDst[1]);
-        pexlo->ulBlueShift = CalculateShift(aulMasksSrc[2], aulMasksDst[2]);
-    }
-
-    if (ppalSrc->flFlags & PAL_MONOCHROME)
-    {
-        /* This is a monochrome palette */
-        if (!(ppalDst->flFlags & PAL_MONOCHROME))
-        {
-            /* Mono to color, use the dest DC's fore and back color */
-            pexlo->pfnXlate = EXLATEOBJ_iXlateTable;
-            pexlo->xlo.flXlate |= XO_TABLE;
-            pexlo->xlo.cEntries = 2;
-            pexlo->xlo.pulXlate[0] =
-                PALETTE_ulGetNearestIndex(ppalDst, crDstForeColor);
-            pexlo->xlo.pulXlate[1] =
-                PALETTE_ulGetNearestIndex(ppalDst, crDstBackColor);
-        }
-    }
-    else if (ppalDst->flFlags & PAL_MONOCHROME)
-    {
-        pexlo->pfnXlate = EXLATEOBJ_iXlateToMono;
-        pexlo->xlo.flXlate |= XO_TO_MONO;
-        pexlo->xlo.cEntries = 1;
-
-        if (ppalSrc->flFlags & PAL_INDEXED)
-        {
-            pexlo->aulXlate[0] =
-                PALETTE_ulGetNearestPaletteIndex(ppalSrc, crSrcBackColor);
-        }
-        else if (ppalSrc->flFlags & PAL_RGB)
-        {
-            pexlo->aulXlate[0] = crSrcBackColor;
-        }
-        else if (ppalSrc->flFlags & PAL_BGR)
-        {
-            pexlo->aulXlate[0] = RGB(GetBValue(crSrcBackColor),
-                                     GetGValue(crSrcBackColor),
-                                     GetRValue(crSrcBackColor));
-        }
-        else if (ppalSrc->flFlags & PAL_BITFIELDS)
-        {
-            PALETTE_vGetBitMasks(ppalSrc, &pexlo->ulRedMask);
-            pexlo->ulRedShift = CalculateShift(RGB(0xFF,0,0), pexlo->ulRedMask);
-            pexlo->ulGreenShift = CalculateShift(RGB(0,0xFF,0), pexlo->ulGreenMask);
-            pexlo->ulBlueShift = CalculateShift(RGB(0,0,0xFF), pexlo->ulBlueMask);
-
-            pexlo->aulXlate[0] = EXLATEOBJ_iXlateShiftAndMask(pexlo, crSrcBackColor);
-        }
-    }
-    else if (ppalSrc->flFlags & PAL_INDEXED)
-    {
-        cEntries = ppalSrc->NumColors;
-
-        /* Allocate buffer if needed */
-        if (cEntries > 6)
-        {
-            pexlo->xlo.pulXlate = EngAllocMem(0,
-                                              cEntries * sizeof(ULONG),
-                                              GDITAG_PXLATE);
-            if (!pexlo->xlo.pulXlate)
-            {
-                DPRINT1("Could not allocate pulXlate buffer.\n");
-                pexlo->pfnXlate = EXLATEOBJ_iXlateTrivial;
-                pexlo->xlo.flXlate = XO_TRIVIAL;
-                return;
-            }
-        }
-
-        pexlo->pfnXlate = EXLATEOBJ_iXlateTable;
-        pexlo->xlo.cEntries = cEntries;
-        pexlo->xlo.flXlate |= XO_TABLE;
-
-        if (ppalDst->flFlags & PAL_INDEXED)
-        {
-            ULONG cDiff = 0;
-
-            for (i = 0; i < cEntries; i++)
-            {
-                ulColor = RGB(ppalSrc->IndexedColors[i].peRed,
-                              ppalSrc->IndexedColors[i].peGreen,
-                              ppalSrc->IndexedColors[i].peBlue);
-
-                pexlo->xlo.pulXlate[i] =
-                    PALETTE_ulGetNearestPaletteIndex(ppalDst, ulColor);
-
-                if (pexlo->xlo.pulXlate[i] != i) cDiff++;
-            }
-
-            /* Check if we have only trivial mappings */
-            if (cDiff == 0)
-            {
-                if (pexlo->xlo.pulXlate != pexlo->aulXlate)
-                {
-                    EngFreeMem(pexlo->xlo.pulXlate);
-                    pexlo->xlo.pulXlate = pexlo->aulXlate;
-                }
-                pexlo->pfnXlate = EXLATEOBJ_iXlateTrivial;
-                pexlo->xlo.flXlate = XO_TRIVIAL;
-                pexlo->xlo.cEntries = 0;
-                return;
-            }
-        }
-        else
-        {
-            for (i = 0; i < pexlo->xlo.cEntries; i++)
-            {
-                ulColor = RGB(ppalSrc->IndexedColors[i].peRed,
-                              ppalSrc->IndexedColors[i].peGreen,
-                              ppalSrc->IndexedColors[i].peBlue);
-                pexlo->xlo.pulXlate[i] = PALETTE_ulGetNearestBitFieldsIndex(ppalDst, ulColor);
-            }
-        }
-    }
-    else if (ppalSrc->flFlags & PAL_RGB)
-    {
-        if (ppalDst->flFlags & PAL_INDEXED)
-            pexlo->pfnXlate = EXLATEOBJ_iXlateRGBtoPal;
-
-        else if (ppalDst->flFlags & PAL_BGR)
-            pexlo->pfnXlate = EXLATEOBJ_iXlateRGBtoBGR;
-
-        else if (ppalDst->flFlags & PAL_RGB16_555)
-            pexlo->pfnXlate = EXLATEOBJ_iXlateRGBto555;
-
-        else if (ppalDst->flFlags & PAL_RGB16_565)
-            pexlo->pfnXlate = EXLATEOBJ_iXlateRGBto565;
-
-        else if (ppalDst->flFlags & PAL_BITFIELDS)
-            pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask;
-    }
-    else if (ppalSrc->flFlags & PAL_BGR)
-    {
-        if (ppalDst->flFlags & PAL_INDEXED)
-            pexlo->pfnXlate = EXLATEOBJ_iXlateBitfieldsToPal;
-
-        else if (ppalDst->flFlags & PAL_RGB)
-            /* The inverse function works the same */
-            pexlo->pfnXlate = EXLATEOBJ_iXlateRGBtoBGR;
-
-        else if (ppalDst->flFlags & PAL_RGB16_555)
-            pexlo->pfnXlate = EXLATEOBJ_iXlateBGRto555;
-
-        else if (ppalDst->flFlags & PAL_RGB16_565)
-            pexlo->pfnXlate = EXLATEOBJ_iXlateBGRto565;
-
-        else if (ppalDst->flFlags & PAL_BITFIELDS)
-            pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask;
-    }
-    else if (ppalSrc->flFlags & PAL_RGB16_555)
-    {
-        if (ppalDst->flFlags & PAL_INDEXED)
-            pexlo->pfnXlate = EXLATEOBJ_iXlate555toPal;
-
-        else if (ppalDst->flFlags & PAL_RGB)
-            pexlo->pfnXlate = EXLATEOBJ_iXlate555toRGB;
-
-        else if (ppalDst->flFlags & PAL_BGR)
-            pexlo->pfnXlate = EXLATEOBJ_iXlate555toBGR;
-
-        else if (ppalDst->flFlags & PAL_RGB16_565)
-            pexlo->pfnXlate = EXLATEOBJ_iXlate555to565;
-
-        else if (ppalDst->flFlags & PAL_BITFIELDS)
-            pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask;
-    }
-    else if (ppalSrc->flFlags & PAL_RGB16_565)
-    {
-        if (ppalDst->flFlags & PAL_INDEXED)
-            pexlo->pfnXlate = EXLATEOBJ_iXlate565toPal;
-
-        else if (ppalDst->flFlags & PAL_RGB)
-            pexlo->pfnXlate = EXLATEOBJ_iXlate565toRGB;
-
-        else if (ppalDst->flFlags & PAL_BGR)
-            pexlo->pfnXlate = EXLATEOBJ_iXlate565toBGR;
-
-        else if (ppalDst->flFlags & PAL_RGB16_555)
-            pexlo->pfnXlate = EXLATEOBJ_iXlate565to555;
-
-        else if (ppalDst->flFlags & PAL_BITFIELDS)
-            pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask;
-    }
-    else if (ppalSrc->flFlags & PAL_BITFIELDS)
-    {
-        if (ppalDst->flFlags & PAL_INDEXED)
-            pexlo->pfnXlate = EXLATEOBJ_iXlateBitfieldsToPal;
-        else
-            pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask;
-    }
-
-    /* Check for a trivial shift and mask operation */
-    if (pexlo->pfnXlate == EXLATEOBJ_iXlateShiftAndMask &&
-        !pexlo->ulRedShift && !pexlo->ulGreenShift && !pexlo->ulBlueShift)
-    {
-            pexlo->pfnXlate = EXLATEOBJ_iXlateTrivial;
-    }
-
-    /* Check for trivial xlate */
-    if (pexlo->pfnXlate == EXLATEOBJ_iXlateTrivial)
-        pexlo->xlo.flXlate = XO_TRIVIAL;
-    else
-        pexlo->xlo.flXlate &= ~XO_TRIVIAL;
-}
-
-VOID
-NTAPI
-EXLATEOBJ_vInitXlateFromDCs(
-    _Out_ EXLATEOBJ* pexlo,
-    _In_ PDC pdcSrc,
-    _In_ PDC pdcDst)
-{
-    PSURFACE psurfDst, psurfSrc;
-
-    psurfDst = pdcDst->dclevel.pSurface;
-    psurfSrc = pdcSrc->dclevel.pSurface;
-
-    /* Normal initialisation. No surface means DEFAULT_BITMAP */
-    EXLATEOBJ_vInitialize(pexlo,
-                          psurfSrc ? psurfSrc->ppal : gppalMono,
-                          psurfDst ? psurfDst->ppal : gppalMono,
-                          pdcSrc->pdcattr->crBackgroundClr,
-                          pdcDst->pdcattr->crBackgroundClr,
-                          pdcDst->pdcattr->crForegroundClr);
-
-    pexlo->ppalDstDc = pdcDst->dclevel.ppal;
-}
-
-VOID NTAPI EXLATEOBJ_vInitSrcMonoXlate(
-    PEXLATEOBJ pexlo,
-    PPALETTE ppalDst,
-    COLORREF crBackgroundClr,
-    COLORREF crForegroundClr)
-{
-    /* Normal initialisation, with mono palette as source */
-    EXLATEOBJ_vInitialize(pexlo,
-                          gppalMono,
-                          ppalDst,
-                          0,
-                          crBackgroundClr,
-                          crForegroundClr);
-}
-
-VOID
-NTAPI
-EXLATEOBJ_vCleanup(
-    _Inout_ PEXLATEOBJ pexlo)
-{
-    if (pexlo->xlo.pulXlate != pexlo->aulXlate)
-    {
-        EngFreeMem(pexlo->xlo.pulXlate);
-    }
-    pexlo->xlo.pulXlate = pexlo->aulXlate;
-}
-
-/** Public DDI Functions ******************************************************/
-
-#undef XLATEOBJ_iXlate
-ULONG
-NTAPI
-XLATEOBJ_iXlate(
-    _In_ XLATEOBJ *pxlo,
-    _In_ ULONG iColor)
-{
-    PEXLATEOBJ pexlo = (PEXLATEOBJ)pxlo;
-
-    if (!pxlo)
-        return iColor;
-
-    /* Call the iXlate function */
-    return pexlo->pfnXlate(pexlo, iColor);
-}
-
-ULONG
-NTAPI
-XLATEOBJ_cGetPalette(
-    _In_ XLATEOBJ *pxlo,
-    _In_ ULONG iPal,
-    _In_ ULONG cPal,
-    _Out_cap_(cPal) ULONG *pPalOut)
-{
-    PEXLATEOBJ pexlo = (PEXLATEOBJ)pxlo;
-    PPALETTE ppal;
-    ULONG i;
-
-    if (!pxlo)
-    {
-        return 0;
-    }
-
-    if (iPal > 5)
-    {
-       DPRINT1("XLATEOBJ_cGetPalette called with wrong iPal: %lu\n", iPal);
-       return 0;
-    }
-
-    /* Get the requested palette */
-    if (iPal == XO_DESTDCPALETTE)
-    {
-        ppal = pexlo->ppalDstDc;
-    }
-    else if (iPal == XO_SRCPALETTE || iPal == XO_SRCBITFIELDS)
-    {
-        ppal = pexlo->ppalSrc;
-    }
-    else
-    {
-        ppal = pexlo->ppalDst;
-    }
-
-    /* Verify palette type match */
-    if (!ppal ||
-        ((iPal == XO_SRCPALETTE || iPal == XO_DESTPALETTE)
-            && !(ppal->flFlags & PAL_INDEXED)) ||
-        ((iPal == XO_SRCBITFIELDS || iPal == XO_DESTBITFIELDS)
-            && !(ppal->flFlags & PAL_BITFIELDS)))
-    {
-        return 0;
-    }
-
-    if(!pPalOut)
-    {
-        return ppal->NumColors;
-    }
-
-    /* Copy the values into the buffer */
-    if (ppal->flFlags & PAL_INDEXED)
-    {
-        cPal = min(cPal, ppal->NumColors);
-        for (i = 0; i < cPal; i++)
-        {
-            pPalOut[i] = RGB(ppal->IndexedColors[i].peRed,
-                             ppal->IndexedColors[i].peGreen,
-                             ppal->IndexedColors[i].peBlue);
-        }
-    }
-    else
-    {
-        // FIXME: should use the above code
-        pPalOut[0] = ppal->RedMask;
-        pPalOut[1] = ppal->GreenMask;
-        pPalOut[2] = ppal->BlueMask;
-    }
-
-    return cPal;
-}
-
-HANDLE
-NTAPI
-XLATEOBJ_hGetColorTransform(
-    _In_ XLATEOBJ *pxlo)
-{
-    PEXLATEOBJ pexlo = (PEXLATEOBJ)pxlo;
-    return pexlo->hColorTransform;
-}
-
-PULONG
-NTAPI
-XLATEOBJ_piVector(
-    _In_ XLATEOBJ *pxlo)
-{
-    if (pxlo->iSrcType == PAL_INDEXED)
-    {
-        return pxlo->pulXlate;
-    }
-
-    return NULL;
-}
-
-/* EOF */