ManaPlus
icon.cpp
Go to the documentation of this file.
1 /*
2  * The ManaPlus Client
3  * Copyright (C) 2008-2009 The Mana World Development Team
4  * Copyright (C) 2009-2010 The Mana Developers
5  * Copyright (C) 2011-2019 The ManaPlus Developers
6  * Copyright (C) 2019-2021 Andrei Karas
7  *
8  * This file is part of The ManaPlus Client.
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program. If not, see <http://www.gnu.org/licenses/>.
22  */
23 
24 #include "gui/widgets/icon.h"
25 
26 #include "gui/gui.h"
27 
28 #include "render/graphics.h"
29 
30 #include "resources/image/image.h"
31 
33 
34 #include "debug.h"
35 
36 Icon::Icon(const Widget2 *const widget,
37  const std::string &file,
38  const AutoRelease autoRelease) :
39  Widget(widget),
40  mImage(Loader::getImage(file)),
41  mAutoRelease(autoRelease)
42 {
43  if (mImage != nullptr)
44  {
45  const SDL_Rect &bounds = mImage->mBounds;
46  setSize(bounds.w, bounds.h);
47  }
48  mAllowLogic = false;
49 }
50 
51 Icon::Icon(const Widget2 *const widget,
52  Image *const image,
53  const AutoRelease autoRelease) :
54  Widget(widget),
55  mImage(image),
56  mAutoRelease(autoRelease)
57 {
58  if (mImage != nullptr)
59  {
60  const SDL_Rect &bounds = mImage->mBounds;
61  setSize(bounds.w, bounds.h);
62  }
63  mAllowLogic = false;
64 }
65 
67 {
68  if (gui != nullptr)
69  gui->removeDragged(this);
70  if ((mImage != nullptr) && mAutoRelease == AutoRelease_true)
71  mImage->decRef();
72 }
73 
74 void Icon::setImage(Image *const image)
75 {
76  mImage = image;
77  if (mImage != nullptr)
78  {
79  const SDL_Rect &bounds = mImage->mBounds;
80  setSize(bounds.w, bounds.h);
81  }
82 }
83 
84 void Icon::draw(Graphics *const graphics)
85 {
86  BLOCK_START("Icon::draw")
87  if (mImage != nullptr)
88  {
89  graphics->drawImage(mImage,
90  (mDimension.width - mImage->mBounds.w) / 2,
91  (mDimension.height - mImage->mBounds.h) / 2);
92  }
93  BLOCK_END("Icon::draw")
94 }
95 
96 void Icon::safeDraw(Graphics *const graphics)
97 {
98  BLOCK_START("Icon::draw")
99  if (mImage != nullptr)
100  {
101  graphics->drawImage(mImage,
102  (mDimension.width - mImage->mBounds.w) / 2,
103  (mDimension.height - mImage->mBounds.h) / 2);
104  }
105  BLOCK_END("Icon::draw")
106 }
const bool AutoRelease_true
Definition: autorelease.h:30
bool AutoRelease
Definition: autorelease.h:30
virtual void drawImage(const Image *const image, int dstX, int dstY)=0
void removeDragged(const Widget *const widget)
Definition: gui.cpp:1162
Icon(const Widget2 *const widget, const std::string &filename, const AutoRelease autoRelease)
Definition: icon.cpp:36
AutoRelease mAutoRelease
Definition: icon.h:81
void safeDraw(Graphics *const g)
Definition: icon.cpp:96
Image * mImage
Definition: icon.h:80
void draw(Graphics *const g)
Definition: icon.cpp:84
~Icon()
Definition: icon.cpp:66
void setImage(Image *const image)
Definition: icon.cpp:74
int width
Definition: rect.h:219
int height
Definition: rect.h:224
Definition: widget.h:99
void setSize(const int width, const int height)
Definition: widget.cpp:367
Rect mDimension
Definition: widget.h:1101
bool mAllowLogic
Definition: widget.h:1160
Gui * gui
Definition: gui.cpp:111
Image * getImage(const std::string &idPath)
Definition: imageloader.cpp:86
#define BLOCK_END(name)
Definition: perfomance.h:80
#define BLOCK_START(name)
Definition: perfomance.h:79