diff options
-rw-r--r-- | data/graphics/gui/theme.xml | 25 | ||||
-rw-r--r-- | src/gui/charselectdialog.cpp | 2 | ||||
-rw-r--r-- | src/gui/chatwindow.cpp | 28 | ||||
-rw-r--r-- | src/gui/chatwindow.h | 16 | ||||
-rw-r--r-- | src/gui/customserverdialog.cpp | 47 | ||||
-rw-r--r-- | src/gui/customserverdialog.h | 20 | ||||
-rw-r--r-- | src/gui/inventorywindow.cpp | 2 | ||||
-rw-r--r-- | src/gui/outfitwindow.cpp | 26 | ||||
-rw-r--r-- | src/gui/outfitwindow.h | 4 | ||||
-rw-r--r-- | src/gui/quitdialog.cpp | 10 | ||||
-rw-r--r-- | src/gui/recorder.cpp | 15 | ||||
-rw-r--r-- | src/gui/register.cpp | 2 | ||||
-rw-r--r-- | src/gui/serverdialog.cpp | 14 | ||||
-rw-r--r-- | src/gui/serverdialog.h | 2 | ||||
-rw-r--r-- | src/gui/widgets/browserbox.cpp | 45 | ||||
-rw-r--r-- | src/gui/widgets/layout.h | 9 | ||||
-rw-r--r-- | src/resources/theme.h | 9 |
17 files changed, 105 insertions, 171 deletions
diff --git a/data/graphics/gui/theme.xml b/data/graphics/gui/theme.xml index 2dfb5a5f..b0484c45 100644 --- a/data/graphics/gui/theme.xml +++ b/data/graphics/gui/theme.xml @@ -50,21 +50,25 @@ <img src="window.png" left="4" right="4" top="4" bottom="4" fill="repeat" /> </state> </skin> + <skin type="ResizeGrip" padding="3"> <state> <img src="resize.png" /> </state> </skin> + <skin type="Popup" padding="6"> <state> <img src="window.png" left="4" right="4" top="4" bottom="4" fill="repeat" /> </state> </skin> + <skin type="SpeechBubble"> <state> <img src="bubble.png|W:#000000" left="5" right="5" top="5" bottom="5" height="15" /> </state> </skin> + <skin type="Button" padding="4"> <state disabled="true"> <text color="#333333" /> @@ -80,6 +84,7 @@ <img src="button.png" left="10" right="10" top="5" bottom="5" /> </state> </skin> + <skin type="Tab" padding="4"> <state selected="true"> <img src="tabselected.png" left="10" right="10" top="5" bottom="9" /> @@ -91,6 +96,7 @@ <img src="tab.png" left="10" right="10" top="14" bottom="2" /> </state> </skin> + <skin type="CheckBox" padding="3" spacing="4"> <state disabled="true" selected="true"> <img src="checkbox.png" x="27" y="0" width="9" height="10" offsetX="2" offsetY="5" /> @@ -111,6 +117,7 @@ <img src="checkbox.png" x="0" y="0" width="9" height="10" offsetX="2" offsetY="5" /> </state> </skin> + <skin type="RadioButton" padding="3" spacing="4"> <state hovered="true" selected="true"> <img src="radioin_highlight.png" offsetX="2" offsetY="5" /> @@ -125,21 +132,25 @@ <img src="radioout.png" offsetX="2" offsetY="5" /> </state> </skin> + <skin type="TextField" frameSize="2" padding="2"> <state> <img src="deepbox.png" left="4" right="4" top="4" bottom="4" /> </state> </skin> + <skin type="ScrollArea" frameSize="2" padding="2"> <state> <img src="deepbox.png" left="4" right="4" top="4" bottom="4" /> </state> </skin> + <skin type="DropDownFrame" frameSize="2" padding="1"> <state> <img src="deepbox.png" left="4" right="4" top="4" bottom="4" /> </state> </skin> + <skin type="DropDownButton"> <state selected="true" hovered="true"> <img src="vscroll_up_pressed.png" offsetX="-2" offsetY="2" /> @@ -154,16 +165,19 @@ <img src="vscroll_down_default.png" offsetX="-2" offsetY="2" /> </state> </skin> + <skin type="ScrollAreaVBar"> <state> <rect color="#000000" alpha="32" /> </state> </skin> + <skin type="ScrollAreaHBar"> <state> <rect color="#000000" alpha="32" /> </state> </skin> + <skin type="ScrollAreaHMarker"> <state hovered="true"> <img src="vscroll_highlight.png" left="4" right="4" top="4" bottom="4" fill="repeat" /> @@ -172,6 +186,7 @@ <img src="vscroll_grey.png" left="4" right="4" top="4" bottom="4" fill="repeat" /> </state> </skin> + <skin type="ScrollAreaVMarker"> <state hovered="true"> <img src="vscroll_highlight.png" left="4" right="4" top="4" bottom="4" fill="repeat" /> @@ -180,12 +195,14 @@ <img src="vscroll_grey.png" left="4" right="4" top="4" bottom="4" fill="repeat" /> </state> </skin> + <skin type="ProgressBar"> <state> <text color="#ffffff" outlineColor="#000000"/> <img src="vscroll_grey.png" left="4" right="4" top="4" bottom="4" fill="repeat" /> </state> </skin> + <skin type="Slider" padding="4"> <state hovered="true"> <img src="slider_hilight.png" height="6" left="4" right="4" top="6" offsetY="4" /> @@ -194,6 +211,7 @@ <img src="slider.png" height="6" left="4" right="4" top="6" offsetY="4" /> </state> </skin> + <skin type="SliderHandle"> <state hovered="true"> <img src="slider_hilight.png" x="6" y="8" width="9" height="10" offsetY="2" /> @@ -202,6 +220,7 @@ <img src="slider.png" x="6" y="8" width="9" height="10" offsetY="2" /> </state> </skin> + <skin type="ButtonUp"> <state selected="true"> <img src="vscroll_up_pressed.png" /> @@ -210,6 +229,7 @@ <img src="vscroll_up_default.png" /> </state> </skin> + <skin type="ButtonDown"> <state selected="true"> <img src="vscroll_down_pressed.png" /> @@ -218,6 +238,7 @@ <img src="vscroll_down_default.png" /> </state> </skin> + <skin type="ButtonLeft"> <state selected="true"> <img src="hscroll_left_pressed.png" /> @@ -226,6 +247,7 @@ <img src="hscroll_left_default.png" /> </state> </skin> + <skin type="ButtonRight"> <state selected="true"> <img src="hscroll_right_pressed.png" /> @@ -234,11 +256,13 @@ <img src="hscroll_right_default.png" /> </state> </skin> + <skin type="ButtonClose" padding="3"> <state> <img src="close_button.png" /> </state> </skin> + <skin type="ButtonSticky" padding="3"> <state selected="true"> <img src="sticky_button.png" x="15" width="15" height="15" /> @@ -247,6 +271,7 @@ <img src="sticky_button.png" width="15" height="15" /> </state> </skin> + <skin type="ShortcutBox"> <state> <img src="item_shortcut_bgr.png" /> diff --git a/src/gui/charselectdialog.cpp b/src/gui/charselectdialog.cpp index 7792813c..eb649c58 100644 --- a/src/gui/charselectdialog.cpp +++ b/src/gui/charselectdialog.cpp @@ -150,7 +150,7 @@ CharSelectDialog::CharSelectDialog(LoginData *loginData): for (int i = 0; i < (int)mLoginData->characterSlots; i++) { mCharacterEntries.push_back(new CharacterDisplay(this)); - place(i % SLOTS_PER_ROW, (int)i / SLOTS_PER_ROW, mCharacterEntries[i]); + place(i % SLOTS_PER_ROW, i / SLOTS_PER_ROW, mCharacterEntries[i]); } reflowLayout(); diff --git a/src/gui/chatwindow.cpp b/src/gui/chatwindow.cpp index 453baea2..8a34c961 100644 --- a/src/gui/chatwindow.cpp +++ b/src/gui/chatwindow.cpp @@ -76,18 +76,17 @@ class ChatAutoComplete : public AutoCompleteLister { void getAutoCompleteList(std::vector<std::string> &list) const override { - auto *tab = static_cast<ChatTab*>(chatWindow->mChatTabs - ->getSelectedTab()); - - return tab->getAutoCompleteList(list); + auto tab = static_cast<ChatTab *>(chatWindow->mChatTabs->getSelectedTab()); + tab->getAutoCompleteList(list); } }; ChatWindow::ChatWindow(): Window(_("Chat")), - mHistory(new TextHistory()), + mItemLinkHandler(new ItemLinkHandler(this)), + mChatInput(new ChatInput), mAutoComplete(new ChatAutoComplete), - mTmpVisible(false) + mChatTabs(new TabbedArea) { listen(Event::ChatChannel); listen(Event::NoticesChannel); @@ -106,21 +105,16 @@ ChatWindow::ChatWindow(): setMinWidth(150); setMinHeight(90); - mItemLinkHandler = new ItemLinkHandler(this); - - mChatInput = new ChatInput; mChatInput->setActionEventId("chatinput"); mChatInput->addActionListener(this); - mChatTabs = new TabbedArea; - getLayout().setPadding(3); place(0, 0, mChatTabs, 3, 3); place(0, 3, mChatInput, 3); loadWindowState(); - mChatInput->setHistory(mHistory); + mChatInput->setHistory(&mHistory); mChatInput->setAutoComplete(mAutoComplete); mRecorder = new Recorder(this); @@ -131,7 +125,6 @@ ChatWindow::~ChatWindow() delete mRecorder; removeAllWhispers(); delete mItemLinkHandler; - delete mHistory; delete mAutoComplete; } @@ -146,15 +139,10 @@ ChatTab *ChatWindow::getFocused() const return static_cast<ChatTab*>(mChatTabs->getSelectedTab()); } -void ChatWindow::clearTab(ChatTab *tab) -{ - if (tab) - tab->clearText(); -} - void ChatWindow::clearTab() { - clearTab(getFocused()); + if (auto tab = getFocused()) + tab->clearText(); } void ChatWindow::prevTab() diff --git a/src/gui/chatwindow.h b/src/gui/chatwindow.h index f47b7140..6cac6f8e 100644 --- a/src/gui/chatwindow.h +++ b/src/gui/chatwindow.h @@ -31,21 +31,14 @@ #include <guichan/widget.hpp> #include <guichan/widgetlistener.hpp> -#include <list> #include <string> #include <map> -#include <vector> -class BrowserBox; class ChatTab; -class Channel; class ChatInput; class Recorder; -class ScrollArea; class TabbedArea; class ItemLinkHandler; -class Tab; -class WhisperTab; #define DEFAULT_CHAT_WINDOW_SCROLL 7 // 1 means `1/8th of the window size'. @@ -98,11 +91,6 @@ class ChatWindow : public Window, ChatTab *getFocused() const; /** - * Clear the given tab. - */ - void clearTab(ChatTab *tab); - - /** * Clear the current tab. */ void clearTab(); @@ -201,11 +189,11 @@ class ChatWindow : public Window, /** Input box for typing chat messages. */ ChatInput *mChatInput; - TextHistory *mHistory; + TextHistory mHistory; AutoCompleteLister *mAutoComplete; private: - bool mTmpVisible; + bool mTmpVisible = false; /** Tabbed area for holding each channel. */ TabbedArea *mChatTabs; diff --git a/src/gui/customserverdialog.cpp b/src/gui/customserverdialog.cpp index f58e51ad..5ed3a445 100644 --- a/src/gui/customserverdialog.cpp +++ b/src/gui/customserverdialog.cpp @@ -37,11 +37,10 @@ std::string TypeListModel::getElementAt(int elementIndex) if (elementIndex == 0) return "TmwAthena"; #ifdef MANASERV_SUPPORT - else if (elementIndex == 1) + if (elementIndex == 1) return "ManaServ"; #endif - else - return "Unknown"; + return "Unknown"; } CustomServerDialog::CustomServerDialog(ServerDialog *parent, int index): @@ -62,8 +61,8 @@ CustomServerDialog::CustomServerDialog(ServerDialog *parent, int index): mPortField = new TextField(std::string()); #ifdef MANASERV_SUPPORT - mTypeListModel = new TypeListModel(); - mTypeField = new DropDown(mTypeListModel); + mTypeListModel = std::make_unique<TypeListModel>(); + mTypeField = new DropDown(mTypeListModel.get()); mTypeField->setSelected(0); // TmwAthena by default for now. #endif @@ -91,32 +90,11 @@ CustomServerDialog::CustomServerDialog(ServerDialog *parent, int index): place(4, 5, mOkButton); place(3, 5, mCancelButton); - // Do this manually instead of calling reflowLayout so we can enforce a - // minimum width. - int width = 0, height = 0; - getLayout().reflow(width, height); - if (width < 300) - { - width = 300; - getLayout().reflow(width, height); - } - if (height < 120) - { - height = 120; - getLayout().reflow(width, height); - } - - setContentSize(width, height); - - setMinWidth(getWidth()); - setMinHeight(getHeight()); - setDefaultSize(getWidth(), getHeight(), ImageRect::CENTER); + reflowLayout(); + setLocationRelativeTo(getParentWindow()); - setResizable(false); addKeyListener(this); - loadWindowState(); - // Add the entry's info when in modify mode. if (index > -1) { @@ -131,23 +109,12 @@ CustomServerDialog::CustomServerDialog(ServerDialog *parent, int index): #endif } - setLocationRelativeTo(getParentWindow()); setVisible(true); mNameField->requestFocus(); } -CustomServerDialog::~CustomServerDialog() -{ -#ifdef MANASERV_SUPPORT - delete mTypeListModel; -#endif -} - -void CustomServerDialog::logic() -{ - Window::logic(); -} +CustomServerDialog::~CustomServerDialog() = default; void CustomServerDialog::action(const gcn::ActionEvent &event) { diff --git a/src/gui/customserverdialog.h b/src/gui/customserverdialog.h index c17849d5..e523260c 100644 --- a/src/gui/customserverdialog.h +++ b/src/gui/customserverdialog.h @@ -20,19 +20,18 @@ #pragma once -class Button; -class Label; -class TextField; -class DropDown; -class ServerDialog; -class TypeListModel; - #include "gui/widgets/window.h" #include <guichan/actionlistener.hpp> #include <guichan/keylistener.hpp> #include <guichan/listmodel.hpp> +#include <memory> + +class Button; +class DropDown; +class ServerDialog; +class TextField; /** * Server Type List Model @@ -64,7 +63,6 @@ class CustomServerDialog : public Window, { public: CustomServerDialog(ServerDialog *parent, int index = -1); - ~CustomServerDialog() override; /** @@ -74,18 +72,16 @@ class CustomServerDialog : public Window, void keyPressed(gcn::KeyEvent &keyEvent) override; - void logic() override; - private: TextField *mServerAddressField; TextField *mPortField; - TextField *mNameField; + TextField *mNameField; TextField *mDescriptionField; Button *mOkButton; Button *mCancelButton; #ifdef MANASERV_SUPPORT DropDown *mTypeField; - TypeListModel *mTypeListModel; + std::unique_ptr<TypeListModel> mTypeListModel; #endif ServerDialog *mServerDialog; // The index of the entry to modify, -1 when only adding a new entry. diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp index 73a2522a..ab2e9c86 100644 --- a/src/gui/inventorywindow.cpp +++ b/src/gui/inventorywindow.cpp @@ -76,7 +76,7 @@ InventoryWindow::InventoryWindow(Inventory *inventory): mItems = new ItemContainer(mInventory); mItems->addSelectionListener(this); - gcn::ScrollArea *invenScroll = new ScrollArea(mItems); + auto invenScroll = new ScrollArea(mItems); invenScroll->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER); mSlotsLabel = new Label(_("Slots:")); diff --git a/src/gui/outfitwindow.cpp b/src/gui/outfitwindow.cpp index b5033d70..f914c0cc 100644 --- a/src/gui/outfitwindow.cpp +++ b/src/gui/outfitwindow.cpp @@ -78,8 +78,8 @@ OutfitWindow::~OutfitWindow() void OutfitWindow::load() { - for (int o = 0; o < OUTFITS_COUNT; o++) - memset(mOutfits[o].items, -1, sizeof(mOutfits[o].items)); + for (auto &mOutfit : mOutfits) + memset(mOutfit.items, -1, sizeof(mOutfit.items)); for (auto &outfit : config.outfits) { @@ -89,10 +89,8 @@ void OutfitWindow::load() std::string buf; std::stringstream ss(outfit.items); - for (size_t i = 0; (ss >> buf) && i < OUTFIT_ITEM_COUNT; i++) - { + for (int i = 0; (ss >> buf) && i < OUTFIT_ITEM_COUNT; i++) mOutfits[outfit.index].items[i] = atoi(buf.c_str()); - } mOutfits[outfit.index].unequip = outfit.unequip; } @@ -105,16 +103,15 @@ void OutfitWindow::save() std::string outfitStr; for (int o = 0; o < OUTFITS_COUNT; o++) { - auto &items = mOutfits[o].items; bool emptyOutfit = true; - for (int i = 0; i < OUTFIT_ITEM_COUNT; i++) + for (int item : mOutfits[o].items) { if (!outfitStr.empty()) outfitStr += " "; - outfitStr += items[i] ? toString(items[i]) : toString(-1); - emptyOutfit &= items[i] <= 0; + outfitStr += item ? toString(item) : toString(-1); + emptyOutfit &= item <= 0; } if (!emptyOutfit) @@ -159,10 +156,9 @@ void OutfitWindow::wearOutfit(int outfit) if (mOutfits[outfit].unequip) unequipNotInOutfit(outfit); - Item *item; - for (int i = 0; i < OUTFIT_ITEM_COUNT; i++) + for (int i : mOutfits[outfit].items) { - item = PlayerInfo::getInventory()->findItem(mOutfits[outfit].items[i]); + Item *item = PlayerInfo::getInventory()->findItem(i); if (item && !item->isEquipped() && item->getQuantity()) { if (item->isEquippable()) @@ -174,9 +170,7 @@ void OutfitWindow::wearOutfit(int outfit) void OutfitWindow::copyOutfit(int outfit) { for (int i = 0; i < OUTFIT_ITEM_COUNT; i++) - { mOutfits[mCurrentOutfit].items[i] = mOutfits[outfit].items[i]; - } } void OutfitWindow::draw(gcn::Graphics *graphics) @@ -328,9 +322,9 @@ void OutfitWindow::unequipNotInOutfit(int outfit) if (inventory->getItem(i) && inventory->getItem(i)->isEquipped()) { bool found = false; - for (int f = 0; f < OUTFIT_ITEM_COUNT; f++) + for (int item : mOutfits[outfit].items) { - if (inventory->getItem(i)->getId() == mOutfits[outfit].items[f]) + if (inventory->getItem(i)->getId() == item) { found = true; break; diff --git a/src/gui/outfitwindow.h b/src/gui/outfitwindow.h index 661d9b1a..10de5321 100644 --- a/src/gui/outfitwindow.h +++ b/src/gui/outfitwindow.h @@ -25,8 +25,8 @@ #include <guichan/actionlistener.hpp> -#define OUTFITS_COUNT 15 -#define OUTFIT_ITEM_COUNT 9 +constexpr int OUTFITS_COUNT = 15; +constexpr int OUTFIT_ITEM_COUNT = 9; class Button; class CheckBox; diff --git a/src/gui/quitdialog.cpp b/src/gui/quitdialog.cpp index 4afbd419..51831c4c 100644 --- a/src/gui/quitdialog.cpp +++ b/src/gui/quitdialog.cpp @@ -71,7 +71,8 @@ QuitDialog::QuitDialog(QuitDialog** pointerToMe): placeOption(place, mSwitchAccountServer); // Only added if we are connected to a gameserver - if (state == STATE_GAME) placeOption(place, mSwitchCharacter); + if (state == STATE_GAME) + placeOption(place, mSwitchCharacter); } mOptions[0]->setSelected(true); @@ -90,7 +91,9 @@ QuitDialog::QuitDialog(QuitDialog** pointerToMe): QuitDialog::~QuitDialog() { - if (mMyPointer) *mMyPointer = nullptr; + if (mMyPointer) + *mMyPointer = nullptr; + // Optional widgets, so delete them by hand. delete mForceQuit; delete mLogoutQuit; @@ -166,7 +169,8 @@ void QuitDialog::keyPressed(gcn::KeyEvent &keyEvent) mOptions[0]->setSelected(true); return; } - else if (it == mOptions.begin() && dir < 0) + + if (it == mOptions.begin() && dir < 0) it = mOptions.end(); it += dir; diff --git a/src/gui/recorder.cpp b/src/gui/recorder.cpp index 8dd0f8ed..894e3631 100644 --- a/src/gui/recorder.cpp +++ b/src/gui/recorder.cpp @@ -32,15 +32,16 @@ #include "utils/gettext.h" #include "utils/stringutils.h" -Recorder::Recorder(ChatWindow *chat, const std::string &title, - const std::string &buttonTxt) : - Window(title) +Recorder::Recorder(ChatWindow *chat, + const std::string &title, + const std::string &buttonTxt) + : Window(title) + , mChat(chat) { setWindowName("Recorder"); const int offsetX = 2 * getPadding() + 10; const int offsetY = getTitleBarHeight() + getPadding() + 10; - mChat = chat; auto *button = new Button(buttonTxt, "activate", this); // 123 is the default chat window height. If you change this in Chat, please @@ -56,16 +57,12 @@ Recorder::Recorder(ChatWindow *chat, const std::string &title, loadWindowState(); } -Recorder::~Recorder() -{ -} +Recorder::~Recorder() = default; void Recorder::record(const std::string &msg) { if (mStream.is_open()) - { mStream << msg << std::endl; - } } void Recorder::setRecordingFile(const std::string &msg) diff --git a/src/gui/register.cpp b/src/gui/register.cpp index d4ebb59c..685e4898 100644 --- a/src/gui/register.cpp +++ b/src/gui/register.cpp @@ -22,14 +22,12 @@ #include "gui/register.h" #include "client.h" -#include "configuration.h" #include "log.h" #include "gui/logindialog.h" #include "gui/okdialog.h" #include "gui/widgets/button.h" -#include "gui/widgets/checkbox.h" #include "gui/widgets/label.h" #include "gui/widgets/layout.h" #include "gui/widgets/passwordfield.h" diff --git a/src/gui/serverdialog.cpp b/src/gui/serverdialog.cpp index 6bf5a9d5..fa4087ce 100644 --- a/src/gui/serverdialog.cpp +++ b/src/gui/serverdialog.cpp @@ -36,7 +36,6 @@ #include "gui/widgets/layout.h" #include "gui/widgets/listbox.h" #include "gui/widgets/scrollarea.h" -#include "gui/widgets/textfield.h" #include "resources/theme.h" @@ -156,8 +155,8 @@ ServerDialog::ServerDialog(ServerInfo *serverInfo, const std::string &dir): loadCustomServers(); - mServersListModel = new ServersListModel(&mServers, this); - mServersList = new ServersListBox(mServersListModel); + mServersListModel = std::make_unique<ServersListModel>(&mServers, this); + mServersList = new ServersListBox(mServersListModel.get()); auto *usedScroll = new ScrollArea(mServersList); usedScroll->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER); @@ -176,8 +175,8 @@ ServerDialog::ServerDialog(ServerInfo *serverInfo, const std::string &dir): usedScroll->setVerticalScrollAmount(0); place(0, 0, usedScroll, 6, 5).setPadding(3); - place(0, 5, mDescription, 5); - place(0, 6, mDownloadText, 5); + place(0, 5, mDescription, 6); + place(0, 6, mDownloadText, 6); place(0, 7, mManualEntryButton); place(1, 7, mModifyButton); place(2, 7, mDeleteButton); @@ -217,10 +216,7 @@ ServerDialog::ServerDialog(ServerInfo *serverInfo, const std::string &dir): downloadServerList(); } -ServerDialog::~ServerDialog() -{ - delete mServersListModel; -} +ServerDialog::~ServerDialog() = default; void ServerDialog::action(const gcn::ActionEvent &event) { diff --git a/src/gui/serverdialog.h b/src/gui/serverdialog.h index e0d74006..cc2725be 100644 --- a/src/gui/serverdialog.h +++ b/src/gui/serverdialog.h @@ -136,7 +136,7 @@ class ServerDialog : public Window, Button *mDeleteButton; ListBox *mServersList; - ServersListModel *mServersListModel; + std::unique_ptr<ServersListModel> mServersListModel; const std::string &mDir; diff --git a/src/gui/widgets/browserbox.cpp b/src/gui/widgets/browserbox.cpp index fd777133..ef40d8c4 100644 --- a/src/gui/widgets/browserbox.cpp +++ b/src/gui/widgets/browserbox.cpp @@ -22,11 +22,13 @@ #include "gui/widgets/browserbox.h" +#include "keyboardconfig.h" +#include "textrenderer.h" + #include "gui/gui.h" #include "gui/truetypefont.h" #include "gui/widgets/linkhandler.h" -#include "keyboardconfig.h" #include "resources/itemdb.h" #include "resources/iteminfo.h" #include "resources/theme.h" @@ -279,34 +281,15 @@ void BrowserBox::draw(gcn::Graphics *graphics) if (part.y > yEnd) return; - auto font = part.font; - - // Handle text shadows - if (mShadows) - { - graphics->setColor(Theme::getThemeColor(Theme::SHADOW, - part.color.a / 2)); - - if (mOutline) - font->drawString(graphics, part.text, part.x + 2, part.y + 2); - else - font->drawString(graphics, part.text, part.x + 1, part.y + 1); - } - - if (mOutline) - { - // Text outline - graphics->setColor(Theme::getThemeColor(Theme::OUTLINE, - part.color.a / 4)); - font->drawString(graphics, part.text, part.x + 1, part.y); - font->drawString(graphics, part.text, part.x - 1, part.y); - font->drawString(graphics, part.text, part.x, part.y + 1); - font->drawString(graphics, part.text, part.x, part.y - 1); - } - - // the main text - graphics->setColor(part.color); - font->drawString(graphics, part.text, part.x, part.y); + TextRenderer::renderText(graphics, + part.text, + part.x, + part.y, + Graphics::LEFT, + part.color, + part.font, + mOutline, + mShadows); } } } @@ -322,7 +305,7 @@ void BrowserBox::relayoutText() layoutTextRow(row, context); mLastLayoutWidth = getWidth(); - mLayoutTimer.set(100); + mLayoutTimer.set(33); setHeight(context.y); } @@ -552,7 +535,7 @@ void BrowserBox::updateHoveredLink(int x, int y) void BrowserBox::maybeRelayoutText() { // Reduce relayouting frequency when there is a lot of text - if (mTextRows.size() > 100) + if (mTextRows.size() > 1000) if (!mLayoutTimer.passed()) return; diff --git a/src/gui/widgets/layout.h b/src/gui/widgets/layout.h index c7652334..42f08758 100644 --- a/src/gui/widgets/layout.h +++ b/src/gui/widgets/layout.h @@ -167,9 +167,12 @@ class LayoutCell }; LayoutCell() = default; - ~LayoutCell(); + // Copy not allowed, as the cell may own an array. + LayoutCell(LayoutCell const &) = delete; + LayoutCell &operator=(LayoutCell const &) = delete; + /** * Sets the padding around the cell content. */ @@ -231,10 +234,6 @@ class LayoutCell void computeSizes(); private: - // Copy not allowed, as the cell may own an array. - LayoutCell(LayoutCell const &); - LayoutCell &operator=(LayoutCell const &); - union { gcn::Widget *mWidget; diff --git a/src/resources/theme.h b/src/resources/theme.h index 2f6d5aab..6d71b067 100644 --- a/src/resources/theme.h +++ b/src/resources/theme.h @@ -76,11 +76,10 @@ enum class SkinType enum StateFlags : uint8_t { - STATE_NORMAL = 0x01, - STATE_HOVERED = 0x02, - STATE_SELECTED = 0x04, - STATE_DISABLED = 0x08, - STATE_FOCUSED = 0x10, + STATE_HOVERED = 0x01, + STATE_SELECTED = 0x02, + STATE_DISABLED = 0x04, + STATE_FOCUSED = 0x08, }; struct ColoredRectangle |