From 2e7698c4e660488194a4a1a094187215668e4ceb Mon Sep 17 00:00:00 2001 From: Vincent van Ravesteijn Date: Mon, 9 Feb 2009 20:00:31 +0000 Subject: [PATCH] Add a new Color class. This class makes it possible to specify a color as a merging of two other colors. The actual computation of the new color is done in ColorCache::get. See: http://thread.gmane.org/gmane.editors.lyx.devel/114189 git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@28420 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/Color.cpp | 39 ++++++++++++++++++++++++++++++++ src/Color.h | 35 ++++++++++++++++++++++++++++ src/frontends/qt4/ColorCache.cpp | 18 +++++++++++---- src/frontends/qt4/ColorCache.h | 4 ++-- 4 files changed, 90 insertions(+), 6 deletions(-) diff --git a/src/Color.cpp b/src/Color.cpp index 7995eba380..6c6e32481f 100644 --- a/src/Color.cpp +++ b/src/Color.cpp @@ -84,6 +84,45 @@ RGBColor rgbFromHexName(string const & x11hexname) } +Color::Color(ColorCode base_color) : baseColor(base_color), + mergeColor(Color_ignore) +{} + + +bool Color::operator==(Color const & color) const +{ + return baseColor == color.baseColor; +} + + +bool Color::operator!=(Color const & color) const +{ + return baseColor != color.baseColor; +} + + +bool Color::operator<(Color const & color) const +{ + return baseColor < color.baseColor; +} + + +bool Color::operator<=(Color const & color) const +{ + return baseColor <= color.baseColor; +} + + +std::ostream & operator<<(std::ostream & os, Color color) +{ + os << to_ascii(lcolor.getGUIName(color.baseColor)); + if (color.mergeColor != Color_ignore) + os << "[merged with:" + << to_ascii(lcolor.getGUIName(color.mergeColor)) << "]"; + return os; +} + + ColorSet::ColorSet() { char const * grey40 = "#666666"; diff --git a/src/Color.h b/src/Color.h index 2841dc5ba6..ec1a2d9ba4 100644 --- a/src/Color.h +++ b/src/Color.h @@ -28,6 +28,41 @@ namespace lyx { +/** + * \class Color + * + * A class holding a definition of a certain color. + * + * A color can be one of the following kinds: + * + * - a single color, then mergeColor = Color_ignore + * - a merged color, i.e. the average of the base and merge colors. + */ + +class Color +{ +public: + /// + Color(ColorCode base_color = Color_none); + + /// comparison operators. + //@{ + bool operator==(Color const & color) const; + bool operator!=(Color const & color) const; + bool operator<(Color const & color) const; + bool operator<=(Color const & color) const; + //@} + + /// the base color + ColorCode baseColor; + /// The color that is merged with the base color. Set + /// mergeColor to Color_ignore if no merging is wanted. + ColorCode mergeColor; +}; + +std::ostream & operator<<(std::ostream & os, Color color); + + /** * \class ColorSet * diff --git a/src/frontends/qt4/ColorCache.cpp b/src/frontends/qt4/ColorCache.cpp index 69520fc738..dde6bc6368 100644 --- a/src/frontends/qt4/ColorCache.cpp +++ b/src/frontends/qt4/ColorCache.cpp @@ -28,14 +28,24 @@ void ColorCache::init() /// get the given color -QColor ColorCache::get(ColorCode color) const +QColor ColorCache::get(Color color) const { if (!initialized_) const_cast(this)->init(); - if (color <= Color_ignore) - return lcolors_[color]; + if (color <= Color_ignore && color.mergeColor == Color_ignore) + 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(); + 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).c_str()); + return QColor(lcolor.getX11Name(color.baseColor).c_str()); } diff --git a/src/frontends/qt4/ColorCache.h b/src/frontends/qt4/ColorCache.h index 1716d5c044..88db6bb565 100644 --- a/src/frontends/qt4/ColorCache.h +++ b/src/frontends/qt4/ColorCache.h @@ -12,7 +12,7 @@ #ifndef COLORCACHE_H #define COLORCACHE_H -#include "ColorCode.h" +#include "Color.h" #include @@ -29,7 +29,7 @@ public: ColorCache() : initialized_(false) {} /// get the given color - QColor get(ColorCode color) const; + QColor get(Color color) const; /// clear all colors void clear() { initialized_ = false; } -- 2.39.5