X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FColorCache.cpp;h=6036099e473e051e6c52e4edf0f4eba5ade98135;hb=b6eacd8d4f86734e8abef3335b190ce12a6a11b5;hp=26ee11b279ecfaa3e067d29b44dfdeb243d72b60;hpb=17729b93461966b1eaca8408432ec663ac587338;p=lyx.git diff --git a/src/frontends/qt4/ColorCache.cpp b/src/frontends/qt4/ColorCache.cpp index 26ee11b279..6036099e47 100644 --- a/src/frontends/qt4/ColorCache.cpp +++ b/src/frontends/qt4/ColorCache.cpp @@ -17,72 +17,103 @@ namespace lyx { -void ColorCache::setColor(int col, QPalette::ColorRole cr) +namespace{ + +QPalette::ColorRole role(ColorCode col) { - lcolors_[col] = pal_.brush(QPalette::Active, cr).color(); + switch (ColorCode(col)) { + case Color_background: + case Color_commentbg: + case Color_greyedoutbg: + case Color_mathbg: + case Color_graphicsbg: + case Color_mathmacrobg: + case Color_mathcorners: + return QPalette::Base; + break; + + case Color_foreground: + case Color_cursor: + case Color_preview: + case Color_tabularline: + case Color_previewframe: + return QPalette::Text; + break; + + case Color_selection: + return QPalette::Highlight; + break; + case Color_selectiontext: + return QPalette::HighlightedText; + break; + case Color_urllabel: + case Color_urltext: + return QPalette::Link; + default: + return QPalette::NoRole; + } } +} // namespace + void ColorCache::init() { - if (lyxrc.use_system_colors) { - for (int col = 0; col <= Color_ignore; ++col) { - switch (ColorCode(col)) { - case Color_background: - case Color_commentbg: - case Color_greyedoutbg: - case Color_mathbg: - case Color_graphicsbg: - case Color_mathmacrobg: - case Color_mathcorners: - setColor(col, QPalette::Base); - break; - - case Color_foreground: - case Color_cursor: - case Color_preview: - case Color_tabularline: - case Color_previewframe: - setColor(col, QPalette::Text); - break; - - case Color_selection: - setColor(col, QPalette::Highlight); - break; - case Color_selectiontext: - setColor(col, QPalette::HighlightedText); - break; - default: - lcolors_[col] = QColor(lcolor.getX11Name(ColorCode(col)).c_str()); - } - } - } else { - for (int col = 0; col <= Color_ignore; ++col) - lcolors_[col] = QColor(lcolor.getX11Name(ColorCode(col)).c_str()); + for (int col = 0; col <= Color_ignore; ++col) { + lcolors_[col] = QColor(lcolor.getX11Name(ColorCode(col)).c_str()); } + initialized_ = true; } /// get the given color -QColor ColorCache::get(Color color) const +QColor ColorCache::get(Color const & color) const +{ + return get(color, lyxrc.use_system_colors); +} + + +/// get the given color +QColor ColorCache::get(Color const & color, bool syscolors) const { if (!initialized_) const_cast(this)->init(); - if (color <= Color_ignore && color.mergeColor == Color_ignore) - return lcolors_[color.baseColor]; + if (color <= Color_ignore && color.mergeColor == Color_ignore) { + QPalette::ColorRole const cr = role(color.baseColor); + if (syscolors && cr != QPalette::NoRole) { + static QColor const white = Qt::white; + QColor const c = pal_.brush(QPalette::Active, cr).color(); + if (cr == QPalette::Base && c == white) + return lcolors_[color.baseColor]; + else + return c; + } else + return lcolors_[color.baseColor]; + } if (color.mergeColor != Color_ignore) { // FIXME: This would ideally be done in the Color class, but // that means that we'd have to use the Qt code in the core. - QColor base_color = get(color.baseColor).toRgb(); - QColor merge_color = get(color.mergeColor).toRgb(); + QColor base_color = get(color.baseColor, syscolors).toRgb(); + QColor merge_color = get(color.mergeColor, syscolors).toRgb(); return QColor( (base_color.red() + merge_color.red()) / 2, (base_color.green() + merge_color.green()) / 2, (base_color.blue() + merge_color.blue()) / 2); } // used by branches - return QColor(lcolor.getX11Name(color.baseColor).c_str()); + return QColor(lcolor.getX11Name(color.baseColor).c_str()); +} + + +bool ColorCache::isSystem(ColorCode const color) const +{ + QPalette::ColorRole const cr = role(color); + if (cr == QPalette::Base) { + static QColor const white = Qt::white; + return pal_.brush(QPalette::Active, cr).color() != white; + } else + return cr != QPalette::NoRole; }