2022-11-25 11:46:47 +02:00
|
|
|
/*
|
2022-12-11 22:09:57 +02:00
|
|
|
* Canvas.h, part of VCMI engine
|
2022-11-25 11:46:47 +02:00
|
|
|
*
|
|
|
|
* 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
|
|
|
|
|
2023-02-01 20:42:06 +02:00
|
|
|
#include "../gui/TextAlignment.h"
|
2023-01-18 15:50:52 +02:00
|
|
|
#include "../../lib/Rect.h"
|
2023-01-30 00:12:43 +02:00
|
|
|
#include "../../lib/Color.h"
|
2022-11-26 23:12:20 +02:00
|
|
|
|
2022-11-25 16:32:23 +02:00
|
|
|
struct SDL_Color;
|
2022-11-25 11:46:47 +02:00
|
|
|
struct SDL_Surface;
|
|
|
|
class IImage;
|
2022-11-26 23:12:20 +02:00
|
|
|
enum EFonts : int;
|
2022-11-25 11:46:47 +02:00
|
|
|
|
|
|
|
/// Class that represents surface for drawing on
|
2022-12-11 22:09:57 +02:00
|
|
|
class Canvas
|
2022-11-25 11:46:47 +02:00
|
|
|
{
|
2023-01-05 14:16:01 +02:00
|
|
|
/// Target surface
|
2022-11-25 11:46:47 +02:00
|
|
|
SDL_Surface * surface;
|
2022-12-11 22:09:57 +02:00
|
|
|
|
2023-02-14 23:49:12 +02:00
|
|
|
/// Current rendering area, all rendering operations will be moved into selected area
|
|
|
|
Rect renderArea;
|
2023-01-05 14:16:01 +02:00
|
|
|
|
2022-11-25 11:46:47 +02:00
|
|
|
public:
|
2023-02-20 16:31:14 +02:00
|
|
|
Canvas & operator = (const Canvas & other) = delete;
|
2022-11-26 23:12:20 +02:00
|
|
|
|
|
|
|
/// constructs canvas using existing surface. Caller maintains ownership on the surface
|
2023-02-10 15:29:30 +02:00
|
|
|
explicit Canvas(SDL_Surface * surface);
|
2022-12-11 22:09:57 +02:00
|
|
|
|
|
|
|
/// copy contructor
|
2023-02-10 15:29:30 +02:00
|
|
|
Canvas(const Canvas & other);
|
2022-11-25 11:46:47 +02:00
|
|
|
|
2023-01-05 14:16:01 +02:00
|
|
|
/// creates canvas that only covers specified subsection of a surface
|
2023-02-10 15:29:30 +02:00
|
|
|
Canvas(const Canvas & other, const Rect & clipRect);
|
2023-01-05 14:16:01 +02:00
|
|
|
|
2022-11-26 23:12:20 +02:00
|
|
|
/// constructs canvas of specified size
|
2023-02-10 15:29:30 +02:00
|
|
|
explicit Canvas(const Point & size);
|
2022-11-26 23:12:20 +02:00
|
|
|
|
2022-12-11 22:09:57 +02:00
|
|
|
~Canvas();
|
2022-11-25 11:46:47 +02:00
|
|
|
|
2023-02-22 17:24:42 +02:00
|
|
|
/// if set to true, drawing this canvas onto another canvas will use alpha channel information
|
|
|
|
void applyTransparency(bool on);
|
|
|
|
|
|
|
|
/// applies grayscale filter onto current image
|
|
|
|
void applyGrayscale();
|
|
|
|
|
2022-11-27 22:50:18 +02:00
|
|
|
/// renders image onto this canvas at specified position
|
2023-02-15 23:13:25 +02:00
|
|
|
void draw(const std::shared_ptr<IImage>& image, const Point & pos);
|
2022-11-25 11:46:47 +02:00
|
|
|
|
2022-11-27 22:50:18 +02:00
|
|
|
/// renders section of image bounded by sourceRect at specified position
|
2023-02-15 23:13:25 +02:00
|
|
|
void draw(const std::shared_ptr<IImage>& image, const Point & pos, const Rect & sourceRect);
|
2022-11-27 22:50:18 +02:00
|
|
|
|
2022-11-26 23:12:20 +02:00
|
|
|
/// renders another canvas onto this canvas
|
2023-02-15 23:13:25 +02:00
|
|
|
void draw(const Canvas &image, const Point & pos);
|
2022-11-25 11:46:47 +02:00
|
|
|
|
2023-02-20 16:31:14 +02:00
|
|
|
/// renders another canvas onto this canvas with transparency
|
|
|
|
void drawTransparent(const Canvas & image, const Point & pos, double transparency);
|
|
|
|
|
2023-02-10 15:29:30 +02:00
|
|
|
/// renders another canvas onto this canvas with scaling
|
2023-02-15 23:13:25 +02:00
|
|
|
void drawScaled(const Canvas &image, const Point & pos, const Point & targetSize);
|
2023-02-10 15:29:30 +02:00
|
|
|
|
|
|
|
/// renders single pixels with specified color
|
|
|
|
void drawPoint(const Point & dest, const ColorRGBA & color);
|
|
|
|
|
2022-11-26 23:12:20 +02:00
|
|
|
/// renders continuous, 1-pixel wide line with color gradient
|
2023-01-30 00:12:43 +02:00
|
|
|
void drawLine(const Point & from, const Point & dest, const ColorRGBA & colorFrom, const ColorRGBA & colorDest);
|
2022-11-25 16:32:23 +02:00
|
|
|
|
2023-02-10 15:29:30 +02:00
|
|
|
/// renders dashed, 1-pixel wide line with specified color
|
|
|
|
void drawLineDashed(const Point & from, const Point & dest, const ColorRGBA & color);
|
|
|
|
|
|
|
|
/// renders rectangular, dashed border in specified location
|
|
|
|
void drawBorderDashed(const Rect & target, const ColorRGBA & color);
|
|
|
|
|
2022-11-26 23:12:20 +02:00
|
|
|
/// renders single line of text with specified parameters
|
|
|
|
void drawText(const Point & position, const EFonts & font, const SDL_Color & colorDest, ETextAlignment alignment, const std::string & text );
|
|
|
|
|
|
|
|
/// renders multiple lines of text with specified parameters
|
|
|
|
void drawText(const Point & position, const EFonts & font, const SDL_Color & colorDest, ETextAlignment alignment, const std::vector<std::string> & text );
|
2022-11-25 11:46:47 +02:00
|
|
|
};
|