ReactOS 0.4.15-dev-7788-g1ad9096
xlateobj.c File Reference
#include <win32k.h>
#include <debug.h>
Include dependency graph for xlateobj.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

 _Post_satisfies_ (return==iColor)
 
 _Function_class_ (FN_XLATE)
 
VOID NTAPI EXLATEOBJ_vInitialize (_Out_ PEXLATEOBJ pexlo, _In_opt_ PALETTE *ppalSrc, _In_opt_ PALETTE *ppalDst, _In_ COLORREF crSrcBackColor, _In_ COLORREF crDstBackColor, _In_ COLORREF crDstForeColor)
 
VOID NTAPI EXLATEOBJ_vInitXlateFromDCs (_Out_ EXLATEOBJ *pexlo, _In_ PDC pdcSrc, _In_ PDC pdcDst)
 
VOID NTAPI EXLATEOBJ_vInitSrcMonoXlate (PEXLATEOBJ pexlo, PPALETTE ppalDst, COLORREF crBackgroundClr, COLORREF crForegroundClr)
 
VOID NTAPI EXLATEOBJ_vCleanup (_Inout_ PEXLATEOBJ pexlo)
 
ULONG NTAPI XLATEOBJ_iXlate (_In_ XLATEOBJ *pxlo, _In_ ULONG iColor)
 
ULONG NTAPI XLATEOBJ_cGetPalette (_In_ XLATEOBJ *pxlo, _In_ ULONG iPal, _In_ ULONG cPal, _Out_cap_(cPal) ULONG *pPalOut)
 
HANDLE NTAPI XLATEOBJ_hGetColorTransform (_In_ XLATEOBJ *pxlo)
 
PULONG NTAPI XLATEOBJ_piVector (_In_ XLATEOBJ *pxlo)
 

Variables

static ULONG giUniqueXlate = 0
 
static const BYTE gajXlate5to8 [32]
 
static const BYTE gajXlate6to8 [64]
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 11 of file xlateobj.c.

Function Documentation

◆ _Function_class_()

_Function_class_ ( FN_XLATE  )

Definition at line 52 of file xlateobj.c.

56{
57 return (iColor == pexlo->xlo.pulXlate[0]);
58}
_In_ ULONG iColor
Definition: xlateobj.h:17

◆ _Post_satisfies_()

_Post_satisfies_ ( return  = =iColor)

Globals

iXlate functions

Definition at line 14 of file xlateobj.c.

24 {{0, XO_TRIVIAL, 0, 0, 0, 0}, EXLATEOBJ_iXlateTrivial};
#define XO_TRIVIAL
Definition: winddi.h:1247

◆ EXLATEOBJ_vCleanup()

◆ EXLATEOBJ_vInitialize()

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

Private Functions

Definition at line 358 of file xlateobj.c.

