MyGUI 3.4.1
MyGUI_MaskPickInfo.cpp
Go to the documentation of this file.
1/*
2 * This source file is part of MyGUI. For the latest info, see http://mygui.info/
3 * Distributed under the MIT License
4 * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5 */
6
7#include "MyGUI_Precompiled.h"
10#include "MyGUI_RenderManager.h"
11#include "MyGUI_DataManager.h"
12
13namespace MyGUI
14{
15
17 mWidth(0),
18 mHeight(0)
19 {
20 }
21
22 bool MaskPickInfo::load(const std::string& _file)
23 {
24 if (!DataManager::getInstance().isDataExist(_file))
25 return false;
26
28 ITexture* texture = render.createTexture(_file);
29 texture->loadFromFile(_file);
30
31 uint8* buffer = (uint8*)texture->lock(TextureUsage::Read);
32 if (buffer == nullptr)
33 {
34 render.destroyTexture(texture);
35 return false;
36 }
37
38 size_t pixel_size = texture->getNumElemBytes();
39
40 mWidth = texture->getWidth();
41 mHeight = texture->getHeight();
42 size_t size = mWidth * mHeight;
43 mData.resize(size);
44
45 size_t pos = 0;
46 for (size_t pos_pix = 0; pos_pix < size; pos_pix++)
47 {
48 bool white = true;
49 for (size_t in_pix = 0; in_pix < pixel_size; in_pix++)
50 {
51 if (0xFF != buffer[pos])
52 {
53 white = false;
54 }
55 pos++;
56 }
57
58 mData[pos_pix] = white;
59 }
60
61 texture->unlock();
62 render.destroyTexture(texture);
63
64 return true;
65 }
66
67 bool MaskPickInfo::pick(const IntPoint& _point, const IntCoord& _coord) const
68 {
69 if ((0 == _coord.width) || (0 == _coord.height)) return false;
70
71 int x = ((_point.left * mWidth) - 1) / _coord.width;
72 int y = ((_point.top * mHeight) - 1) / _coord.height;
73
74 return 0 != mData[(size_t)(y * mWidth + x)];
75 }
76
78 {
79 return mData.empty();
80 }
81
82} // namespace MyGUI
static DataManager & getInstance()
virtual int getWidth() const =0
virtual void loadFromFile(const std::string &_filename)=0
virtual size_t getNumElemBytes() const =0
virtual void unlock()=0
virtual int getHeight() const =0
virtual void * lock(TextureUsage _access)=0
bool load(const std::string &_file)
bool pick(const IntPoint &_point, const IntCoord &_coord) const
virtual ITexture * createTexture(const std::string &_name)=0
virtual void destroyTexture(ITexture *_texture)=0
static RenderManager & getInstance()
uint8_t uint8
Definition: MyGUI_Types.h:45