]> git.lyx.org Git - lyx.git/blobdiff - src/ColorHandler.C
Fix fuer #209
[lyx.git] / src / ColorHandler.C
index c6f6fba32a0f27ad19672a88b658f19961c745a1..54968146a15d00d5d4ea0ae8b80d10b988e924aa 100644 (file)
@@ -108,12 +108,12 @@ GC LyXColorHandler::getGCForeground(LColor::color c)
                // the color closest to the one we want.
                Visual * vi = DefaultVisual(display, DefaultScreen(display));
 
-               XColor * cmap = new XColor[vi->map_entries];
+               boost::scoped_array<XColor> cmap(new XColor[vi->map_entries]);
 
                for (int i = 0; i < vi->map_entries; ++i) {
                        cmap[i].pixel = i;
                }
-               XQueryColors(display, colormap, cmap, vi->map_entries);
+               XQueryColors(display, colormap, cmap.get(), vi->map_entries);
 
                // Walk through the cmap and look for close colors.
                int closest_pixel = 0;
@@ -153,7 +153,6 @@ GC LyXColorHandler::getGCForeground(LColor::color c)
                       << _("Pixel [") << closest_pixel << _("] is used.") 
                       << endl;
                val.foreground = cmap[closest_pixel].pixel;
-               delete[] cmap;
        }
 
        val.function = GXcopy;
@@ -172,8 +171,9 @@ GC LyXColorHandler::getGCLinepars(PainterBase::line_style ls,
        
        int index = lw + (ls << 1) + (c << 6);
 
-       if (lineGCcache.find(index) != lineGCcache.end())
-               return lineGCcache[index];
+       LineGCCache::iterator it = lineGCcache.find(index);
+       if (it != lineGCcache.end())
+               return it->second;
 
        XGCValues val;
        XGetGCValues(display, getGCForeground(c), GCForeground, &val);
@@ -227,10 +227,11 @@ void LyXColorHandler::updateColor (LColor::color c)
        for (int ls = 0; ls < 3; ++ls)
                for (int lw = 0; lw < 2; ++lw) {
                        int const index = lw + (ls << 1) + (c << 6);
-                       if (lineGCcache.find(index) != lineGCcache.end()) {
-                               gc = lineGCcache[index];
-                               XFreeGC(display,gc);
-                               lineGCcache.erase(index);
+                       LineGCCache::iterator it = lineGCcache.find(index);
+                       if (it != lineGCcache.end()) {
+                               gc = it->second;
+                               XFreeGC(display, gc);
+                               lineGCcache.erase(it);
                                getGCLinepars(PainterBase::line_style(ls),
                                              PainterBase::line_width(lw), c);
                        }