You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
231 lines
6.8 KiB
231 lines
6.8 KiB
/* |
|
This source file is part of Konsole, a terminal emulator. |
|
|
|
Copyright 2007-2008 by Robert Knight <robertknight@gmail.com> |
|
|
|
This program is free software; you can redistribute it and/or modify |
|
it under the terms of the GNU General Public License as published by |
|
the Free Software Foundation; either version 2 of the License, or |
|
(at your option) any later version. |
|
|
|
This program is distributed in the hope that it will be useful, |
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
GNU General Public License for more details. |
|
|
|
You should have received a copy of the GNU General Public License |
|
along with this program; if not, write to the Free Software |
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
|
02110-1301 USA. |
|
*/ |
|
|
|
#ifndef COLORSCHEME_H |
|
#define COLORSCHEME_H |
|
|
|
// Qt |
|
#include <QtCore/QMetaType> |
|
|
|
// KDE |
|
#include <KSharedPtr> |
|
|
|
// Konsole |
|
#include "CharacterColor.h" |
|
|
|
class KConfig; |
|
class QPixmap; |
|
class QPainter; |
|
|
|
namespace Konsole |
|
{ |
|
/** |
|
* This class holds the wallpaper pixmap associated with a color scheme. |
|
* The wallpaper object is shared between multiple TerminalDisplay. |
|
*/ |
|
class ColorSchemeWallpaper : public QSharedData |
|
{ |
|
public: |
|
typedef KSharedPtr<ColorSchemeWallpaper> Ptr; |
|
|
|
explicit ColorSchemeWallpaper(const QString& path); |
|
~ColorSchemeWallpaper(); |
|
|
|
void load(); |
|
|
|
/** Returns true if wallpaper available and drawn */ |
|
bool draw(QPainter& painter, const QRect& rect); |
|
|
|
bool isNull() const; |
|
|
|
QString path() const; |
|
|
|
private: |
|
QString _path; |
|
QPixmap* _picture; |
|
}; |
|
|
|
/** |
|
* Represents a color scheme for a terminal display. |
|
* |
|
* The color scheme includes the palette of colors used to draw the text and character backgrounds |
|
* in the display and the opacity level of the display background. |
|
*/ |
|
class ColorScheme |
|
{ |
|
public: |
|
/** |
|
* Constructs a new color scheme which is initialized to the default color set |
|
* for Konsole. |
|
*/ |
|
ColorScheme(); |
|
ColorScheme(const ColorScheme& other); |
|
~ColorScheme(); |
|
|
|
/** Sets the descriptive name of the color scheme. */ |
|
void setDescription(const QString& description); |
|
/** Returns the descriptive name of the color scheme. */ |
|
QString description() const; |
|
|
|
/** Sets the name of the color scheme */ |
|
void setName(const QString& name); |
|
/** Returns the name of the color scheme */ |
|
QString name() const; |
|
|
|
/** Reads the color scheme from the specified configuration source */ |
|
void read(const KConfig& config); |
|
/** Writes the color scheme to the specified configuration source */ |
|
void write(KConfig& config) const; |
|
|
|
/** Sets a single entry within the color palette. */ |
|
void setColorTableEntry(int index , const ColorEntry& entry); |
|
|
|
/** |
|
* Copies the color entries which form the palette for this color scheme |
|
* into @p table. @p table should be an array with TABLE_COLORS entries. |
|
* |
|
* @param table Array into which the color entries for this color scheme |
|
* are copied. |
|
* @param randomSeed Color schemes may allow certain colors in their |
|
* palette to be randomized. The seed is used to pick the random color. |
|
*/ |
|
void getColorTable(ColorEntry* table, uint randomSeed = 0) const; |
|
|
|
/** |
|
* Retrieves a single color entry from the table. |
|
* |
|
* See getColorTable() |
|
*/ |
|
ColorEntry colorEntry(int index , uint randomSeed = 0) const; |
|
|
|
/** |
|
* Convenience method. Returns the |
|
* foreground color for this scheme, |
|
* this is the primary color used to draw the |
|
* text in this scheme. |
|
*/ |
|
QColor foregroundColor() const; |
|
/** |
|
* Convenience method. Returns the background color for |
|
* this scheme, this is the primary color used to |
|
* draw the terminal background in this scheme. |
|
*/ |
|
QColor backgroundColor() const; |
|
|
|
/** |
|
* Returns true if this color scheme has a dark background. |
|
* The background color is said to be dark if it has a value of less than 127 |
|
* in the HSV color space. |
|
*/ |
|
bool hasDarkBackground() const; |
|
|
|
/** |
|
* Sets the opacity level of the display background. @p opacity ranges |
|
* between 0 (completely transparent background) and 1 (completely |
|
* opaque background). |
|
* |
|
* Defaults to 1. |
|
* |
|
* TODO: More documentation |
|
*/ |
|
void setOpacity(qreal opacity); |
|
/** |
|
* Returns the opacity level for this color scheme, see setOpacity() |
|
* TODO: More documentation |
|
*/ |
|
qreal opacity() const; |
|
|
|
void setWallpaper(const QString& path); |
|
|
|
ColorSchemeWallpaper::Ptr wallpaper() const; |
|
|
|
/** |
|
* Enables randomization of the background color. This will cause |
|
* the palette returned by getColorTable() and colorEntry() to |
|
* be adjusted depending on the value of the random seed argument |
|
* to them. |
|
*/ |
|
void setRandomizedBackgroundColor(bool randomize); |
|
|
|
/** Returns true if the background color is randomized. */ |
|
bool randomizedBackgroundColor() const; |
|
|
|
static const ColorEntry defaultTable[]; // table of default color entries |
|
|
|
static QString colorNameForIndex(int index); |
|
static QString translatedColorNameForIndex(int index); |
|
|
|
private: |
|
// specifies how much a particular color can be randomized by |
|
class RandomizationRange |
|
{ |
|
public: |
|
RandomizationRange() : hue(0) , saturation(0) , value(0) {} |
|
|
|
bool isNull() const { |
|
return (hue == 0 && saturation == 0 && value == 0); |
|
} |
|
|
|
quint16 hue; |
|
quint8 saturation; |
|
quint8 value; |
|
}; |
|
|
|
// returns the active color table. if none has been set specifically, |
|
// this is the default color table. |
|
const ColorEntry* colorTable() const; |
|
|
|
// reads a single color entry from a KConfig source |
|
// and sets the palette entry at 'index' to the entry read. |
|
void readColorEntry(const KConfig& config , int index); |
|
// writes a single color entry to a KConfig source |
|
void writeColorEntry(KConfig& config , int index) const; |
|
|
|
// sets the amount of randomization allowed for a particular color |
|
// in the palette. creates the randomization table if |
|
// it does not already exist |
|
void setRandomizationRange(int index , quint16 hue , quint8 saturation , quint8 value); |
|
|
|
QString _description; |
|
QString _name; |
|
|
|
// pointer to custom color table, or 0 if the default color table is |
|
// being used |
|
ColorEntry* _table; |
|
|
|
// pointer to randomization table, or 0 if no colors in the color |
|
// scheme support randomization |
|
RandomizationRange* _randomTable; |
|
|
|
qreal _opacity; |
|
|
|
ColorSchemeWallpaper::Ptr _wallpaper; |
|
|
|
static const quint16 MAX_HUE = 340; |
|
|
|
static const char* const colorNames[TABLE_COLORS]; |
|
static const char* const translatedColorNames[TABLE_COLORS]; |
|
}; |
|
} |
|
|
|
Q_DECLARE_METATYPE(const Konsole::ColorScheme*) |
|
|
|
#endif //COLORSCHEME_H
|
|
|