]> git.lyx.org Git - lyx.git/blobdiff - src/ColorHandler.C
fix typo that put too many include paths for most people
[lyx.git] / src / ColorHandler.C
index 95912c522592b3c781e8812680eb44e7793bf479..6a1f333ab4ecbf6cac6f4985d3234ac7e7ff1b7b 100644 (file)
@@ -1,8 +1,8 @@
 /* This file is part of
  * ======================================================
- * 
+ *
  *           LyX, The Document Processor
- *      
+ *
  *         Copyright 1998-2001 The LyX Team
  *
  *======================================================*/
 #pragma implementation
 #endif
 
-#include <cmath>
-
-#include "frontends/GUIRunTime.h"
 #include "ColorHandler.h"
 #include "LColor.h"
 #include "gettext.h"
 #include "debug.h"
 
+#include "frontends/GUIRunTime.h"
+
+#include <cmath>
+
 using std::endl;
 
-LyXColorHandler::LyXColorHandler() 
+
+LyXColorHandler::LyXColorHandler()
 {
        display = GUIRunTime::x11Display();
        drawable = XCreatePixmap(display,
                                 RootWindow(display, GUIRunTime::x11Screen()),
                                 10, 10,
                                 GUIRunTime::x11VisualDepth());
-       
+
        colormap = GUIRunTime::x11Colormap();
        // Clear the GC cache
        for (int i = 0; i <= LColor::ignore; ++i) {
@@ -70,19 +72,21 @@ GC LyXColorHandler::getGCForeground(LColor::color c)
        //if (lyxerr.debugging()) {
        //      lyxerr << "Painter drawable: " << drawable() << endl;
        //}
-       
-       if (colorGCcache[c] != 0) return colorGCcache[c];
 
-       XColor xcol, ccol;
-       string s = lcolor.getX11Name(c);
+       if (colorGCcache[c] != 0)
+               return colorGCcache[c];
+
+       XColor xcol;
+       XColor ccol;
+       string const s = lcolor.getX11Name(c);
        XGCValues val;
 
        // Look up the RGB values for the color, and an approximate
        // color that we can hope to get on this display.
-        if (XLookupColor(display, colormap, s.c_str(), &xcol, &ccol) == 0) {
+       if (XLookupColor(display, colormap, s.c_str(), &xcol, &ccol) == 0) {
                lyxerr << _("LyX: Unknown X11 color ") << s
                       << _(" for ") << lcolor.getGUIName(c) << '\n'
-                      << _("     Using black instead, sorry!.") << endl;
+                      << _("     Using black instead, sorry!") << endl;
                unsigned long bla = BlackPixel(display,
                                               DefaultScreen(display));
                val.foreground = bla;
@@ -90,7 +94,7 @@ GC LyXColorHandler::getGCForeground(LColor::color c)
        } else if (XAllocColor(display, colormap, &xcol) != 0) {
                if (lyxerr.debugging(Debug::GUI)) {
                        lyxerr << _("LyX: X11 color ") << s
-                              << _(" allocated for ") 
+                              << _(" allocated for ")
                               << lcolor.getGUIName(c) << endl;
                }
                val.foreground = xcol.pixel;
@@ -104,25 +108,25 @@ 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;
                double closest_distance = 1e20; // we want to minimize this
                double distance = 0;
                for (int t = 0; t < vi->map_entries; ++t) {
-                       // The Euclidean distance between two points in 
+                       // The Euclidean distance between two points in
                        // a three-dimensional space, the RGB color-cube,
                        // is used as the distance measurement between two
                        // colors.
 
                        // Since square-root is monotonous, we don't have to
-                       // take the square-root to find the minimum, and thus 
+                       // take the square-root to find the minimum, and thus
                        // we use the squared distance instead to be faster.
 
                        // If we want to get fancy, we could convert the RGB
@@ -136,20 +140,19 @@ GC LyXColorHandler::getGCForeground(LColor::color c)
                                closest_pixel = t;
                        }
                }
-               lyxerr << _("LyX: Couldn't allocate '") << s 
+               lyxerr << _("LyX: Couldn't allocate '") << s
                       << _("' for ") << lcolor.getGUIName(c)
-                      << _(" with (r,g,b)=(") 
+                      << _(" with (r,g,b)=(")
                       << xcol.red << "," << xcol.green << ","
                       << xcol.blue << ").\n"
                       << _("     Using closest allocated "
-                           "color with (r,g,b)=(") 
+                           "color with (r,g,b)=(")
                       << cmap[closest_pixel].red << ","
                       << cmap[closest_pixel].green << ","
                       << cmap[closest_pixel].blue << _(") instead.\n")
-                      << _("Pixel [") << closest_pixel << _("] is used.") 
+                      << _("Pixel [") << closest_pixel << _("] is used.")
                       << endl;
                val.foreground = cmap[closest_pixel].pixel;
-               delete[] cmap;
        }
 
        val.function = GXcopy;
@@ -160,29 +163,40 @@ GC LyXColorHandler::getGCForeground(LColor::color c)
 
 // Gets GC for line
 GC LyXColorHandler::getGCLinepars(PainterBase::line_style ls,
-                         PainterBase::line_width lw, LColor::color c)
+                                 PainterBase::line_width lw, LColor::color c)
 {
        //if (lyxerr.debugging()) {
        //      lyxerr << "Painter drawable: " << drawable() << endl;
        //}
-       
-       int index = lw + (ls << 1) + (c << 3);
 
-       if (lineGCcache.find(index) != lineGCcache.end())
-               return lineGCcache[index];
+       int index = lw + (ls << 1) + (c << 6);
+
+       LineGCCache::iterator it = lineGCcache.find(index);
+       if (it != lineGCcache.end())
+               return it->second;
 
        XGCValues val;
        XGetGCValues(display, getGCForeground(c), GCForeground, &val);
-       
+
        switch (lw) {
-       case PainterBase::line_thin:    val.line_width = 0; break;
-       case PainterBase::line_thick:   val.line_width = 2; break;
+       case PainterBase::line_thin:
+               val.line_width = 0;
+               break;
+       case PainterBase::line_thick:
+               val.line_width = 2;
+               break;
        }
-       
+
        switch (ls) {
-       case PainterBase::line_solid:   val.line_style = LineSolid; break;
-       case PainterBase::line_onoffdash:       val.line_style = LineOnOffDash; break;
-       case PainterBase::line_doubledash:      val.line_style = LineDoubleDash; break;
+       case PainterBase::line_solid:
+               val.line_style = LineSolid;
+               break;
+       case PainterBase::line_onoffdash:
+               val.line_style = LineOnOffDash;
+               break;
+       case PainterBase::line_doubledash:
+               val.line_style = LineDoubleDash;
+               break;
        }
 
 
@@ -191,8 +205,8 @@ GC LyXColorHandler::getGCLinepars(PainterBase::line_style ls,
        val.function = GXcopy;
 
        return lineGCcache[index] =
-               XCreateGC(display, drawable, 
-                         GCForeground | GCLineStyle | GCLineWidth | 
+               XCreateGC(display, drawable,
+                         GCForeground | GCLineStyle | GCLineWidth |
                          GCCapStyle | GCJoinStyle | GCFunction, &val);
 }
 
@@ -202,7 +216,7 @@ void LyXColorHandler::updateColor (LColor::color c)
 {
        // color GC cache
        GC gc = colorGCcache[c];
-       if (gc != NULL) {
+       if (gc != 0) {
                XFreeGC(display, gc);
                colorGCcache[c] = NULL;
                getGCForeground(c);
@@ -210,19 +224,19 @@ void LyXColorHandler::updateColor (LColor::color c)
 
        // line GC cache
 
-       int index, ls, lw;
-       for (ls=0; ls<3; ++ls)
-               for (lw=0; lw<2; ++lw) {
-                       index = lw + (ls << 1) + (c << 3);
-                       if (lineGCcache.find(index) != lineGCcache.end()) {
-                               gc = lineGCcache[index];
-                               XFreeGC(display,gc);
-                               lineGCcache.erase(index);
+       for (int ls = 0; ls < 3; ++ls)
+               for (int lw = 0; lw < 2; ++lw) {
+                       int const index = lw + (ls << 1) + (c << 6);
+                       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);
+                                             PainterBase::line_width(lw), c);
                        }
                }
+
 }
 
 //