Store colors as rgb values in branches.

* src/frontends/xforms/Color.[Ch]: move to src

	* src/Color.[Ch] (getRGBColor): move to src/frontends/*/lyx_gui.C

	* src/BranchList.h
	(Branch::color_): change type to lyx::RGBColor

	* src/BranchList.[Ch]
	(Branch): new constrcutor, set color_ to LColor::background
	(getColor, setColor): adapt to type change of color_

	* src/bufferparams.C
	(BufferParams::writeFile): adapt to type change of branch color

	* src/frontends/lyx_gui.h
	* src/frontends/gtk/lyx_gui.C
	* src/frontends/qt2/lyx_gui.C
	* src/frontends/qt4/lyx_gui.C
	* src/frontends/xforms/lyx_gui.C
	(getRGBColor): move from src/Color.[Ch] here

	* src/frontends/gtk/lyx_gui.C
	* src/frontends/xforms/lyx_gui.C
	(hexname): use getRGBColor

	* src/frontends/gtk/GDocument.C
	(update): adapt to type change of branch color
	(apply): add comment about color chooser

	* src/frontends/qt2/QDocumentDialog.C
	(updateBranchView): adapt to type change of branch color
	(toggleBranchColor): ditto

	* src/frontends/qt2/lcolorcache.[Ch]
	* src/frontends/qt4/lcolorcache.[Ch]
	(rgb2qcolor): new utility function

	* src/frontends/qt4/QBranches.C
	(QBranches::update): adapt to type change of branch color
	(QBranches::on_colorPB_clicked): ditto

	* src/frontends/xforms/FormDocument.C
	(get_current_color): adapt to type change of branch color
	(FormDocument::branch_update):

	* src/frontends/xforms/FormPreferences.C
	(FormPreferences::Colors::LoadBrowse): adapt to RGBColor changes

	* src/frontends/xforms/FormPreferences.h: remove unneeded RGBColor
	forward declaration 

	* src/frontends/xforms/XWorkArea.C
	(XWorkArea::XWorkArea): adapt to RGBColor changes

	* src/frontends/xforms/Makefile.am: remove Color.[Ch]

	* src/frontends/xforms/FormColorpicker.[Ch]: adapt to RGBColor changes

	* src/frontends/xforms/xformsImage.C: adapt to RGBColor changes

	* src/frontends/controllers/ControlDocument.C
	(ControlDocument::dispatchParams): adapt to type change of branch color

	* src/Makefile.am: add Color.[Ch]


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13466 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Georg Baum 2006-03-23 20:04:05 +00:00
parent f44bd092bc
commit 399e6e788c
27 changed files with 201 additions and 111 deletions

View File

@ -11,11 +11,19 @@
#include <config.h> #include <config.h>
#include "BranchList.h" #include "BranchList.h"
#include "LColor.h"
#include "frontends/lyx_gui.h"
#include <algorithm> #include <algorithm>
using std::string; using std::string;
Branch::Branch()
{
lyx_gui::getRGBColor(LColor::background, color_);
}
string const & Branch::getBranch() const string const & Branch::getBranch() const
{ {
return branch_; return branch_;
@ -43,18 +51,28 @@ bool Branch::setSelected(bool b)
} }
string const & Branch::getColor() const lyx::RGBColor const & Branch::getColor() const
{ {
return color_; return color_;
} }
void Branch::setColor(string const & c) void Branch::setColor(lyx::RGBColor const & c)
{ {
color_ = c; color_ = c;
} }
void Branch::setColor(string const & c)
{
if (c.size() == 7 && c[0] == '#')
color_ = lyx::RGBColor(c);
else
// no color set or invalid color - use normal background
lyx_gui::getRGBColor(LColor::background, color_);
}
Branch * BranchList::find(std::string const & name) Branch * BranchList::find(std::string const & name)
{ {
List::iterator it = List::iterator it =
@ -91,7 +109,6 @@ bool BranchList::add(string const & s)
Branch br; Branch br;
br.setBranch(name); br.setBranch(name);
br.setSelected(false); br.setSelected(false);
br.setColor("none");
list.push_back(br); list.push_back(br);
} }
if (j == string::npos) if (j == string::npos)

View File

@ -30,12 +30,16 @@
#ifndef BRANCHES_H #ifndef BRANCHES_H
#define BRANCHES_H #define BRANCHES_H
#include "Color.h"
#include <string> #include <string>
#include <list> #include <list>
class Branch { class Branch {
public: public:
///
Branch();
/// ///
std::string const & getBranch() const; std::string const & getBranch() const;
/// ///
@ -47,8 +51,15 @@ public:
*/ */
bool setSelected(bool); bool setSelected(bool);
/// ///
std::string const & getColor() const; lyx::RGBColor const & getColor() const;
/// ///
void setColor(lyx::RGBColor const &);
/**
* Set color from a string "#rrggbb".
* Use LColor:background if the string is no valid color.
* This ensures compatibility with LyX 1.4.0 that had the symbolic
* color "none" that was displayed as LColor:background.
*/
void setColor(std::string const &); void setColor(std::string const &);
@ -58,7 +69,7 @@ private:
/// ///
bool selected_; bool selected_;
/// ///
std::string color_; lyx::RGBColor color_;
}; };

