From ff5e1957dd4fde40e41e4c5e4b9e04e1f36e5ef2 Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Fri, 27 Mar 2009 19:23:34 +0100 Subject: Removed unnecessary parenthesis on constructors --- src/gui/window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/gui/window.cpp') diff --git a/src/gui/window.cpp b/src/gui/window.cpp index 3bc03fb8..5dd32e00 100644 --- a/src/gui/window.cpp +++ b/src/gui/window.cpp @@ -60,7 +60,7 @@ Window::Window(const std::string &caption, bool modal, Window *parent, const std throw GCN_EXCEPTION("Window::Window(): no windowContainer set"); if (instances == 0) - skinLoader = new SkinLoader(); + skinLoader = new SkinLoader; instances++; -- cgit v1.2.3-70-g09d2 From e083abd148c70982a098d3f2fff8e61eee5c4f91 Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Sat, 28 Mar 2009 00:02:01 +0100 Subject: Removed a lot of useless isVisible() checks The draw() method of a widget isn't called when a widget is not visible. --- src/game.cpp | 1 - src/gui/browserbox.cpp | 3 --- src/gui/emotecontainer.cpp | 3 --- src/gui/emoteshortcutcontainer.cpp | 3 --- src/gui/equipmentwindow.cpp | 3 --- src/gui/itemshortcutcontainer.cpp | 3 --- src/gui/listbox.cpp | 2 +- src/gui/minimap.cpp | 11 ++--------- src/gui/playerbox.cpp | 3 --- src/gui/popup.cpp | 3 --- src/gui/radiobutton.cpp | 3 --- src/gui/scrollarea.cpp | 3 --- src/gui/shoplistbox.cpp | 2 +- src/gui/status.cpp | 3 --- src/gui/table.cpp | 2 +- src/gui/textfield.cpp | 3 --- src/gui/widgets/dropdown.cpp | 3 --- src/gui/window.cpp | 3 --- src/net/ea/playerhandler.cpp | 3 ++- 19 files changed, 7 insertions(+), 53 deletions(-) (limited to 'src/gui/window.cpp') diff --git a/src/game.cpp b/src/game.cpp index 109ae071..ba756df3 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -880,7 +880,6 @@ void Game::handleInput() break; case KeyboardConfig::KEY_WINDOW_MINIMAP: minimap->toggle(); - requestedWindow = minimap; break; case KeyboardConfig::KEY_WINDOW_CHAT: requestedWindow = chatWindow; diff --git a/src/gui/browserbox.cpp b/src/gui/browserbox.cpp index 2f667237..0240b67b 100644 --- a/src/gui/browserbox.cpp +++ b/src/gui/browserbox.cpp @@ -244,9 +244,6 @@ void BrowserBox::mouseMoved(gcn::MouseEvent &event) void BrowserBox::draw(gcn::Graphics *graphics) { - if (!isVisible()) - return; - if (mOpaque) { graphics->setColor(guiPalette->getColor(Palette::BACKGROUND)); diff --git a/src/gui/emotecontainer.cpp b/src/gui/emotecontainer.cpp index b4caf4f1..3425cde8 100644 --- a/src/gui/emotecontainer.cpp +++ b/src/gui/emotecontainer.cpp @@ -79,9 +79,6 @@ EmoteContainer::~EmoteContainer() void EmoteContainer::draw(gcn::Graphics *graphics) { - if (!isVisible()) - return; - int columns = getWidth() / gridWidth; // Have at least 1 column diff --git a/src/gui/emoteshortcutcontainer.cpp b/src/gui/emoteshortcutcontainer.cpp index 661f42a7..ae5eb859 100644 --- a/src/gui/emoteshortcutcontainer.cpp +++ b/src/gui/emoteshortcutcontainer.cpp @@ -76,9 +76,6 @@ EmoteShortcutContainer::~EmoteShortcutContainer() void EmoteShortcutContainer::draw(gcn::Graphics *graphics) { - if (!isVisible()) - return; - if (config.getValue("guialpha", 0.8) != mAlpha) { mAlpha = config.getValue("guialpha", 0.8); diff --git a/src/gui/equipmentwindow.cpp b/src/gui/equipmentwindow.cpp index 96500e88..0be33ca6 100644 --- a/src/gui/equipmentwindow.cpp +++ b/src/gui/equipmentwindow.cpp @@ -121,9 +121,6 @@ EquipmentWindow::~EquipmentWindow() void EquipmentWindow::draw(gcn::Graphics *graphics) { - if (!isVisible()) - return; - // Draw window graphics Window::draw(graphics); diff --git a/src/gui/itemshortcutcontainer.cpp b/src/gui/itemshortcutcontainer.cpp index d4de3477..a7bb229f 100644 --- a/src/gui/itemshortcutcontainer.cpp +++ b/src/gui/itemshortcutcontainer.cpp @@ -70,9 +70,6 @@ ItemShortcutContainer::~ItemShortcutContainer() void ItemShortcutContainer::draw(gcn::Graphics *graphics) { - if (!isVisible()) - return; - if (config.getValue("guialpha", 0.8) != mAlpha) { mAlpha = config.getValue("guialpha", 0.8); diff --git a/src/gui/listbox.cpp b/src/gui/listbox.cpp index dbd8e674..70b4fc55 100644 --- a/src/gui/listbox.cpp +++ b/src/gui/listbox.cpp @@ -38,7 +38,7 @@ ListBox::ListBox(gcn::ListModel *listModel): void ListBox::draw(gcn::Graphics *graphics) { - if (!mListModel || !isVisible()) + if (!mListModel) return; if (config.getValue("guialpha", 0.8) != mAlpha) diff --git a/src/gui/minimap.cpp b/src/gui/minimap.cpp index 6bca796d..75ee7e3d 100644 --- a/src/gui/minimap.cpp +++ b/src/gui/minimap.cpp @@ -92,21 +92,14 @@ void Minimap::setMapImage(Image *img) void Minimap::toggle() { - mShow = !mShow; + mShow = ! isVisible(); + setVisible(mShow); } void Minimap::draw(gcn::Graphics *graphics) { - setVisible(mShow); - - if (!isVisible()) - return; - Window::draw(graphics); - if (!mShow) - return; - const gcn::Rectangle a = getChildrenArea(); graphics->pushClipArea(a); diff --git a/src/gui/playerbox.cpp b/src/gui/playerbox.cpp index 58ef4cd7..d00194bd 100644 --- a/src/gui/playerbox.cpp +++ b/src/gui/playerbox.cpp @@ -78,9 +78,6 @@ PlayerBox::~PlayerBox() void PlayerBox::draw(gcn::Graphics *graphics) { - if (!isVisible()) - return; - if (mPlayer) { // Draw character diff --git a/src/gui/popup.cpp b/src/gui/popup.cpp index 648a9d6a..46246639 100644 --- a/src/gui/popup.cpp +++ b/src/gui/popup.cpp @@ -108,9 +108,6 @@ void Popup::savePopupConfiguration() void Popup::draw(gcn::Graphics *graphics) { - if (!isVisible()) - return; - Graphics *g = static_cast(graphics); g->drawImageRect(0, 0, getWidth(), getHeight(), mSkin->getBorder()); diff --git a/src/gui/radiobutton.cpp b/src/gui/radiobutton.cpp index 4a98e29a..d563a2db 100644 --- a/src/gui/radiobutton.cpp +++ b/src/gui/radiobutton.cpp @@ -69,9 +69,6 @@ RadioButton::~RadioButton() void RadioButton::drawBox(gcn::Graphics* graphics) { - if (!isVisible()) - return; - if (config.getValue("guialpha", 0.8) != mAlpha) { mAlpha = config.getValue("guialpha", 0.8); diff --git a/src/gui/scrollarea.cpp b/src/gui/scrollarea.cpp index a867822e..2fa087c1 100644 --- a/src/gui/scrollarea.cpp +++ b/src/gui/scrollarea.cpp @@ -170,9 +170,6 @@ void ScrollArea::logic() void ScrollArea::draw(gcn::Graphics *graphics) { - if (!isVisible()) - return; - if (mVBarVisible) { drawUpButton(graphics); diff --git a/src/gui/shoplistbox.cpp b/src/gui/shoplistbox.cpp index 8801c51a..b35c1d80 100644 --- a/src/gui/shoplistbox.cpp +++ b/src/gui/shoplistbox.cpp @@ -58,7 +58,7 @@ void ShopListBox::setPlayersMoney(int money) void ShopListBox::draw(gcn::Graphics *gcnGraphics) { - if (!mListModel || !isVisible()) + if (!mListModel) return; if (config.getValue("guialpha", 0.8) != mAlpha) diff --git a/src/gui/status.cpp b/src/gui/status.cpp index e298c3e2..e6f57de5 100644 --- a/src/gui/status.cpp +++ b/src/gui/status.cpp @@ -253,9 +253,6 @@ void StatusWindow::update() void StatusWindow::draw(gcn::Graphics *g) { - if (!isVisible()) - return; - update(); Window::draw(g); diff --git a/src/gui/table.cpp b/src/gui/table.cpp index 4dda9246..e98d76e5 100644 --- a/src/gui/table.cpp +++ b/src/gui/table.cpp @@ -265,7 +265,7 @@ void GuiTable::installActionListeners() // -- widget ops void GuiTable::draw(gcn::Graphics* graphics) { - if (!mModel || !isVisible()) + if (!mModel) return; if (config.getValue("guialpha", 0.8) != mAlpha) diff --git a/src/gui/textfield.cpp b/src/gui/textfield.cpp index c94710b3..48a00dcc 100644 --- a/src/gui/textfield.cpp +++ b/src/gui/textfield.cpp @@ -84,9 +84,6 @@ TextField::~TextField() void TextField::draw(gcn::Graphics *graphics) { - if (!isVisible()) - return; - if (isFocused()) { drawCaret(graphics, diff --git a/src/gui/widgets/dropdown.cpp b/src/gui/widgets/dropdown.cpp index d8c66789..68c7e093 100644 --- a/src/gui/widgets/dropdown.cpp +++ b/src/gui/widgets/dropdown.cpp @@ -111,9 +111,6 @@ DropDown::~DropDown() void DropDown::draw(gcn::Graphics* graphics) { - if (!isVisible()) - return; - int h; if (mDroppedDown) diff --git a/src/gui/window.cpp b/src/gui/window.cpp index 5dd32e00..a916ba38 100644 --- a/src/gui/window.cpp +++ b/src/gui/window.cpp @@ -118,9 +118,6 @@ void Window::setWindowContainer(WindowContainer *wc) void Window::draw(gcn::Graphics *graphics) { - if (!isVisible()) - return; - Graphics *g = static_cast(graphics); g->drawImageRect(0, 0, getWidth(), getHeight(), mSkin->getBorder()); diff --git a/src/net/ea/playerhandler.cpp b/src/net/ea/playerhandler.cpp index 05f74630..534c1b7b 100644 --- a/src/net/ea/playerhandler.cpp +++ b/src/net/ea/playerhandler.cpp @@ -93,7 +93,8 @@ namespace { sellDialog->setVisible(false); buySellDialog->setVisible(false); - if (storageWindow->isVisible()) storageWindow->close(); + if (storageWindow->isVisible()) + storageWindow->close(); } } deathListener; -- cgit v1.2.3-70-g09d2 From 42a095de15649f0f00ef6c681268d6623205900c Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Sat, 28 Mar 2009 10:35:49 -0600 Subject: Add a sticky button to the Window class The Minimap window uses this so you can froce it to always be open. The Minimap toggle button can be used to show or hide it temporarily, as warping will reset it's visibility based on the sticky state and weather the 'new' map has a minimap. --- data/graphics/gui/sticky_button.png | Bin 0 -> 640 bytes src/gui/minimap.cpp | 6 ++-- src/gui/skin.cpp | 15 ++++++++-- src/gui/skin.h | 10 ++++++- src/gui/window.cpp | 58 ++++++++++++++++++++++++++++++++---- src/gui/window.h | 18 +++++++++-- 6 files changed, 93 insertions(+), 14 deletions(-) create mode 100644 data/graphics/gui/sticky_button.png (limited to 'src/gui/window.cpp') diff --git a/data/graphics/gui/sticky_button.png b/data/graphics/gui/sticky_button.png new file mode 100644 index 00000000..d25fa81c Binary files /dev/null and b/data/graphics/gui/sticky_button.png differ diff --git a/src/gui/minimap.cpp b/src/gui/minimap.cpp index 75ee7e3d..bfd34390 100644 --- a/src/gui/minimap.cpp +++ b/src/gui/minimap.cpp @@ -45,6 +45,9 @@ Minimap::Minimap(): setDefaultSize(5, 25, 100, 100); setResizable(true); + setStickyButton(true); + setSticky(false); + loadWindowState(); } @@ -92,8 +95,7 @@ void Minimap::setMapImage(Image *img) void Minimap::toggle() { - mShow = ! isVisible(); - setVisible(mShow); + setVisible(!isVisible(), true); } void Minimap::draw(gcn::Graphics *graphics) diff --git a/src/gui/skin.cpp b/src/gui/skin.cpp index b16bdfe6..0130ad71 100644 --- a/src/gui/skin.cpp +++ b/src/gui/skin.cpp @@ -47,14 +47,16 @@ class SkinConfigListener : public ConfigListener } }; -Skin::Skin(ImageRect skin, Image *close, +Skin::Skin(ImageRect skin, Image *close, Image *stickyUp, Image *stickyDown, const std::string &filePath, const std::string &name): instances(0), mFilePath(filePath), mName(name), border(skin), - closeImage(close) + closeImage(close), + stickyImageUp(stickyUp), + stickyImageDown(stickyDown) { } @@ -219,7 +221,14 @@ Skin *SkinLoader::load(const std::string &filename, // Hard-coded for now until we update the above code to look for window buttons. Image *closeImage = resman->getImage("graphics/gui/close_button.png"); - Skin *skin = new Skin(border, closeImage, filename); + Image *sticky = resman->getImage("graphics/gui/sticky_button.png"); + Image *stickyImageUp = sticky->getSubImage(0, 0, 15, 15); + Image *stickyImageDown = sticky->getSubImage(15, 0, 15, 15); + + sticky->decRef(); + + Skin *skin = new Skin(border, closeImage, stickyImageUp, stickyImageDown, + filename); mSkins[filename] = skin; diff --git a/src/gui/skin.h b/src/gui/skin.h index df905b05..30f7f360 100644 --- a/src/gui/skin.h +++ b/src/gui/skin.h @@ -34,7 +34,7 @@ class Image; class Skin { public: - Skin(ImageRect skin, Image *close, + Skin(ImageRect skin, Image *close, Image *stickyUp, Image *stickyDown, const std::string &filePath, const std::string &name = ""); @@ -62,6 +62,12 @@ class Skin */ Image *getCloseImage() const { return closeImage; } + /** + * Returns the image used by a sticky button for this skin. + */ + Image *getStickyImage(bool state) const + { return state ? stickyImageDown : stickyImageUp; } + /** * Returns the number of instances which use this skin. */ @@ -89,6 +95,8 @@ class Skin std::string mName; /**< Name of the skin to use */ ImageRect border; /**< The window border and background */ Image *closeImage; /**< Close Button Image */ + Image *stickyImageUp; /**< Sticky Button Image */ + Image *stickyImageDown; /**< Sticky Button Image */ }; // Map containing all window skins diff --git a/src/gui/window.cpp b/src/gui/window.cpp index a916ba38..1f9dab5b 100644 --- a/src/gui/window.cpp +++ b/src/gui/window.cpp @@ -48,6 +48,7 @@ Window::Window(const std::string &caption, bool modal, Window *parent, const std mShowTitle(true), mModal(modal), mCloseButton(false), + mStickyButton(false), mSticky(false), mMinWinWidth(100), mMinWinHeight(40), @@ -135,8 +136,18 @@ void Window::draw(gcn::Graphics *graphics) { g->drawImage(mSkin->getCloseImage(), getWidth() - mSkin->getCloseImage()->getWidth() - getPadding(), - getPadding() - ); + getPadding()); + } + + // Draw Sticky Button + if (mStickyButton) + { + Image *button = mSkin->getStickyImage(mSticky); + int x = getWidth() - button->getWidth() - getPadding(); + if (mCloseButton) + x -= mSkin->getCloseImage()->getWidth(); + + g->drawImage(button, x, getPadding()); } drawChildren(graphics); @@ -283,6 +294,11 @@ bool Window::isResizable() const return mGrip; } +void Window::setStickyButton(bool flag) +{ + mStickyButton = flag; +} + void Window::setSticky(bool sticky) { mSticky = sticky; @@ -290,7 +306,12 @@ void Window::setSticky(bool sticky) void Window::setVisible(bool visible) { - gcn::Window::setVisible(isSticky() || visible); + setVisible(visible, false); +} + +void Window::setVisible(bool visible, bool forceSticky) +{ + gcn::Window::setVisible((!forceSticky && isSticky()) || visible); } void Window::scheduleDelete() @@ -323,6 +344,22 @@ void Window::mousePressed(gcn::MouseEvent &event) } } + // Handle sticky button + if (mStickyButton) + { + Image *button = mSkin->getStickyImage(mSticky); + int rx = getWidth() - button->getWidth() - getPadding(); + if (mCloseButton) + rx -= mSkin->getCloseImage()->getWidth(); + gcn::Rectangle stickyButtonRect(rx, getPadding(), + button->getWidth(), button->getHeight()); + + if (stickyButtonRect.isPointInRect(x, y)) + { + setSticky(!isSticky()); + } + } + // Handle window resizing mouseResize = getResizeHandles(event); } @@ -467,7 +504,12 @@ void Window::loadWindowState() setPosition((int) config.getValue(name + "WinX", mDefaultX), (int) config.getValue(name + "WinY", mDefaultY)); - setVisible((bool) config.getValue(name + "Visible", false)); + + if (mCloseButton) + setVisible((bool) config.getValue(name + "Visible", false)); + + if (mStickyButton) + setSticky((bool) config.getValue(name + "Sticky", isSticky())); if (skinName.compare(mSkin->getFilePath()) != 0) { @@ -504,7 +546,13 @@ void Window::saveWindowState() { config.setValue(mWindowName + "WinX", getX()); config.setValue(mWindowName + "WinY", getY()); - config.setValue(mWindowName + "Visible", isVisible()); + + if (mCloseButton) + config.setValue(mWindowName + "Visible", isVisible()); + + if (mStickyButton) + config.setValue(mWindowName + "Sticky", isSticky()); + config.setValue(mWindowName + "Skin", mSkin->getFilePath()); if (mGrip) diff --git a/src/gui/window.h b/src/gui/window.h index c41a4221..18a64532 100644 --- a/src/gui/window.h +++ b/src/gui/window.h @@ -144,17 +144,22 @@ class Window : public gcn::Window, gcn::WidgetListener */ void setShowTitle(bool flag) { mShowTitle = flag; } + /** + * Sets whether or not the window has a sticky button. + */ + void setStickyButton(bool flag); + /** * Sets whether the window is sticky. A sticky window will not have * its visibility set to false on a general setVisible(false) call. + * Use this to set the default before you call loadWindowState(). */ void setSticky(bool sticky); /** * Returns whether the window is sticky. */ - bool isSticky() const - { return mSticky; } + bool isSticky() const { return mSticky; } /** * Overloads window setVisible by Guichan to allow sticky window @@ -162,6 +167,12 @@ class Window : public gcn::Window, gcn::WidgetListener */ void setVisible(bool visible); + /** + * Overloads window setVisible by Guichan to allow sticky window + * handling, or not, if you force the sticky state. + */ + void setVisible(bool visible, bool forceSticky); + /** * Returns the parent window. * @@ -325,7 +336,8 @@ class Window : public gcn::Window, gcn::WidgetListener bool mShowTitle; /**< Window has a title bar */ bool mModal; /**< Window is modal */ bool mCloseButton; /**< Window has a close button */ - bool mSticky; /**< Window resists minimization */ + bool mStickyButton; /**< Window has a sticky button */ + bool mSticky; /**< Window resists hiding*/ int mMinWinWidth; /**< Minimum window width */ int mMinWinHeight; /**< Minimum window height */ int mMaxWinWidth; /**< Maximum window width */ -- cgit v1.2.3-70-g09d2