2024-07-21 21:11:02 +00:00
|
|
|
/*
|
|
|
|
* ImageScaled.h, part of VCMI engine
|
|
|
|
*
|
|
|
|
* Authors: listed in file AUTHORS in main folder
|
|
|
|
*
|
|
|
|
* License: GNU General Public License v2.0 or later
|
|
|
|
* Full text of license available in license.txt file, in main folder
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "../render/IImage.h"
|
2024-07-24 13:35:30 +00:00
|
|
|
#include "../render/IRenderHandler.h"
|
2024-07-21 21:11:02 +00:00
|
|
|
|
|
|
|
struct SDL_Palette;
|
|
|
|
|
2024-07-24 13:04:45 +00:00
|
|
|
class SDLImageShared;
|
2024-07-21 21:11:02 +00:00
|
|
|
|
2024-07-24 13:04:45 +00:00
|
|
|
class ImageSharedScaled final : public ISharedImage, public std::enable_shared_from_this<ImageSharedScaled>, boost::noncopyable
|
2024-07-21 21:11:02 +00:00
|
|
|
{
|
2024-07-24 13:04:45 +00:00
|
|
|
std::shared_ptr<SDLImageShared> sourceImage;
|
|
|
|
std::shared_ptr<SDLImageShared> scaledImage;
|
2024-07-21 21:11:02 +00:00
|
|
|
|
|
|
|
int getScalingFactor() const;
|
|
|
|
public:
|
2024-07-24 13:04:45 +00:00
|
|
|
ImageSharedScaled(std::shared_ptr<SDLImageShared> sourceImage);
|
2024-07-21 21:11:02 +00:00
|
|
|
|
2024-07-24 13:35:30 +00:00
|
|
|
void draw(SDL_Surface * where, SDL_Palette * palette, const Point & dest, const Rect * src, uint8_t alpha, EImageBlitMode mode) const override;
|
2024-07-21 21:11:02 +00:00
|
|
|
|
|
|
|
void exportBitmap(const boost::filesystem::path & path) const override;
|
|
|
|
Point dimensions() const override;
|
|
|
|
bool isTransparent(const Point & coords) const override;
|
|
|
|
std::shared_ptr<IImage> createImageReference(EImageBlitMode mode) override;
|
2024-07-24 13:04:45 +00:00
|
|
|
std::shared_ptr<ISharedImage> horizontalFlip() const override;
|
|
|
|
std::shared_ptr<ISharedImage> verticalFlip() const override;
|
|
|
|
std::shared_ptr<ImageSharedScaled> scaleFast(const Point & size) const;
|
2024-07-21 21:11:02 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class ImageScaled final : public IImage
|
|
|
|
{
|
|
|
|
private:
|
2024-07-24 13:04:45 +00:00
|
|
|
std::shared_ptr<ImageSharedScaled> image;
|
2024-07-21 21:11:02 +00:00
|
|
|
|
|
|
|
uint8_t alphaValue;
|
|
|
|
EImageBlitMode blitMode;
|
|
|
|
|
|
|
|
public:
|
2024-07-24 13:04:45 +00:00
|
|
|
ImageScaled(const std::shared_ptr<ImageSharedScaled> & image, EImageBlitMode mode);
|
2024-07-21 21:11:02 +00:00
|
|
|
|
|
|
|
void scaleFast(const Point & size) override;
|
|
|
|
void exportBitmap(const boost::filesystem::path & path) const override;
|
|
|
|
bool isTransparent(const Point & coords) const override;
|
|
|
|
Point dimensions() const override;
|
|
|
|
void setAlpha(uint8_t value) override;
|
|
|
|
void setBlitMode(EImageBlitMode mode) override;
|
|
|
|
void draw(SDL_Surface * where, const Point & pos, const Rect * src) const override;
|
|
|
|
void setSpecialPalette(const SpecialPalette & SpecialPalette, uint32_t colorsToSkipMask) override;
|
|
|
|
void playerColored(PlayerColor player) override;
|
|
|
|
void setFlagColor(PlayerColor player) override;
|
|
|
|
void shiftPalette(uint32_t firstColorID, uint32_t colorsToMove, uint32_t distanceToMove) override;
|
|
|
|
void adjustPalette(const ColorFilter & shifter, uint32_t colorsToSkipMask) override;
|
|
|
|
};
|