Skip to content

Commit 10c746a

Browse files
Make ICairoShim methods const, add Pango support, remove cairoContext
- Made all ICairoShim methods const for better const-correctness - Added pango() method to ICairoShim for text rendering support - Removed cairoContext() method as per review feedback - Updated CairoShimCairo to maintain Pango instance - Fixed operation.cc and intOp.cc to use cairoShim methods instead of raw cairo - Updated Item::draw and displayTooltip to use cairoShim.pango() - Changed all draw method parameters to const ICairoShim& - Removed unnecessary cairoShimCairo.h include from item.cc - Added ICairoShim.h include to wire.h Co-authored-by: highperformancecoder <3075825+highperformancecoder@users.noreply.github.com>
1 parent 47e747f commit 10c746a

27 files changed

Lines changed: 172 additions & 176 deletions

engine/cairoShimCairo.cc

Lines changed: 43 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define CAIRO_WIN32_STATIC_BUILD
33
#include <cairo.h>
44
#undef CAIRO_WIN32_STATIC_BUILD
5+
#include <pango.h>
56

67
using namespace std;
78

@@ -12,127 +13,124 @@ namespace minsky
1213
CairoShimCairo::~CairoShimCairo() = default;
1314

1415
// Drawing operations
15-
void CairoShimCairo::moveTo(double x, double y)
16+
void CairoShimCairo::moveTo(double x, double y) const
1617
{cairo_move_to(cairo,x,y);}
1718

18-
void CairoShimCairo::lineTo(double x, double y)
19+
void CairoShimCairo::lineTo(double x, double y) const
1920
{cairo_line_to(cairo,x,y);}
2021

21-
void CairoShimCairo::relMoveTo(double x, double y)
22+
void CairoShimCairo::relMoveTo(double x, double y) const
2223
{cairo_rel_move_to(cairo,x,y);}
2324

24-
void CairoShimCairo::relLineTo(double x, double y)
25+
void CairoShimCairo::relLineTo(double x, double y) const
2526
{cairo_rel_line_to(cairo,x,y);}
2627

27-
void CairoShimCairo::arc(double x, double y, double radius, double start, double end)
28+
void CairoShimCairo::arc(double x, double y, double radius, double start, double end) const
2829
{cairo_arc(cairo,x,y,radius,start,end);}
2930

30-
void CairoShimCairo::curveTo(double x1, double y1, double x2, double y2, double x3, double y3)
31+
void CairoShimCairo::curveTo(double x1, double y1, double x2, double y2, double x3, double y3) const
3132
{cairo_curve_to(cairo,x1,y1,x2,y2,x3,y3);}
3233

33-
void CairoShimCairo::rectangle(double x, double y, double width, double height)
34+
void CairoShimCairo::rectangle(double x, double y, double width, double height) const
3435
{cairo_rectangle(cairo,x,y,width,height);}
3536

3637
// Path operations
37-
void CairoShimCairo::newPath()
38+
void CairoShimCairo::newPath() const
3839
{cairo_new_path(cairo);}
3940

40-
void CairoShimCairo::newSubPath()
41+
void CairoShimCairo::newSubPath() const
4142
{cairo_new_sub_path(cairo);}
4243

43-
void CairoShimCairo::closePath()
44+
void CairoShimCairo::closePath() const
4445
{cairo_close_path(cairo);}
4546

46-
void CairoShimCairo::getCurrentPoint(double& x, double& y)
47+
void CairoShimCairo::getCurrentPoint(double& x, double& y) const
4748
{cairo_get_current_point(cairo, &x, &y);}
4849

4950
// Fill and stroke operations
50-
void CairoShimCairo::fill()
51+
void CairoShimCairo::fill() const
5152
{cairo_fill(cairo);}
5253

53-
void CairoShimCairo::fillPreserve()
54+
void CairoShimCairo::fillPreserve() const
5455
{cairo_fill_preserve(cairo);}
5556

56-
void CairoShimCairo::clip()
57+
void CairoShimCairo::clip() const
5758
{cairo_clip(cairo);}
5859

59-
void CairoShimCairo::resetClip()
60+
void CairoShimCairo::resetClip() const
6061
{cairo_reset_clip(cairo);}
6162

62-
void CairoShimCairo::stroke()
63+
void CairoShimCairo::stroke() const
6364
{cairo_stroke(cairo);}
6465

65-
void CairoShimCairo::strokePreserve()
66+
void CairoShimCairo::strokePreserve() const
6667
{cairo_stroke_preserve(cairo);}
6768