365{
367 ULONG i, ulColor;
368
369 if (!ppalSrc) ppalSrc = &gpalRGB;
370 if (!ppalDst) ppalDst = &gpalRGB;
371
372 pexlo->xlo.iUniq = InterlockedIncrement((LONG*)&giUniqueXlate);
373 pexlo->xlo.cEntries = 0;
374 pexlo->xlo.flXlate = 0;
375 pexlo->xlo.pulXlate = pexlo->aulXlate;
376 pexlo->pfnXlate = EXLATEOBJ_iXlateTrivial;
377 pexlo->hColorTransform = NULL;
378 pexlo->ppalSrc = ppalSrc;
379 pexlo->ppalDst = ppalDst;
380 pexlo->xlo.iSrcType = (USHORT)ppalSrc->flFlags;
381 pexlo->xlo.iDstType = (USHORT)ppalDst->flFlags;
382 pexlo->ppalDstDc = &gpalRGB;
383
384 if (ppalDst == ppalSrc)
385 {
386 pexlo->xlo.flXlate |= XO_TRIVIAL;
387 return;
388 }
389
390 /* Check if both of the palettes are indexed */
391 if (!(ppalSrc->flFlags & PAL_INDEXED) || !(ppalDst->flFlags & PAL_INDEXED))
392 {
393 /* At least one palette is not indexed, calculate shifts/masks */
394 ULONG aulMasksSrc[3], aulMasksDst[3];
395
396 PALETTE_vGetBitMasks(ppalSrc, aulMasksSrc);
397 PALETTE_vGetBitMasks(ppalDst, aulMasksDst);
398
399 pexlo->ulRedMask = aulMasksDst[0];
400 pexlo->ulGreenMask = aulMasksDst[1];
401 pexlo->ulBlueMask = aulMasksDst[2];
402
403 pexlo->ulRedShift = CalculateShift(aulMasksSrc[0], aulMasksDst[0]);
404 pexlo->ulGreenShift = CalculateShift(aulMasksSrc[1], aulMasksDst[1]);
405 pexlo->ulBlueShift = CalculateShift(aulMasksSrc[2], aulMasksDst[2]);
406 }
407
408 if (ppalSrc->flFlags & PAL_MONOCHROME)
409 {
410 /* This is a monochrome palette */
411 if (!(ppalDst->flFlags & PAL_MONOCHROME))
412 {
413 /* Mono to color, use the dest DC's fore and back color */
414 pexlo->pfnXlate = EXLATEOBJ_iXlateTable;
415 pexlo->xlo.flXlate |= XO_TABLE;
416 pexlo->xlo.cEntries = 2;
417 pexlo->xlo.pulXlate[0] =
418 PALETTE_ulGetNearestIndex(ppalDst, crDstForeColor);
419 pexlo->xlo.pulXlate[1] =
420 PALETTE_ulGetNearestIndex(ppalDst, crDstBackColor);
421 }
422 }
423 else if (ppalDst->flFlags & PAL_MONOCHROME)
424 {
425 pexlo->pfnXlate = EXLATEOBJ_iXlateToMono;
426 pexlo->xlo.flXlate |= XO_TO_MONO;
427 pexlo->xlo.cEntries = 1;
428
429 if (ppalSrc->flFlags & PAL_INDEXED)
430 {
431 pexlo->aulXlate[0] =
432 PALETTE_ulGetNearestPaletteIndex(ppalSrc, crSrcBackColor);
433 }
434 else if (ppalSrc->flFlags & PAL_RGB)
435 {
436 pexlo->aulXlate[0] = crSrcBackColor;
437 }
438 else if (ppalSrc->flFlags & PAL_BGR)
439 {
440 pexlo->aulXlate[0] = RGB(GetBValue(crSrcBackColor),
441 GetGValue(crSrcBackColor),
442 GetRValue(crSrcBackColor));
443 }
444 else if (ppalSrc->flFlags & PAL_BITFIELDS)
445 {
446 PALETTE_vGetBitMasks(ppalSrc, &pexlo->ulRedMask);
447 pexlo->ulRedShift = CalculateShift(RGB(0xFF,0,0), pexlo->ulRedMask);
448 pexlo->ulGreenShift = CalculateShift(RGB(0,0xFF,0), pexlo->ulGreenMask);
449 pexlo->ulBlueShift = CalculateShift(RGB(0,0,0xFF), pexlo->ulBlueMask);
450
451 pexlo->aulXlate[0] = EXLATEOBJ_iXlateShiftAndMask(pexlo, crSrcBackColor);
452 }
453 }
454 else if (ppalSrc->flFlags & PAL_INDEXED)
455 {
456 cEntries = ppalSrc->NumColors;
457
458 /* Allocate buffer if needed */
459 if (cEntries > 6)
460 {
461 pexlo->xlo.pulXlate = EngAllocMem(0,
462 cEntries * sizeof(ULONG),
464 if (!pexlo->xlo.pulXlate)
465 {
466 DPRINT1("Could not allocate pulXlate buffer.\n");
467 pexlo->pfnXlate = EXLATEOBJ_iXlateTrivial;
468 pexlo->xlo.flXlate = XO_TRIVIAL;
469 return;
470 }
471 }
472
473 pexlo->pfnXlate = EXLATEOBJ_iXlateTable;
474 pexlo->xlo.cEntries = cEntries;
475 pexlo->xlo.flXlate |= XO_TABLE;
476
477 if (ppalDst->flFlags & PAL_INDEXED)
478 {
479 ULONG cDiff = 0;
480
481 for (i = 0; i < cEntries; i++)
482 {
483 ulColor = RGB(ppalSrc->IndexedColors[i].peRed,
484 ppalSrc->IndexedColors[i].peGreen,
485 ppalSrc->IndexedColors[i].peBlue);
486
487 pexlo->xlo.pulXlate[i] =
488 PALETTE_ulGetNearestPaletteIndex(ppalDst, ulColor);
489
490 if (pexlo->xlo.pulXlate[i] != i) cDiff++;
491 }
492
493 /* Check if we have only trivial mappings */
494 if (cDiff == 0)
495 {
496 if (pexlo->xlo.pulXlate != pexlo->aulXlate)
497 {
498 EngFreeMem(pexlo->xlo.pulXlate);
499 pexlo->xlo.pulXlate = pexlo->aulXlate;
500 }
501 pexlo->pfnXlate = EXLATEOBJ_iXlateTrivial;
502 pexlo->xlo.flXlate = XO_TRIVIAL;
503 pexlo->xlo.cEntries = 0;
504 return;
505 }
506 }
507 else
508 {
509 for (i = 0; i < pexlo->xlo.cEntries; i++)
510 {
511 ulColor = RGB(ppalSrc->IndexedColors[i].peRed,
512 ppalSrc->IndexedColors[i].peGreen,
513 ppalSrc->IndexedColors[i].peBlue);
514 pexlo->xlo.pulXlate[i] = PALETTE_ulGetNearestBitFieldsIndex(ppalDst, ulColor);
515 }
516 }
517 }
518 else if (ppalSrc->flFlags & PAL_RGB)
519 {
520 if (ppalDst->flFlags & PAL_INDEXED)
521 pexlo->pfnXlate = EXLATEOBJ_iXlateRGBtoPal;
522
523 else if (ppalDst->flFlags & PAL_BGR)
524 pexlo->pfnXlate = EXLATEOBJ_iXlateRGBtoBGR;
525
526 else if (ppalDst->flFlags & PAL_RGB16_555)
527 pexlo->pfnXlate = EXLATEOBJ_iXlateRGBto555;
528
529 else if (ppalDst->flFlags & PAL_RGB16_565)
530 pexlo->pfnXlate = EXLATEOBJ_iXlateRGBto565;
531
532 else if (ppalDst->flFlags & PAL_BITFIELDS)
533 pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask;
534 }
535 else if (ppalSrc->flFlags & PAL_BGR)
536 {
537 if (ppalDst->flFlags & PAL_INDEXED)
538 pexlo->pfnXlate = EXLATEOBJ_iXlateBitfieldsToPal;
539
540 else if (ppalDst->flFlags & PAL_RGB)
541 /* The inverse function works the same */
542 pexlo->pfnXlate = EXLATEOBJ_iXlateRGBtoBGR;
543
544 else if (ppalDst->flFlags & PAL_RGB16_555)
545 pexlo->pfnXlate = EXLATEOBJ_iXlateBGRto555;
546
547 else if (ppalDst->flFlags & PAL_RGB16_565)
548 pexlo->pfnXlate = EXLATEOBJ_iXlateBGRto565;
549
550 else if (ppalDst->flFlags & PAL_BITFIELDS)
551 pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask;
552 }
553 else if (ppalSrc->flFlags & PAL_RGB16_555)
554 {
555 if (ppalDst->flFlags & PAL_INDEXED)
556 pexlo->pfnXlate = EXLATEOBJ_iXlate555toPal;
557
558 else if (ppalDst->flFlags & PAL_RGB)
559 pexlo->pfnXlate = EXLATEOBJ_iXlate555toRGB;
560
561 else if (ppalDst->flFlags & PAL_BGR)
562 pexlo->pfnXlate = EXLATEOBJ_iXlate555toBGR;
563
564 else if (ppalDst->flFlags & PAL_RGB16_565)
565 pexlo->pfnXlate = EXLATEOBJ_iXlate555to565;
566
567 else if (ppalDst->flFlags & PAL_BITFIELDS)
568 pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask;
569 }
570 else if (ppalSrc->flFlags & PAL_RGB16_565)
571 {
572 if (ppalDst->flFlags & PAL_INDEXED)
573 pexlo->pfnXlate = EXLATEOBJ_iXlate565toPal;
574
575 else if (ppalDst->flFlags & PAL_RGB)
576 pexlo->pfnXlate = EXLATEOBJ_iXlate565toRGB;
577
578 else if (ppalDst->flFlags & PAL_BGR)
579 pexlo->pfnXlate = EXLATEOBJ_iXlate565toBGR;
580
581 else if (ppalDst->flFlags & PAL_RGB16_555)
582 pexlo->pfnXlate = EXLATEOBJ_iXlate565to555;
583
584 else if (ppalDst->flFlags & PAL_BITFIELDS)
585 pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask;
586 }
587 else if (ppalSrc->flFlags & PAL_BITFIELDS)
588 {
589 if (ppalDst->flFlags & PAL_INDEXED)
590 pexlo->pfnXlate = EXLATEOBJ_iXlateBitfieldsToPal;
591 else
592 pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask;
593 }
594
595 /* Check for a trivial shift and mask operation */
596 if (pexlo->pfnXlate == EXLATEOBJ_iXlateShiftAndMask &&
597 !pexlo->ulRedShift && !pexlo->ulGreenShift && !pexlo->ulBlueShift)
598 {
599 pexlo->pfnXlate = EXLATEOBJ_iXlateTrivial;
600 }
601
602 /* Check for trivial xlate */
603 if (pexlo->pfnXlate == EXLATEOBJ_iXlateTrivial)
604 pexlo->xlo.flXlate = XO_TRIVIAL;
605 else
606 pexlo->xlo.flXlate &= ~XO_TRIVIAL;
607}
#define InterlockedIncrement
Definition: armddk.h:53
#define DPRINT1
Definition: precomp.h:8
#define NULL
Definition: types.h:112
#define RGB(r, g, b)
Definition: precomp.h:62
#define GetBValue(quad)
Definition: precomp.h:66
#define GetGValue(quad)
Definition: precomp.h:65
#define GetRValue(quad)
Definition: precomp.h:64
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
void * EngAllocMem(int zero, unsigned long size, int tag=0)
Definition: polytest.cpp:70
uint32_t ULONG
Definition: typedefs.h:59
ULONG NTAPI PALETTE_ulGetNearestBitFieldsIndex(PALETTE *ppal, ULONG ulColor)
Definition: palette.c:294
PALETTE gpalRGB
Definition: palette.c:20
ULONG NTAPI PALETTE_ulGetNearestIndex(PALETTE *ppal, ULONG ulColor)
Definition: palette.c:312
VOID NTAPI PALETTE_vGetBitMasks(PPALETTE ppal, PULONG pulColors)
Definition: palette.c:322
ULONG NTAPI PALETTE_ulGetNearestPaletteIndex(PALETTE *ppal, ULONG iColor)
Definition: palette.c:261
@ PAL_MONOCHROME
Definition: palette.h:22
@ PAL_RGB16_565
Definition: palette.h:28
@ PAL_RGB16_555
Definition: palette.h:27
FORCEINLINE ULONG CalculateShift(ULONG ulMask1, ULONG ulMask2)
Definition: palette.h:130
#define GDITAG_PXLATE
Definition: tags.h:181
#define PAL_RGB
Definition: winddi.h:1563
#define XO_TO_MONO
Definition: winddi.h:1249
#define PAL_BITFIELDS
Definition: winddi.h:1562
#define XO_TABLE
Definition: winddi.h:1248
#define PAL_BGR
Definition: winddi.h:1564
#define PAL_INDEXED
Definition: winddi.h:1561
_In_ UINT _In_ UINT cEntries
Definition: wingdi.h:3621
static ULONG giUniqueXlate
Definition: xlateobj.c:26

Referenced by DIB_16BPP_AlphaBlend(), DIB_XXBPP_AlphaBlend(), EBRUSHOBJ_bRealizeBrush(), EBRUSHOBJ_vSetSolidRGBColor(), EngSetPointerShape(), EXLATEOBJ_vInitSrcMonoXlate(), EXLATEOBJ_vInitXlateFromDCs(), GreGetDIBitsInternal(), GreGradientFill(), GreSetPointerShape(), IntExtTextOutW(), IntSetDIBits(), IntShowMousePointer(), NtGdiExtFloodFill(), NtGdiGetNearestColor(), NtGdiGetPixel(), NtGdiSetDIBitsToDeviceInternal(), NtGdiSetPixel(), NtGdiStretchDIBitsInternal(), NtGdiTransparentBlt(), TranslateCOLORREF(), and UserDrawIconEx().

◆ EXLATEOBJ_vInitSrcMonoXlate()

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

Definition at line 632 of file xlateobj.c.

637{
638 /* Normal initialisation, with mono palette as source */
640 gppalMono,
641 ppalDst,
642 0,
643 crBackgroundClr,
644 crForegroundClr);
645}
PALETTE * gppalMono
Definition: palette.c:20
VOID NTAPI EXLATEOBJ_vInitialize(_Out_ PEXLATEOBJ pexlo, _In_opt_ PALETTE *ppalSrc, _In_opt_ PALETTE *ppalDst, _In_ COLORREF crSrcBackColor, _In_ COLORREF crDstBackColor, _In_ COLORREF crDstForeColor)
Definition: xlateobj.c:358

