summaryrefslogtreecommitdiff
path: root/src/gui/palette.cpp
diff options
context:
space:
mode:
authorJared Adams <jaxad0127@gmail.com>2010-03-04 22:41:19 -0700
committerJared Adams <jaxad0127@gmail.com>2010-03-12 14:49:27 -0700
commit781b3c9f17708cc5fe08eb3c9ee38d596364d97c (patch)
tree833797c9b9168ab58864ffe4cf8ed028060e44a2 /src/gui/palette.cpp
parent96b64757954f07d196599b3c1131a6603982c930 (diff)
downloadmana-client-781b3c9f17708cc5fe08eb3c9ee38d596364d97c.tar.gz
mana-client-781b3c9f17708cc5fe08eb3c9ee38d596364d97c.tar.bz2
mana-client-781b3c9f17708cc5fe08eb3c9ee38d596364d97c.tar.xz
mana-client-781b3c9f17708cc5fe08eb3c9ee38d596364d97c.zip
Split Palette into Theme and UserPalette
Themes can now control the colors they use. Colors in the Viewport (being names, particles, etc) can still be changed by the user. Also make ProgressBars more easily colored. DyePalette was made more flexible in the process. Also fixes comparing strings of different lengths insensitively. Reviewed-by: Thorbjørn Lindeijer
Diffstat (limited to 'src/gui/palette.cpp')
-rw-r--r--src/gui/palette.cpp229
1 files changed, 12 insertions, 217 deletions
diff --git a/src/gui/palette.cpp b/src/gui/palette.cpp
index d2309399..9ddbb34d 100644
--- a/src/gui/palette.cpp
+++ b/src/gui/palette.cpp
@@ -33,6 +33,7 @@
#include <math.h>
const gcn::Color Palette::BLACK = gcn::Color(0, 0, 0);
+Palette::Palettes Palette::mInstances;
const gcn::Color Palette::RAINBOW_COLORS[7] = {
gcn::Color(255, 0, 0),
@@ -46,127 +47,22 @@ const gcn::Color Palette::RAINBOW_COLORS[7] = {
/** Number of Elemets of RAINBOW_COLORS */
const int Palette::RAINBOW_COLOR_COUNT = 7;
-std::string Palette::getConfigName(const std::string &typeName)
-{
- std::string res = "Color" + typeName;
-
- int pos = 5;
- for (size_t i = 0; i < typeName.length(); i++)
- {
- if (i == 0 || typeName[i] == '_')
- {
- if (i > 0)
- i++;
-
- res[pos] = typeName[i];
- }
- else
- {
- res[pos] = tolower(typeName[i]);
- }
- pos++;
- }
- res.erase(pos, res.length() - pos);
-
- return res;
-}
-
-DEFENUMNAMES(ColorType, COLOR_TYPE);
-
-Palette::Palette() :
+Palette::Palette(int size) :
mRainbowTime(tick_time),
- mColVector(ColVector(TYPE_COUNT))
+ mColors(Colors(size))
{
- std::string indent = " ";
- addColor(TEXT, 0x000000, STATIC, _("Text"));
- addColor(SHADOW, 0x000000, STATIC, indent + _("Text Shadow"));
- addColor(OUTLINE, 0x000000, STATIC, indent + _("Text Outline"));
- addColor(PROGRESS_BAR, 0xffffff, STATIC, indent + _("Progress Bar Labels"));
- addColor(BUTTON, 0x000000, STATIC, indent + _("Buttons"));
- addColor(BUTTON_DISABLED, 0xCCCCCC, STATIC, indent + _("Disabled Buttons"));
- addColor(TAB, 0x00000, STATIC, indent + _("Tabs"));
-
- addColor(BACKGROUND, 0xffffff, STATIC, _("Background"));
-
- addColor(HIGHLIGHT, 0xebc873, STATIC, _("Highlight"), 'H');
- addColor(TAB_HIGHLIGHT, 0xff0000, PULSE, indent + _("Tab Highlight"));
- addColor(SHOP_WARNING, 0x910000, STATIC, indent + _("Item Too Expensive"));
- addColor(ITEM_EQUIPPED, 0x000091, STATIC, indent + _("Item Is Equipped"));
-
- addColor(CHAT, 0x000000, STATIC, _("Chat"), 'C');
- addColor(GM, 0xff0000, STATIC, indent + _("GM"), 'G');
- addColor(PLAYER, 0x1fa052, STATIC, indent + _("Player"), 'Y');
- addColor(WHISPER, 0x00feaf, STATIC, indent + _("Whisper"), 'W');
- addColor(IS, 0xa08527, STATIC, indent + _("Is"), 'I');
- addColor(PARTY, 0xf48055, STATIC, indent + _("Party"), 'P');
- addColor(GUILD, 0xf48055, STATIC, indent + _("Guild"), 'U');
- addColor(SERVER, 0x8415e2, STATIC, indent + _("Server"), 'S');
- addColor(LOGGER, 0x919191, STATIC, indent + _("Logger"), 'L');
- addColor(HYPERLINK, 0xe50d0d, STATIC, indent + _("Hyperlink"), '<');
-
- addColor(BEING, 0xffffff, STATIC, _("Being"));
- addColor(PC, 0xffffff, STATIC, indent + _("Other Players' Names"));
- addColor(SELF, 0xff8040, STATIC, indent + _("Own Name"));
- addColor(GM_NAME, 0x00ff00, STATIC, indent + _("GM Names"));
- addColor(NPC, 0xc8c8ff, STATIC, indent + _("NPCs"));
- addColor(MONSTER, 0xff4040, STATIC, indent + _("Monsters"));
-
- addColor(UNKNOWN_ITEM, 0x000000, STATIC, _("Unknown Item Type"));
- addColor(GENERIC, 0x21a5b1, STATIC, indent + _("Generics"));
- addColor(HEAD, 0x527fa4, STATIC, indent + _("Hats"));
- addColor(USABLE, 0x268d24, STATIC, indent + _("Usables"));
- addColor(TORSO, 0xd12aa4, STATIC, indent + _("Shirts"));
- addColor(ONEHAND, 0xf42a2a, STATIC, indent + _("One Handed Weapons"));
- addColor(LEGS, 0x699900, STATIC, indent + _("Pants"));
- addColor(FEET, 0xaa1d48, STATIC, indent + _("Shoes"));
- addColor(TWOHAND, 0xf46d0e, STATIC, indent + _("Two Handed Weapons"));
- addColor(SHIELD, 0x9c2424, STATIC, indent + _("Shields"));
- addColor(RING, 0x0000ff, STATIC, indent + _("Rings"));
- addColor(NECKLACE, 0xff00ff, STATIC, indent + _("Necklaces"));
- addColor(ARMS, 0x9c24e8, STATIC, indent + _("Arms"));
- addColor(AMMO, 0x8b6311, STATIC, indent + _("Ammo"));
-
- addColor(PARTICLE, 0xffffff, STATIC, _("Particle Effects"));
- addColor(PICKUP_INFO, 0x28dc28, STATIC, indent + _("Pickup Notification"));
- addColor(EXP_INFO, 0xffff00, STATIC, indent + _("Exp Notification"));
- addColor(HIT_PLAYER_MONSTER, 0x0064ff, STATIC,
- indent + _("Player Hits Monster"));
- addColor(HIT_MONSTER_PLAYER, 0xff3232, STATIC,
- indent + _("Monster Hits Player"));
- addColor(HIT_CRITICAL, 0xff0000, RAINBOW, indent + _("Critical Hit"));
- addColor(MISS, 0xffff00, STATIC, indent + _("Misses"));
-
- addColor(HPBAR_FULL, 0x0f6a20, STATIC, _("HP Bar"));
- addColor(HPBAR_THREE_QUARTERS, 0xc38948, STATIC, indent + _("3/4 HP Bar"));
- addColor(HPBAR_ONE_HALF, 0xe28000, STATIC, indent + _("1/2 HP Bar"));
- addColor(HPBAR_ONE_QUARTER, 0xff0000, PULSE, indent + _("1/4 HP Bar"));
- commit(true);
+ mInstances.insert(this);
}
Palette::~Palette()
{
- for (ColVector::iterator col = mColVector.begin(),
- colEnd = mColVector.end(); col != colEnd; ++col)
- {
- const std::string &configName = ColorTypeNames[col->type];
- config.setValue(configName + "Gradient", col->committedGrad);
-
- if (col->grad != STATIC)
- config.setValue(configName + "Delay", col->delay);
-
- if (col->grad == STATIC || col->grad == PULSE)
- {
- char buffer[20];
- sprintf(buffer, "0x%06x", col->getRGB());
- config.setValue(configName, std::string(buffer));
- }
- }
+ mInstances.erase(this);
}
const gcn::Color& Palette::getColor(char c, bool &valid)
{
- for (ColVector::const_iterator col = mColVector.begin(),
- colEnd = mColVector.end(); col != colEnd; ++col)
+ for (Colors::const_iterator col = mColors.begin(),
+ colEnd = mColors.end(); col != colEnd; ++col)
{
if (col->ch == c)
{
@@ -178,116 +74,15 @@ const gcn::Color& Palette::getColor(char c, bool &valid)
return BLACK;
}
-void Palette::setColor(ColorType type, int r, int g, int b)
-{
- mColVector[type].color.r = r;
- mColVector[type].color.g = g;
- mColVector[type].color.b = b;
-}
-
-void Palette::setGradient(ColorType type, GradientType grad)
-{
- ColorElem *elem = &mColVector[type];
- if (elem->grad != STATIC && grad == STATIC)
- {
- for (size_t i = 0; i < mGradVector.size(); i++)
- {
- if (mGradVector[i] == elem)
- {
- mGradVector.erase(mGradVector.begin() + i);
- break;
- }
- }
- }
- else if (elem->grad == STATIC && grad != STATIC)
- {
- mGradVector.push_back(elem);
- }
-
- if (elem->grad != grad)
- {
- elem->grad = grad;
- }
-}
-
-std::string Palette::getElementAt(int i)
+void Palette::advanceGradients()
{
- if (i < 0 || i >= getNumberOfElements())
- {
- return "";
- }
- return mColVector[i].text;
-}
+ Palettes::iterator it = mInstances.begin();
+ Palettes::iterator it_end = mInstances.end();
-Palette::ColorType Palette::getColorTypeAt(int i)
-{
- if (i < 0 || i >= getNumberOfElements())
+ for (; it != it_end; it++)
{
- return CHAT;
+ (*it)->advanceGradient();
}
- return mColVector[i].type;
-}
-
-void Palette::commit(bool commitNonStatic)
-{
- for (ColVector::iterator i = mColVector.begin(), iEnd = mColVector.end();
- i != iEnd; ++i)
- {
- i->committedGrad = i->grad;
- i->committedDelay = i->delay;
- if (commitNonStatic || i->grad == STATIC)
- {
- i->committedColor = i->color;
- }
- else if (i->grad == PULSE)
- {
- i->committedColor = i->testColor;
- }
- }
-}
-
-void Palette::rollback()
-{
- for (ColVector::iterator i = mColVector.begin(), iEnd = mColVector.end();
- i != iEnd; ++i)
- {
- if (i->grad != i->committedGrad)
- {
- setGradient(i->type, i->committedGrad);
- }
- setGradientDelay(i->type, i->committedDelay);
- setColor(i->type, i->committedColor.r, i->committedColor.g,
- i->committedColor.b);
- if (i->grad == PULSE)
- {
- i->testColor.r = i->committedColor.r;
- i->testColor.g = i->committedColor.g;
- i->testColor.b = i->committedColor.b;
- }
- }
-}
-
-void Palette::addColor(Palette::ColorType type, int rgb,
- Palette::GradientType grad, const std::string &text,
- char c, int delay)
-{
- const std::string &configName = ColorTypeNames[type];
- char buffer[20];
- sprintf(buffer, "0x%06x", rgb);
- const std::string rgbString = config.getValue(configName,
- std::string(buffer));
- unsigned int rgbValue = 0;
- if (rgbString.length() == 8 && rgbString[0] == '0' && rgbString[1] == 'x')
- rgbValue = atox(rgbString);
- else
- rgbValue = atoi(rgbString.c_str());
- gcn::Color trueCol = rgbValue;
- grad = (GradientType) config.getValue(configName + "Gradient", grad);
- delay = (int) config.getValue(configName + "Delay", delay);
- mColVector[type].set(type, trueCol, grad, text, c, delay);
-
- if (grad != STATIC)
- mGradVector.push_back(&mColVector[type]);
}
void Palette::advanceGradient()