Fix swapped colors on Windows.

git-svn-id: svn://10.0.0.236/branches/SVG_20020806_BRANCH@146953 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
alex.fritze%crocodile-clips.com
2003-09-16 12:28:25 +00:00
parent 472042d899
commit eac86043fd
3 changed files with 23 additions and 2 deletions

View File

@@ -61,8 +61,9 @@ public:
static const nsIID& GetIID() { static nsIID iid = NS_ISVGLIBARTBITMAP_IID; return iid; }
enum PixelFormat {
PIXEL_FORMAT_24_RGB = 1, // linux, windows
PIXEL_FORMAT_32_ABGR = 2 // mac
PIXEL_FORMAT_24_RGB = 1, // linux
PIXEL_FORMAT_24_BGR = 2, // windows
PIXEL_FORMAT_32_ABGR = 3 // mac
};
NS_IMETHOD_(PRUint8 *) GetBits()=0;

View File

@@ -197,7 +197,11 @@ nsSVGLibartBitmapDefault::GetBits()
NS_IMETHODIMP_(nsISVGLibartBitmap::PixelFormat)
nsSVGLibartBitmapDefault::GetPixelFormat()
{
#ifdef WIN32
return PIXEL_FORMAT_24_BGR;
#else
return PIXEL_FORMAT_24_RGB;
#endif
}
NS_IMETHODIMP_(int)

View File

@@ -196,6 +196,17 @@ nsSVGLibartCanvas::Clear(nscolor color)
}
break;
}
case nsISVGLibartBitmap::PIXEL_FORMAT_24_BGR:
{
PRInt32 stride = mBitmap->GetLineStride();
PRInt32 width = mBitmap->GetWidth();
PRUint8* buf = mBitmap->GetBits();
PRUint8* end = buf + stride*mBitmap->GetHeight();
for ( ; buf<end; buf += stride) {
art_rgb_fill_run(buf, blue, green, red, width);
}
break;
}
case nsISVGLibartBitmap::PIXEL_FORMAT_32_ABGR:
{
NS_ASSERTION(mBitmap->GetLineStride() == 4*mBitmap->GetWidth(), "strange pixel format");
@@ -254,6 +265,11 @@ nsSVGLibartCanvas::GetArtColor(nscolor rgb, ArtColor& artColor)
artColor[1] = ART_PIX_MAX_FROM_8(NS_GET_G(rgb));
artColor[2] = ART_PIX_MAX_FROM_8(NS_GET_B(rgb));
break;
case nsISVGLibartBitmap::PIXEL_FORMAT_24_BGR:
artColor[0] = ART_PIX_MAX_FROM_8(NS_GET_B(rgb));
artColor[1] = ART_PIX_MAX_FROM_8(NS_GET_G(rgb));
artColor[2] = ART_PIX_MAX_FROM_8(NS_GET_R(rgb));
break;
case nsISVGLibartBitmap::PIXEL_FORMAT_32_ABGR:
artColor[3] = ART_PIX_MAX_FROM_8(NS_GET_R(rgb));
artColor[2] = ART_PIX_MAX_FROM_8(NS_GET_G(rgb));