Referenced by UserDrawIconEx().

◆ EXLATEOBJ_vInitXlateFromDCs()

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

Definition at line 611 of file xlateobj.c.

615{
616 PSURFACE psurfDst, psurfSrc;
617
618 psurfDst = pdcDst->dclevel.pSurface;
619 psurfSrc = pdcSrc->dclevel.pSurface;
620
621 /* Normal initialisation. No surface means DEFAULT_BITMAP */
623 psurfSrc ? psurfSrc->ppal : gppalMono,
624 psurfDst ? psurfDst->ppal : gppalMono,
625 pdcSrc->pdcattr->crBackgroundClr,
626 pdcDst->pdcattr->crBackgroundClr,
627 pdcDst->pdcattr->crForegroundClr);
628
629 pexlo->ppalDstDc = pdcDst->dclevel.ppal;
630}
struct _PALETTE *const ppal
Definition: surface.h:11

Referenced by GreStretchBltMask(), NtGdiAlphaBlend(), NtGdiMaskBlt(), and NtGdiTransparentBlt().

◆ XLATEOBJ_cGetPalette()

ULONG NTAPI XLATEOBJ_cGetPalette ( _In_ XLATEOBJ pxlo,
_In_ ULONG  iPal,
_In_ ULONG  cPal,
_Out_cap_(cPal) ULONG pPalOut 
)

