-
-
Notifications
You must be signed in to change notification settings - Fork 68
Expand file tree
/
Copy pathcairoShimCairo.h
More file actions
91 lines (75 loc) · 3.16 KB
/
cairoShimCairo.h
File metadata and controls
91 lines (75 loc) · 3.16 KB
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
#ifndef CAIROSHIMCAIRO_H
#define CAIROSHIMCAIRO_H
#include "ICairoShim.h"
#include "SVGItem.h"
#include <cairo.h>
#include <pango.h>
#include <memory>
namespace ecolab { class Pango; }
namespace minsky
{
/// Concrete implementation of ICairoShim using actual Cairo library
class CairoShimCairo: public ICairoShim
{
cairo_t* cairo;
mutable std::unique_ptr<ecolab::Pango> m_pango;
CairoShimCairo(const CairoShimCairo&)=delete;
void operator=(const CairoShimCairo&)=delete;
public:
CairoShimCairo(cairo_t* c);
~CairoShimCairo() override;
// Drawing operations
void moveTo(double x, double y) const override;
void lineTo(double x, double y) const override;
void relMoveTo(double x, double y) const override;
void relLineTo(double x, double y) const override;
void arc(double x, double y, double radius, double start, double end) const override;
void curveTo(double x1, double y1, double x2, double y2, double x3, double y3) const override;
void rectangle(double x, double y, double width, double height) const override;
// Path operations
void newPath() const override;
void newSubPath() const override;
void closePath() const override;
void getCurrentPoint(double& x, double& y) const override;
// Fill and stroke operations
void fill() const override;
void fillPreserve() const override;
void stroke() const override;
void strokePreserve() const override;
void clip() const override;
void resetClip() const override;
void paint() const override;
// Line properties
void setLineWidth(double width) const override;
double getLineWidth() const override;
void setDash(const double* dashes, int num_dashes, double offset) const override;
void setFillRule(cairo_fill_rule_t fill_rule) const override;
// Color operations
void setSourceRGB(double r, double g, double b) const override;
void setSourceRGBA(double r, double g, double b, double a) const override;
// Text operations
void showText(const std::string& text) const override;
void setFontSize(double size) const override;
void selectFontFace(const std::string& family, cairo_font_slant_t slant, cairo_font_weight_t weight) const override;
void textExtents(const std::string& text, cairo_text_extents_t& extents) const override;
// Transformation operations
void identityMatrix() const override;
void translate(double x, double y) const override;
void scale(double sx, double sy) const override;
void rotate(double angle) const override;
void userToDevice(double& x, double& y) const override;
// Context state operations
void save() const override;
void restore() const override;
// Tolerance
void setTolerance(double tolerance) const override;
// Pango support
ecolab::Pango& pango() const override;
// SVG rendering support
void renderSVG(const SVGRenderer& svgRenderer, double width, double height) const override;
// TEMPORARY: Internal accessor for migration - to be removed once all implementations are updated
cairo_t* _internalGetCairoContext() const { return cairo; }
};
}
#include "cairoShimCairo.xcd"
#endif