From eac86043fd347f1f62eb2dbc5195b8daf92426c8 Mon Sep 17 00:00:00 2001 From: "alex.fritze%crocodile-clips.com" Date: Tue, 16 Sep 2003 12:28:25 +0000 Subject: [PATCH] Fix swapped colors on Windows. git-svn-id: svn://10.0.0.236/branches/SVG_20020806_BRANCH@146953 18797224-902f-48f8-a5cc-f745e15eee43 --- .../svg/renderer/src/libart/nsISVGLibartBitmap.h | 5 +++-- .../src/libart/nsSVGLibartBitmapDefault.cpp | 4 ++++ .../renderer/src/libart/nsSVGLibartCanvas.cpp | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/mozilla/layout/svg/renderer/src/libart/nsISVGLibartBitmap.h b/mozilla/layout/svg/renderer/src/libart/nsISVGLibartBitmap.h index 435ff78f71e..eb3eb78f09d 100644 --- a/mozilla/layout/svg/renderer/src/libart/nsISVGLibartBitmap.h +++ b/mozilla/layout/svg/renderer/src/libart/nsISVGLibartBitmap.h @@ -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; diff --git a/mozilla/layout/svg/renderer/src/libart/nsSVGLibartBitmapDefault.cpp b/mozilla/layout/svg/renderer/src/libart/nsSVGLibartBitmapDefault.cpp index c83e8b586a6..11c76eeede8 100644 --- a/mozilla/layout/svg/renderer/src/libart/nsSVGLibartBitmapDefault.cpp +++ b/mozilla/layout/svg/renderer/src/libart/nsSVGLibartBitmapDefault.cpp @@ -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) diff --git a/mozilla/layout/svg/renderer/src/libart/nsSVGLibartCanvas.cpp b/mozilla/layout/svg/renderer/src/libart/nsSVGLibartCanvas.cpp index 75de17815d3..47160251ed6 100644 --- a/mozilla/layout/svg/renderer/src/libart/nsSVGLibartCanvas.cpp +++ b/mozilla/layout/svg/renderer/src/libart/nsSVGLibartCanvas.cpp @@ -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 ( ; bufGetLineStride() == 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));