-// -*- C++ -*-
/* This file is part of
* ======================================================
*
* LyX, The Document Processor
*
- * Copyright 1998-2000 The LyX Team
+ * Copyright 1998-2001 The LyX Team
*
*======================================================*/
#include <cmath>
-#include FORMS_H_LOCATION
-#include "debug.h"
-
+#include "frontends/GUIRunTime.h"
#include "ColorHandler.h"
+#include "LColor.h"
#include "gettext.h"
+#include "debug.h"
using std::endl;
LyXColorHandler::LyXColorHandler()
{
- display = fl_display;
- drawable = XCreatePixmap(display, fl_root, 10, 10,
- fl_get_visual_depth());
+ display = GUIRunTime::x11Display();
+ drawable = XCreatePixmap(display,
+ RootWindow(display, GUIRunTime::x11Screen()),
+ 10, 10,
+ GUIRunTime::x11VisualDepth());
- colormap = fl_state[fl_get_vclass()].colormap;
+ colormap = GUIRunTime::x11Colormap();
// Clear the GC cache
for (int i = 0; i <= LColor::ignore; ++i) {
colorGCcache[i] = 0;
// Iterate over the line cache and Free the GCs
for (LineGCCache::iterator lit = lineGCcache.begin();
lit != lineGCcache.end(); ++lit) {
- XFreeGC(display, (*lit).second);
+ XFreeGC(display, lit->second);
}
}
XColor * cmap = new XColor[vi->map_entries];
- for(int i = 0; i < vi->map_entries; ++i) {
+ for (int i = 0; i < vi->map_entries; ++i) {
cmap[i].pixel = i;
}
XQueryColors(display, colormap, cmap, vi->map_entries);
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) {
+ for (int t = 0; t < vi->map_entries; ++t) {
// The Euclidean distance between two points in
// a three-dimensional space, the RGB color-cube,
// is used as the distance measurement between two
"color with (r,g,b)=(")
<< cmap[closest_pixel].red << ","
<< cmap[closest_pixel].green << ","
- << cmap[closest_pixel].blue << ") instead.\n"
- << "Pixel [" << closest_pixel << "] is used." << endl;
+ << cmap[closest_pixel].blue << _(") instead.\n")
+ << _("Pixel [") << closest_pixel << _("] is used.")
+ << endl;
val.foreground = cmap[closest_pixel].pixel;
delete[] cmap;
}
GCCapStyle | GCJoinStyle | GCFunction, &val);
}
+
+// update GC cache after color redefinition
+void LyXColorHandler::updateColor (LColor::color c)
+{
+ // color GC cache
+ GC gc = colorGCcache[c];
+ if (gc != NULL) {
+ XFreeGC(display, gc);
+ colorGCcache[c] = NULL;
+ getGCForeground(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);
+ getGCLinepars(PainterBase::line_style(ls),
+ PainterBase::line_width(lw), c);
+ }
+ }
+
+}
+
//
-LyXColorHandler * lyxColorHandler;
+boost::scoped_ptr<LyXColorHandler> lyxColorHandler;