Definition at line 679 of file xlateobj.c.

684{
685 PEXLATEOBJ pexlo = (PEXLATEOBJ)pxlo;
686 PPALETTE ppal;
687 ULONG i;
688
689 if (!pxlo)
690 {
691 return 0;
692 }
693
694 if (iPal > 5)
695 {
696 DPRINT1("XLATEOBJ_cGetPalette called with wrong iPal: %lu\n", iPal);
697 return 0;
698 }
699
700 /* Get the requested palette */
701 if (iPal == XO_DESTDCPALETTE)
702 {
703 ppal = pexlo->ppalDstDc;
704 }
705 else if (iPal == XO_SRCPALETTE || iPal == XO_SRCBITFIELDS)
706 {
707 ppal = pexlo->ppalSrc;
708 }
709 else
710 {
711 ppal = pexlo->ppalDst;
712 }
713
714 /* Verify palette type match */
715 if (!ppal ||
716 ((iPal == XO_SRCPALETTE || iPal == XO_DESTPALETTE)
717 && !(ppal->flFlags & PAL_INDEXED)) ||
718 ((iPal == XO_SRCBITFIELDS || iPal == XO_DESTBITFIELDS)
719 && !(ppal->flFlags & PAL_BITFIELDS)))
720 {
721 return 0;
722 }
723
724 if(!pPalOut)
725 {
726 return ppal->NumColors;
727 }
728
729 /* Copy the values into the buffer */
730 if (ppal->flFlags & PAL_INDEXED)
731 {
732 cPal = min(cPal, ppal->NumColors);
733 for (i = 0; i < cPal; i++)
734 {
735 pPalOut[i] = RGB(ppal->IndexedColors[i].peRed,
736 ppal->IndexedColors[i].peGreen,
737 ppal->IndexedColors[i].peBlue);
738 }
739 }
740 else
741 {
742 // FIXME: should use the above code
743 pPalOut[0] = ppal->RedMask;
744 pPalOut[1] = ppal->GreenMask;
745 pPalOut[2] = ppal->BlueMask;
746 }
747
748 return cPal;
749}
#define min(a, b)
Definition: monoChain.cc:55
PPALETTE ppalDst
Definition: xlateobj.h:26
PPALETTE ppalSrc
Definition: xlateobj.h:25
PPALETTE ppalDstDc
Definition: xlateobj.h:27
ULONG BlueMask
Definition: palette.h:45
ULONG GreenMask
Definition: palette.h:44
ULONG NumColors
Definition: palette.h:41
PALETTEENTRY * IndexedColors
Definition: palette.h:42
FLONG flFlags
Definition: palette.h:40
ULONG RedMask
Definition: palette.h:43
#define XO_SRCPALETTE
Definition: winddi.h:3151
_In_ SURFOBJ _In_ CLIPOBJ _In_opt_ XLATEOBJ * pxlo
Definition: winddi.h:3416
#define XO_DESTBITFIELDS
Definition: winddi.h:3155
#define XO_SRCBITFIELDS
Definition: winddi.h:3154
#define XO_DESTPALETTE
Definition: winddi.h:3152
#define XO_DESTDCPALETTE
Definition: winddi.h:3153
struct _EXLATEOBJ * PEXLATEOBJ

