 /*
 * COPYRIGHT:         See COPYING in the top level directory
 * PROJECT:           ReactOS kernel
 * PURPOSE:           XLATEOBJ structures and functions
 * FILE:              subsystem/win32/win32k/eng/objects.h
 * PROGRAMER:         Timo Kreuzer
 *
 */

struct _EXLATEOBJ;

_Function_class_(FN_XLATE)
typedef
ULONG
(FASTCALL *PFN_XLATE)(
    _In_ struct _EXLATEOBJ *pexlo,
    _In_ ULONG iColor);

typedef struct _EXLATEOBJ
{
    XLATEOBJ xlo;

    PFN_XLATE pfnXlate;

    PPALETTE ppalSrc;
    PPALETTE ppalDst;
    PPALETTE ppalDstDc;

    HANDLE hColorTransform;

    union
    {
        ULONG aulXlate[6];
        struct
        {
            ULONG ulRedMask;
            ULONG ulGreenMask;
            ULONG ulBlueMask;
            ULONG ulRedShift;
            ULONG ulGreenShift;
            ULONG ulBlueShift;
        };
    };
} EXLATEOBJ, *PEXLATEOBJ;

extern EXLATEOBJ gexloTrivial;

_Notnull_
PFN_XLATE
FORCEINLINE
XLATEOBJ_pfnXlate(
    _In_ XLATEOBJ *pxlo)
{
    return ((PEXLATEOBJ)pxlo)->pfnXlate;
}

VOID
NTAPI
EXLATEOBJ_vInitialize(
    _Out_ PEXLATEOBJ pexlo,
    _In_opt_ PPALETTE ppalSrc,
    _In_opt_ PPALETTE ppalDst,
    _In_ COLORREF crSrcBackColor,
    _In_ COLORREF crDstBackColor,
    _In_ COLORREF crDstForeColor);

VOID
NTAPI
EXLATEOBJ_vInitXlateFromDCs(
    _Out_ PEXLATEOBJ pexlo,
    _In_ PDC pdcSrc,
    _In_ PDC pdcDst);

VOID
NTAPI
EXLATEOBJ_vInitSrcMonoXlate(
    _Out_ PEXLATEOBJ pexlo,
    _In_ PPALETTE ppalDst,
    _In_ COLORREF crBackgroundClr,
    _In_ COLORREF crForegroundClr);

VOID
NTAPI
EXLATEOBJ_vCleanup(
    _Inout_ PEXLATEOBJ pexlo);