View File

@ -12,8 +12,6 @@
#include "Color.h" #include "Color.h"
#include "lyx_forms.h"
#include "LColor.h" #include "LColor.h"
#include <cmath> #include <cmath>
@ -33,7 +31,6 @@ using std::ostringstream;
using std::string; using std::string;
namespace lyx { namespace lyx {
namespace frontend {
namespace { namespace {
@ -51,28 +48,6 @@ int hexstrToInt(string const & str)
bool getRGBColor(LColor_color col,
unsigned int & r, unsigned int & g, unsigned int & b)
{
string const name = lcolor.getX11Name(col);
Display * const display = fl_get_display();
Colormap const cmap = fl_state[fl_get_vclass()].colormap;
XColor xcol, ccol;
if (XLookupColor(display, cmap, name.c_str(), &xcol, &ccol) == 0) {
r = 0;
g = 0;
b = 0;
return false;
}
r = xcol.red / 256;
g = xcol.green / 256;
b = xcol.blue / 256;
return true;
}
string const X11hexname(RGBColor const & col) string const X11hexname(RGBColor const & col)
{ {
ostringstream ostr; ostringstream ostr;
@ -199,5 +174,4 @@ HSVColor::HSVColor(RGBColor const & rgb)
} }
} }
} // namespace frontend
} // namespace lyx } // namespace lyx

View File

@ -18,16 +18,7 @@
#include <string> #include <string>
class LColor_color;
namespace lyx { namespace lyx {
namespace frontend {
/** Given col, fills r, g, b in the range 0-255.
The function returns true if successful.
It returns false on failure and sets r, g, b to 0. */
bool getRGBColor(LColor_color col,
unsigned int & r, unsigned int & g, unsigned int & b);
struct RGBColor; struct RGBColor;
/// returns a string of form #rrggbb, given an RGBColor struct /// returns a string of form #rrggbb, given an RGBColor struct
@ -78,7 +69,6 @@ bool operator!=(RGBColor const & c1, RGBColor const & c2)
return !(c1 == c2); return !(c1 == c2);
} }
} // namespace frontend
} // namespace lyx } // namespace lyx
#endif #endif

View File

@ -85,6 +85,8 @@ lyx_SOURCES = \
BranchList.h \ BranchList.h \
Chktex.C \ Chktex.C \
Chktex.h \ Chktex.h \
Color.C \
Color.h \
CutAndPaste.C \ CutAndPaste.C \
CutAndPaste.h \ CutAndPaste.h \
DepTable.C \ DepTable.C \

View File

@ -601,7 +601,7 @@ void BufferParams::writeFile(ostream & os) const
for (; it != end; ++it) { for (; it != end; ++it) {
os << "\\branch " << it->getBranch() os << "\\branch " << it->getBranch()
<< "\n\\selected " << it->getSelected() << "\n\\selected " << it->getSelected()
<< "\n\\color " << it->getColor() << "\n\\color " << lyx::X11hexname(it->getColor())
<< "\n\\end_branch" << "\n\\end_branch"
<< "\n"; << "\n";
} }

