1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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 3 of the License, or
* (at your option) 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 STARK_RESOURCES_IMAGE_H
#define STARK_RESOURCES_IMAGE_H
#include "common/path.h"
#include "common/rect.h"
#include "common/str.h"
#include "engines/stark/resources/object.h"
#include "engines/stark/gfx/color.h"
namespace Stark {
class Visual;
class VisualImageXMG;
class VisualText;
namespace Formats {
class XRCReadStream;
}
namespace Resources {
/**
* A still image resource
*/
class Image : public Object {
public:
static const Type::ResourceType TYPE = Type::kImage;
enum SubType {
kImageSub2 = 2,
kImageSub3 = 3,
kImageText = 4
};
/** Image factory */
static Object *construct(Object *parent, byte subType, uint16 index, const Common::String &name);
typedef Common::Array<Common::Point> Polygon;
Image(Object *parent, byte subType, uint16 index, const Common::String &name);
virtual ~Image();
// Resource API
void readData(Formats::XRCReadStream *stream) override;
/** Initialize the renderable for the image */
virtual Visual *getVisual();
/** Get the pat-table index for a given point */
int indexForPoint(const Common::Point &point) const;
/** Get the hotspot position for a given index of a pat-table */
Common::Point getHotspotPosition(uint index) const;
protected:
void printData() override;
bool isPointInPolygon(const Polygon &polygon, const Common::Point &point) const;
virtual void initVisual() = 0;
Common::Path _filename;
Common::Path _archiveName;
Visual *_visual;
bool _transparent;
uint32 _transparentColor;
uint32 _field_44_ADF;
uint32 _field_48_ADF;
Common::Point _hotspot;
Common::Array<Polygon> _polygons;
};
/**
* A still image resource loading its data from an XMG file
*/
class ImageStill : public Image {
public:
ImageStill(Object *parent, byte subType, uint16 index, const Common::String &name);
virtual ~ImageStill();
// Resource API
void readData(Formats::XRCReadStream *stream) override;
void onPostRead() override;
protected:
// Resource API
void printData() override;
// Image API
void initVisual() override;
bool loadPNGOverride(Stark::VisualImageXMG *visual) const;
bool _noName;
};
/**
* Text image rendered from a TTF font
*/
class ImageText : public Image {
public:
ImageText(Object *parent, byte subType, uint16 index, const Common::String &name);
virtual ~ImageText();
// Resource API
void readData(Formats::XRCReadStream *stream) override;
/** Reset the text visual so it is recomputed the next frame it is rendered */
void resetVisual();
protected:
// Resource API
void printData() override;
// Image API
void initVisual() override;
void fixWhiteCardinalHotspot(VisualText *text);
Common::Point _size;
Common::String _text;
Gfx::Color _color;
uint32 _font;
};
} // End of namespace Resources
} // End of namespace Stark
#endif // STARK_RESOURCES_IMAGE_H
|