- bool isNone;
- if ( !GetRGBFromName(clr_def, &isNone,
- &clr_data->R, &clr_data->G, &clr_data->B) )
- {
- wxLogError(_("XPM: malformed colour definition '%s'!"), xpm_data[1+i]);
- clr_data->R = 255, clr_data->G = 0, clr_data->B = 255;
- }
- else
- {
- if ( isNone )
- {
- img.SetMask(TRUE);
- img.SetMaskColour(255, 0, 255);
- hasMask = TRUE;
- clr_data->R = 255, clr_data->G = 0, clr_data->B = 255;
- }
- else
- {
- if ( hasMask && clr_data->R == 255 &&
- clr_data->G == 0 && clr_data->B == 255 )
- clr_data->B = 254;
- }
- }
+ wxLogError(_("XPM: malformed colour definition '%s' at line %d!"),
+ xmpColLine, (int)(1 + i));
+ return wxNullImage;
+ }
+
+ if ( isNone )
+ {
+ hasMask = true;
+ maskKey = key;
+ }
+
+ clr_tbl[key] = 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 (hasMask)
+ {
+ unsigned char r, g, b;
+ if ( !img.FindFirstUnusedColour(&r, &g, &b) )
+ {
+ wxLogError(_("XPM: no colors left to use for mask!"));
+ return wxNullImage;