diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-02-05 17:46:02 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-02-05 20:56:16 +0300 |
commit | 12273c046fff6b2f778ef4c3cc0d8014d86233e5 (patch) | |
tree | e4dd0ca3b42c31883709dfcf0e85823e1f22479e /src/gui | |
parent | 8db56130426f2c61e10219eddb67ee86bea82961 (diff) | |
download | mv-12273c046fff6b2f778ef4c3cc0d8014d86233e5.tar.gz mv-12273c046fff6b2f778ef4c3cc0d8014d86233e5.tar.bz2 mv-12273c046fff6b2f778ef4c3cc0d8014d86233e5.tar.xz mv-12273c046fff6b2f778ef4c3cc0d8014d86233e5.zip |
Impliment packet SMSG_NPC_CUTIN. Add support for cutins.
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/widgets/window.cpp | 2 | ||||
-rw-r--r-- | src/gui/widgets/window.h | 2 | ||||
-rw-r--r-- | src/gui/windows/cutinwindow.cpp | 143 | ||||
-rw-r--r-- | src/gui/windows/cutinwindow.h | 59 |
4 files changed, 204 insertions, 2 deletions
diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp index b7a7227c8..e22ea3f60 100644 --- a/src/gui/widgets/window.cpp +++ b/src/gui/widgets/window.cpp @@ -123,6 +123,7 @@ Window::Window(const std::string &caption, mDefaultY(0), mDefaultWidth(0), mDefaultHeight(0), + mShowTitle(true), mLastRedraw(true), mGrip(nullptr), mParent(parent), @@ -149,7 +150,6 @@ Window::Window(const std::string &caption, mStickyPadding(0), mCaptionFont(getFont()), mModal(modal), - mShowTitle(true), mCloseWindowButton(false), mDefaultVisible(false), mSaveVisible(false), diff --git a/src/gui/widgets/window.h b/src/gui/widgets/window.h index 7d809e7db..277e971bb 100644 --- a/src/gui/widgets/window.h +++ b/src/gui/widgets/window.h @@ -641,6 +641,7 @@ class Window notfinal : public BasicContainer2, int mDefaultY; /**< Default window Y position */ int mDefaultWidth; /**< Default window width */ int mDefaultHeight; /**< Default window height */ + bool mShowTitle; /**< Window has a title bar */ bool mLastRedraw; private: @@ -707,7 +708,6 @@ class Window notfinal : public BasicContainer2, int mStickyPadding; Font *mCaptionFont A_NONNULLPOINTER; Modal mModal; /**< Window is modal */ - bool mShowTitle; /**< Window has a title bar */ bool mCloseWindowButton; /**< Window has a close button */ bool mDefaultVisible; /**< Window's default visibility */ bool mSaveVisible; /**< Window will save visibility */ diff --git a/src/gui/windows/cutinwindow.cpp b/src/gui/windows/cutinwindow.cpp new file mode 100644 index 000000000..910c6d562 --- /dev/null +++ b/src/gui/windows/cutinwindow.cpp @@ -0,0 +1,143 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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 + * 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, see <http://www.gnu.org/licenses/>. + */ + +#include "gui/windows/cutinwindow.h" + +#include "configuration.h" + +#include "resources/image.h" +#include "resources/resourcemanager.h" + +#include "debug.h" + +CutInWindow *cutInWindow = nullptr; + +CutInWindow::CutInWindow() : + Window("", Modal_false, nullptr, "cutin.xml"), + mImage(nullptr), + mOldTitleBarHeight(mTitleBarHeight) +{ + setWindowName("CutIn"); + + setShowTitle(false); + setResizable(false); + setDefaultVisible(false); + setSaveVisible(false); + setVisible(Visible_false); + enableVisibleSound(false); +} + +CutInWindow::~CutInWindow() +{ + deleteImage(); +} + +void CutInWindow::deleteImage() +{ + if (mImage) + { + mImage->decRef(); + mImage = nullptr; + } +} + +void CutInWindow::draw(Graphics *graphics) +{ + Window::draw(graphics); + draw2(graphics); +} + +void CutInWindow::safeDraw(Graphics *graphics) +{ + Window::safeDraw(graphics); + draw2(graphics); +} + +void CutInWindow::draw2(Graphics *const graphics) +{ + if (mImage) + graphics->drawImage(mImage, mPadding, mTitleBarHeight); +} + +void CutInWindow::show(const std::string &name, + const CutIn cutin) +{ + deleteImage(); + if (name.empty()) + { + setVisible(Visible_false); + } + else + { + mImage = resourceManager->getImage( + std::string(paths.getStringValue("cutInsDir")).append( + "/").append( + name).append( + ".png")); + if (mImage) + { + const bool showTitle = (cutin == CutIn::MovableClose); + if (showTitle) + mTitleBarHeight = mOldTitleBarHeight; + else + mTitleBarHeight = mPadding; + const int width = mImage->mBounds.w + 2 * mPadding; + const int height = mImage->mBounds.h + mTitleBarHeight + + mPadding; + + const int screenWidth = mainGraphics->mWidth; + const int screenHeight = mainGraphics->mHeight; + + if (width * 2 > screenWidth || + height * 2 > screenHeight) + { + return; + } + const int padding = 100; + int x = 0; + const int y = screenHeight - height - padding; + switch (cutin) + { + case CutIn::BottomRight: + x = screenWidth - width - padding; + break; + case CutIn::BottomCenter: + case CutIn::Movable: + case CutIn::MovableClose: + x = (screenWidth - width) / 2; + break; + case CutIn::BottomLeft: + default: + x = padding; + break; + } + setCloseButton(false); + setVisible(Visible_true); + setPosition(x, y); + setCloseButton(showTitle); + setShowTitle(showTitle); + setSize(width, height); + setVisible(Visible_true); + requestMoveToTop(); + } + } +} diff --git a/src/gui/windows/cutinwindow.h b/src/gui/windows/cutinwindow.h new file mode 100644 index 000000000..2892f8548 --- /dev/null +++ b/src/gui/windows/cutinwindow.h @@ -0,0 +1,59 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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 + * 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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef GUI_WINDOWS_CUTINWINDOW_H +#define GUI_WINDOWS_CUTINWINDOW_H + +#include "gui/widgets/window.h" + +#include "enums/cutin.h" + +class Image; + +class CutInWindow final : public Window +{ + public: + CutInWindow(); + + A_DELETE_COPY(CutInWindow) + + ~CutInWindow(); + + void draw(Graphics *graphics) override final A_NONNULL(2); + + void safeDraw(Graphics *graphics) override final A_NONNULL(2); + + void draw2(Graphics *const graphics) A_NONNULL(2); + + void show(const std::string &name, + const CutIn cutin); + + private: + void deleteImage(); + + Image *mImage; + int mOldTitleBarHeight; +}; + +extern CutInWindow *cutInWindow; + +#endif // GUI_WINDOWS_CUTINWINDOW_H |