View File

@ -114,11 +114,8 @@ void ControlDocument::dispatchParams()
for (; it != end; ++it) { for (; it != end; ++it) {
string const & current_branch = it->getBranch(); string const & current_branch = it->getBranch();
Branch const * branch = branchlist.find(current_branch); Branch const * branch = branchlist.find(current_branch);
string x11hexname = branch->getColor(); string const x11hexname =
// check that we have a valid color! lyx::X11hexname(branch->getColor());
if (x11hexname.empty() || x11hexname[0] != '#')
x11hexname =
lcolor.getX11Name(LColor::background);
// display the new color // display the new color
string const str = current_branch + ' ' + x11hexname; string const str = current_branch + ' ' + x11hexname;
kernel().dispatch(FuncRequest(LFUN_SET_COLOR, str)); kernel().dispatch(FuncRequest(LFUN_SET_COLOR, str));

View File

@ -529,7 +529,7 @@ void GDocument::update()
(*row)[branchColName_] = (*it).getBranch(); (*row)[branchColName_] = (*it).getBranch();
std::cerr << "update: loading '" << (*it).getBranch() << "'\n"; std::cerr << "update: loading '" << (*it).getBranch() << "'\n";
(*row)[branchColActivated_] = (*it).getSelected(); (*row)[branchColActivated_] = (*it).getSelected();
(*row)[branchColColor_] = (*it).getColor(); (*row)[branchColColor_] = X11hexname((*it).getColor());
} }
// *** End "Branches" Page *** // *** End "Branches" Page ***
@ -720,6 +720,10 @@ void GDocument::apply()
Branch * newbranch = branchlist.find(name); Branch * newbranch = branchlist.find(name);
newbranch->setSelected((*row)[branchColActivated_]); newbranch->setSelected((*row)[branchColActivated_]);
Glib::ustring const color = (*row)[branchColColor_]; Glib::ustring const color = (*row)[branchColColor_];
// FIXME: The color should be editable via a color
// chooser, not a text field (see qt/xforms frontends)
// setColor will silently ignore an invalid color and
// use the normal background color for now.
newbranch->setColor(color); newbranch->setColor(color);
} }
} }

View File

@ -26,6 +26,7 @@
#include "funcrequest.h" #include "funcrequest.h"
#include "gettext.h" #include "gettext.h"
#include "Color.h"
#include "LColor.h" #include "LColor.h"
#include "LyXAction.h" #include "LyXAction.h"
#include "lyx_main.h" #include "lyx_main.h"
@ -175,23 +176,44 @@ FuncStatus lyx_gui::getStatus(FuncRequest const & ev)
} }
string const lyx_gui::hexname(LColor_color col) bool lyx_gui::getRGBColor(LColor_color col, lyx::RGBColor & rgbcol)
{ {
Gdk::Color gdkColor; Gdk::Color gdkColor;
Gdk::Color * gclr = colorCache.getColor(col); Gdk::Color * gclr = colorCache.getColor(col);
if (!gclr) { if (!gclr) {
gclr = &gdkColor; gclr = &gdkColor;
gclr->parse(lcolor.getX11Name(col)); if(!gclr->parse(lcolor.getX11Name(col))) {
rgbcol.r = 0;
rgbcol.g = 0;
rgbcol.b = 0;
return false;
}
}
// Note that X stores the RGB values in the range 0 - 65535
// whilst we require them in the range 0 - 255.
rgbcol.r = gclr->get_red() / 256;
rgbcol.g = gclr->get_green() / 256;
rgbcol.b = gclr->get_blue() / 256;
return true;
}
string const lyx_gui::hexname(LColor_color col)
{
lyx::RGBColor rgbcol;
if (!getRGBColor(col, rgbcol)) {
lyxerr << "X can't find color for \"" << lcolor.getLyXName(col)
<< '"' << std::endl;
return string();
} }
std::ostringstream os; std::ostringstream os;
// Note that X stores the RGB values in the range 0 - 65535
// whilst we require them in the range 0 - 255.
os << std::setbase(16) << std::setfill('0') os << std::setbase(16) << std::setfill('0')
<< std::setw(2) << (gclr->get_red() / 256) << std::setw(2) << rgbcol.r
<< std::setw(2) << (gclr->get_green() / 256) << std::setw(2) << rgbcol.g
<< std::setw(2) << (gclr->get_blue() / 256); << std::setw(2) << rgbcol.b;
return os.str(); return os.str();
} }