68-
void CairoShimCairo::paint()
69+
void CairoShimCairo::paint() const
6970
{cairo_paint(cairo);}
7071

7172
// Line properties
72-
void CairoShimCairo::setLineWidth(double w)
73+
void CairoShimCairo::setLineWidth(double w) const
7374
{cairo_set_line_width(cairo, w);}
7475

75-
double CairoShimCairo::getLineWidth()
76+
double CairoShimCairo::getLineWidth() const
7677
{return cairo_get_line_width(cairo);}
7778

78-
void CairoShimCairo::setDash(const double* dashes, int num_dashes, double offset)
79+
void CairoShimCairo::setDash(const double* dashes, int num_dashes, double offset) const
7980
{cairo_set_dash(cairo, dashes, num_dashes, offset);}
8081

81-
void CairoShimCairo::setFillRule(cairo_fill_rule_t fill_rule)
82+
void CairoShimCairo::setFillRule(cairo_fill_rule_t fill_rule) const
8283
{cairo_set_fill_rule(cairo, fill_rule);}
8384

8485
// Color operations
85-
void CairoShimCairo::setSourceRGB(double r, double g, double b)
86+
void CairoShimCairo::setSourceRGB(double r, double g, double b) const
8687
{cairo_set_source_rgb(cairo,r,g,b);}
8788

88-
void CairoShimCairo::setSourceRGBA(double r, double g, double b, double a)
89+
void CairoShimCairo::setSourceRGBA(double r, double g, double b, double a) const
8990
{cairo_set_source_rgba(cairo,r,g,b,a);}
9091

9192
// Text operations
92-
void CairoShimCairo::showText(const std::string& text)
93+
void CairoShimCairo::showText(const std::string& text) const
9394
{cairo_show_text(cairo,text.c_str());}
9495

95-
void CairoShimCairo::setFontSize(double size)
96+
void CairoShimCairo::setFontSize(double size) const
9697
{cairo_set_font_size(cairo, size);}
9798

98-
void CairoShimCairo::textExtents(const std::string& text, cairo_text_extents_t& extents)
99+
void CairoShimCairo::textExtents(const std::string& text, cairo_text_extents_t& extents) const
99100
{cairo_text_extents(cairo,text.c_str(),&extents);}
100101

101102
// Transformation operations
102-
void CairoShimCairo::identityMatrix()
103+
void CairoShimCairo::identityMatrix() const
103104
{cairo_identity_matrix(cairo);}
104105

105-
void CairoShimCairo::translate(double x, double y)
106+
void CairoShimCairo::translate(double x, double y) const
106107
{cairo_translate(cairo,x,y);}
107108

108-
void CairoShimCairo::scale(double sx, double sy)
109+
void CairoShimCairo::scale(double sx, double sy) const
109110
{cairo_scale(cairo,sx,sy);}
110111

111-
void CairoShimCairo::rotate(double angle)
112+
void CairoShimCairo::rotate(double angle) const
112113
{cairo_rotate(cairo,angle);}
113114

114-
void CairoShimCairo::userToDevice(double& x, double& y)
115+
void CairoShimCairo::userToDevice(double& x, double& y) const
115116
{cairo_user_to_device(cairo, &x, &y);}
116117

117118
// Context state operations
118-
void CairoShimCairo::save()
119+
void CairoShimCairo::save() const
119120
{cairo_save(cairo);}
120121

121-
void CairoShimCairo::restore()
122+
void CairoShimCairo::restore() const
122123
{cairo_restore(cairo);}
123124

124125
// Tolerance
125-
void CairoShimCairo::setTolerance(double tolerance)
126+
void CairoShimCairo::setTolerance(double tolerance) const
126127
{cairo_set_tolerance(cairo, tolerance);}
127128

128-
// Path query
129-
cairo_path_t* CairoShimCairo::copyPathFlat()
130-
{return cairo_copy_path_flat(cairo);}
131-
132-
void CairoShimCairo::pathDestroy(cairo_path_t* path)
133-
{cairo_path_destroy(path);}
134-
135-
// Access to underlying cairo_t*
136-
cairo_t* CairoShimCairo::cairoContext()
137-
{return cairo;}
129+
// Pango support
130+
ecolab::Pango& CairoShimCairo::pango() const
131+
{
132+
if (!m_pango)
133+
m_pango.reset(new ecolab::Pango(cairo));
134+
return *m_pango;
135+
}
138136
}

engine/cairoShimCairo.h

Lines changed: 43 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,78 +2,79 @@
22
#define CAIROSHIMCAIRO_H
33
#include "../model/ICairoShim.h"
44
#include <cairo.h>
5+
#include <pango.h>
6+
#include <memory>
7+
8+
namespace ecolab { class Pango; }
59

