summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <bjorn@lindeijer.nl>2025-04-25 21:25:03 +0200
committerThorbjørn Lindeijer <bjorn@lindeijer.nl>2025-04-26 21:54:10 +0200
commit43786e9b5480c50e7d77467bd72dac875e5db908 (patch)
treeb2dddc6023980a5b7c6f0d060aeba1b4e055fc86
parent53e22afe92e7f360ce0de5cbb013f3257081bdb8 (diff)
downloadmana-43786e9b5480c50e7d77467bd72dac875e5db908.tar.gz
mana-43786e9b5480c50e7d77467bd72dac875e5db908.tar.bz2
mana-43786e9b5480c50e7d77467bd72dac875e5db908.tar.xz
mana-43786e9b5480c50e7d77467bd72dac875e5db908.zip
GUI: Added support for explicit outline color per palette entry
This enables customized outlines for each text color as well as adding outlines for specific palettes, as done by the Jewelry theme. Merged PARTY_CHAT_TAB and PARTY_SOCIAL_TAB into just PARTY_TAB since we should probably be using the same color there anyway. Split off WHISPER_TAB as separate color from WHISPER.
-rw-r--r--data/graphics/gui/jewelry/theme.xml303
-rw-r--r--data/graphics/gui/theme.xml4
-rw-r--r--src/gui/itempopup.cpp6
-rw-r--r--src/gui/itempopup.h3
-rw-r--r--src/gui/palette.cpp21
-rw-r--r--src/gui/palette.h19
-rw-r--r--src/gui/socialwindow.cpp2
-rw-r--r--src/gui/widgets/browserbox.cpp80
-rw-r--r--src/gui/widgets/browserbox.h1
-rw-r--r--src/gui/widgets/popup.cpp14
-rw-r--r--src/gui/widgets/textbox.cpp48
-rw-r--r--src/gui/widgets/textbox.h12
-rw-r--r--src/gui/widgets/whispertab.cpp2
-rw-r--r--src/net/tmwa/gui/partytab.cpp3
-rw-r--r--src/resources/theme.cpp45
-rw-r--r--src/resources/theme.h5
16 files changed, 258 insertions, 310 deletions
diff --git a/data/graphics/gui/jewelry/theme.xml b/data/graphics/gui/jewelry/theme.xml
index a20ba2d3..63694066 100644
--- a/data/graphics/gui/jewelry/theme.xml
+++ b/data/graphics/gui/jewelry/theme.xml
@@ -8,30 +8,22 @@
<color id="SHADOW" color="#000000" />
<color id="OUTLINE" color="#000000" />
<color id="BORDER" color="#000000" />
- <color id="CHECKBOX" color="#000000" />
<color id="DROPDOWN" color="#000000" />
<color id="LISTBOX" color="#000000" />
<color id="LISTBOX_SELECTED" color="#000000" />
- <color id="RADIOBUTTON" color="#000000" />
- <color id="POPUP" color="#f9eabc" />
- <color id="BATTLE_CHAT_TAB" color="#efd7a7" />
- <color id="BATTLE_CHAT_TAB_OUTLINE" color="#473005" />
- <color id="BATTLE_CHAT_TAB_HIGHLIGHTED" color="#f8eacf" />
- <color id="BATTLE_CHAT_TAB_HIGHLIGHTED_OUTLINE" color="#63450a" />
- <color id="BATTLE_CHAT_TAB_SELECTED" color="#f8eacf" />
- <color id="BATTLE_CHAT_TAB_SELECTED_OUTLINE" color="#63450a" />
- <color id="CHANNEL_CHAT_TAB" color="#efd7a7" />
- <color id="CHANNEL_CHAT_TAB_OUTLINE" color="#473005" />
- <color id="CHANNEL_CHAT_TAB_HIGHLIGHTED" color="#f8eacf" />
- <color id="CHANNEL_CHAT_TAB_HIGHLIGHTED_OUTLINE" color="#63450a" />
- <color id="CHANNEL_CHAT_TAB_SELECTED" color="#f8eacf" />
- <color id="CHANNEL_CHAT_TAB_SELECTED_OUTLINE" color="#63450a" />
+ <color id="CHANNEL_CHAT_TAB" color="#efd7a7" outlineColor="#473005" />
<color id="BACKGROUND" color="#ffffff" />
<color id="BACKGROUND_GRAY" color="#404040" />
<color id="DROPDOWN_SHADOW" color="#c0c0c0" />
<color id="HIGHLIGHT" color="#ebc873" />
<color id="TAB_FLASH" color="#fec4ff" effect="pulse" />
<color id="TAB_PLAYER_FLASH" color="#00ff00" effect="pulse" />
+ <color id="PARTY_TAB" color="#efd7a7" outlineColor="#473005" />
+ <color id="GUILD_TAB" color="#efd7a7" outlineColor="#473005" />
+ <color id="WHISPER_TAB" color="#efd7a7" outlineColor="#473005" />
+ <color id="WHISPER_TAB_OFFLINE" color="#444444" outlineColor="#000000" />
+ <color id="WHISPER_TAB_OFFLINE_HIGHLIGHTED" color="#fffbed" outlineColor="#000000" />
+ <color id="WHISPER_TAB_OFFLINE_SELECTED" color="#444444" outlineColor="#000000" />
<color id="SHOP_WARNING" color="#e07a7a" />
<color id="ITEM_EQUIPPED" color="#000091" />
<color id="ITEM_NOT_EQUIPPED" color="#000000" />
@@ -78,107 +70,33 @@
<color id="STATUSBAR_ON" color="#646464" />
<color id="STATUSBAR_OFF" color="#ffff00" />
<color id="TABLE_BACKGROUND" color="#bfbfbf" />
- <color id="SLOTS_BAR" color="#ffffff" />
- <color id="SLOTS_BAR_OUTLINE" color="#000000" />
- <color id="HP_BAR" color="#ffffff" />
- <color id="HP_BAR_OUTLINE" color="#000000" />
- <color id="MP_BAR" color="#ffffff" />
- <color id="MP_BAR_OUTLINE" color="#000000" />
- <color id="NO_MP_BAR" color="#ffffff" />
- <color id="NO_MP_BAR_OUTLINE" color="#000000" />
- <color id="XP_BAR" color="#ffffff" />
- <color id="XP_BAR_OUTLINE" color="#000000" />
- <color id="WEIGHT_BAR" color="#ffffff" />
- <color id="WEIGHT_BAR_OUTLINE" color="#000000" />
- <color id="MONEY_BAR" color="#ffffff" />
- <color id="MONEY_BAR_OUTLINE" color="#000000" />
- <color id="ARROWS_BAR" color="#ffffff" />
- <color id="ARROWS_BAR_OUTLINE" color="#000000" />
- <color id="STATUS_BAR" color="#ffffff" />
- <color id="STATUS_BAR_OUTLINE" color="#000000" />
- <color id="JOB_BAR" color="#ffffff" />
- <color id="JOB_BAR_OUTLINE" color="#000000" />
+ <color id="SLOTS_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="HP_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="MP_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="NO_MP_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="XP_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="WEIGHT_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="MONEY_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="ARROWS_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="STATUS_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="JOB_BAR" color="#ffffff" outlineColor="#000000" />
<color id="SKILL_COOLDOWN" color="#5090ff" />
</palette>
<palette id="1">
<color id="SELFNICK" color="#402600" />
- <color id="TEXT" color="#f9eabc" />
+ <color id="TEXT" color="#fbf4c4" outlineColor="#42403a" />
<color id="TEXT_DISABLED" color="#f9eabc" />
<color id="CARET" color="#80561f" />
<color id="SHADOW" color="#000000" />
<color id="OUTLINE" color="#000000" />
<color id="BORDER" color="#000000" />
- <color id="CHECKBOX" color="#000000" />
<color id="DROPDOWN" color="#000000" />
<color id="LISTBOX" color="#000000" />
<color id="LISTBOX_SELECTED" color="#000000" />
- <color id="RADIOBUTTON" color="#000000" />
- <color id="POPUP" color="#fbf4c4" />
- <color id="POPUP_OUTLINE" color="#42403a" />
- <color id="BATTLE_CHAT_TAB" color="#efd7a7" />
- <color id="BATTLE_CHAT_TAB_OUTLINE" color="#473005" />
- <color id="BATTLE_CHAT_TAB_HIGHLIGHTED" color="#f8eacf" />
- <color id="BATTLE_CHAT_TAB_HIGHLIGHTED_OUTLINE" color="#63450a" />
- <color id="BATTLE_CHAT_TAB_SELECTED" color="#f8eacf" />
- <color id="BATTLE_CHAT_TAB_SELECTED_OUTLINE" color="#63450a" />
- <color id="CHANNEL_CHAT_TAB" color="#efd7a7" />
- <color id="CHANNEL_CHAT_TAB_OUTLINE" color="#473005" />
- <color id="CHANNEL_CHAT_TAB_HIGHLIGHTED" color="#f8eacf" />
- <color id="CHANNEL_CHAT_TAB_HIGHLIGHTED_OUTLINE" color="#63450a" />
- <color id="CHANNEL_CHAT_TAB_SELECTED" color="#f8eacf" />
- <color id="CHANNEL_CHAT_TAB_SELECTED_OUTLINE" color="#63450a" />
- <color id="TAB_FLASH" color="#a7ff2a" />
- <color id="TAB_FLASH_OUTLINE" color="#142200" />
+ <color id="CHANNEL_CHAT_TAB" color="#efd7a7" outlineColor="#473005" />
+ <color id="TAB_FLASH" color="#a7ff2a" outlineColor="#142200" />
<color id="TAB_PLAYER_FLASH" color="#ff96f6" />
- <color id="PARTY_CHAT_TAB" color="#efd7a7" />
- <color id="PARTY_CHAT_TAB_OUTLINE" color="#473005" />
- <color id="PARTY_CHAT_TAB_HIGHLIGHTED" color="#f8eacf" />
- <color id="PARTY_CHAT_TAB_HIGHLIGHTED_OUTLINE" color="#63450a" />
- <color id="PARTY_CHAT_TAB_SELECTED" color="#f8eacf" />
- <color id="PARTY_CHAT_TAB_SELECTED_OUTLINE" color="#63450a" />
- <color id="PARTY_SOCIAL_TAB" color="#efd7a7" />
- <color id="PARTY_SOCIAL_TAB_OUTLINE" color="#473005" />
- <color id="PARTY_SOCIAL_TAB_HIGHLIGHTED" color="#f8eacf" />
- <color id="PARTY_SOCIAL_TAB_HIGHLIGHTED_OUTLINE" color="#63450a" />
- <color id="PARTY_SOCIAL_TAB_SELECTED" color="#f8eacf" />
- <color id="PARTY_SOCIAL_TAB_SELECTED_OUTLINE" color="#63450a" />
- <color id="GUILD_CHAT_TAB" color="#efd7a7" />
- <color id="GUILD_CHAT_TAB_OUTLINE" color="#473005" />
- <color id="GUILD_CHAT_TAB_HIGHLIGHTED" color="#f8eacf" />
- <color id="GUILD_CHAT_TAB_HIGHLIGHTED_OUTLINE" color="#63450a" />
- <color id="GUILD_CHAT_TAB_SELECTED" color="#f8eacf" />
- <color id="GUILD_CHAT_TAB_SELECTED_OUTLINE" color="#63450a" />
- <color id="GUILD_SOCIAL_TAB" color="#efd7a7" />
- <color id="GUILD_SOCIAL_TAB_OUTLINE" color="#473005" />
- <color id="GUILD_SOCIAL_TAB_HIGHLIGHTED" color="#f8eacf" />
- <color id="GUILD_SOCIAL_TAB_HIGHLIGHTED_OUTLINE" color="#63450a" />
- <color id="GUILD_SOCIAL_TAB_SELECTED" color="#f8eacf" />
- <color id="GUILD_SOCIAL_TAB_SELECTED_OUTLINE" color="#63450a" />
- <color id="CLAN_CHAT_TAB" color="#efd7a7" />
- <color id="CLAN_CHAT_TAB_OUTLINE" color="#473005" />
- <color id="CLAN_CHAT_TAB_HIGHLIGHTED" color="#f8eacf" />
- <color id="CLAN_CHAT_TAB_HIGHLIGHTED_OUTLINE" color="#63450a" />
- <color id="CLAN_CHAT_TAB_SELECTED" color="#f8eacf" />
- <color id="CLAN_CHAT_TAB_SELECTED_OUTLINE" color="#63450a" />
- <color id="GM_CHAT_TAB" color="#efd7a7" />
- <color id="GM_CHAT_TAB_OUTLINE" color="#473005" />
- <color id="GM_CHAT_TAB_HIGHLIGHTED" color="#f8eacf" />
- <color id="GM_CHAT_TAB_HIGHLIGHTED_OUTLINE" color="#63450a" />
- <color id="GM_CHAT_TAB_SELECTED" color="#f8eacf" />
- <color id="GM_CHAT_TAB_SELECTED_OUTLINE" color="#63450a" />
- <color id="WHISPER_TAB" color="#efd7a7" />
- <color id="WHISPER_TAB_OUTLINE" color="#473005" />
- <color id="WHISPER_TAB_OFFLINE" color="#444444" />
- <color id="WHISPER_TAB_OFFLINE_OUTLINE" color="#000000" />
- <color id="WHISPER_TAB_HIGHLIGHTED" color="#f8eacf" />
- <color id="WHISPER_TAB_HIGHLIGHTED_OUTLINE" color="#63450a" />
- <color id="WHISPER_TAB_OFFLINE_HIGHLIGHTED" color="#fffbed" />
- <color id="WHISPER_TAB_OFFLINE_HIGHLIGHTED_OUTLINE" color="#000000" />
- <color id="WHISPER_TAB_SELECTED" color="#f8eacf" />
- <color id="WHISPER_TAB_SELECTED_OUTLINE" color="#63450a" />
- <color id="WHISPER_TAB_OFFLINE_SELECTED" color="#444444" />
- <color id="WHISPER_TAB_OFFLINE_SELECTED_OUTLINE" color="#000000" />
<color id="BACKGROUND" color="#ffffff" />
<color id="BACKGROUND_GRAY" color="#404040" />
<color id="DROPDOWN_SHADOW" color="#c0c0c0" />
@@ -189,103 +107,58 @@
<color id="BUBBLE_NAME" color="#cccccc" />
<color id="BUBBLE_TEXT" color="#ffffff" />
<color id="LOGGER" color="#919191" />
- <color id="HYPERLINK" color="#bcdff4" />
- <color id="HYPERLINK_OUTLINE" color="#052f47" />
+ <color id="HYPERLINK" color="#bcdff4" outlineColor="#052f47" />
<color id="UNKNOWN_ITEM" color="#ffffff" />
<color id="CHARM" color="#ffffff" />
- <color id="GENERIC" color="#dbdbdb" />
- <color id="GENERIC_OUTLINE" color="#333333" />
- <color id="CARD" color="#dbdbdb" />
- <color id="CARD_OUTLINE" color="#333333" />
- <color id="HEAD" color="#f8eb7c" />
- <color id="HEAD_OUTLINE" color="#382a01" />
- <color id="USABLE" color="#b4d7ec" />
- <color id="USABLE_OUTLINE" color="#052f47" />
- <color id="TORSO" color="#f8eb7c" />
- <color id="TORSO_OUTLINE" color="#382a01" />
- <color id="ONEHAND" color="#f8eb7c" />
- <color id="ONEHAND_OUTLINE" color="#382a01" />
- <color id="LEGS" color="#f8eb7c" />
- <color id="LEGS_OUTLINE" color="#382a01" />
- <color id="FEET" color="#f8eb7c" />
- <color id="FEET_OUTLINE" color="#382a01" />
- <color id="TWOHAND" color="#f8eb7c" />
- <color id="TWOHAND_OUTLINE" color="#382a01" />
- <color id="SHIELD" color="#f8eb7c" />
- <color id="SHIELD_OUTLINE" color="#382a01" />
- <color id="RING" color="#f8eb7c" />
- <color id="RING_OUTLINE" color="#382a01" />
- <color id="NECKLACE" color="#f8eb7c" />
- <color id="NECKLACE_OUTLINE" color="#382a01" />
- <color id="ARMS" color="#f8eb7c" />
- <color id="ARMS_OUTLINE" color="#382a01" />
- <color id="AMMO" color="#f8eb7c" />
- <color id="AMMO_OUTLINE" color="#382a01" />
+ <color id="GENERIC" color="#dbdbdb" outlineColor="#333333" />
+ <color id="CARD" color="#dbdbdb" outlineColor="#333333" />
+ <color id="HEAD" color="#f8eb7c" outlineColor="#382a01" />
+ <color id="USABLE" color="#b4d7ec" outlineColor="#052f47" />
+ <color id="TORSO" color="#f8eb7c" outlineColor="#382a01" />
+ <color id="ONEHAND" color="#f8eb7c" outlineColor="#382a01" />
+ <color id="LEGS" color="#f8eb7c" outlineColor="#382a01" />
+ <color id="FEET" color="#f8eb7c" outlineColor="#382a01" />
+ <color id="TWOHAND" color="#f8eb7c" outlineColor="#382a01" />
+ <color id="SHIELD" color="#f8eb7c" outlineColor="#382a01" />
+ <color id="RING" color="#f8eb7c" outlineColor="#382a01" />
+ <color id="NECKLACE" color="#f8eb7c" outlineColor="#382a01" />
+ <color id="ARMS" color="#f8eb7c" outlineColor="#382a01" />
+ <color id="AMMO" color="#f8eb7c" outlineColor="#382a01" />
<color id="SERVER_VERSION_NOT_SUPPORTED" color="#DC0000" />
<color id="WARNING" color="#FF0000" />
- <color id="CHAT" color="#ffffff" />
- <color id="CHAT_OUTLINE" color="#3f3f3f" />
- <color id="GM" color="#ff45fd" />
- <color id="GM_OUTLINE" color="#44033a" />
- <color id="GLOBAL" color="#ff45fd" />
- <color id="GLOBAL_OUTLINE" color="#44033a" />
- <color id="PLAYER" color="#bcdff4" />
- <color id="PLAYER_OUTLINE" color="#052f47" />
- <color id="PLAYER_ADVANCED" color="#f9eabc" />
- <color id="PLAYER_ADVANCED_OUTLINE" color="#3b2b04" />
- <color id="IS" color="#77deff" />
- <color id="IS_OUTLINE" color="#02232e" />
- <color id="SERVER" color="#a7ff2a" />
- <color id="SERVER_OUTLINE" color="#142200" />
- <color id="BROWSERBOX" color="#999999" />
- <color id="BROWSERBOX_OUTLINE" color="#000000" />
- <color id="BLACK" color="#999999" />
- <color id="BLACK_OUTLINE" color="#000000" />
- <color id="RED" color="#ff6565" />
- <color id="RED_OUTLINE" color="#470303" />
- <color id="GREEN" color="#57cb21" />
- <color id="GREEN_OUTLINE" color="#0b3102" />
- <color id="BLUE" color="#8080ff" />
- <color id="BLUE_OUTLINE" color="#060646" />
- <color id="ORANGE" color="#f1c777" />
- <color id="ORANGE_OUTLINE" color="#3d2201" />
- <color id="YELLOW" color="#f8eb7c" />
- <color id="YELLOW_OUTLINE" color="#382a01" />
- <color id="PINK" color="#ff90ee" />
- <color id="PINK_OUTLINE" color="#44033a" />
- <color id="PURPLE" color="#cd8cff" />
- <color id="PURPLE_OUTLINE" color="#260341" />
- <color id="GRAY" color="#dbdbdb" />
- <color id="GRAY_OUTLINE" color="#333333" />
- <color id="BROWN" color="#cb884c" />
- <color id="BROWN_OUTLINE" color="#271802" />
- <color id="OLDCHAT" color="#cb884c" />
- <color id="OLDCHAT_OUTLINE" color="#271802" />
- <color id="AWAYCHAT" color="#cb884c" />
- <color id="AWAYCHAT_OUTLINE" color="#271802" />
+ <color id="CHAT" color="#ffffff" outlineColor="#3f3f3f" />
+ <color id="GM" color="#ff45fd" outlineColor="#44033a" />
+ <color id="GLOBAL" color="#ff45fd" outlineColor="#44033a" />
+ <color id="PLAYER" color="#bcdff4" outlineColor="#052f47" />
+ <color id="PLAYER_ADVANCED" color="#f9eabc" outlineColor="#3b2b04" />
+ <color id="IS" color="#77deff" outlineColor="#02232e" />
+ <color id="SERVER" color="#a7ff2a" outlineColor="#142200" />
+ <color id="BROWSERBOX" color="#999999" outlineColor="#000000" />
+ <color id="BLACK" color="#999999" outlineColor="#000000" />
+ <color id="RED" color="#ff6565" outlineColor="#470303" />
+ <color id="GREEN" color="#57cb21" outlineColor="#0b3102" />
+ <color id="BLUE" color="#8080ff" outlineColor="#060646" />
+ <color id="ORANGE" color="#f1c777" outlineColor="#3d2201" />
+ <color id="YELLOW" color="#f8eb7c" outlineColor="#382a01" />
+ <color id="PINK" color="#ff90ee" outlineColor="#44033a" />
+ <color id="PURPLE" color="#cd8cff" outlineColor="#260341" />
+ <color id="GRAY" color="#dbdbdb" outlineColor="#333333" />
+ <color id="BROWN" color="#cb884c" outlineColor="#271802" />
+ <color id="OLDCHAT" color="#cb884c" outlineColor="#271802" />
+ <color id="AWAYCHAT" color="#cb884c" outlineColor="#271802" />
<color id="STATUSBAR_ON" color="#646464" />
<color id="STATUSBAR_OFF" color="#ffff00" />
<color id="TABLE_BACKGROUND" color="#bfbfbf" />
- <color id="SLOTS_BAR" color="#ffffff" />
- <color id="SLOTS_BAR_OUTLINE" color="#000000" />
- <color id="HP_BAR" color="#ffffff" />
- <color id="HP_BAR_OUTLINE" color="#000000" />
- <color id="MP_BAR" color="#ffffff" />
- <color id="MP_BAR_OUTLINE" color="#000000" />
- <color id="NO_MP_BAR" color="#ffffff" />
- <color id="NO_MP_BAR_OUTLINE" color="#000000" />
- <color id="XP_BAR" color="#ffffff" />
- <color id="XP_BAR_OUTLINE" color="#000000" />
- <color id="WEIGHT_BAR" color="#ffffff" />
- <color id="WEIGHT_BAR_OUTLINE" color="#000000" />
- <color id="MONEY_BAR" color="#ffffff" />
- <color id="MONEY_BAR_OUTLINE" color="#000000" />
- <color id="ARROWS_BAR" color="#ffffff" />
- <color id="ARROWS_BAR_OUTLINE" color="#000000" />
- <color id="STATUS_BAR" color="#ffffff" />
- <color id="STATUS_BAR_OUTLINE" color="#000000" />
- <color id="JOB_BAR" color="#ffffff" />
- <color id="JOB_BAR_OUTLINE" color="#000000" />
+ <color id="SLOTS_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="HP_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="MP_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="NO_MP_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="XP_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="WEIGHT_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="MONEY_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="ARROWS_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="STATUS_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="JOB_BAR" color="#ffffff" outlineColor="#000000" />
</palette>
<palette id="2">
@@ -296,24 +169,10 @@
<color id="SHADOW" color="#000000" />
<color id="OUTLINE" color="#000000" />
<color id="BORDER" color="#000000" />
- <color id="CHECKBOX" color="#000000" />
<color id="DROPDOWN" color="#000000" />
<color id="LISTBOX" color="#000000" />
<color id="LISTBOX_SELECTED" color="#000000" />
- <color id="RADIOBUTTON" color="#000000" />
- <color id="POPUP" color="#f9eabc" />
- <color id="BATTLE_CHAT_TAB" color="#efd7a7" />
- <color id="BATTLE_CHAT_TAB_OUTLINE" color="#000000" />
- <color id="BATTLE_CHAT_TAB_HIGHLIGHTED" color="#f8eacf" />
- <color id="BATTLE_CHAT_TAB_HIGHLIGHTED_OUTLINE" color="#000000" />
- <color id="BATTLE_CHAT_TAB_SELECTED" color="#f8eacf" />
- <color id="BATTLE_CHAT_TAB_SELECTED_OUTLINE" color="#000000" />
- <color id="CHANNEL_CHAT_TAB" color="#efd7a7" />
- <color id="CHANNEL_CHAT_TAB_OUTLINE" color="#000000" />
- <color id="CHANNEL_CHAT_TAB_HIGHLIGHTED" color="#f8eacf" />
- <color id="CHANNEL_CHAT_TAB_HIGHLIGHTED_OUTLINE" color="#000000" />
- <color id="CHANNEL_CHAT_TAB_SELECTED" color="#f8eacf" />
- <color id="CHANNEL_CHAT_TAB_SELECTED_OUTLINE" color="#000000" />
+ <color id="CHANNEL_CHAT_TAB" color="#efd7a7" outlineColor="#000000" />
<color id="BACKGROUND" color="#ffffff" />
<color id="BACKGROUND_GRAY" color="#404040" />
<color id="DROPDOWN_SHADOW" color="#c0c0c0" />
@@ -368,26 +227,16 @@
<color id="STATUSBAR_ON" color="#646464" />
<color id="STATUSBAR_OFF" color="#ffff00" />
<color id="TABLE_BACKGROUND" color="#bfbfbf" />
- <color id="SLOTS_BAR" color="#ffffff" />
- <color id="SLOTS_BAR_OUTLINE" color="#000000" />
- <color id="HP_BAR" color="#ffffff" />
- <color id="HP_BAR_OUTLINE" color="#000000" />
- <color id="MP_BAR" color="#ffffff" />
- <color id="MP_BAR_OUTLINE" color="#000000" />
- <color id="NO_MP_BAR" color="#ffffff" />
- <color id="NO_MP_BAR_OUTLINE" color="#000000" />
- <color id="XP_BAR" color="#ffffff" />
- <color id="XP_BAR_OUTLINE" color="#000000" />
- <color id="WEIGHT_BAR" color="#ffffff" />
- <color id="WEIGHT_BAR_OUTLINE" color="#000000" />
- <color id="MONEY_BAR" color="#ffffff" />
- <color id="MONEY_BAR_OUTLINE" color="#000000" />
- <color id="ARROWS_BAR" color="#ffffff" />
- <color id="ARROWS_BAR_OUTLINE" color="#000000" />
- <color id="STATUS_BAR" color="#ffffff" />
- <color id="STATUS_BAR_OUTLINE" color="#000000" />
- <color id="JOB_BAR" color="#ffffff" />
- <color id="JOB_BAR_OUTLINE" color="#000000" />
+ <color id="SLOTS_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="HP_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="MP_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="NO_MP_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="XP_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="WEIGHT_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="MONEY_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="ARROWS_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="STATUS_BAR" color="#ffffff" outlineColor="#000000" />
+ <color id="JOB_BAR" color="#ffffff" outlineColor="#000000" />
</palette>
<progressbar id="DEFAULT" color="#969696" />
diff --git a/data/graphics/gui/theme.xml b/data/graphics/gui/theme.xml
index e93ef855..bfa1b32c 100644
--- a/data/graphics/gui/theme.xml
+++ b/data/graphics/gui/theme.xml
@@ -13,8 +13,8 @@
<color id="CARET" color="#000000" />
<color id="SHADOW" color="#000000" />
<color id="OUTLINE" color="#000000" />
- <color id="PARTY_CHAT_TAB" color="#f48055" />
- <color id="PARTY_SOCIAL_TAB" color="#ff00d8" />
+ <color id="PARTY_TAB" color="#a9583b" />
+ <color id="WHISPER_TAB" color="#3b58a9" />
<color id="BACKGROUND" color="#ffffff" />
<color id="HIGHLIGHT" color="#c0c0c0" />
<color id="TAB_FLASH" color="#ff0000" effect="pulse" />
diff --git a/src/gui/itempopup.cpp b/src/gui/itempopup.cpp
index 1efd0cf2..3e7ba15a 100644
--- a/src/gui/itempopup.cpp
+++ b/src/gui/itempopup.cpp
@@ -136,6 +136,7 @@ void ItemPopup::setNoItem()
auto &palette = theme->getPalette(getSkin().palette);
mItemName->setForegroundColor(palette.getColor(Theme::GENERIC));
+ mItemName->setOutlineColor(palette.getOutlineColor(Theme::GENERIC));
mItemName->setPosition(0, 0);
mItemDesc->setText(std::string());
@@ -179,9 +180,12 @@ void ItemPopup::setItem(const ItemInfo &item, bool showImage)
auto theme = gui->getTheme();
auto &palette = theme->getPalette(getSkin().palette);
+ const auto typeColorId = getColorIdFromItemType(mItemType);
+
mItemName->setCaption(caption);
mItemName->adjustSize();
- mItemName->setForegroundColor(palette.getColor(getColorIdFromItemType(mItemType)));
+ mItemName->setForegroundColor(palette.getColor(typeColorId));
+ mItemName->setOutlineColor(palette.getOutlineColor(typeColorId));
mItemName->setPosition(space, 0);
mItemDesc->setTextWrapped(item.description, ITEMPOPUP_WRAP_WIDTH);
diff --git a/src/gui/itempopup.h b/src/gui/itempopup.h
index 535104cf..c741ed64 100644
--- a/src/gui/itempopup.h
+++ b/src/gui/itempopup.h
@@ -29,6 +29,7 @@
#include <guichan/mouselistener.hpp>
class Icon;
+class Label;
class TextBox;
/**
@@ -65,7 +66,7 @@ class ItemPopup : public Popup
void mouseMoved(gcn::MouseEvent &mouseEvent) override;
private:
- gcn::Label *mItemName;
+ Label *mItemName;
TextBox *mItemDesc;
TextBox *mItemEffect;
TextBox *mItemWeight;
diff --git a/src/gui/palette.cpp b/src/gui/palette.cpp
index 4b66b70d..948660d2 100644
--- a/src/gui/palette.cpp
+++ b/src/gui/palette.cpp
@@ -70,10 +70,13 @@ Palette &Palette::operator=(Palette &&pal)
void Palette::setColor(int type,
const gcn::Color &color,
+ const std::optional<gcn::Color> &outlineColor,
GradientType grad,
int delay)
{
- mColors[type].set(type, color, grad, delay);
+ auto &elem = mColors[type];
+ elem.set(type, color, grad, delay);
+ elem.outlineColor = outlineColor;
}
void Palette::advanceGradients()
@@ -107,17 +110,19 @@ void Palette::advanceGradient(int advance)
const int pos = elem->gradientIndex % delay;
const int colIndex = elem->gradientIndex / delay;
- if (elem->grad == PULSE)
- {
+ switch (elem->grad) {
+ case STATIC:
+ break;
+ case PULSE: {
const int colVal = (int) (255.0 * sin(PI * colIndex / numOfColors));
const gcn::Color &col = elem->testColor;
elem->color.r = ((colVal * col.r) / 255) % (col.r + 1);
elem->color.g = ((colVal * col.g) / 255) % (col.g + 1);
elem->color.b = ((colVal * col.b) / 255) % (col.b + 1);
+ break;
}
- if (elem->grad == SPECTRUM)
- {
+ case SPECTRUM: {
int colVal;
if (colIndex % 2)
@@ -139,9 +144,9 @@ void Palette::advanceGradient(int advance)
elem->color.b =
(colIndex == 3 || colIndex == 4) ? 255 :
(colIndex == 2 || colIndex == 5) ? colVal : 0;
+ break;
}
- else if (elem->grad == RAINBOW)
- {
+ case RAINBOW: {
const gcn::Color &startCol = RAINBOW_COLORS[colIndex];
const gcn::Color &destCol =
RAINBOW_COLORS[(colIndex + 1) % numOfColors];
@@ -157,6 +162,8 @@ void Palette::advanceGradient(int advance)
elem->color.b =(int)(startColVal * startCol.b +
destColVal * destCol.b);
+ break;
+ }
}
}
}
diff --git a/src/gui/palette.h b/src/gui/palette.h
index fc2eda9e..268b9fc6 100644
--- a/src/gui/palette.h
+++ b/src/gui/palette.h
@@ -27,8 +27,9 @@
#include <guichan/color.hpp>
#include <cstdlib>
-#include <string>
+#include <optional>
#include <set>
+#include <string>
#include <vector>
// Default Gradient Delay
@@ -58,6 +59,7 @@ class Palette
void setColor(int type,
const gcn::Color &color,
+ const std::optional<gcn::Color> &outlineColor,
GradientType grad,
int delay);
@@ -65,7 +67,6 @@ class Palette
* Gets the color associated with the type.
*
* @param type the color type requested
- *
* @return the requested color
*/
const gcn::Color &getColor(int type) const
@@ -74,10 +75,20 @@ class Palette
}
/**
+ * Gets the optional outline color associated with the type.
+ *
+ * @param type the color type requested
+ * @return the requested outline color, if any
+ */
+ const std::optional<gcn::Color> &getOutlineColor(int type) const
+ {
+ return mColors[type].outlineColor;
+ }
+
+ /**
* Gets the GradientType associated with the specified type.
*
* @param type the color type of the color
- *
* @return the gradient type of the color with the given index
*/
GradientType getGradientType(int type) const
@@ -89,7 +100,6 @@ class Palette
* Gets the gradient delay for the specified type.
*
* @param type the color type of the color
- *
* @return the gradient delay of the color with the given index
*/
int getGradientDelay(int type) const
@@ -119,6 +129,7 @@ class Palette
gcn::Color color;
gcn::Color testColor;
gcn::Color committedColor;
+ std::optional<gcn::Color> outlineColor;
std::string text;
GradientType grad;
GradientType committedGrad;
diff --git a/src/gui/socialwindow.cpp b/src/gui/socialwindow.cpp
index 072d87bc..265fb166 100644
--- a/src/gui/socialwindow.cpp
+++ b/src/gui/socialwindow.cpp
@@ -171,7 +171,7 @@ public:
{
setCaption(party->getName());
- setTabColor(&Theme::getThemeColor(Theme::PARTY_SOCIAL_TAB));
+ setTabColor(&Theme::getThemeColor(Theme::PARTY_TAB));
mList = std::make_unique<AvatarListBox>(party);
mScroll = std::make_unique<ScrollArea>(mList.get());
diff --git a/src/gui/widgets/browserbox.cpp b/src/gui/widgets/browserbox.cpp
index bb00d4ef..4fe85ae5 100644
--- a/src/gui/widgets/browserbox.cpp
+++ b/src/gui/widgets/browserbox.cpp
@@ -73,10 +73,13 @@ static void replaceKeys(std::string &text)
}
}
+
struct LayoutContext
{
LayoutContext(gcn::Font *font, const Palette &palette);
+ LinePart linePart(int x, std::string text);
+
int y = 0;
gcn::Font *font;
const int fontHeight;
@@ -84,22 +87,38 @@ struct LayoutContext
const int tildeWidth;
int lineHeight;
const gcn::Color textColor;
- gcn::Color selColor;
+ const std::optional<gcn::Color> textOutlineColor;
+ gcn::Color color;
+ std::optional<gcn::Color> outlineColor;
};
-LayoutContext::LayoutContext(gcn::Font *font, const Palette &palette)
+inline LayoutContext::LayoutContext(gcn::Font *font, const Palette &palette)
: font(font)
, fontHeight(font->getHeight())
, minusWidth(font->getWidth("-"))
, tildeWidth(font->getWidth("~"))
, lineHeight(fontHeight)
, textColor(palette.getColor(Theme::TEXT))
- , selColor(textColor)
+ , textOutlineColor(palette.getOutlineColor(Theme::TEXT))
+ , color(textColor)
+ , outlineColor(textOutlineColor)
{
if (auto *trueTypeFont = dynamic_cast<const TrueTypeFont*>(font))
lineHeight = trueTypeFont->getLineHeight();
}
+inline LinePart LayoutContext::linePart(int x, std::string text)
+{
+ return {
+ x,
+ y,
+ color,
+ outlineColor,
+ std::move(text),
+ font
+ };
+}
+
BrowserBox::BrowserBox(Mode mode):
mMode(mode)
@@ -289,8 +308,9 @@ void BrowserBox::draw(gcn::Graphics *graphics)
Graphics::LEFT,
part.color,
part.font,
- mOutline,
- mShadows);
+ part.outlineColor.has_value() || mOutline,
+ mShadows,
+ part.outlineColor);
}
}
}
@@ -318,7 +338,8 @@ void BrowserBox::layoutTextRow(TextRow &row, LayoutContext &context)
{
// each line starts with normal font in default color
context.font = getFont();
- context.selColor = context.textColor;
+ context.color = context.textColor;
+ context.outlineColor = context.textOutlineColor;
const int startY = context.y;
row.parts.clear();
@@ -331,15 +352,7 @@ void BrowserBox::layoutTextRow(TextRow &row, LayoutContext &context)
if (startsWith(row.text, "---"))
{
for (x = 0; x < getWidth(); x += context.minusWidth - 1)
- {
- row.parts.push_back(LinePart {
- x,
- context.y,
- context.selColor,
- "-",
- context.font
- });
- }
+ row.parts.push_back(context.linePart(x, "-"));
context.y += row.height;
@@ -348,9 +361,9 @@ void BrowserBox::layoutTextRow(TextRow &row, LayoutContext &context)
return;
}
- auto theme = gui->getTheme();
auto &palette = gui->getTheme()->getPalette(mPalette);
- gcn::Color prevColor = context.selColor;
+ auto prevColor = context.color;
+ auto prevOutlineColor = context.outlineColor;
// TODO: Check if we must take texture size limits into account here
// TODO: Check if some of the O(n) calls can be removed
@@ -377,11 +390,14 @@ void BrowserBox::layoutTextRow(TextRow &row, LayoutContext &context)
switch (c)
{
case '>':
- context.selColor = prevColor;
+ context.color = prevColor;
+ context.outlineColor = prevOutlineColor;
break;
case '<':
- prevColor = context.selColor;
- context.selColor = palette.getColor(Theme::HYPERLINK);
+ prevColor = context.color;
+ prevOutlineColor = context.outlineColor;
+ context.color = palette.getColor(Theme::HYPERLINK);
+ context.outlineColor = palette.getOutlineColor(Theme::HYPERLINK);
break;
case 'B':
context.font = boldFont;
@@ -391,8 +407,16 @@ void BrowserBox::layoutTextRow(TextRow &row, LayoutContext &context)
break;
default: {
const auto colorId = Theme::getColorIdForChar(c);
- context.selColor = colorId ? palette.getColor(*colorId)
- : context.textColor;
+ if (colorId)
+ {
+ context.color = palette.getColor(*colorId);
+ context.outlineColor = palette.getOutlineColor(*colorId);
+ }
+ else
+ {
+ context.color = context.textColor;
+ context.outlineColor = context.textOutlineColor;
+ }
break;
}
}
@@ -467,7 +491,8 @@ void BrowserBox::layoutTextRow(TextRow &row, LayoutContext &context)
row.parts.push_back(LinePart {
getWidth() - context.tildeWidth,
context.y,
- context.selColor,
+ context.color,
+ context.outlineColor,
"~",
getFont()
});
@@ -481,14 +506,7 @@ void BrowserBox::layoutTextRow(TextRow &row, LayoutContext &context)
wrapped = true;
}
- row.parts.push_back(LinePart {
- x,
- context.y,
- context.selColor,
- std::move(part),
- context.font
- });
-
+ row.parts.push_back(context.linePart(x, std::move(part)));
row.width = std::max(row.width, x + partWidth);
if (mMode == AUTO_WRAP && partWidth == 0)
diff --git a/src/gui/widgets/browserbox.h b/src/gui/widgets/browserbox.h
index 03bda8cd..142bba63 100644
--- a/src/gui/widgets/browserbox.h
+++ b/src/gui/widgets/browserbox.h
@@ -51,6 +51,7 @@ struct LinePart
int x;
int y;
gcn::Color color;
+ std::optional<gcn::Color> outlineColor;
std::string text;
gcn::Font *font;
};
diff --git a/src/gui/widgets/popup.cpp b/src/gui/widgets/popup.cpp
index 3e4315f0..b245b9e6 100644
--- a/src/gui/widgets/popup.cpp
+++ b/src/gui/widgets/popup.cpp
@@ -83,11 +83,21 @@ void Popup::widgetAdded(gcn::Widget *widget) const
if (const int paletteId = getSkin().palette)
{
if (auto browserBox = dynamic_cast<BrowserBox*>(widget))
+ {
browserBox->setPalette(paletteId);
+ }
else if (auto label = dynamic_cast<Label*>(widget))
- label->setForegroundColor(gui->getTheme()->getPalette(paletteId).getColor(Theme::TEXT));
+ {
+ auto &palette = gui->getTheme()->getPalette(paletteId);
+ label->setForegroundColor(palette.getColor(Theme::TEXT));
+ label->setOutlineColor(palette.getOutlineColor(Theme::TEXT));
+ }
else if (auto textBox = dynamic_cast<TextBox*>(widget))
- textBox->setTextColor(&gui->getTheme()->getPalette(paletteId).getColor(Theme::TEXT));
+ {
+ auto &palette = gui->getTheme()->getPalette(paletteId);
+ textBox->setTextColor(&palette.getColor(Theme::TEXT));
+ textBox->setOutlineColor(palette.getOutlineColor(Theme::TEXT));
+ }
}
}
diff --git a/src/gui/widgets/textbox.cpp b/src/gui/widgets/textbox.cpp
index 419fa16e..6cc514fe 100644
--- a/src/gui/widgets/textbox.cpp
+++ b/src/gui/widgets/textbox.cpp
@@ -21,15 +21,20 @@
#include "gui/widgets/textbox.h"
+#include "gui/gui.h"
#include "resources/theme.h"
+#include "textrenderer.h"
#include <guichan/font.hpp>
#include <sstream>
-TextBox::TextBox() :
- mTextColor(&Theme::getThemeColor(Theme::TEXT))
+TextBox::TextBox()
{
+ auto &palette = gui->getTheme()->getPalette(0);
+ mTextColor = &palette.getColor(Theme::TEXT);
+ mOutlineColor = palette.getOutlineColor(Theme::TEXT);
+
setOpaque(false);
setFrameSize(0);
mMinWidth = getWidth();
@@ -147,3 +152,42 @@ void TextBox::setTextWrapped(const std::string &text, int minDimension)
gcn::TextBox::setText(wrappedStream.str());
}
+
+/**
+ * Overridden so we can customize the color and outline of the text.
+ */
+void TextBox::draw(gcn::Graphics *graphics)
+{
+ unsigned int i;
+
+ if (mOpaque)
+ {
+ graphics->setColor(getBackgroundColor());
+ graphics->fillRectangle(gcn::Rectangle(0, 0, getWidth(), getHeight()));
+ }
+
+ if (isFocused() && isEditable())
+ {
+ drawCaret(graphics,
+ getFont()->getWidth(mTextRows[mCaretRow].substr(0, mCaretColumn)),
+ mCaretRow * getFont()->getHeight());
+ }
+
+ graphics->setColor(*mTextColor);
+ graphics->setFont(getFont());
+
+ for (i = 0; i < mTextRows.size(); i++)
+ {
+ // Move the text one pixel so we can have a caret before a letter.
+ TextRenderer::renderText(graphics,
+ mTextRows[i],
+ 1,
+ i * getFont()->getHeight(),
+ gcn::Graphics::LEFT,
+ *mTextColor,
+ getFont(),
+ mOutlineColor.has_value(),
+ false,
+ mOutlineColor);
+ }
+}
diff --git a/src/gui/widgets/textbox.h b/src/gui/widgets/textbox.h
index e4596b9a..49a5a2ad 100644
--- a/src/gui/widgets/textbox.h
+++ b/src/gui/widgets/textbox.h
@@ -23,6 +23,8 @@
#include <guichan/widgets/textbox.hpp>
+#include <optional>
+
/**
* A text box, meant to be used inside a scroll area. Same as the Guichan text
* box except this one doesn't have a background or border, instead completely
@@ -38,6 +40,9 @@ class TextBox : public gcn::TextBox
void setTextColor(const gcn::Color *color)
{ mTextColor = color; }
+ void setOutlineColor(const std::optional<gcn::Color> &color)
+ { mOutlineColor = color; }
+
/**
* Sets the text after wrapping it to the current width of the widget.
*/
@@ -51,13 +56,10 @@ class TextBox : public gcn::TextBox
/**
* Draws the text.
*/
- void draw(gcn::Graphics *graphics) override
- {
- setForegroundColor(*mTextColor);
- gcn::TextBox::draw(graphics);
- }
+ void draw(gcn::Graphics *graphics) override;
private:
int mMinWidth;
const gcn::Color *mTextColor;
+ std::optional<gcn::Color> mOutlineColor;
};
diff --git a/src/gui/widgets/whispertab.cpp b/src/gui/widgets/whispertab.cpp
index 636f48dd..28181971 100644
--- a/src/gui/widgets/whispertab.cpp
+++ b/src/gui/widgets/whispertab.cpp
@@ -36,7 +36,7 @@ WhisperTab::WhisperTab(const std::string &nick) :
ChatTab(nick),
mNick(nick)
{
- setTabColor(&Theme::getThemeColor(Theme::WHISPER));
+ setTabColor(&Theme::getThemeColor(Theme::WHISPER_TAB));
}
WhisperTab::~WhisperTab()
diff --git a/src/net/tmwa/gui/partytab.cpp b/src/net/tmwa/gui/partytab.cpp
index 418e0843..ee29757a 100644
--- a/src/net/tmwa/gui/partytab.cpp
+++ b/src/net/tmwa/gui/partytab.cpp
@@ -32,14 +32,13 @@
#include "resources/theme.h"
#include "utils/gettext.h"
-#include "utils/stringutils.h"
namespace TmwAthena {
PartyTab::PartyTab() :
ChatTab(_("Party"))
{
- setTabColor(&Theme::getThemeColor(Theme::PARTY_CHAT_TAB));
+ setTabColor(&Theme::getThemeColor(Theme::PARTY_TAB));
}
void PartyTab::handleInput(const std::string &msg)
diff --git a/src/resources/theme.cpp b/src/resources/theme.cpp
index 66908ae6..53017193 100644
--- a/src/resources/theme.cpp
+++ b/src/resources/theme.cpp
@@ -766,23 +766,6 @@ void Theme::readIconNode(XML::Node node)
mIcons[name] = image->getSubImage(x, y, width, height);
}
-void Theme::readPaletteNode(XML::Node node)
-{
- int paletteId;
- if (node.attribute("id", paletteId) && static_cast<size_t>(paletteId) != mPalettes.size())
- logger->log("Theme: Non-consecutive palette 'id' attribute with value %d!", paletteId);
-
- Palette &palette = mPalettes.emplace_back(THEME_COLORS_END);
-
- for (auto childNode : node.children())
- {
- if (childNode.name() == "color")
- readColorNode(childNode, palette);
- else
- logger->log("Theme: Unknown node '%s'!", childNode.name().data());
- }
-}
-
static int readColorId(const std::string &id)
{
static constexpr const char *colors[Theme::THEME_COLORS_END] = {
@@ -800,8 +783,8 @@ static int readColorId(const std::string &id)
"CARET",
"SHADOW",
"OUTLINE",
- "PARTY_CHAT_TAB",
- "PARTY_SOCIAL_TAB",
+ "PARTY_TAB",
+ "WHISPER_TAB",
"BACKGROUND",
"HIGHLIGHT",
"TAB_FLASH",
@@ -867,7 +850,7 @@ static Palette::GradientType readGradientType(const std::string &grad)
return Palette::STATIC;
}
-void Theme::readColorNode(XML::Node node, Palette &palette)
+static void readColorNode(XML::Node node, Palette &palette)
{
const auto idStr = node.getProperty("id", std::string());
const int id = readColorId(idStr);
@@ -878,8 +861,28 @@ void Theme::readColorNode(XML::Node node, Palette &palette)
if (check(node.attribute("color", color), "Theme: 'color' element missing 'color' attribute!"))
return;
+ std::optional<gcn::Color> outlineColor;
+ node.attribute("outlineColor", outlineColor);
+
const auto grad = readGradientType(node.getProperty("effect", std::string()));
- palette.setColor(id, color, grad, 10);
+ palette.setColor(id, color, outlineColor, grad, 10);
+}
+
+void Theme::readPaletteNode(XML::Node node)
+{
+ int paletteId;
+ if (node.attribute("id", paletteId) && static_cast<size_t>(paletteId) != mPalettes.size())
+ logger->log("Theme: Non-consecutive palette 'id' attribute with value %d!", paletteId);
+
+ Palette &palette = mPalettes.emplace_back(THEME_COLORS_END);
+
+ for (auto childNode : node.children())
+ {
+ if (childNode.name() == "color")
+ readColorNode(childNode, palette);
+ else
+ logger->log("Theme: Unknown node '%s'!", childNode.name().data());
+ }
}
static int readProgressId(const std::string &id)
diff --git a/src/resources/theme.h b/src/resources/theme.h
index 6046667b..5cfe105a 100644
--- a/src/resources/theme.h
+++ b/src/resources/theme.h
@@ -222,8 +222,8 @@ class Theme : public EventListener
CARET,
SHADOW,
OUTLINE,
- PARTY_CHAT_TAB,
- PARTY_SOCIAL_TAB,
+ PARTY_TAB,
+ WHISPER_TAB,
BACKGROUND,
HIGHLIGHT,
TAB_FLASH,
@@ -342,7 +342,6 @@ class Theme : public EventListener
void readSkinStateImgNode(XML::Node node, SkinState &state) const;
void readIconNode(XML::Node node);
void readPaletteNode(XML::Node node);
- void readColorNode(XML::Node node, Palette &palette);
void readProgressBarNode(XML::Node node);
std::string mThemePath;