summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-02-05 17:46:02 +0300
committerAndrei Karas <akaras@inbox.ru>2016-02-05 20:56:16 +0300
commit12273c046fff6b2f778ef4c3cc0d8014d86233e5 (patch)
treee4dd0ca3b42c31883709dfcf0e85823e1f22479e /src/gui
parent8db56130426f2c61e10219eddb67ee86bea82961 (diff)
downloadmv-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.cpp2
-rw-r--r--src/gui/widgets/window.h2
-rw-r--r--src/gui/windows/cutinwindow.cpp143
-rw-r--r--src/gui/windows/cutinwindow.h59
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