[WIN32K]
[reactos.git] / subsystems / win32 / win32k / eng / xlate.c
index 870f363..a1ec189 100644 (file)
@@ -65,10 +65,10 @@ EXLATEOBJ_iXlateRGBtoBGR(PEXLATEOBJ pxlo, ULONG iColor)
     ULONG iNewColor;
 
     /* Copy green */
-    iNewColor = iColor & 0x00ff00;
+    iNewColor = iColor & 0xff00ff00;
 
     /* Mask red and blue */
-    iColor &= 0xff00ff;
+    iColor &= 0x00ff00ff;
 
     /* Shift and copy red and blue */
     iNewColor |= iColor >> 16;
@@ -83,24 +83,45 @@ EXLATEOBJ_iXlateRGBto555(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;
+}
+
+ULONG
+FASTCALL
+EXLATEOBJ_iXlateBGRto555(PEXLATEOBJ pxlo, ULONG iColor)
+{
+    ULONG iNewColor;
+
     /* Copy red */
     iColor <<= 7;
     iNewColor = iColor & 0x7C00;
 
     /* Copy green */
     iColor >>= 13;
-    iNewColor |= iColor & 0x3E0;
+    iNewColor |= (iColor & 0x3E0);
 
-    /* Copy green */
+    /* Copy blue */
     iColor >>= 13;
-    iNewColor |= iColor & 0x1F;
+    iNewColor |= (iColor & 0x1F);
 
     return iNewColor;
 }
 
 ULONG
 FASTCALL
-EXLATEOBJ_iXlateBGRto555(PEXLATEOBJ pxlo, ULONG iColor)
+EXLATEOBJ_iXlateRGBto565(PEXLATEOBJ pxlo, ULONG iColor)
 {
     ULONG iNewColor;
 
@@ -109,19 +130,19 @@ EXLATEOBJ_iXlateBGRto555(PEXLATEOBJ pxlo, ULONG iColor)
     iNewColor = iColor & 0x1f;
 
     /* Copy green */
-    iColor >>= 3;
-    iNewColor |= (iColor & 0x3E0);
+    iColor >>= 2;
+    iNewColor |= (iColor & 0x7E0);
 
     /* Copy red */
     iColor >>= 3;
-    iNewColor |= (iColor & 0x7C00);
+    iNewColor |= (iColor & 0xF800);
 
     return iNewColor;
 }
 
 ULONG
 FASTCALL
-EXLATEOBJ_iXlateRGBto565(PEXLATEOBJ pxlo, ULONG iColor)
+EXLATEOBJ_iXlateBGRto565(PEXLATEOBJ pxlo, ULONG iColor)
 {
     ULONG iNewColor;
 
@@ -140,27 +161,6 @@ EXLATEOBJ_iXlateRGBto565(PEXLATEOBJ pxlo, ULONG iColor)
     return iNewColor;
 }
 
-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;
-}
-
 ULONG
 FASTCALL
 EXLATEOBJ_iXlateRGBtoPal(PEXLATEOBJ pexlo, ULONG iColor)
@@ -175,7 +175,7 @@ EXLATEOBJ_iXlate555toRGB(PEXLATEOBJ pxlo, ULONG iColor)
     ULONG iNewColor;
 
     /* Copy blue */
-    iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
+    iNewColor = gajXlate5to8[iColor & 0x1F];
 
     /* Copy green */
     iColor >>= 5;
@@ -183,7 +183,7 @@ EXLATEOBJ_iXlate555toRGB(PEXLATEOBJ pxlo, ULONG iColor)
 
     /* Copy red */
     iColor >>= 5;
-    iNewColor |= gajXlate5to8[iColor & 0x1F];
+    iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
 
     return iNewColor;
 }
@@ -195,7 +195,7 @@ EXLATEOBJ_iXlate555toBGR(PEXLATEOBJ pxlo, ULONG iColor)
     ULONG iNewColor;
 
     /* Copy blue */
-    iNewColor = gajXlate5to8[iColor & 0x1F];
+    iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
 
     /* Copy green */
     iColor >>= 5;
@@ -203,7 +203,7 @@ EXLATEOBJ_iXlate555toBGR(PEXLATEOBJ pxlo, ULONG iColor)
 
     /* Copy red */
     iColor >>= 5;
-    iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
+    iNewColor |= gajXlate5to8[iColor & 0x1F];
 
     return iNewColor;
 }