610
namespace minsky
711
{
812
/// Concrete implementation of ICairoShim using actual Cairo library
913
class CairoShimCairo: public ICairoShim
1014
{
11-
cairo_t* cairo;
15+
cairo_t* cairo;
16+
mutable std::unique_ptr<ecolab::Pango> m_pango;
1217
CairoShimCairo(const CairoShimCairo&)=delete;
1318
void operator=(const CairoShimCairo&)=delete;
1419
public:
1520
CairoShimCairo(cairo_t* c);
1621
~CairoShimCairo() override;
1722

1823
// Drawing operations
19-
void moveTo(double x, double y) override;
20-
void lineTo(double x, double y) override;
21-
void relMoveTo(double x, double y) override;
22-
void relLineTo(double x, double y) override;
23-
void arc(double x, double y, double radius, double start, double end) override;
24-
void curveTo(double x1, double y1, double x2, double y2, double x3, double y3) override;
25-
void rectangle(double x, double y, double width, double height) override;
24+
void moveTo(double x, double y) const override;
25+
void lineTo(double x, double y) const override;
26+
void relMoveTo(double x, double y) const override;
27+
void relLineTo(double x, double y) const override;
28+
void arc(double x, double y, double radius, double start, double end) const override;
29+
void curveTo(double x1, double y1, double x2, double y2, double x3, double y3) const override;
30+
void rectangle(double x, double y, double width, double height) const override;
2631

2732
// Path operations
28-
void newPath() override;
29-
void newSubPath() override;
30-
void closePath() override;
31-
void getCurrentPoint(double& x, double& y) override;
33+
void newPath() const override;
34+
void newSubPath() const override;
35+
void closePath() const override;
36+
void getCurrentPoint(double& x, double& y) const override;
3237

3338
// Fill and stroke operations
34-
void fill() override;
35-
void fillPreserve() override;
36-
void stroke() override;
37-
void strokePreserve() override;
38-
void clip() override;
39-
void resetClip() override;
40-
void paint() override;
39+
void fill() const override;
40+
void fillPreserve() const override;
41+
void stroke() const override;
42+
void strokePreserve() const override;
43+
void clip() const override;
44+
void resetClip() const override;
45+
void paint() const override;
4146

4247
// Line properties
43-
void setLineWidth(double width) override;
44-
double getLineWidth() override;
45-
void setDash(const double* dashes, int num_dashes, double offset) override;
46-
void setFillRule(cairo_fill_rule_t fill_rule) override;
48+
void setLineWidth(double width) const override;
49+
double getLineWidth() const override;
50+
void setDash(const double* dashes, int num_dashes, double offset) const override;
51+
void setFillRule(cairo_fill_rule_t fill_rule) const override;
4752

4853
// Color operations
49-
void setSourceRGB(double r, double g, double b) override;
50-
void setSourceRGBA(double r, double g, double b, double a) override;
54+
void setSourceRGB(double r, double g, double b) const override;
55+
void setSourceRGBA(double r, double g, double b, double a) const override;
5156

5257
// Text operations
53-
void showText(const std::string& text) override;
54-
void setFontSize(double size) override;
55-
void textExtents(const std::string& text, cairo_text_extents_t& extents) override;
58+
void showText(const std::string& text) const override;
59+
void setFontSize(double size) const override;
60+
void textExtents(const std::string& text, cairo_text_extents_t& extents) const override;
5661

5762
// Transformation operations
58-
void identityMatrix() override;
59-
void translate(double x, double y) override;
60-
void scale(double sx, double sy) override;
61-
void rotate(double angle) override;
62-
void userToDevice(double& x, double& y) override;
63+
void identityMatrix() const override;
64+
void translate(double x, double y) const override;
65+
void scale(double sx, double sy) const override;
66+
void rotate(double angle) const override;
67+
void userToDevice(double& x, double& y) const override;
6368

6469
// Context state operations
65-
void save() override;
66-
void restore() override;
70+
void save() const override;
71+
void restore() const override;
6772

6873
// Tolerance
69-
void setTolerance(double tolerance) override;
70-
71-
// Path query
72-
cairo_path_t* copyPathFlat() override;
73-
void pathDestroy(cairo_path_t* path) override;
74+
void setTolerance(double tolerance) const override;
7475

75-
// Access to underlying cairo_t* for legacy code
76-
cairo_t* cairoContext() override;
76+
// Pango support
77+
ecolab::Pango& pango() const override;
7778
};
7879

7980
}

0 commit comments

Comments
 (0)