+
+ keyString = key;
+ if ( isNone )
+ maskKey = keyString;
+
+ clr_tbl[keyString] = clr_data;
+ }
+
+ // 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 (!maskKey.empty())
+ {
+ wxLongToLongHashMap rgb_table;
+ long rgb;
+ const size_t n = clr_tbl.size();
+ wxXPMColourMap::const_iterator iter = clr_tbl.begin();
+ for (i = 0; i < n; ++i, ++iter)
+ {
+ const wxXPMColourMapData& data = iter->second;
+ rgb = (data.R << 16) + (data.G << 8) + data.B;
+ rgb_table[rgb];
+ }
+ for (rgb = 0; rgb <= 0xffffff && rgb_table.count(rgb); ++rgb)
+ ;
+ if (rgb > 0xffffff)
+ {
+ wxLogError(_("XPM: no colors left to use for mask!"));
+ return wxNullImage;
+ }
+
+ wxXPMColourMapData& maskData = clr_tbl[maskKey];
+ maskData.R = wxByte(rgb >> 16);
+ maskData.G = wxByte(rgb >> 8);
+ maskData.B = wxByte(rgb);
+
+ img.SetMaskColour(maskData.R, maskData.G, maskData.B);