[LyX/master] Upgrade ColorSet class to be based on 32bit colors
Koji Yokota
yokota at lyx.org
Tue Jun 2 04:51:32 UTC 2026
commit abdb06e5f64f1d6f78bdd58552b8d2bf3c63db3f
Author: Koji Yokota <yokota at lyx.org>
Date: Sun May 31 22:03:22 2026 +0900
Upgrade ColorSet class to be based on 32bit colors
---
src/Color.cpp | 270 +++++++++++++++++++++++++---------------
src/Color.h | 7 +-
src/ColorSet.h | 26 ++--
src/LyXRC.cpp | 8 +-
src/frontends/qt/ColorCache.cpp | 8 +-
src/frontends/qt/GuiPrefs.cpp | 2 +-
6 files changed, 202 insertions(+), 119 deletions(-)
diff --git a/src/Color.cpp b/src/Color.cpp
index 6c3387fe41..f277de10b4 100644
--- a/src/Color.cpp
+++ b/src/Color.cpp
@@ -41,8 +41,8 @@ struct ColorSet::ColorEntry {
ColorCode lcolor;
char const * guiname;
char const * latexname;
- char const * x11hexname;
- char const * x11darkhexname;
+ char const * hex32name;
+ char const * darkhex32name;
char const * lyxname;
};
@@ -80,24 +80,43 @@ string const X11hexname(RGBColor const & col)
}
-RGBColor rgbFromHexName(string const & x11hexname)
+RGBColor rgbFromHexName(string const & hexname)
{
- LASSERT((x11hexname.size() == 7 || x11hexname.size() == 9)
- && x11hexname[0] == '#', return RGBColor());
- if (x11hexname.size() == 7) {
- RGBColor c;
- c.r = hexstrToInt(x11hexname.substr(1, 2));
- c.g = hexstrToInt(x11hexname.substr(3, 2));
- c.b = hexstrToInt(x11hexname.substr(5, 2));
- return c;
+ // hexname accepts both 16bit and 32bit hex codes
+ LASSERT((hexname.size() == 7 || hexname.size() == 9)
+ && hexname[0] == '#', return RGBColor());
+ RGBColor c;
+ if (hexname.size() == 7) {
+ c.r = hexstrToInt(hexname.substr(1, 2));
+ c.g = hexstrToInt(hexname.substr(3, 2));
+ c.b = hexstrToInt(hexname.substr(5, 2));
} else {
- ARGBColor c;
- c.a = hexstrToInt(x11hexname.substr(1, 2));
- c.r = hexstrToInt(x11hexname.substr(3, 2));
- c.g = hexstrToInt(x11hexname.substr(5, 2));
- c.b = hexstrToInt(x11hexname.substr(7, 2));
- return c;
+ c.r = hexstrToInt(hexname.substr(3, 2));
+ c.g = hexstrToInt(hexname.substr(5, 2));
+ c.b = hexstrToInt(hexname.substr(7, 2));
}
+ return c;
+}
+
+
+ARGBColor argbFromHexName(string const & hexname)
+{
+ // hexname accepts both 16bit and 32bit hex codes
+ LASSERT((hexname.size() == 7 || hexname.size() == 9)
+ && hexname[0] == '#', return ARGBColor());
+ ARGBColor c;
+ if (hexname.size() == 7) {
+ c.a = 255;
+ c.r = hexstrToInt(hexname.substr(1, 2));
+ c.g = hexstrToInt(hexname.substr(3, 2));
+ c.b = hexstrToInt(hexname.substr(5, 2));
+ } else {
+ c.a = hexstrToInt(hexname.substr(1, 2));
+ c.r = hexstrToInt(hexname.substr(3, 2));
+ c.g = hexstrToInt(hexname.substr(5, 2));
+ c.b = hexstrToInt(hexname.substr(7, 2));
+ }
+ return c;
}
@@ -217,39 +236,40 @@ std::ostream & operator<<(std::ostream & os, Color color)
ColorSet::ColorSet()
{
- char const * grey40 = "#666666";
- char const * grey60 = "#999999";
- char const * grey80 = "#cccccc";
+ char const * grey40 = "#ff666666";
+ char const * grey60 = "#ff999999";
+ char const * grey80 = "#ffcccccc";
// latex colors (xcolor package)
- char const * black = "#000000";
- char const * white = "#ffffff";
- char const * blue = "#0000ff";
- char const * brown = "#bf8040";
- char const * cyan = "#00ffff";
- char const * darkgray = "#404040";
- char const * gray = "#808080";
- char const * green = "#00ff00";
- char const * lightgray = "#bfbfbf";
- char const * lime = "#bfff00";
- char const * magenta = "#ff00ff";
- char const * olive = "#808000";
- char const * orange = "#ff8000";
- char const * pink = "#ffbfbf";
- char const * purple = "#bf0040";
- char const * red = "#ff0000";
- char const * teal = "#008080";
- char const * violet = "#800080";
- char const * yellow = "#ffff00";
+ char const * black = "#ff000000";
+ char const * white = "#ffffffff";
+ char const * blue = "#ff0000ff";
+ char const * brown = "#ffbf8040";
+ char const * cyan = "#ff00ffff";
+ char const * darkgray = "#ff404040";
+ char const * gray = "#ff808080";
+ char const * green = "#ff00ff00";
+ char const * lightgray = "#ffbfbfbf";
+ char const * lime = "#ffbfff00";
+ char const * magenta = "#ffff00ff";
+ char const * olive = "#ff808000";
+ char const * orange = "#ffff8000";
+ char const * pink = "#ffffbfbf";
+ char const * purple = "#ffbf0040";
+ char const * red = "#ffff0000";
+ char const * teal = "#ff008080";
+ char const * violet = "#ff800080";
+ char const * yellow = "#ffffff00";
// svg colors
- char const * Brown = "#a52a2a";
- char const * DarkRed = "#8b0000";
- char const * Green = "#008000";
- char const * IndianRed = "#cd5c5c";
- char const * Linen = "#faf0e6";
- char const * RoyalBlue = "#4169e1";
-
- //char const * grey90 = "#e5e5e5";
- // ColorCode, gui, latex, x11hexname, x11darkhexname, lyx
+ char const * Brown = "#ffa52a2a";
+ char const * DarkRed = "#ff8b0000";
+ char const * Green = "#ff008000";
+ char const * IndianRed = "#ffcd5c5c";
+ char const * Linen = "#fffaf0e6";
+ char const * RoyalBlue = "#ff4169e1";
+ char const * Transparent = "#00000000";
+
+ //char const * grey90 = "#ffe5e5e5";
+ // ColorCode, gui, latex, hex32name, darkhex32name, lyx
// Warning: several of these entries are overridden in GuiApplication constructor
// lyx color names are collected for users in Customization manual (B.# Dynamic colors)
static ColorEntry const items[] = {
@@ -278,60 +298,60 @@ ColorSet::ColorSet()
{ Color_background, N_("background"), "background", Linen, black, "background" },
{ Color_foreground, N_("text"), "foreground", black, Linen, "foreground" },
{ Color_foreground_inverted, N_("text (inverted background)"), "foreground_inverted", Linen, black, "foreground_inverted" },
- { Color_selection, N_("selection"), "selection", "#add8e6", "#add8e6", "selection" },
- { Color_selectionmath, N_("selected math"), "selectionmath", "#00008B", "#00008B", "selectionmath" },
+ { Color_selection, N_("selection"), "selection", "#ffadd8e6", "#ffadd8e6", "selection" },
+ { Color_selectionmath, N_("selected math"), "selectionmath", "#ff00008b", "#ff00008b", "selectionmath" },
{ Color_selectiontext, N_("selected text"), "selectiontext", black, black, "selectiontext" },
- { Color_preeditfocus, N_("preedit focus background"), "preeditfocus", "#add8e6", "#add8e6", "preeditfocus" },
+ { Color_preeditfocus, N_("preedit focus background"), "preeditfocus", "#ffadd8e6", "#ffadd8e6", "preeditfocus" },
{ Color_preeditfocustext, N_("preedit focus text"), "preeditfocustext", black, black, "preeditfocustext" },
- { Color_preeditbg, N_("preedit background"), "preeditbg", Linen, black, "preeditbg" },
+ { Color_preeditbg, N_("preedit background"), "preeditbg", Transparent, Transparent, "preeditbg" },
{ Color_preedittext, N_("preedit text"), "preedittext", black, Linen, "preedittext" },
- { Color_latex, N_("LaTeX text"), "latex", DarkRed, "#D66613", "latex" },
+ { Color_latex, N_("LaTeX text"), "latex", DarkRed, "#ffd66613", "latex" },
{ Color_preview, N_("previewed snippet"), "preview", black, Linen, "preview" },
{ Color_inlinecompletion, N_("inline completion"),
"inlinecompletion", grey60, grey40, "inlinecompletion" },
{ Color_nonunique_inlinecompletion, N_("inline completion (non-unique)"),
"nonuniqueinlinecompletion", grey80, grey60, "nonuniqueinlinecompletion" },
- { Color_notelabel, N_("note label"), "note", yellow, "#FF6200", "note" },
- { Color_notebg, N_("note background"), "notebg", yellow, "#5b5903", "notebg" },
+ { Color_notelabel, N_("note label"), "note", yellow, "#ffff6200", "note" },
+ { Color_notebg, N_("note background"), "notebg", yellow, "#ff5b5903", "notebg" },
{ Color_commentlabel, N_("comment label"), "comment", magenta, olive, "comment" },
{ Color_commentbg, N_("comment background"), "commentbg", Linen, black, "commentbg" },
- { Color_greyedoutlabel, N_("greyedout inset label"), "greyedout", "#ff0080", "#ff0080", "greyedout" },
+ { Color_greyedoutlabel, N_("greyedout inset label"), "greyedout", "#ffff0080", "#ffff0080", "greyedout" },
{ Color_greyedouttext, N_("greyedout inset text"), "greyedouttext", grey80, grey40, "greyedouttext" },
{ Color_greyedoutbg, N_("greyedout inset background"), "greyedoutbg", Linen, black, "greyedoutbg" },
- { Color_shadedbg, N_("shaded box"), "shaded", "#ff0000", "#f2af7d", "shaded" },
+ { Color_shadedbg, N_("shaded box"), "shaded", "#ffff0000", "#fff2af7d", "shaded" },
{ Color_listingsbg, N_("listings background"), "listingsbg", white, black, "listingsbg" },
- { Color_branchlabel, N_("branch label"), "branchlabel", "#c88000", "#c88000", "branchlabel" },
- { Color_footlabel, N_("footnote label"), "footlabel", "#00aaff", blue, "footlabel" },
+ { Color_branchlabel, N_("branch label"), "branchlabel", "#ffc88000", "#ffc88000", "branchlabel" },
+ { Color_footlabel, N_("footnote label"), "footlabel", "#ff00aaff", blue, "footlabel" },
{ Color_indexlabel, N_("index label"), "indexlabel", Green, teal, "indexlabel" },
- { Color_marginlabel, N_("margin note label"), "marginlabel", "#aa55ff", violet, "marginlabel" },
- { Color_nomlabel, N_("nomenclature label"), "nomlabel", "#ff6d2f", "#ff6d2f", "nomlabel" },
- { Color_phantomtext, N_("phantom inset text"), "phantomtext", "#7f7f7f", "#7f7f7f", "phantomtext" },
+ { Color_marginlabel, N_("margin note label"), "marginlabel", "#ffaa55ff", violet, "marginlabel" },
+ { Color_nomlabel, N_("nomenclature label"), "nomlabel", "#ffff6d2f", "#ffff6d2f", "nomlabel" },
+ { Color_phantomtext, N_("phantom inset text"), "phantomtext", "#ff7f7f7f", "#ff7f7f7f", "phantomtext" },
{ Color_urllabel, N_("URL label"), "urllabel", blue, blue, "urllabel" },
- { Color_textlabel1, N_("Text label 1"), "textlabel1", blue, "#86a4ff", "textlabel1" },
+ { Color_textlabel1, N_("Text label 1"), "textlabel1", blue, "#ff86a4ff", "textlabel1" },
{ Color_textlabel2, N_("Text label 2"), "textlabel2", Green, green, "textlabel2" },
{ Color_textlabel3, N_("Text label 3"), "textlabel3", magenta, magenta, "textlabel3" },
- { Color_urltext, N_("URL text"), "urltext", blue, "#86a4ff", "urltext" },
+ { Color_urltext, N_("URL text"), "urltext", blue, "#ff86a4ff", "urltext" },
{ Color_depthbar, N_("depth bar"), "depthbar", IndianRed, IndianRed, "depthbar" },
{ Color_scroll, N_("scroll indicator"), "scroll", IndianRed, IndianRed, "scroll" },
- { Color_language, N_("language"), "language", blue, "#86a4ff", "language" },
+ { Color_language, N_("language"), "language", blue, "#ff86a4ff", "language" },
{ Color_command, N_("command inset"), "command", black, black, "command" },
- { Color_commandbg, N_("command inset background"), "commandbg", "#f0ffff", "#f0ffff", "commandbg" },
+ { Color_commandbg, N_("command inset background"), "commandbg", "#fff0ffff", "#fff0ffff", "commandbg" },
{ Color_commandframe, N_("command inset frame"), "commandframe", black, Linen, "commandframe" },
{ Color_special, N_("special character"), "special", RoyalBlue, RoyalBlue, "special" },
- { Color_graphicsbg, N_("graphics background"), "graphicsbg", Linen, black, "graphicsbg" },
- { Color_math, N_("math text"), "math", "#00008B", "#85F0FE", "math" },
- { Color_mathbg, N_("math background"), "mathbg", Linen, black, "mathbg" },
+ { Color_graphicsbg, N_("graphics background"), "graphicsbg", Transparent, Transparent, "graphicsbg" },
+ { Color_math, N_("math text"), "math", "#ff00008b", "#ff85f0fe", "math" },
+ { Color_mathbg, N_("math background"), "mathbg", Transparent, Transparent, "mathbg" },
{ Color_mathmacrobg, N_("math macro background"), "mathmacrobg", Linen, black, "mathmacrobg" },
- { Color_mathmacrohoverbg, N_("math macro hovered background"), "mathmacrohoverbg", "#cdc3b8",
+ { Color_mathmacrohoverbg, N_("math macro hovered background"), "mathmacrohoverbg", "#ffcdc3b8",
grey80, "mathmacrohoverbg" },
- { Color_mathmacrolabel, N_("math macro label"), "mathmacrolabel", "#a19992", "#a19992", "mathmacrolabel" },
- { Color_mathmacroframe, N_("math macro frame"), "mathmacroframe", "#ede2d8", black, "mathmacroframe" },
+ { Color_mathmacrolabel, N_("math macro label"), "mathmacrolabel", "#ffa19992", "#ffa19992", "mathmacrolabel" },
+ { Color_mathmacroframe, N_("math macro frame"), "mathmacroframe", "#ffede2d8", black, "mathmacroframe" },
{ Color_mathmacroblend, N_("math macro blended out"), "mathmacroblend", black, Linen, "mathmacroblend" },
{ Color_mathmacrooldarg, N_("math macro old parameter"), "mathmacrooldarg", grey80, grey40, "mathmacrooldarg" },
{ Color_mathmacronewarg, N_("math macro new parameter"), "mathmacronewarg", black, Linen, "mathmacronewarg" },
{ Color_mathframe, N_("math frame"), "mathframe", magenta, magenta, "mathframe" },
{ Color_mathcorners, N_("math corners"), "mathcorners", Linen, black, "mathcorners" },
- { Color_mathline, N_("math line"), "mathline", blue, "#86a4ff", "mathline" },
+ { Color_mathline, N_("math line"), "mathline", blue, "#ff86a4ff", "mathline" },
{ Color_collapsible, N_("collapsible inset text"), "collapsible", DarkRed, DarkRed, "collapsible" },
{ Color_collapsibleframe, N_("collapsible inset frame"), "collapsibleframe", IndianRed, IndianRed, "collapsibleframe" },
{ Color_insetbg, N_("inset background"), "insetbg", grey80, grey80, "insetbg" },
@@ -341,29 +361,29 @@ ColorSet::ColorSet()
{ Color_eolmarker, N_("end-of-line marker"), "eolmarker", Brown, Brown, "eolmarker" },
{ Color_added_space, N_("added space markers"), "added_space", Brown, Brown, "added_space" },
{ Color_appendix, N_("appendix marker"), "appendix", Brown, Brown, "appendix" },
- { Color_changebar, N_("change bar"), "changebar", blue, "#86a4ff", "changebar" },
- { Color_deletedtext_output, N_("changes - deleted text (exported output)"), "deletedtext", "#ff0000", "#ff0000", "deletedtext" },
- { Color_addedtext_output, N_("changes - added text (exported output)"), "addedtext", "#0000ff", "#0000ff", "addedtext" },
- { Color_changedtext_workarea_author1, N_("changed text (workarea, 1st author)"), "changedtextauthor1", "#0000ff", "#86a4ff", "changedtextauthor1" },
- { Color_changedtext_workarea_author2, N_("changed text (workarea, 2nd author)"), "changedtextauthor2", "#ff00ff", "#ee86ee", "changedtextauthor2" },
- { Color_changedtext_workarea_author3, N_("changed text (workarea, 3rd author)"), "changedtextauthor3", "#ff0000", "#ea8989", "changedtextauthor3" },
- { Color_changedtext_workarea_author4, N_("changed text (workarea, 4th author)"), "changedtextauthor4", "#aa00ff", "#c371ec", "changedtextauthor4" },
- { Color_changedtext_workarea_author5, N_("changed text (workarea, 5th author)"), "changedtextauthor5", "#55aa00", "#acd780", "changedtextauthor5" },
- { Color_changedtext_workarea_comparison, N_("changed text (workarea, document comparison)"), "changedtextcomparison", "#008080", "#719FB0", "changedtextcomparison" },
+ { Color_changebar, N_("change bar"), "changebar", blue, "#ff86a4ff", "changebar" },
+ { Color_deletedtext_output, N_("changes - deleted text (exported output)"), "deletedtext", "#ffff0000", "#ffff0000", "deletedtext" },
+ { Color_addedtext_output, N_("changes - added text (exported output)"), "addedtext", "#ff0000ff", "#ff0000ff", "addedtext" },
+ { Color_changedtext_workarea_author1, N_("changed text (workarea, 1st author)"), "changedtextauthor1", "#ff0000ff", "#ff86a4ff", "changedtextauthor1" },
+ { Color_changedtext_workarea_author2, N_("changed text (workarea, 2nd author)"), "changedtextauthor2", "#ffff00ff", "#ffee86ee", "changedtextauthor2" },
+ { Color_changedtext_workarea_author3, N_("changed text (workarea, 3rd author)"), "changedtextauthor3", "#ffff0000", "#ffea8989", "changedtextauthor3" },
+ { Color_changedtext_workarea_author4, N_("changed text (workarea, 4th author)"), "changedtextauthor4", "#ffaa00ff", "#ffc371ec", "changedtextauthor4" },
+ { Color_changedtext_workarea_author5, N_("changed text (workarea, 5th author)"), "changedtextauthor5", "#ff55aa00", "#ffacd780", "changedtextauthor5" },
+ { Color_changedtext_workarea_comparison, N_("changed text (workarea, document comparison)"), "changedtextcomparison", "#ff008080", "#ff719fb0", "changedtextcomparison" },
{ Color_deletedtext_workarea_modifier, N_("changes - deleted text brightness (workarea)"), "deletedtextmodifier", white, white, "deletedtextmodifier" },
{ Color_tabularline, N_("table line"), "tabularline", black, Linen, "tabularline" },
- { Color_tabularonoffline, N_("table on/off line"), "tabularonoffline", "#b0c4de", "#23497b", "tabularonoffline" },
+ { Color_tabularonoffline, N_("table on/off line"), "tabularonoffline", "#ffb0c4de", "#ff23497b", "tabularonoffline" },
{ Color_bottomarea, N_("bottom area"), "bottomarea", grey40, grey80, "bottomarea" },
- { Color_newpage, N_("new page"), "newpage", blue, "#86a4ff", "newpage" },
+ { Color_newpage, N_("new page"), "newpage", blue, "#ff86a4ff", "newpage" },
{ Color_pagebreak, N_("page break / line break"), "pagebreak", RoyalBlue, RoyalBlue, "pagebreak" },
- { Color_buttonframe, N_("button frame"), "buttonframe", "#dcd2c8", "#dcd2c8", "buttonframe" },
- { Color_buttonbg, N_("button background"), "buttonbg", "#dcd2c8", "#dcd2c8", "buttonbg" },
- { Color_buttonhoverbg, N_("button background under focus"), "buttonhoverbg", "#C7C7CA", "#C7C7CA", "buttonhoverbg" },
+ { Color_buttonframe, N_("button frame"), "buttonframe", "#ffdcd2c8", "#ffdcd2c8", "buttonframe" },
+ { Color_buttonbg, N_("button background"), "buttonbg", "#ffdcd2c8", "#ffdcd2c8", "buttonbg" },
+ { Color_buttonhoverbg, N_("button background under focus"), "buttonhoverbg", "#ffc7c7ca", "#ffc7c7ca", "buttonhoverbg" },
{ Color_command_broken, N_("command inset (broken reference)"), "command", white, white, "command_broken" },
{ Color_buttonbg_broken, N_("button background (broken reference)"), "commandbg", red, red, "commandbg_broken" },
{ Color_buttonframe_broken, N_("button frame (broken reference)"), "commandframe", red, red, "commandframe_broken" },
{ Color_buttonhoverbg_broken, N_("button background (broken reference) under focus"),
- "buttonhoverbg", "#DB0B0B", "#DB0B0B", "buttonhoverbg_broken" },
+ "buttonhoverbg", "#ffdb0b0b", "#ffdb0b0b", "buttonhoverbg_broken" },
{ Color_paragraphmarker, N_("paragraph marker"), "paragraphmarker", grey80, grey40, "paragraphmarker"},
{ Color_previewframe, N_("preview frame"), "previewframe", black, Linen, "previewframe"},
{ Color_bookmark, N_("bookmark"), "bookmark", RoyalBlue, RoyalBlue, "bookmark" },
@@ -384,8 +404,8 @@ void ColorSet::fill(ColorEntry const & entry)
Information in;
in.lyxname = entry.lyxname;
in.latexname = entry.latexname;
- in.x11hexname = entry.x11hexname;
- in.x11darkhexname = entry.x11darkhexname;
+ in.hex32name = entry.hex32name;
+ in.darkhex32name = entry.darkhex32name;
in.guiname = entry.guiname;
infotab[entry.lcolor] = in;
lyxcolors[entry.lyxname] = entry.lcolor;
@@ -406,7 +426,8 @@ string const ColorSet::getX11HexName(ColorCode c, bool const darkmode) const
{
InfoTab::const_iterator it = infotab.find(c);
if (it != infotab.end())
- return darkmode ? it->second.x11darkhexname : it->second.x11hexname;
+ return darkmode ? "#" + it->second.darkhex32name.substr(3, 6) :
+ "#" + it->second.hex32name.substr(3, 6);
lyxerr << "LyX internal error: Missing color"
" entry in Color.cpp for " << c << '\n'
@@ -425,7 +446,8 @@ pair<string, string> const ColorSet::getAllX11HexNames(ColorCode c) const
{
InfoTab::const_iterator it = infotab.find(c);
if (it != infotab.end())
- return make_pair(it->second.x11hexname, it->second.x11darkhexname);
+ return make_pair("#" + it->second.hex32name.substr(3, 6),
+ "#" + it->second.darkhex32name.substr(3, 6));
lyxerr << "LyX internal error: Missing color"
" entry in Color.cpp for " << c << '\n'
@@ -434,6 +456,38 @@ pair<string, string> const ColorSet::getAllX11HexNames(ColorCode c) const
}
+string const ColorSet::get32bitHexName(ColorCode c, bool const darkmode) const
+{
+ InfoTab::const_iterator it = infotab.find(c);
+ if (it != infotab.end())
+ return darkmode ? it->second.darkhex32name : it->second.hex32name;
+
+ lyxerr << "LyX internal error: Missing color"
+ " entry in Color.cpp for " << c << '\n'
+ << "Using black." << endl;
+ return darkmode ? "#fffaf0e6" : "black";
+}
+
+
+string const ColorSet::get32bitHexName(string const & lyxname, bool const darkmode) const
+{
+ return getX11HexName(getFromLyXName(lyxname), darkmode);
+}
+
+
+pair<string, string> const ColorSet::getAll32bitHexNames(ColorCode c) const
+{
+ InfoTab::const_iterator it = infotab.find(c);
+ if (it != infotab.end())
+ return make_pair(it->second.hex32name, it->second.darkhex32name);
+
+ lyxerr << "LyX internal error: Missing color"
+ " entry in Color.cpp for " << c << '\n'
+ << "Using black." << endl;
+ return make_pair("black", "#fffaf0e6");
+}
+
+
string const ColorSet::getLaTeXName(ColorCode c) const
{
InfoTab::const_iterator it = infotab.find(c);
@@ -452,8 +506,8 @@ string const ColorSet::getLyXName(ColorCode c) const
}
-bool ColorSet::setColor(ColorCode col, string const & x11hexname,
- string const & x11darkhexname)
+bool ColorSet::setColor(ColorCode col, string const & hexname,
+ string const & darkhexname)
{
InfoTab::iterator it = infotab.find(col);
if (it == infotab.end()) {
@@ -468,15 +522,30 @@ bool ColorSet::setColor(ColorCode col, string const & x11hexname,
return false;
}
- if (!x11hexname.empty())
- it->second.x11hexname = x11hexname;
- it->second.x11darkhexname = (x11darkhexname.empty()) ? x11hexname : x11darkhexname;
+ LASSERT((hexname.empty()
+ || ((hexname.size() == 7 || hexname.size() == 9)
+ && hexname[0] == '#'))
+ && (darkhexname.empty()
+ || ((darkhexname.size() == 7 || darkhexname.size() == 9)
+ && darkhexname[0] == '#')),
+ return true);
+
+ if (!hexname.empty())
+ it->second.hex32name = hexname.size() == 7 ?
+ "#ff" + hexname.substr(1, 6) : hexname;
+
+ if (!darkhexname.empty())
+ it->second.darkhex32name = darkhexname.size() == 7 ?
+ "#ff" + darkhexname.substr(1, 6) : darkhexname;
+ else
+ it->second.darkhex32name = hexname.size() == 7 ?
+ "#ff" + hexname.substr(1, 6) : hexname;
return true;
}
-bool ColorSet::setColor(string const & lyxname, string const & x11hexname,
- string const & x11darkhexname)
+bool ColorSet::setColor(string const & lyxname, string const & hexname,
+ string const & darkhexname)
{
string const lcname = ascii_lowercase(lyxname);
if (lyxcolors.find(lcname) == lyxcolors.end()) {
@@ -485,7 +554,7 @@ bool ColorSet::setColor(string const & lyxname, string const & x11hexname,
addColor(static_cast<ColorCode>(infotab.size()), lcname);
}
- return setColor(lyxcolors[lcname], x11hexname, x11darkhexname);
+ return setColor(lyxcolors[lcname], hexname, darkhexname);
}
@@ -608,5 +677,4 @@ ColorSet lcolor;
// An equally evil global system Color instance
ColorSet system_lcolor;
-
} // namespace lyx
diff --git a/src/Color.h b/src/Color.h
index e85efbfbae..8ba9587831 100644
--- a/src/Color.h
+++ b/src/Color.h
@@ -60,7 +60,12 @@ public:
std::ostream & operator<<(std::ostream & os, Color color);
std::string const X11hexname(RGBColor const & col);
-RGBColor rgbFromHexName(std::string const & x11hexname);
+/// Returns RGBColor from 16- or 32-bit hex name
+/// Alpha value is omitted for 32-bit hex name
+RGBColor rgbFromHexName(std::string const & hexname);
+/// Returns ARGBColor from 16- or 32-bit hex name
+/// 16-bit hex name is interpreted as a solid color
+ARGBColor argbFromHexName(std::string const & hexname);
std::string const outputLaTeXColor(RGBColor const & color);
/// Inverse of outputLaTeXColor
RGBColor const RGBColorFromLaTeX(std::string const & color);
diff --git a/src/ColorSet.h b/src/ColorSet.h
index c9dbaa3da2..78e3f2a08e 100644
--- a/src/ColorSet.h
+++ b/src/ColorSet.h
@@ -52,16 +52,16 @@ public:
* \returns true if successful. The optional third argument passes
* a color for dark mode.
*/
- bool setColor(ColorCode col, std::string const & x11hexname,
- std::string const & x11darkhexname = std::string());
+ bool setColor(ColorCode col, std::string const & hexname,
+ std::string const & darkhexname = std::string());
/** set the given LyX color to the color defined by the X11
* hex name given \returns true if successful. A new color entry
* is created if the color is unknown. The optional third argument passes
* a color for dark mode.
*/
- bool setColor(std::string const & lyxname, std::string const & x11hexname,
- std::string const & x11darkhexname = std::string());
+ bool setColor(std::string const & lyxname, std::string const & hexname,
+ std::string const & darkhexname = std::string());
/** set the given LyX color to a latexcolor if not yet defined
* \returns true if successful. A new color entry
@@ -87,6 +87,16 @@ public:
/// Get the X11 hexname of \c color.
std::pair<std::string, std::string> const getAllX11HexNames(ColorCode c) const;
+ /// Get the 32bit hexname of \c color.
+ std::string const get32bitHexName(ColorCode c, bool const darkmode = false) const;
+
+ /// Get the 32bit hexname of \c color.
+ std::string const get32bitHexName(std::string const & lyxname,
+ bool const darkmode = false) const;
+
+ /// Get the 32bit hexname of \c color.
+ std::pair<std::string, std::string> const getAll32bitHexNames(ColorCode c) const;
+
/// Get the LaTeX name of \c color.
std::string const getLaTeXName(ColorCode c) const;
@@ -115,10 +125,10 @@ private:
std::string guiname;
/// the name used in LaTeX
std::string latexname;
- /// the name for X11
- std::string x11hexname;
- /// matching X11 color for dark mode
- std::string x11darkhexname;
+ /// the 32bit hex name
+ std::string hex32name;
+ /// matching 32bit color for dark mode
+ std::string darkhex32name;
/// the name for LyX
std::string lyxname;
};
diff --git a/src/LyXRC.cpp b/src/LyXRC.cpp
index b26b948139..6ab8044b64 100644
--- a/src/LyXRC.cpp
+++ b/src/LyXRC.cpp
@@ -2108,11 +2108,11 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
case RC_SET_COLOR:
for (int i = 0; i < Color_ignore; ++i) {
ColorCode lc = static_cast<ColorCode>(i);
- string const col = lcolor.getAllX11HexNames(lc).first;
- string const darkcol = lcolor.getAllX11HexNames(lc).second;
+ string const col = lcolor.getAll32bitHexNames(lc).first;
+ string const darkcol = lcolor.getAll32bitHexNames(lc).second;
if (ignore_system_lyxrc
- || col != system_lcolor.getAllX11HexNames(lc).first
- || darkcol != system_lcolor.getAllX11HexNames(lc).second) {
+ || col != system_lcolor.getAll32bitHexNames(lc).first
+ || darkcol != system_lcolor.getAll32bitHexNames(lc).second) {
os << "\\set_color \""
<< lcolor.getLyXName(lc) << "\" \""
<< col << "\" \""
diff --git a/src/frontends/qt/ColorCache.cpp b/src/frontends/qt/ColorCache.cpp
index ec0676d79b..210f5c68c4 100644
--- a/src/frontends/qt/ColorCache.cpp
+++ b/src/frontends/qt/ColorCache.cpp
@@ -71,10 +71,10 @@ void ColorCache::init()
for (int col = 0; col <= Color_ignore; ++col) {
// light-mode color
lcolors_[col].first =
- QColor(lcolor.getX11HexName(ColorCode(col), false).c_str());
+ QColor(lcolor.get32bitHexName(ColorCode(col), false).c_str());
// dark-mode color
lcolors_[col].second =
- QColor(lcolor.getX11HexName(ColorCode(col), true).c_str());
+ QColor(lcolor.get32bitHexName(ColorCode(col), true).c_str());
}
initialized_ = true;
@@ -134,8 +134,8 @@ ColorPair ColorCache::getAll(Color const & color, bool syscolors) const
};
}
// used by branches
- return {QColor(lcolor.getX11HexName(color.baseColor, false).c_str()),
- QColor(lcolor.getX11HexName(color.baseColor, true).c_str())};
+ return {QColor(lcolor.get32bitHexName(color.baseColor, false).c_str()),
+ QColor(lcolor.get32bitHexName(color.baseColor, true).c_str())};
}
diff --git a/src/frontends/qt/GuiPrefs.cpp b/src/frontends/qt/GuiPrefs.cpp
index f75f914a3c..29aa070489 100644
--- a/src/frontends/qt/GuiPrefs.cpp
+++ b/src/frontends/qt/GuiPrefs.cpp
@@ -1932,7 +1932,7 @@ void PrefColors::initializeColorsTV()
QColor PrefColors::getCurrentColor(ColorCode color_code, bool const is_dark_mode) const
{
- return lcolor.getX11HexName(color_code, is_dark_mode).c_str();
+ return lcolor.get32bitHexName(color_code, is_dark_mode).c_str();
}
More information about the lyx-cvs
mailing list