View File

@ -27,6 +27,9 @@ class LyXComm;
class LyXDataSocket; class LyXDataSocket;
class LyXServerSocket; class LyXServerSocket;
class FuncRequest; class FuncRequest;
namespace lyx {
struct RGBColor;
}
/// GUI interaction /// GUI interaction
namespace lyx_gui { namespace lyx_gui {
@ -74,6 +77,13 @@ void exit();
*/ */
FuncStatus getStatus(FuncRequest const & ev); FuncStatus getStatus(FuncRequest const & ev);
/**
* Given col, fills r, g, b in the range 0-255.
* The function returns true if successful.
* It returns false on failure and sets r, g, b to 0.
*/
bool getRGBColor(LColor_color col, lyx::RGBColor & rgbcol);
/** Eg, passing LColor::black returns "000000", /** Eg, passing LColor::black returns "000000",
* passing LColor::white returns "ffffff". * passing LColor::white returns "ffffff".
*/ */

View File

@ -14,6 +14,7 @@
#include "QDocumentDialog.h" #include "QDocumentDialog.h"
#include "floatplacement.h" #include "floatplacement.h"
#include "lcolorcache.h"
#include "lengthcombo.h" #include "lengthcombo.h"
#include "validators.h" #include "validators.h"
#include "panelstack.h" #include "panelstack.h"
@ -421,10 +422,7 @@ void QDocumentDialog::updateBranchView()
QString const sel = it->getSelected() ? qt_("Yes") : qt_("No"); QString const sel = it->getSelected() ? qt_("Yes") : qt_("No");
QListViewItem * newItem = QListViewItem * newItem =
new QListViewItem(branchesModule->branchesLV, bname, sel); new QListViewItem(branchesModule->branchesLV, bname, sel);
string const x11hexname = it->getColor(); QColor const itemcolor = rgb2qcolor(it->getColor());
QColor itemcolor;
if (x11hexname[0] == '#')
itemcolor.setNamedColor(toqstr(x11hexname));
if (itemcolor.isValid()) { if (itemcolor.isValid()) {
QPixmap coloritem(30, 10); QPixmap coloritem(30, 10);
coloritem.fill(itemcolor); coloritem.fill(itemcolor);
@ -503,16 +501,13 @@ void QDocumentDialog::toggleBranchColor()
if (selItem != 0) if (selItem != 0)
sel_branch = selItem->text(0); sel_branch = selItem->text(0);
if (sel_branch) { if (sel_branch) {
QColor initial;
string current_branch = fromqstr(sel_branch); string current_branch = fromqstr(sel_branch);
Branch * branch = Branch * branch =
form_->branchlist_.find(current_branch); form_->branchlist_.find(current_branch);
if (!branch) if (!branch)
return; return;
string x11hexname = branch->getColor(); QColor const initial = rgb2qcolor(branch->getColor());
if (x11hexname[0] == '#')
initial.setNamedColor(toqstr(x11hexname));
QColor ncol(QColorDialog::getColor(initial, qApp->focusWidget() ? qApp->focusWidget() : qApp->mainWidget())); QColor ncol(QColorDialog::getColor(initial, qApp->focusWidget() ? qApp->focusWidget() : qApp->mainWidget()));
if (ncol.isValid()){ if (ncol.isValid()){
// add the color to the branchlist // add the color to the branchlist

View File

@ -12,6 +12,7 @@
#include "lcolorcache.h" #include "lcolorcache.h"
#include "Color.h"
#include "LColor.h" #include "LColor.h"
LColorCache lcolorcache; LColorCache lcolorcache;
@ -38,3 +39,9 @@ void LColorCache::clear()
{ {
colormap.clear(); colormap.clear();
} }
QColor const rgb2qcolor(lyx::RGBColor const & rgb)
{
return QColor(rgb.r, rgb.g, rgb.b);
}

View File

@ -19,6 +19,11 @@
#include <qcolor.h> #include <qcolor.h>
namespace lyx {
struct RGBColor;
}
// FIXME: use a fixed-size array not a map ? // FIXME: use a fixed-size array not a map ?
/** /**
@ -43,4 +48,6 @@ private:
/// singleton instance /// singleton instance
extern LColorCache lcolorcache; extern LColorCache lcolorcache;
///
QColor const rgb2qcolor(lyx::RGBColor const &);
#endif // LCOLORCACHE_H #endif // LCOLORCACHE_H

View File

@ -16,6 +16,7 @@
// FIXME: move this stuff out again // FIXME: move this stuff out again
#include "bufferlist.h" #include "bufferlist.h"
#include "BufferView.h" #include "BufferView.h"
#include "Color.h"
#include "funcrequest.h" #include "funcrequest.h"
#include "LColor.h" #include "LColor.h"
#include "lyx_main.h" #include "lyx_main.h"
@ -300,6 +301,22 @@ FuncStatus getStatus(FuncRequest const & ev)
} }
bool getRGBColor(LColor_color col, lyx::RGBColor & rgbcol)
{
QColor const & qcol = lcolorcache.get(col);
if (!qcol.isValid()) {
rgbcol.r = 0;
rgbcol.g = 0;
rgbcol.b = 0;
return false;
}
rgbcol.r = qcol.red();
rgbcol.g = qcol.green();
rgbcol.b = qcol.blue();
return true;
}
string const hexname(LColor_color col) string const hexname(LColor_color col)
{ {
return ltrim(fromqstr(lcolorcache.get(col).name()), "#"); return ltrim(fromqstr(lcolorcache.get(col).name()), "#");

View File

@ -13,6 +13,7 @@
#include "QBranches.h" #include "QBranches.h"
#include "lcolorcache.h"
#include "validators.h" #include "validators.h"
#include "qt_helpers.h" #include "qt_helpers.h"
@ -68,10 +69,7 @@ void QBranches::update()
QString const sel = it->getSelected() ? qt_("Yes") : qt_("No"); QString const sel = it->getSelected() ? qt_("Yes") : qt_("No");
Q3ListViewItem * newItem = Q3ListViewItem * newItem =
new Q3ListViewItem(branchesLV, bname, sel); new Q3ListViewItem(branchesLV, bname, sel);
string const x11hexname = it->getColor(); QColor const itemcolor = rgb2qcolor(it->getColor());
QColor itemcolor;
if (x11hexname[0] == '#')
itemcolor.setNamedColor(toqstr(x11hexname));
if (itemcolor.isValid()) { if (itemcolor.isValid()) {
QPixmap coloritem(30, 10); QPixmap coloritem(30, 10);
coloritem.fill(itemcolor); coloritem.fill(itemcolor);
@ -154,16 +152,13 @@ void QBranches::on_colorPB_clicked()
if (selItem != 0) if (selItem != 0)
sel_branch = selItem->text(0); sel_branch = selItem->text(0);
if (!sel_branch.isEmpty()) { if (!sel_branch.isEmpty()) {
QColor initial("lightskyblue");
string current_branch = fromqstr(sel_branch); string current_branch = fromqstr(sel_branch);
Branch * branch = Branch * branch =
branchlist_.find(current_branch); branchlist_.find(current_branch);
if (!branch) if (!branch)
return; return;
string x11hexname = branch->getColor(); QColor const initial = rgb2qcolor(branch->getColor());
if (x11hexname[0] == '#')
initial.setNamedColor(toqstr(x11hexname));
QColor ncol(QColorDialog::getColor(initial, qApp->focusWidget() ? qApp->focusWidget() : qApp->mainWidget())); QColor ncol(QColorDialog::getColor(initial, qApp->focusWidget() ? qApp->focusWidget() : qApp->mainWidget()));
if (ncol.isValid()){ if (ncol.isValid()){
// add the color to the branchlist // add the color to the branchlist

View File

@ -10,6 +10,7 @@
#include <config.h> #include <config.h>
#include "Color.h"
#include "lcolorcache.h" #include "lcolorcache.h"
#include "LColor.h" #include "LColor.h"
@ -51,3 +52,9 @@ void LColorCache::clear()
{ {
colormap.clear(); colormap.clear();
} }
QColor const rgb2qcolor(lyx::RGBColor const & rgb)
{
return QColor(rgb.r, rgb.g, rgb.b);
}

View File

@ -19,6 +19,11 @@
#include <QColor> #include <QColor>
namespace lyx {
struct RGBColor;
}
// FIXME: use a fixed-size array not a map ? // FIXME: use a fixed-size array not a map ?
/** /**
@ -43,4 +48,6 @@ private:
/// singleton instance /// singleton instance
extern LColorCache lcolorcache; extern LColorCache lcolorcache;
///
QColor const rgb2qcolor(lyx::RGBColor const &);
#endif // LCOLORCACHE_H #endif // LCOLORCACHE_H

View File

@ -16,6 +16,7 @@
// FIXME: move this stuff out again // FIXME: move this stuff out again
#include "bufferlist.h" #include "bufferlist.h"
#include "BufferView.h" #include "BufferView.h"
#include "Color.h"
#include "funcrequest.h" #include "funcrequest.h"
#include "LColor.h" #include "LColor.h"
#include "lyx_main.h" #include "lyx_main.h"
@ -294,6 +295,22 @@ FuncStatus getStatus(FuncRequest const & ev)
} }
bool getRGBColor(LColor_color col, lyx::RGBColor & rgbcol)
{
QColor const & qcol = lcolorcache.get(col);
if (!qcol.isValid()) {
rgbcol.r = 0;
rgbcol.g = 0;
rgbcol.b = 0;
return false;
}
rgbcol.r = qcol.red();
rgbcol.g = qcol.green();
rgbcol.b = qcol.blue();
return true;
}
string const hexname(LColor_color col) string const hexname(LColor_color col)
{ {
return ltrim(fromqstr(lcolorcache.get(col).name()), "#"); return ltrim(fromqstr(lcolorcache.get(col).name()), "#");

View File

@ -24,6 +24,7 @@
#include "lyx_forms.h" #include "lyx_forms.h"
using lyx::RGBColor;
using std::string; using std::string;
namespace lyx { namespace lyx {

View File

@ -35,7 +35,7 @@ public:
a color is chosen (or the dialog is closed). a color is chosen (or the dialog is closed).
\param color the color used to initialise the dialog. \param color the color used to initialise the dialog.
*/ */
RGBColor const & requestColor(RGBColor const & color); lyx::RGBColor const & requestColor(lyx::RGBColor const & color);
/** Input callback function. /** Input callback function.
* Invoked only by the xforms callback interface * Invoked only by the xforms callback interface
@ -71,8 +71,8 @@ private:
/// The title displayed by the Window Manager. /// The title displayed by the Window Manager.
std::string title_; std::string title_;
RGBColor input_color_; lyx::RGBColor input_color_;
RGBColor color_; lyx::RGBColor color_;
bool finished_; bool finished_;
/// Passed to the window manager to give a pretty little symbol ;-) /// Passed to the window manager to give a pretty little symbol ;-)

View File

@ -678,21 +678,13 @@ RGBColor get_current_color(FL_OBJECT * browser, BranchList const & branchlist)
{ {
BOOST_ASSERT(browser && browser->objclass == FL_BROWSER); BOOST_ASSERT(browser && browser->objclass == FL_BROWSER);
RGBColor color;
int const i = fl_get_browser(browser); int const i = fl_get_browser(browser);
string const branch_name = fl_get_browser_line(browser, i); string const branch_name = fl_get_browser_line(browser, i);
Branch const * branch = branchlist.find(branch_name); Branch const * branch = branchlist.find(branch_name);
if (!branch) if (!branch)
return color; return RGBColor();
string const x11hexname = branch->getColor(); return branch->getColor();
if (x11hexname[0] == '#') {
color = RGBColor(x11hexname);
} else{
fl_getmcolor(FL_COL1, &color.r, &color.g, &color.b);
}
return color;
} }
} // namespace anon } // namespace anon
@ -1298,20 +1290,16 @@ void FormDocument::branch_update(BufferParams const & params)
// display proper colour... // display proper colour...
RGBColor rgb; RGBColor rgb;
string x11hexname;
if (current_branch == "none") if (current_branch == "none")
x11hexname = "none"; fl_getmcolor(FL_COL1, &rgb.r, &rgb.g, &rgb.b);
else { else {
Branch * branch = branchlist_.find(current_branch); Branch * branch = branchlist_.find(current_branch);
if (branch) if (branch)
x11hexname = branch->getColor(); rgb = branch->getColor();
} else
if (x11hexname[0] == '#') {
rgb = RGBColor(x11hexname);
} else {
fl_getmcolor(FL_COL1, &rgb.r, &rgb.g, &rgb.b); fl_getmcolor(FL_COL1, &rgb.r, &rgb.g, &rgb.b);
} }
fl_mapcolor(GUI_COLOR_CHOICE, rgb.r, rgb.g, rgb.b); fl_mapcolor(GUI_COLOR_CHOICE, rgb.r, rgb.g, rgb.b);
fl_redraw_object(branch_->button_color); fl_redraw_object(branch_->button_color);

View File

@ -27,6 +27,7 @@
#include "lastfiles.h" #include "lastfiles.h"
#include "LColor.h" #include "LColor.h"
#include "lyxfont.h" #include "lyxfont.h"
#include "frontends/lyx_gui.h"
#include "support/convert.h" #include "support/convert.h"
#include "support/lstrings.h" #include "support/lstrings.h"
@ -38,6 +39,8 @@
#include <iomanip> #include <iomanip>
using lyx::RGBColor;
using std::endl; using std::endl;
using std::make_pair; using std::make_pair;
using std::max; using std::max;
@ -621,7 +624,7 @@ void FormPreferences::Colors::LoadBrowserLyX()
|| lc == LColor::ignore) continue; || lc == LColor::ignore) continue;
RGBColor col; RGBColor col;
bool const success = getRGBColor(lc, col.r, col.g, col.b); bool const success = lyx_gui::getRGBColor(lc, col);
if (!success) { if (!success) {
lyxerr << "FormPreferences::Colors::LoadBrowserLyX:\n" lyxerr << "FormPreferences::Colors::LoadBrowserLyX:\n"
<< "LColor " << lcolor.getLyXName(lc) << "LColor " << lcolor.getLyXName(lc)

View File

@ -50,7 +50,6 @@ struct FD_preferences_screen_fonts;
struct FD_preferences_spelloptions; struct FD_preferences_spelloptions;
class FormColorpicker; class FormColorpicker;
class RGBColor;
/** This class provides an XForms implementation of the FormPreferences Dialog. /** This class provides an XForms implementation of the FormPreferences Dialog.
* The preferences dialog allows users to set/save their preferences. * The preferences dialog allows users to set/save their preferences.

View File

@ -60,8 +60,6 @@ libxforms_la_SOURCES = \
xscreen.C \ xscreen.C \
xscreen.h \ xscreen.h \
Alert_pimpl.C \ Alert_pimpl.C \
Color.C \
Color.h \
ColorHandler.C \ ColorHandler.C \
ColorHandler.h \ ColorHandler.h \
Dialogs.C \ Dialogs.C \

View File

@ -16,6 +16,7 @@
#include "Color.h" #include "Color.h"
#include "XFormsView.h" #include "XFormsView.h"
#include "XLyXKeySym.h" #include "XLyXKeySym.h"
#include "lyx_gui.h"
#include "debug.h" #include "debug.h"
#include "funcrequest.h" #include "funcrequest.h"
@ -119,9 +120,9 @@ XWorkArea::XWorkArea(LyXView & owner, int w, int h)
fl_set_object_resize(obj, FL_RESIZE_ALL); fl_set_object_resize(obj, FL_RESIZE_ALL);
fl_set_object_gravity(obj, NorthWestGravity, SouthEastGravity); fl_set_object_gravity(obj, NorthWestGravity, SouthEastGravity);
unsigned int r, g, b; RGBColor col;
if (getRGBColor(LColor::background, r, g, b)) { if (lyx_gui::getRGBColor(LColor::background, col)) {
fl_mapcolor(FL_FREE_COL12, r, g, b); fl_mapcolor(FL_FREE_COL12, col.r, col.g, col.b);
fl_set_object_color(obj, FL_FREE_COL12, FL_MCOL); fl_set_object_color(obj, FL_FREE_COL12, FL_MCOL);
} }

View File

@ -51,7 +51,6 @@ using lyx::support::AddName;
using lyx::support::package; using lyx::support::package;
using lyx::frontend::fontloader; using lyx::frontend::fontloader;
using lyx::frontend::getRGBColor;
using lyx::frontend::lyxColorHandler; using lyx::frontend::lyxColorHandler;
using lyx::frontend::LyXColorHandler; using lyx::frontend::LyXColorHandler;
using lyx::frontend::XformsColor; using lyx::frontend::XformsColor;
@ -348,11 +347,34 @@ FuncStatus getStatus(FuncRequest const & /*ev*/)
return FuncStatus(); return FuncStatus();
} }
bool getRGBColor(LColor_color col, lyx::RGBColor & rgbcol)
{
string const name = lcolor.getX11Name(col);
Display * const display = fl_get_display();
Colormap const cmap = fl_state[fl_get_vclass()].colormap;
XColor xcol, ccol;
if (XLookupColor(display, cmap, name.c_str(), &xcol, &ccol) == 0) {
rgbcol.r = 0;
rgbcol.g = 0;
rgbcol.b = 0;
return false;
}
// Note that X stores the RGB values in the range 0 - 65535
// whilst we require them in the range 0 - 255.
rgbcol.r = xcol.red / 256;
rgbcol.g = xcol.green / 256;
rgbcol.b = xcol.blue / 256;
return true;
}
string const hexname(LColor_color col) string const hexname(LColor_color col)
{ {
unsigned int r, g, b; lyx::RGBColor rgbcol;
bool const success = getRGBColor(col, r, g, b); if (!getRGBColor(col, rgbcol)) {
if (!success) {
lyxerr << "X can't find color for \"" << lcolor.getLyXName(col) lyxerr << "X can't find color for \"" << lcolor.getLyXName(col)
<< '"' << endl; << '"' << endl;
return string(); return string();
@ -361,9 +383,9 @@ string const hexname(LColor_color col)
ostringstream os; ostringstream os;
os << setbase(16) << setfill('0') os << setbase(16) << setfill('0')
<< setw(2) << r << setw(2) << rgbcol.r
<< setw(2) << g << setw(2) << rgbcol.g
<< setw(2) << b; << setw(2) << rgbcol.b;
return os.str(); return os.str();
} }

View File

@ -12,6 +12,7 @@
#include "xformsImage.h" #include "xformsImage.h"
#include "Color.h" #include "Color.h"
#include "lyx_gui.h"
#include "debug.h" #include "debug.h"
#include "format.h" #include "format.h"
@ -33,8 +34,6 @@
#include <boost/bind.hpp> #include <boost/bind.hpp>
#include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple.hpp>
using lyx::frontend::getRGBColor;
using lyx::support::float_equal; using lyx::support::float_equal;
using lyx::support::prefixIs; using lyx::support::prefixIs;
using lyx::support::rtrim; using lyx::support::rtrim;
@ -470,13 +469,13 @@ void init_graphics()
unsigned int packedcolor(LColor::color col) unsigned int packedcolor(LColor::color col)
{ {
unsigned int r, g, b; lyx::RGBColor rgb;
bool const success = getRGBColor(col, r, g, b); bool const success = lyx_gui::getRGBColor(col, rgb);
if (!success) if (!success)
// Set to black on failure // Set to black on failure
return FL_PACK(255, 255, 255); return FL_PACK(255, 255, 255);
return FL_PACK(r, g, b); return FL_PACK(rgb.r, rgb.g, rgb.b);
} }
} // namespace anon } // namespace anon