From 1ffeecf7a90f620c9a194a138bc84db17fdd18e0 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 9 Jul 2007 17:08:20 +0000 Subject: [PATCH] use first unused colour for the mask instead of hardcoded #ff00ff (patch 1746895) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47268 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/xpmdecod.cpp | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/src/common/xpmdecod.cpp b/src/common/xpmdecod.cpp index 709cc6e7dc..b866d751aa 100644 --- a/src/common/xpmdecod.cpp +++ b/src/common/xpmdecod.cpp @@ -733,11 +733,6 @@ wxImage wxXPMDecoder::ReadData(const char* const* xpm_data) if ( isNone ) { - img.SetMask(true); - img.SetMaskColour(255, 0, 255); - clr_data.R = - clr_data.B = 255; - clr_data.G = 0; hasMask = true; maskKey = key; } @@ -745,22 +740,23 @@ wxImage wxXPMDecoder::ReadData(const char* const* xpm_data) clr_tbl[key] = clr_data; } - /* - * Modify colour entries with RGB = (255,0,255) to (255,0,254) if - * mask colour is present (so that existing pixels with (255,0,255) - * magenta colour are not incorrectly made transparent): - */ + // deal with the mask: we must replace pseudo-colour "None" with the mask + // colour (which can be any colour not otherwise used in the image) if (hasMask) { - for (it = clr_tbl.begin(); it != clr_tbl.end(); ++it) + unsigned char r, g, b; + if ( !img.FindFirstUnusedColour(&r, &g, &b) ) { - if (it->second.R == 255 && it->second.G == 0 && - it->second.B == 255 && - it->first != maskKey) - { - it->second.B = 254; - } + wxLogError(_("XPM: no colors left to use for mask!")); + return wxNullImage; } + + clr_tbl[maskKey].R = r; + clr_tbl[maskKey].G = g; + clr_tbl[maskKey].B = b; + + img.SetMask(true); + img.SetMaskColour(r, g, b); } /* -- 2.45.2