// -*- C++ -*-
/**
 * \file Color.h
 * This file is part of LyX, the document processor.
 * Licence details can be found in the file COPYING.
 *
 * \author Asger Alstrup
 * \author Lars Gullik Bjønnes
 * \author Matthias Ettrich
 * \author Jean-Marc Lasgouttes
 * \author Angus Leeming
 * \author John Levon
 * \author André Pönitz
 * \author Martin Vermeer
 *
 * Full author contact details are available in file CREDITS.
 */

#ifndef COLOR_H
#define COLOR_H

#include "ColorCode.h"

#include <string>

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);

	/// \name 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);

std::string const X11hexname(RGBColor const & col);
RGBColor rgbFromHexName(std::string const & x11hexname);
std::string const outputLaTeXColor(RGBColor const & color);
/// Inverse of outputLaTeXColor
RGBColor const RGBColorFromLaTeX(std::string const & color);
/// Inverted color
RGBColor const inverseRGBColor(RGBColor color);

} // namespace lyx

#endif // COLOR_H
