ReactOS  0.4.13-dev-92-gf251225
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 {
366  ULONG cEntries;
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 pallettes 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),
463  GDITAG_PXLATE);
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 EngFreeMem
Definition: polytest.cpp:56
#define GetRValue(rgb)
Definition: wingdi.h:2913
ULONG NTAPI PALETTE_ulGetNearestPaletteIndex(PALETTE *ppal, ULONG iColor)
Definition: palette.c:258
#define GetGValue(rgb)
Definition: wingdi.h:2914
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
#define GDITAG_PXLATE
Definition: tags.h:180
smooth NULL
Definition: ftsmooth.c:416
VOID NTAPI PALETTE_vGetBitMasks(PPALETTE ppal, PULONG pulColors)
Definition: palette.c:319
#define XO_TABLE
Definition: winddi.h:1248
#define RGB(r, g, b)
Definition: wingdi.h:2918
ULONG NTAPI PALETTE_ulGetNearestIndex(PALETTE *ppal, ULONG ulColor)
Definition: palette.c:309
_In_ UINT _In_ UINT cEntries
Definition: wingdi.h:3598
void * EngAllocMem(int zero, unsigned long size, int tag=0)
Definition: polytest.cpp:70
#define XO_TRIVIAL
Definition: winddi.h:1247
#define InterlockedIncrement
Definition: armddk.h:53
unsigned short USHORT
Definition: pedump.c:61
#define XO_TO_MONO
Definition: winddi.h:1249
FORCEINLINE ULONG CalculateShift(ULONG ulMask1, ULONG ulMask2)
Definition: palette.h:130
#define DPRINT1
Definition: precomp.h:8
static ULONG giUniqueXlate
Definition: xlateobj.c:26
unsigned int ULONG
Definition: retypes.h:1
#define GetBValue(rgb)
Definition: wingdi.h:2915
PALETTE gpalRGB
Definition: palette.c:17
ULONG NTAPI PALETTE_ulGetNearestBitFieldsIndex(PALETTE *ppal, ULONG ulColor)
Definition: palette.c:291

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 */
639  EXLATEOBJ_vInitialize(pexlo,
640  gppalMono,
641  ppalDst,
642  0,
643  crBackgroundClr,
644  crForegroundClr);
645 }
PALETTE * gppalMono
Definition: palette.c:17
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 */
622  EXLATEOBJ_vInitialize(pexlo,
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 }
PALETTE * gppalMono
Definition: palette.c:17
struct _PALETTE *const ppal
Definition: surface.h:11
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 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 XO_DESTPALETTE
Definition: winddi.h:3152
PALETTEENTRY * IndexedColors
Definition: palette.h:42
#define XO_DESTDCPALETTE
Definition: winddi.h:3153
#define XO_DESTBITFIELDS
Definition: winddi.h:3155
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
ULONG RedMask
Definition: palette.h:43
ULONG BlueMask
Definition: palette.h:45
ULONG GreenMask
Definition: palette.h:44
#define RGB(r, g, b)
Definition: wingdi.h:2918
#define XO_SRCPALETTE
Definition: winddi.h:3151
ULONG NumColors
Definition: palette.h:41
FLONG flFlags
Definition: palette.h:40
PPALETTE ppalDstDc
Definition: xlateobj.h:27
#define min(a, b)
Definition: monoChain.cc:55
#define DPRINT1
Definition: precomp.h:8
unsigned int ULONG
Definition: retypes.h:1
PPALETTE ppalSrc
Definition: xlateobj.h:25
#define XO_SRCBITFIELDS
Definition: winddi.h:3154
_In_ SURFOBJ _In_ CLIPOBJ _In_opt_ XLATEOBJ * pxlo
Definition: winddi.h:3414
PPALETTE ppalDst
Definition: xlateobj.h:26
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
_In_ SURFOBJ _In_ CLIPOBJ _In_opt_ XLATEOBJ * pxlo
Definition: winddi.h:3414
struct _EXLATEOBJ * PEXLATEOBJ

◆ 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 }
smooth NULL
Definition: ftsmooth.c:416
_In_ SURFOBJ _In_ CLIPOBJ _In_opt_ XLATEOBJ * pxlo
Definition: winddi.h:3414

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().