@@ -260,7 +260,7 @@ EXLATEOBJ_iXlate565toRGB(PEXLATEOBJ pexlo, ULONG iColor)
     ULONG iNewColor;
 
     /* Copy blue */
-    iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
+    iNewColor = gajXlate5to8[iColor & 0x1F];
 
     /* Copy green */
     iColor >>= 5;
@@ -268,7 +268,7 @@ EXLATEOBJ_iXlate565toRGB(PEXLATEOBJ pexlo, ULONG iColor)
 
     /* Copy red */
     iColor >>= 6;
-    iNewColor |= gajXlate5to8[iColor & 0x1F];
+    iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
 
     return iNewColor;
 }
@@ -280,15 +280,15 @@ EXLATEOBJ_iXlate565toBGR(PEXLATEOBJ pexlo, ULONG iColor)
     ULONG iNewColor;
 
     /* Copy blue */
-    iNewColor = gajXlate5to8[iColor & 0x1F];
+    iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
 
     /* Copy green */
     iColor >>= 5;
     iNewColor |= gajXlate6to8[iColor & 0x3F] << 8;
 
-    /* Copy blue */
+    /* Copy red */
     iColor >>= 6;
-    iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
+    iNewColor |= gajXlate5to8[iColor & 0x1F];
 
     return iNewColor;
 }
@@ -603,90 +603,26 @@ EXLATEOBJ_vInitXlateFromDCs(
     PDC pdcDst)
 {
     PSURFACE psurfDst, psurfSrc;
-    PPALETTE ppalSrc, ppalDst, ppalDstDc;
-
-    DPRINT("Enter EXLATEOBJ_vInitXlateFromDCs\n");
-
-    /* Do basic init */
-    EXLATEOBJ_vInitTrivial(pexlo);
 
     psurfDst = pdcDst->dclevel.pSurface;
     psurfSrc = pdcSrc->dclevel.pSurface;
 
+    /* Check for trivial color translation */
     if (psurfDst == psurfSrc)
     {
+        EXLATEOBJ_vInitTrivial(pexlo);
         return;
     }
 
-    ppalSrc = psurfSrc->ppal;
-
-    if(!ppalSrc)
-    {
-        DPRINT1("No palette for src surface %p.\n", psurfSrc);
-        return;
-    }
-
-    ppalDst = psurfDst->ppal;
-
-    if (!ppalDst)
-    {
-        DPRINT1("No palette for dst surface %p.\n", psurfDst);
-        return;
-    }
-
-    ppalDstDc = pdcDst->dclevel.ppal;
-    ASSERT(ppalDstDc);
-
+    /* Normal initialisation. No surface means DEFAULT_BITMAP */
     EXLATEOBJ_vInitialize(pexlo,
-                          ppalSrc,
-                          ppalDst,
+                          psurfSrc ? psurfSrc->ppal : &gpalMono,
+                          psurfDst ? psurfDst->ppal : &gpalMono,
                           pdcSrc->pdcattr->crBackgroundClr,
                           pdcDst->pdcattr->crBackgroundClr,
                           pdcDst->pdcattr->crForegroundClr);
 }
 
-
-VOID
-NTAPI
-EXLATEOBJ_vInitBrushXlate(
-    PEXLATEOBJ pexlo,
-    BRUSH *pbrush,
-    SURFACE *psurfDst,
-    COLORREF crForegroundClr,
-    COLORREF crBackgroundClr)
-{
-    PPALETTE ppalDst;
-    SURFACE *psurfPattern;
-
-    ASSERT(pexlo);
-    ASSERT(pbrush);
-    ASSERT(psurfDst);
-    ASSERT(!(pbrush->flAttrs & (GDIBRUSH_IS_SOLID | GDIBRUSH_IS_NULL)));
-
-    EXLATEOBJ_vInitTrivial(pexlo);
-
-    ppalDst = psurfDst->ppal;
-
-    if (!ppalDst)
-    {
-        DPRINT1("No palette for dst surface %p.\n", psurfDst);
-        return;
-    }
-
-    psurfPattern = SURFACE_ShareLockSurface(pbrush->hbmPattern);
-    if (!psurfPattern)
-    {
-        return;
-    }
-
-    if (psurfPattern->ppal)
-    {
-        EXLATEOBJ_vInitialize(pexlo, psurfPattern->ppal, ppalDst, 0, crBackgroundClr, crForegroundClr);
-    }
-
-    SURFACE_ShareUnlockSurface(psurfPattern);
-}
-
 VOID
 NTAPI
 EXLATEOBJ_vCleanup(PEXLATEOBJ pexlo)