Unicode fixes
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10215 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -128,12 +128,16 @@ bool wxXPMHandler::SaveFile(wxImage * image,
|
|||||||
chars_per_pixel++;
|
chars_per_pixel++;
|
||||||
|
|
||||||
// 2. write the header:
|
// 2. write the header:
|
||||||
tmp.Printf("/* XPM */\n"
|
char tmpbuf[200];
|
||||||
|
// VS: 200b is safe upper bound for anything produced by sprintf bellow
|
||||||
|
// (101 bytes the string, neither %i can expand into more than 10 chars)
|
||||||
|
sprintf(tmpbuf,
|
||||||
|
"/* XPM */\n"
|
||||||
"static char *xpm_data[] = {\n"
|
"static char *xpm_data[] = {\n"
|
||||||
"/* columns rows colors chars-per-pixel */\n"
|
"/* columns rows colors chars-per-pixel */\n"
|
||||||
"\"%i %i %i %i\",\n",
|
"\"%i %i %i %i\",\n",
|
||||||
image->GetWidth(), image->GetHeight(), cols, chars_per_pixel);
|
image->GetWidth(), image->GetHeight(), cols, chars_per_pixel);
|
||||||
stream.Write(tmp.mb_str(), tmp.Length());
|
stream.Write(tmpbuf, strlen(tmpbuf));
|
||||||
|
|
||||||
// 3. create color symbols table:
|
// 3. create color symbols table:
|
||||||
wxHashTable table(wxKEY_INTEGER);
|
wxHashTable table(wxKEY_INTEGER);
|
||||||
|
@@ -641,8 +641,8 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
|
|||||||
wxImage img;
|
wxImage img;
|
||||||
int count;
|
int count;
|
||||||
unsigned width, height, colors_cnt, chars_per_pixel;
|
unsigned width, height, colors_cnt, chars_per_pixel;
|
||||||
unsigned i, j;
|
size_t i, j, i_key;
|
||||||
char key[64];
|
wxChar key[64];
|
||||||
const char *clr_def;
|
const char *clr_def;
|
||||||
bool hasMask;
|
bool hasMask;
|
||||||
wxXPMColourMapData *clr_data;
|
wxXPMColourMapData *clr_data;
|
||||||
@@ -669,7 +669,7 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
|
|||||||
if ( !img.Ok() ) return img;
|
if ( !img.Ok() ) return img;
|
||||||
|
|
||||||
img.SetMask(FALSE);
|
img.SetMask(FALSE);
|
||||||
key[chars_per_pixel] = '\0';
|
key[chars_per_pixel] = wxT('\0');
|
||||||
hasMask = FALSE;
|
hasMask = FALSE;
|
||||||
clr_tbl.DeleteContents(TRUE);
|
clr_tbl.DeleteContents(TRUE);
|
||||||
|
|
||||||
@@ -678,7 +678,8 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
|
|||||||
*/
|
*/
|
||||||
for (i = 0; i < colors_cnt; i++)
|
for (i = 0; i < colors_cnt; i++)
|
||||||
{
|
{
|
||||||
memcpy(key, xpm_data[1 + i], chars_per_pixel);
|
for (i_key = 0; i_key < chars_per_pixel; i_key++)
|
||||||
|
key[i_key] = (wxChar)xpm_data[1 + i][i_key];
|
||||||
clr_def = ParseColor(xpm_data[1 + i]);
|
clr_def = ParseColor(xpm_data[1 + i]);
|
||||||
clr_data = new wxXPMColourMapData;
|
clr_data = new wxXPMColourMapData;
|
||||||
|
|
||||||
@@ -725,9 +726,9 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
|
|||||||
{
|
{
|
||||||
for (i = 0; i < width; i++, img_data += 3)
|
for (i = 0; i < width; i++, img_data += 3)
|
||||||
{
|
{
|
||||||
memcpy(key,
|
for (i_key = 0; i_key < chars_per_pixel; i_key++)
|
||||||
xpm_data[1 + colors_cnt + j] + chars_per_pixel * i,
|
key[i_key] = (wxChar)xpm_data[1 + colors_cnt + j]
|
||||||
chars_per_pixel);
|
[chars_per_pixel * i + i_key];
|
||||||
clr_data = (wxXPMColourMapData*) clr_tbl.Get(key);
|
clr_data = (wxXPMColourMapData*) clr_tbl.Get(key);
|
||||||
if ( clr_data == NULL )
|
if ( clr_data == NULL )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user