summaryrefslogtreecommitdiff
path: root/src/gui/widgets/button.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2017-10-10 22:14:45 +0300
committerAndrei Karas <akaras@inbox.ru>2017-10-10 22:15:57 +0300
commitaa3f63fd497558a02feb3ddbc44f31eac091f39b (patch)
tree0e28b9b1f0501dd8be9e1a38db4ec1777fa3fbfa /src/gui/widgets/button.cpp
parent7c10a6b61e9d06a4ae9cc9f942dfacb6fcfd9d3d (diff)
downloadmanaverse-aa3f63fd497558a02feb3ddbc44f31eac091f39b.tar.gz
manaverse-aa3f63fd497558a02feb3ddbc44f31eac091f39b.tar.bz2
manaverse-aa3f63fd497558a02feb3ddbc44f31eac091f39b.tar.xz
manaverse-aa3f63fd497558a02feb3ddbc44f31eac091f39b.zip
Remove most unused files.
Diffstat (limited to 'src/gui/widgets/button.cpp')
-rw-r--r--src/gui/widgets/button.cpp934
1 files changed, 0 insertions, 934 deletions
diff --git a/src/gui/widgets/button.cpp b/src/gui/widgets/button.cpp
deleted file mode 100644
index 0c2600583..000000000
--- a/src/gui/widgets/button.cpp
+++ /dev/null
@@ -1,934 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-/* _______ __ __ __ ______ __ __ _______ __ __
- * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\
- * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / /
- * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / /
- * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / /
- * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ /
- * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/
- *
- * Copyright (c) 2004 - 2008 Olof Naessén and Per Larsson
- *
- *
- * Per Larsson a.k.a finalman
- * Olof Naessén a.k.a jansem/yakslem
- *
- * Visit: http://guichan.sourceforge.net
- *
- * License: (BSD)
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name of Guichan nor the names of its contributors may
- * be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "gui/widgets/button.h"
-
-#include "settings.h"
-
-#include "resources/imageset.h"
-#include "resources/imagerect.h"
-
-#include "resources/image/image.h"
-
-#include "gui/gui.h"
-#include "gui/skin.h"
-
-#include "gui/fonts/font.h"
-
-#include "render/renderers.h"
-
-#include "render/vertexes/imagecollection.h"
-
-#include "utils/delete2.h"
-
-#include "debug.h"
-
-int Button::mInstances = 0;
-float Button::mAlpha = 1.0;
-
-static std::string const data[Button::BUTTON_COUNT] =
-{
- "button.xml",
- "button_highlighted.xml",
- "button_pressed.xml",
- "button_disabled.xml"
-};
-
-Skin *Button::button[BUTTON_COUNT];
-
-Button::Button(const Widget2 *const widget) :
- Widget(widget),
- MouseListener(),
- KeyListener(),
- FocusListener(),
- WidgetListener(),
- mCaption(),
- mDescription(),
- mTextChunk(),
- mVertexes2(new ImageCollection),
- mEnabledColor(getThemeColor(ThemeColorId::BUTTON)),
- mEnabledColor2(getThemeColor(ThemeColorId::BUTTON_OUTLINE)),
- mDisabledColor(getThemeColor(ThemeColorId::BUTTON_DISABLED)),
- mDisabledColor2(getThemeColor(ThemeColorId::BUTTON_DISABLED_OUTLINE)),
- mHighlightedColor(getThemeColor(ThemeColorId::BUTTON_HIGHLIGHTED)),
- mHighlightedColor2(getThemeColor(
- ThemeColorId::BUTTON_HIGHLIGHTED_OUTLINE)),
- mPressedColor(getThemeColor(ThemeColorId::BUTTON_PRESSED)),
- mPressedColor2(getThemeColor(ThemeColorId::BUTTON_PRESSED_OUTLINE)),
- mImages(nullptr),
- mImageSet(nullptr),
- mAlignment(Graphics::CENTER),
- mClickCount(0),
- mSpacing(),
- mTag(0),
- mMode(0),
- mXOffset(0),
- mYOffset(0),
- mImageWidth(0),
- mImageHeight(0),
- mHasMouse(false),
- mKeyPressed(false),
- mMousePressed(false),
- mStick(false),
- mPressed(false),
- mTextChanged(true)
-{
- init();
- adjustSize();
-}
-
-Button::Button(const Widget2 *const widget,
- const std::string &restrict caption,
- const std::string &restrict actionEventId,
- ActionListener *const listener) :
- Widget(widget),
- MouseListener(),
- KeyListener(),
- FocusListener(),
- WidgetListener(),
- mCaption(caption),
- mDescription(),
- mTextChunk(),
- mVertexes2(new ImageCollection),
- mEnabledColor(getThemeColor(ThemeColorId::BUTTON)),
- mEnabledColor2(getThemeColor(ThemeColorId::BUTTON_OUTLINE)),
- mDisabledColor(getThemeColor(ThemeColorId::BUTTON_DISABLED)),
- mDisabledColor2(getThemeColor(ThemeColorId::BUTTON_DISABLED_OUTLINE)),
- mHighlightedColor(getThemeColor(ThemeColorId::BUTTON_HIGHLIGHTED)),
- mHighlightedColor2(getThemeColor(
- ThemeColorId::BUTTON_HIGHLIGHTED_OUTLINE)),
- mPressedColor(getThemeColor(ThemeColorId::BUTTON_PRESSED)),
- mPressedColor2(getThemeColor(ThemeColorId::BUTTON_PRESSED_OUTLINE)),
- mImages(nullptr),
- mImageSet(nullptr),
- mAlignment(Graphics::CENTER),
- mClickCount(0),
- mSpacing(),
- mTag(0),
- mMode(0),
- mXOffset(0),
- mYOffset(0),
- mImageWidth(0),
- mImageHeight(0),
- mHasMouse(false),
- mKeyPressed(false),
- mMousePressed(false),
- mStick(false),
- mPressed(false),
- mTextChanged(true)
-{
- init();
- adjustSize();
- setActionEventId(actionEventId);
-
- if (listener != nullptr)
- addActionListener(listener);
-}
-
-Button::Button(const Widget2 *const widget,
- const std::string &restrict caption,
- const std::string &restrict imageName,
- const int imageWidth, const int imageHeight,
- const std::string &restrict actionEventId,
- ActionListener *const listener) :
- Widget(widget),
- MouseListener(),
- KeyListener(),
- FocusListener(),
- WidgetListener(),
- mCaption(caption),
- mDescription(),
- mTextChunk(),
- mVertexes2(new ImageCollection),
- mEnabledColor(getThemeColor(ThemeColorId::BUTTON)),
- mEnabledColor2(getThemeColor(ThemeColorId::BUTTON_OUTLINE)),
- mDisabledColor(getThemeColor(ThemeColorId::BUTTON_DISABLED)),
- mDisabledColor2(getThemeColor(ThemeColorId::BUTTON_DISABLED_OUTLINE)),
- mHighlightedColor(getThemeColor(ThemeColorId::BUTTON_HIGHLIGHTED)),
- mHighlightedColor2(getThemeColor(
- ThemeColorId::BUTTON_HIGHLIGHTED_OUTLINE)),
- mPressedColor(getThemeColor(ThemeColorId::BUTTON_PRESSED)),
- mPressedColor2(getThemeColor(ThemeColorId::BUTTON_PRESSED_OUTLINE)),
- mImages(nullptr),
- mImageSet(nullptr),
- mAlignment(Graphics::CENTER),
- mClickCount(0),
- mSpacing(),
- mTag(0),
- mMode(0),
- mXOffset(0),
- mYOffset(0),
- mImageWidth(imageWidth),
- mImageHeight(imageHeight),
- mHasMouse(false),
- mKeyPressed(false),
- mMousePressed(false),
- mStick(false),
- mPressed(false),
- mTextChanged(true)
-{
- init();
- loadImageSet(imageName);
- adjustSize();
- setActionEventId(actionEventId);
-
- if (listener != nullptr)
- addActionListener(listener);
-}
-
-Button::Button(const Widget2 *const widget,
- const std::string &restrict imageName,
- const int imageWidth, const int imageHeight,
- const std::string &restrict actionEventId,
- ActionListener *const listener) :
- Widget(widget),
- MouseListener(),
- KeyListener(),
- FocusListener(),
- WidgetListener(),
- mCaption(),
- mDescription(),
- mTextChunk(),
- mVertexes2(new ImageCollection),
- mEnabledColor(getThemeColor(ThemeColorId::BUTTON)),
- mEnabledColor2(getThemeColor(ThemeColorId::BUTTON_OUTLINE)),
- mDisabledColor(getThemeColor(ThemeColorId::BUTTON_DISABLED)),
- mDisabledColor2(getThemeColor(ThemeColorId::BUTTON_DISABLED_OUTLINE)),
- mHighlightedColor(getThemeColor(ThemeColorId::BUTTON_HIGHLIGHTED)),
- mHighlightedColor2(getThemeColor(
- ThemeColorId::BUTTON_HIGHLIGHTED_OUTLINE)),
- mPressedColor(getThemeColor(ThemeColorId::BUTTON_PRESSED)),
- mPressedColor2(getThemeColor(ThemeColorId::BUTTON_PRESSED_OUTLINE)),
- mImages(nullptr),
- mImageSet(nullptr),
- mAlignment(Graphics::CENTER),
- mClickCount(0),
- mSpacing(),
- mTag(0),
- mMode(0),
- mXOffset(0),
- mYOffset(0),
- mImageWidth(imageWidth),
- mImageHeight(imageHeight),
- mHasMouse(false),
- mKeyPressed(false),
- mMousePressed(false),
- mStick(false),
- mPressed(false),
- mTextChanged(true)
-{
- init();
- loadImageSet(imageName);
- adjustSize();
- setActionEventId(actionEventId);
-
- if (listener != nullptr)
- addActionListener(listener);
-}
-
-Button::Button(const Widget2 *const widget,
- const std::string &restrict caption,
- const std::string &restrict imageName,
- const std::string &restrict actionEventId,
- ActionListener *const listener) :
- Widget(widget),
- MouseListener(),
- KeyListener(),
- FocusListener(),
- WidgetListener(),
- mCaption(caption),
- mDescription(),
- mTextChunk(),
- mVertexes2(new ImageCollection),
- mEnabledColor(getThemeColor(ThemeColorId::BUTTON)),
- mEnabledColor2(getThemeColor(ThemeColorId::BUTTON_OUTLINE)),
- mDisabledColor(getThemeColor(ThemeColorId::BUTTON_DISABLED)),
- mDisabledColor2(getThemeColor(ThemeColorId::BUTTON_DISABLED_OUTLINE)),
- mHighlightedColor(getThemeColor(ThemeColorId::BUTTON_HIGHLIGHTED)),
- mHighlightedColor2(getThemeColor(
- ThemeColorId::BUTTON_HIGHLIGHTED_OUTLINE)),
- mPressedColor(getThemeColor(ThemeColorId::BUTTON_PRESSED)),
- mPressedColor2(getThemeColor(ThemeColorId::BUTTON_PRESSED_OUTLINE)),
- mImages(nullptr),
- mImageSet(nullptr),
- mAlignment(Graphics::CENTER),
- mClickCount(0),
- mSpacing(),
- mTag(0),
- mMode(0),
- mXOffset(0),
- mYOffset(0),
- mImageWidth(0),
- mImageHeight(0),
- mHasMouse(false),
- mKeyPressed(false),
- mMousePressed(false),
- mStick(false),
- mPressed(false),
- mTextChanged(true)
-{
- init();
- loadImage(imageName);
- adjustSize();
- setActionEventId(actionEventId);
-
- if (listener != nullptr)
- addActionListener(listener);
-}
-
-void Button::init()
-{
- mAllowLogic = false;
- addMouseListener(this);
- addKeyListener(this);
- addFocusListener(this);
- addWidgetListener(this);
-
- setFocusable(true);
- setFrameSize(0);
-
- if (mInstances == 0)
- {
- if (theme != nullptr)
- {
- for (int mode = 0; mode < BUTTON_COUNT; mode ++)
- {
- Skin *const skin = theme->load(data[mode], "button.xml");
- if (skin != nullptr)
- {
- button[mode] = skin;
- mSpacing[mode] = skin->getOption("spacing");
- }
- }
- }
-
- updateAlpha();
- }
-
- mInstances++;
-}
-
-Button::~Button()
-{
- if (mWindow != nullptr)
- mWindow->removeWidgetListener(this);
-
- if (gui != nullptr)
- gui->removeDragged(this);
-
- mInstances--;
-
- if (mInstances == 0 && (theme != nullptr))
- {
- for (int mode = 0; mode < BUTTON_COUNT; mode ++)
- theme->unload(button[mode]);
- }
- delete2(mVertexes2);
- if (mImageSet != nullptr)
- {
- mImageSet->decRef();
- mImageSet = nullptr;
- }
- if (mImages != nullptr)
- {
- for (int f = 0; f < BUTTON_COUNT; f ++)
- mImages[f] = nullptr;
- delete [] mImages;
- mImages = nullptr;
- }
- mTextChunk.deleteImage();
-}
-
-void Button::loadImage(const std::string &imageName)
-{
- if (mImageSet != nullptr)
- {
- mImageSet->decRef();
- mImageSet = nullptr;
- }
- Image *const image = Theme::getImageFromThemeXml(imageName, "");
- mImages = new Image*[BUTTON_COUNT];
- for (int f = 0; f < BUTTON_COUNT; f ++)
- mImages[f] = image;
-}
-
-void Button::loadImageSet(const std::string &imageName)
-{
- if (mImageSet != nullptr)
- {
- mImageSet->decRef();
- mImageSet = nullptr;
- }
- mImageSet = Theme::getImageSetFromTheme(imageName,
- mImageWidth, mImageHeight);
- if (mImageSet == nullptr)
- return;
- mImages = new Image*[BUTTON_COUNT];
- mImages[0] = nullptr;
- for (size_t f = 0; f < BUTTON_COUNT; f ++)
- {
- Image *const img = mImageSet->get(f);
- if (img != nullptr)
- mImages[f] = img;
- else
- mImages[f] = mImages[0];
- }
-}
-
-void Button::updateAlpha()
-{
- const float alpha = std::max(settings.guiAlpha,
- theme->getMinimumOpacity());
-
- if (mAlpha != alpha)
- {
- mAlpha = alpha;
- for (int mode = 0; mode < BUTTON_COUNT; mode ++)
- {
- for (int a = 0; a < 9; a ++)
- {
- Skin *const skin = button[mode];
- if (skin != nullptr)
- {
- const ImageRect &rect = skin->getBorder();
- Image *const image = rect.grid[a];
- if (image != nullptr)
- image->setAlpha(mAlpha);
- }
- }
- }
- }
-}
-
-void Button::draw(Graphics *const graphics)
-{
- BLOCK_START("Button::draw")
- int mode;
-
- if (!isEnabled())
- mode = BUTTON_DISABLED;
- else if (isPressed2())
- mode = BUTTON_PRESSED;
- else if (mHasMouse)
- mode = BUTTON_HIGHLIGHTED;
- else
- mode = BUTTON_STANDARD;
-
- const Skin *const skin = button[mode];
- if (skin == nullptr)
- {
- BLOCK_END("Button::draw")
- return;
- }
-
- updateAlpha();
-
- bool recalc = false;
- if (mRedraw)
- {
- recalc = true;
- }
- else
- {
- // because we don't know where parent windows was moved,
- // need recalc vertexes
- ClipRect &rect = graphics->getTopClip();
- if (rect.xOffset != mXOffset || rect.yOffset != mYOffset)
- {
- recalc = true;
- mXOffset = rect.xOffset;
- mYOffset = rect.yOffset;
- }
- else if (mMode != mode)
- {
- recalc = true;
- mMode = mode;
- }
- else if (graphics->getRedraw())
- {
- recalc = true;
- }
- }
-
- const int padding = skin->getPadding();
- const int spacing = mSpacing[mode];
-
- if (recalc)
- mTextChanged = true;
-
- int imageX = 0;
- int imageY = 0;
- int textX = 0;
- const Rect &rect = mDimension;
- const int width = rect.width;
- const int height = rect.height;
- Font *const font = getFont();
- int textY = height / 2 - font->getHeight() / 2;
- if (mImages != nullptr)
- imageY = height / 2 - mImageHeight / 2;
-
-// need move calculation from draw!!!
-
- switch (mAlignment)
- {
- default:
- case Graphics::LEFT:
- {
- if (mImages != nullptr)
- {
- imageX = padding;
- textX = padding + mImageWidth + spacing;
- }
- else
- {
- textX = padding;
- }
- break;
- }
- case Graphics::CENTER:
- {
- const int width1 = font->getWidth(mCaption);
- if (mImages != nullptr)
- {
- const int w = width1 + mImageWidth + spacing;
- imageX = (width - w) / 2;
- textX = imageX + mImageWidth + spacing - width1 / 2;
- }
- else
- {
- textX = (width - width1) / 2;
- }
- break;
- }
- case Graphics::RIGHT:
- {
- const int width1 = font->getWidth(mCaption);
- textX = width - width1 - padding;
- imageX = textX - width1 - spacing;
- break;
- }
- }
-
- if (recalc)
- {
- mRedraw = false;
- mMode = mode;
- mVertexes2->clear();
- graphics->calcWindow(mVertexes2,
- 0, 0,
- width, height,
- skin->getBorder());
-
- if (mImages != nullptr)
- {
- if (isPressed())
- {
- graphics->calcTileCollection(mVertexes2,
- mImages[mode],
- imageX + 1, imageY + 1);
- }
- else
- {
- graphics->calcTileCollection(mVertexes2,
- mImages[mode],
- imageX, imageY);
- }
- }
- graphics->finalize(mVertexes2);
- }
- graphics->drawTileCollection(mVertexes2);
-
- if (isPressed())
- {
- textX ++;
- textY ++;
- }
-
- if (mTextChanged)
- {
- mTextChunk.textFont = font;
- mTextChunk.deleteImage();
- mTextChunk.text = mCaption;
- switch (mode)
- {
- case BUTTON_DISABLED:
- mTextChunk.color = mDisabledColor;
- mTextChunk.color2 = mDisabledColor2;
- break;
- case BUTTON_PRESSED:
- mTextChunk.color = mPressedColor;
- mTextChunk.color2 = mPressedColor2;
- break;
- case BUTTON_HIGHLIGHTED:
- mTextChunk.color = mHighlightedColor;
- mTextChunk.color2 = mHighlightedColor2;
- break;
- default:
- mTextChunk.color = mEnabledColor;
- mTextChunk.color2 = mEnabledColor2;
- break;
- }
- font->generate(mTextChunk);
- mTextChanged = false;
- }
-
- const Image *const image = mTextChunk.img;
- if (image != nullptr)
- graphics->drawImage(image, textX, textY);
-
- BLOCK_END("Button::draw")
-}
-
-void Button::safeDraw(Graphics *const graphics)
-{
- BLOCK_START("Button::safeDraw")
- int mode;
-
- if (!isEnabled())
- mode = BUTTON_DISABLED;
- else if (isPressed2())
- mode = BUTTON_PRESSED;
- else if (mHasMouse || isFocused())
- mode = BUTTON_HIGHLIGHTED;
- else
- mode = BUTTON_STANDARD;
-
- const Skin *const skin = button[mode];
- if (skin == nullptr)
- {
- BLOCK_END("Button::safeDraw")
- return;
- }
-
- updateAlpha();
-
- if (mMode != mode)
- {
- mTextChanged = true;
- mMode = mode;
- }
-
- const int padding = skin->getPadding();
- const int spacing = mSpacing[mode];
-
- int imageX = 0;
- int imageY = 0;
- int textX = 0;
- const Rect &rect = mDimension;
- const int width = rect.width;
- const int height = rect.height;
- Font *const font = getFont();
- int textY = height / 2 - font->getHeight() / 2;
- if (mImages != nullptr)
- imageY = height / 2 - mImageHeight / 2;
-
-// need move calculation from draw!!!
-
- switch (mAlignment)
- {
- default:
- case Graphics::LEFT:
- {
- if (mImages != nullptr)
- {
- imageX = padding;
- textX = padding + mImageWidth + spacing;
- }
- else
- {
- textX = padding;
- }
- break;
- }
- case Graphics::CENTER:
- {
- const int width1 = font->getWidth(mCaption);
- if (mImages != nullptr)
- {
- const int w = width1 + mImageWidth + spacing;
- imageX = (width - w) / 2;
- textX = imageX + mImageWidth + spacing - width1 / 2;
- }
- else
- {
- textX = (width - width1) / 2;
- }
- break;
- }
- case Graphics::RIGHT:
- {
- const int width1 = font->getWidth(mCaption);
- textX = width - width1 - padding;
- imageX = textX - width1 - spacing;
- break;
- }
- }
-
- graphics->drawImageRect(0, 0, width, height, skin->getBorder());
-
- if (mImages != nullptr)
- {
- if (isPressed())
- graphics->drawImage(mImages[mode], imageX + 1, imageY + 1);
- else
- graphics->drawImage(mImages[mode], imageX, imageY);
- }
-
- if (isPressed())
- {
- textX ++;
- textY ++;
- }
-
- if (mTextChanged)
- {
- mTextChunk.textFont = font;
- mTextChunk.deleteImage();
- mTextChunk.text = mCaption;
- switch (mode)
- {
- case BUTTON_DISABLED:
- mTextChunk.color = mDisabledColor;
- mTextChunk.color2 = mDisabledColor2;
- break;
- case BUTTON_PRESSED:
- mTextChunk.color = mPressedColor;
- mTextChunk.color2 = mPressedColor2;
- break;
- case BUTTON_HIGHLIGHTED:
- mTextChunk.color = mHighlightedColor;
- mTextChunk.color2 = mHighlightedColor2;
- break;
- default:
- mTextChunk.color = mEnabledColor;
- mTextChunk.color2 = mEnabledColor2;
- break;
- }
- font->generate(mTextChunk);
- mTextChanged = false;
- }
-
- const Image *const image = mTextChunk.img;
- if (image != nullptr)
- graphics->drawImage(image, textX, textY);
-
- BLOCK_END("Button::safeDraw")
-}
-
-void Button::mouseReleased(MouseEvent& event)
-{
- if (event.getButton() == MouseButton::LEFT)
- {
- if (mStick)
- mPressed = !mPressed;
-
- if (mMousePressed && mHasMouse)
- {
- mMousePressed = false;
- mClickCount = event.getClickCount();
- distributeActionEvent();
- }
- else
- {
- mMousePressed = false;
- mClickCount = 0;
- }
- event.consume();
- }
-}
-
-void Button::widgetResized(const Event &event A_UNUSED)
-{
- mRedraw = true;
-}
-
-void Button::widgetMoved(const Event &event A_UNUSED)
-{
- mRedraw = true;
-}
-
-void Button::widgetHidden(const Event &event A_UNUSED)
-{
- if (isBatchDrawRenders(openGLMode))
- mVertexes2->clear();
- mTextChunk.deleteImage();
- mRedraw = true;
- mTextChanged = true;
-}
-
-void Button::adjustSize()
-{
- const Font *const font = getFont();
- const Skin *const skin = button[BUTTON_STANDARD];
- if (skin == nullptr)
- return;
- const int padding = skin->getPadding();
-
- if (mImages != nullptr)
- {
- const int spacing = mSpacing[BUTTON_STANDARD];
- const int width = font->getWidth(mCaption);
- if (width != 0)
- setWidth(width + mImageWidth + spacing + 2 * padding);
- else
- setWidth(mImageWidth + 2 * padding);
- int height = font->getHeight();
- if (height < mImageHeight)
- height = mImageHeight;
- setHeight(height + 2 * padding);
- }
- else
- {
- setWidth(font->getWidth(mCaption) + 2 * padding);
- setHeight(font->getHeight() + 2 * padding);
- }
-}
-
-void Button::keyPressed(KeyEvent& event)
-{
- const InputActionT action = event.getActionId();
-
- if (action == InputAction::GUI_SELECT)
- {
- mKeyPressed = true;
- event.consume();
- }
-}
-
-void Button::keyReleased(KeyEvent& event)
-{
- const InputActionT action = event.getActionId();
-
- if (action == InputAction::GUI_SELECT && mKeyPressed)
- {
- mKeyPressed = false;
- if (mStick)
- mPressed = !mPressed;
- distributeActionEvent();
- event.consume();
- }
-}
-
-bool Button::isPressed2() const
-{
- return mPressed || isPressed();
-}
-
-bool Button::isPressed() const
-{
- if (mMousePressed)
- return mHasMouse;
- return mKeyPressed;
-}
-
-void Button::focusLost(const Event& event A_UNUSED)
-{
- mMousePressed = false;
- mKeyPressed = false;
-}
-
-void Button::mousePressed(MouseEvent& event)
-{
- if (event.getButton() == MouseButton::LEFT)
- {
- mMousePressed = true;
- event.consume();
- }
-}
-
-void Button::mouseEntered(MouseEvent& event A_UNUSED)
-{
- mHasMouse = true;
-}
-
-void Button::mouseExited(MouseEvent& event A_UNUSED)
-{
- mHasMouse = false;
-}
-
-void Button::mouseDragged(MouseEvent& event)
-{
- event.consume();
-}
-
-void Button::setParent(Widget *widget)
-{
- if (mWindow != nullptr)
- mWindow->addWidgetListener(this);
- Widget::setParent(widget);
-}
-
-void Button::setWindow(Widget *const widget)
-{
- if ((widget == nullptr) && (mWindow != nullptr))
- {
- mWindow->removeWidgetListener(this);
- mWindow = nullptr;
- }
- else
- {
- Widget2::setWindow(widget);
- }
-}