From 12273c046fff6b2f778ef4c3cc0d8014d86233e5 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 5 Feb 2016 17:46:02 +0300 Subject: Impliment packet SMSG_NPC_CUTIN. Add support for cutins. --- src/gui/windows/cutinwindow.cpp | 143 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 src/gui/windows/cutinwindow.cpp (limited to 'src/gui/windows/cutinwindow.cpp') 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 . + */ + +#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(); + } + } +} -- cgit v1.2.3-60-g2f50