mirror of
				https://github.com/RetroDECK/ES-DE.git
				synced 2025-04-10 19:15:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef CANVAS_H
 | |
| #define CANVAS_H
 | |
| 
 | |
| #include "property.h"
 | |
| #include "plutovg.h"
 | |
| 
 | |
| #include <memory>
 | |
| 
 | |
| namespace lunasvg {
 | |
| 
 | |
| using GradientStop = std::pair<double, Color>;
 | |
| using GradientStops = std::vector<GradientStop>;
 | |
| 
 | |
| using DashArray = std::vector<double>;
 | |
| 
 | |
| struct DashData {
 | |
|     DashArray array;
 | |
|     double offset{0.0};
 | |
| };
 | |
| 
 | |
| enum class TextureType {
 | |
|     Plain,
 | |
|     Tiled
 | |
| };
 | |
| 
 | |
| enum class BlendMode {
 | |
|     Src,
 | |
|     Src_Over,
 | |
|     Dst_In,
 | |
|     Dst_Out
 | |
| };
 | |
| 
 | |
| class CanvasImpl;
 | |
| 
 | |
| class Canvas {
 | |
| public:
 | |
|     static std::shared_ptr<Canvas> create(unsigned char* data, unsigned int width, unsigned int height, unsigned int stride);
 | |
|     static std::shared_ptr<Canvas> create(double x, double y, double width, double height);
 | |
|     static std::shared_ptr<Canvas> create(const Rect& box);
 | |
| 
 | |
|     void setColor(const Color& color);
 | |
|     void setLinearGradient(double x1, double y1, double x2, double y2, const GradientStops& stops, SpreadMethod spread, const Transform& transform);
 | |
|     void setRadialGradient(double cx, double cy, double r, double fx, double fy, const GradientStops& stops, SpreadMethod spread, const Transform& transform);
 | |
|     void setTexture(const Canvas* source, TextureType type, const Transform& transform);
 | |
| 
 | |
|     void fill(const Path& path, const Transform& transform, WindRule winding, BlendMode mode, double opacity);
 | |
|     void stroke(const Path& path, const Transform& transform, double width, LineCap cap, LineJoin join, double miterlimit, const DashData& dash, BlendMode mode, double opacity);
 | |
|     void blend(const Canvas* source, BlendMode mode, double opacity);
 | |
|     void mask(const Rect& clip, const Transform& transform);
 | |
| 
 | |
|     void luminance();
 | |
| 
 | |
|     unsigned int width() const;
 | |
|     unsigned int height() const;
 | |
|     unsigned int stride() const;
 | |
|     unsigned char* data() const;
 | |
|     Rect box() const;
 | |
| 
 | |
|     ~Canvas();
 | |
| 
 | |
| private:
 | |
|     Canvas(unsigned char* data, int width, int height, int stride);
 | |
|     Canvas(int x, int y, int width, int height);
 | |
| 
 | |
|     plutovg_surface_t* surface;
 | |
|     plutovg_t* pluto;
 | |
|     plutovg_matrix_t translation;
 | |
|     plutovg_rect_t rect;
 | |
| };
 | |
| 
 | |
| } // namespace lunasvg
 | |
| 
 | |
| #endif // CANVAS_H
 | 