◆ XLATEOBJ_hGetColorTransform()

HANDLE NTAPI XLATEOBJ_hGetColorTransform ( _In_ XLATEOBJ pxlo)

Definition at line 753 of file xlateobj.c.

755{
756 PEXLATEOBJ pexlo = (PEXLATEOBJ)pxlo;
757 return pexlo->hColorTransform;
758}
HANDLE hColorTransform
Definition: xlateobj.h:29

◆ XLATEOBJ_iXlate()

◆ XLATEOBJ_piVector()

PULONG NTAPI XLATEOBJ_piVector ( _In_ XLATEOBJ pxlo)

Definition at line 762 of file xlateobj.c.

764{
765 if (pxlo->iSrcType == PAL_INDEXED)
766 {
767 return pxlo->pulXlate;
768 }
769
770 return NULL;
771}

Variable Documentation

◆ gajXlate5to8

const BYTE gajXlate5to8[32]
static
Initial value:
=
{ 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}

Definition at line 28 of file xlateobj.c.

◆ gajXlate6to8

const BYTE gajXlate6to8[64]
static
Initial value:
=
{ 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}

Definition at line 32 of file xlateobj.c.

◆ giUniqueXlate

ULONG giUniqueXlate = 0
static

Definition at line 26 of file xlateobj.c.

Referenced by EXLATEOBJ_vInitialize().