]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/imagxpm.cpp
tmake update.
[wxWidgets.git] / src / common / imagxpm.cpp
index b8996eaafed5c92bb627990d7c92143811277e64..7ebe0c9edf228f2d7e444e0c74a8e1b464f19a1e 100644 (file)
@@ -129,7 +129,7 @@ bool wxXPMHandler::SaveFile(wxImage * image,
 
     // 2. write the header:
     char tmpbuf[200];
-    // VS: 200b is safe upper bound for anything produced by sprintf bellow
+    // VS: 200b is safe upper bound for anything produced by sprintf below
     //     (101 bytes the string, neither %i can expand into more than 10 chars)
     sprintf(tmpbuf, 
                "/* XPM */\n"
@@ -140,26 +140,23 @@ bool wxXPMHandler::SaveFile(wxImage * image,
     stream.Write(tmpbuf, strlen(tmpbuf));
 
     // 3. create color symbols table:
-    wxHashTable table(wxKEY_INTEGER);
-    table.DeleteContents(TRUE);    
-    image->ComputeHistogram(table);
+    wxImageHistogram histogram;
+    image->ComputeHistogram(histogram);
 
     char *symbols_data = new char[cols * (chars_per_pixel+1)];
     char **symbols = new char*[cols];
 
     // 2a. find mask colour:
-    long mask_key = -1;
+    unsigned long mask_key = 0x1000000 /*invalid RGB value*/;
     if (image->HasMask())
         mask_key = (image->GetMaskRed() << 16) |
                    (image->GetMaskGreen() << 8) | image->GetMaskBlue();
 
     // 2b. generate colour table:
-    table.BeginFind();
-    wxNode *node = NULL;
-    while ((node = table.Next()) != NULL)
+    for (wxImageHistogram::iterator entry = histogram.begin();
+         entry != histogram.end(); entry++ )
     {
-        wxHNode *hnode = (wxHNode*) node->GetData();
-        long index = hnode->index;
+        unsigned long index = entry->second.index;
         symbols[index] = symbols_data + index * (chars_per_pixel+1);
         char *sym = symbols[index];
 
@@ -172,7 +169,7 @@ bool wxXPMHandler::SaveFile(wxImage * image,
         }
         sym[j] = '\0';
 
-        long key = node->GetKeyInteger();
+        unsigned long key = entry->first;
 
         if (key == 0)
             tmp.Printf(wxT("\"%s c Black\",\n"), sym);
@@ -196,8 +193,7 @@ bool wxXPMHandler::SaveFile(wxImage * image,
         for (i = 0; i < image->GetWidth(); i++, data += 3)
         {
             unsigned long key = (data[0] << 16) | (data[1] << 8) | (data[2]);
-            wxHNode *hnode = (wxHNode*) table.Get(key);
-            stream.Write(symbols[hnode->index], chars_per_pixel);
+            stream.Write(symbols[histogram[key].index], chars_per_pixel);
         }
         tmp_c = '\"'; stream.Write(&tmp_c, 1);
         if ( j + 1 < image->GetHeight() )
@@ -209,6 +205,7 @@ bool wxXPMHandler::SaveFile(wxImage * image,
     tmp = wxT("};\n");
     stream.Write(tmp.mb_str(), 3);
 
+    // Clean up:
     delete[] symbols;
     delete[] symbols_data;