Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
CGraphicsCairo.hpp
Go to the documentation of this file.
1#ifndef LIBS_CAIRO_CGRAPHICSCAIRO_HPP_
2#define LIBS_CAIRO_CGRAPHICSCAIRO_HPP_
3
6
7#include <cairo/cairo.h>
8#include <memory>
9#include <pango/pango-layout.h>
10#include <unordered_map>
11
14
16{
17public:
18 struct SCairoImageLoaded;
19
20 static CGraphicsCairo *createImageData(uint64_t sizeX, uint64_t sizeY);
22 static CGraphicsCairo *createImageForScreen(iv::types::color colorRGBBackground);
23 static CGraphicsCairo *createWithSurface(_cairo_surface *surface, _cairo *cairo, iv::types::color colorBackground);
24
26 CGraphicsCairo(const CGraphicsCairo &other) = delete;
27 CGraphicsCairo(CGraphicsCairo &&other) = delete;
28 ~CGraphicsCairo() override;
29
30 CGraphicsCairo &operator=(const CGraphicsCairo &other) = delete;
32 bool operator==(const CGraphicsCairo &b) const;
33
34 float epsilon = static_cast<float>(0.000001);
35
36 void beginDraw(double sizeX, double sizeY);
37 void endDraw();
38 void update();
39
41 _cairo_surface *getSurface() const;
42
43 [[nodiscard]] bool isUpdate() const;
44
46 {
47 bool operator==(const SCairoImageLoaded &b) const;
48
49 std::string m_nameResource;
50 cairo_surface_t *m_surfaceRef;
51 };
52
53private:
54 enum class EPrvCairoType;
55
56 struct SPrvCairoLayer;
57 struct SPrvBlockText;
58
59 CGraphicsCairo(CGraphicsCairo::EPrvCairoType cairoType, iv::types::color colorRGBBackground, bool isCairoRef,
60 cairo_t *cairoOpt, cairo_surface_t *cairoSurfaceOpt);
61
62 void setBackGroundColor(iv::types::color rgb) override;
63 void setClearColor() override;
64 void initDevice() override;
65 void initLight() override;
66 void clear() override;
67 void defineMaterial(const iv::ui::graphics::Material *material, const bool &isChanged) override;
68
69 bool isDefinedMaterial(const std::string &materialName) override;
70
71 void pushMaterial() override;
72 void setMaterial(const std::string &materialName) override;
73 void popMaterial() override;
74 void setColorRGB(iv::types::color rgb) override;
75 void setColorARGB(iv::types::color argb) override;
76 void setLineWidth(float width) override;
77 void setAlpha(float alpha) override;
78 void resetAlpha() override;
79 void setOnTexture(bool enableTexture) override;
80 std::shared_ptr<iv::ui::graphics::Image> loadImage(const iv::ui::resources::ImageResource &resource) override;
81 void appendMatrix(const CMatrix4x4 &matrix) override;
82
83 void setModelMatrix(IGraphics::EMatrixModel matrixModel) override
84 {
85 }
86
87 void popTransformation() override;
88 void pushTransformation() override;
89 void resetTransformation() override;
90 void defineLight(IGraphics::ELight light, IGraphics::ELightType lightType, double rColor, double gColor,
91 double bColor) override;
92 void positionLight(IGraphics::ELight light, double x, double y, double z) override;
93 void viewport(int32_t x, int32_t y, uint64_t sizeX, uint64_t sizeY) override;
94 void definePerspective(double fovY, double ratioXForY, double zNear, double zFar) override;
95 void defineOrthogonal(double xOrg, double yOrg, double zOrg, double xMin, double yMin, double zMin, double xMax,
96 double yMax, double zMax) override;
97 void positionCamera(double eyeX, double eyeY, double eyeZ, double pointReferenceX, double pointReferenceY,
98 double pointReferenceZ, double upX, double upY, double upZ) override;
99 void rotation(double angleDegrees, double Ux, double Uy, double Uz) override;
100 void scale(double sx, double sy, double sz) override;
101 void setNormal(double Nx, double Ny, double Nz) override;
102 void translation(double tx, double ty, double tz) override;
103 void drawContours(const std::vector<std::shared_ptr<std::vector<iv::math::geometry::Point3d>>> &contours) override;
104
105 void drawFanTriangles(const float *points, const float *normals, const float *textureOpt, const float *rgbaOpt,
106 uint64_t numPoints, const uint32_t *indVertex, uint64_t numVertex) override;
107 void drawImage(double x, double y, double width, double height,
108 const iv::ui::resources::ImageResource &resource) override;
109 void drawImageRawSize(double x, double y, const iv::ui::resources::ImageResource &resource) override;
110 void drawImageWithColor(double x, double y, iv::types::color colorRGB, double width, double height,
111 const iv::ui::resources::ImageResource &resourceName) override;
112 void drawLine(double x1, double y1, double z1, double x2, double y2, double z2) override;
113 void drawLineWithStyle(double x1, double y1, double z1, double x2, double y2, double z2,
114 IGraphics::EDashedLineType dashedLineType) override;
115 void drawArc(double radiusMark, iv::types::radian angleInitial, iv::types::radian angleFinal, float thickness,
116 uint64_t kPrvNumPoints) override;
117 void drawPolyline(const float *vertex, uint64_t numVertex) override;
118 void drawPolylineFilled(const float *vertex, uint64_t numVertex) override;
119 void drawPolylinesWithColors(const std::shared_ptr<std::vector<iv::math::geometry::Point2d>> &points,
120 const std::vector<iv::math::geometry::Point3d> &rgb) override;
121 void drawQuads(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3,
122 double x4, double y4, double z4) override;
123 void drawRect(double x1, double y1, double x2, double y2) override;
124 void drawRectFilled(double x1, double y1, double x2, double y2) override;
125 void drawStripTriangles(const float *points, const float *normals, const float *textureOpt, const float *rgbaOpt,
126 uint64_t numPoints, const uint32_t *indVertex, uint64_t numVertex) override;
127 void drawText(const std::string &text, double x, double y, double height, unsigned char justify) override;
128 void drawTextWithDeviceHeight(const std::string &text, double x, double y, double height,
129 unsigned char justify) override;
130 void drawTriangle(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3,
131 double z3) override;
132 void drawTriangles(const float *points, const float *normals, const float *textureOpt, const float *rgbaOpt,
133 uint64_t numPoints, const uint32_t *indVertex, uint64_t numVertex) override;
134 void drawUnitCone(IGraphics::EDetailLevel detailLevel) override;
135 void drawUnitCube() override;
136 void drawUnitCylinder(IGraphics::EDetailLevel detailLevel) override;
137 void drawUnitDisk(IGraphics::EDetailLevel detailLevel) override;
138 void drawUnitSphere(IGraphics::EDetailLevel detailLevel) override;
139
140 [[nodiscard]] bool hasDrawPolylineFilled() const override;
141 void setModeDraw(IGraphics::EDrawSolidType drawSolidType) override;
142
143 uint32_t blockTextWithModifiers(const std::string &text, const iv::ui::TextModifier &textModifier,
144 double *widthText, double *heightTextOut) override;
145 void drawBlockText(uint32_t idBlockText, double x, double y, double widthText, double heightText,
146 unsigned char justify) override;
147 void endBlockText(uint32_t *idBlockText) override;
148 [[nodiscard]] bool hasBlockText() const override;
149 uint32_t beginBlock() override;
150 void drawBlock(uint32_t idBlock) override;
151 void endBlock(uint32_t idBlock) override;
152 [[nodiscard]] bool hasManagerBlocks() const override;
153 void removeBlock(uint32_t *idBlock) override;
154
155 void beginStencilBuffer() override;
156 void endStencilBuffer() override;
157 void offStencilBuffer() override;
158 void onStencilBuffer() override;
159
160 void getCoordTextCornerLeftDown(const std::string &text, double x, double y, double heightCharacter,
161 unsigned char justify, double *xCornerLeftDown, double *yCornerLeftDown,
162 double *widthTextOpt, double *heightTextOpt) override;
163 void getSizePixelToWorld(double sizePixelX, double sizePixelY, double *sizeWorldXOpt,
164 double *sizeWorldYOpt) override;
165 void getSizeText(const std::string &text, double heightCharacter, double *widthText, double *heightText) override;
166
167 void setBlend(bool isEnable) override;
168 void setTestDepth(bool isEnable) override;
169
170 void prvIntegrityGraphicsCairo() const;
172
177
178 std::vector<SPrvCairoLayer> m_layers;
179 std::unordered_map<std::string, SCairoImageLoaded> m_imageLoaded;
180 double m_alpha;
181
182 uint64_t m_idNewBlock;
183 std::vector<SPrvBlockText> m_blockTexts;
184
186 cairo_t *m_cairoOpt;
187 PangoLayout *m_pangoLayoutOpt;
190
192 cairo_surface_t *m_cairoSurfaceOpt;
194
195 enum class EPrvCairoType
196 {
197 Image,
198 ForMotion,
199 Screen
200 };
201
203 {
205 SPrvCairoLayer(const SPrvCairoLayer &other);
207 ~SPrvCairoLayer() = default;
208
209 SPrvCairoLayer &operator=(const SPrvCairoLayer &other) = delete;
211 bool operator==(const SPrvCairoLayer &b) const;
212
214 };
215
217 {
218 bool operator==(const SPrvBlockText &b) const;
219
220 uint32_t m_idBlock = UINT32_MAX;
221 float epsilon = static_cast<float>(0.000001);
222 std::string m_text;
223 double m_heightText = 0.;
224 };
225};
226
227#endif /* LIBS_CAIRO_CGRAPHICSCAIRO_HPP_ */
static constexpr uint64_t kPrvNumPoints
Definition CDrawShapes.cpp:16
Definition CFontManagerCairo.hpp:12
Definition CGraphicsCairo.hpp:16
void drawFanTriangles(const float *points, const float *normals, const float *textureOpt, const float *rgbaOpt, uint64_t numPoints, const uint32_t *indVertex, uint64_t numVertex) override
Definition CGraphicsCairo.cpp:1015
void setBackGroundColor(iv::types::color rgb) override
Definition CGraphicsCairo.cpp:1511
void positionCamera(double eyeX, double eyeY, double eyeZ, double pointReferenceX, double pointReferenceY, double pointReferenceZ, double upX, double upY, double upZ) override
Definition CGraphicsCairo.cpp:973
void resetTransformation() override
Definition CGraphicsCairo.cpp:940
static CGraphicsCairo * createImageData(uint64_t sizeX, uint64_t sizeY)
Definition CGraphicsCairo.cpp:541
void initLight() override
Definition CGraphicsCairo.cpp:752
void drawText(const std::string &text, double x, double y, double height, unsigned char justify) override
Definition CGraphicsCairo.cpp:1208
void setClearColor() override
Definition CGraphicsCairo.cpp:1515
static CGraphicsCairo * createImageForMotion()
Definition CGraphicsCairo.cpp:557
bool operator==(const CGraphicsCairo &b) const
Definition CGraphicsCairo.cpp:1499
void endStencilBuffer() override
Definition CGraphicsCairo.cpp:1416
double m_bBackground
Definition CGraphicsCairo.hpp:176
void setModelMatrix(IGraphics::EMatrixModel matrixModel) override
Definition CGraphicsCairo.hpp:83
void drawUnitCone(IGraphics::EDetailLevel detailLevel) override
Definition CGraphicsCairo.cpp:1262
void getSizeText(const std::string &text, double heightCharacter, double *widthText, double *heightText) override
Definition CGraphicsCairo.cpp:1481
std::vector< SPrvCairoLayer > m_layers
Definition CGraphicsCairo.hpp:178
void endBlockText(uint32_t *idBlockText) override
Definition CGraphicsCairo.cpp:1346
CGraphicsCairo & operator=(CGraphicsCairo &&other)=delete
void setLineWidth(float width) override
Definition CGraphicsCairo.cpp:876
bool m_isUpdated
Definition CGraphicsCairo.hpp:191
double m_rBackground
Definition CGraphicsCairo.hpp:174
void drawImage(double x, double y, double width, double height, const iv::ui::resources::ImageResource &resource) override
Definition CGraphicsCairo.cpp:1032
double m_alpha
Definition CGraphicsCairo.hpp:180
void setColorARGB(iv::types::color argb) override
Definition CGraphicsCairo.cpp:858
void offStencilBuffer() override
Definition CGraphicsCairo.cpp:1423
void setAlpha(float alpha) override
Definition CGraphicsCairo.cpp:883
void drawPolylineFilled(const float *vertex, uint64_t numVertex) override
Definition CGraphicsCairo.cpp:1119
bool hasDrawPolylineFilled() const override
Definition CGraphicsCairo.cpp:1287
void beginDraw(double sizeX, double sizeY)
Definition CGraphicsCairo.cpp:600
CGraphicsCairo & operator=(const CGraphicsCairo &other)=delete
bool hasManagerBlocks() const override
Definition CGraphicsCairo.cpp:1399
cairo_t * m_cairoOpt
Definition CGraphicsCairo.hpp:186
void pushTransformation() override
Definition CGraphicsCairo.cpp:934
cairo_surface_t * m_cairoSurfaceOpt
Definition CGraphicsCairo.hpp:192
float epsilon
Definition CGraphicsCairo.hpp:34
void setTestDepth(bool isEnable) override
Definition CGraphicsCairo.cpp:1494
void viewport(int32_t x, int32_t y, uint64_t sizeX, uint64_t sizeY) override
Definition CGraphicsCairo.cpp:957
std::shared_ptr< iv::ui::graphics::Image > loadImage(const iv::ui::resources::ImageResource &resource) override
Definition CGraphicsCairo.cpp:917
void beginStencilBuffer() override
Definition CGraphicsCairo.cpp:1409
void getSizePixelToWorld(double sizePixelX, double sizePixelY, double *sizeWorldXOpt, double *sizeWorldYOpt) override
Definition CGraphicsCairo.cpp:1465
void drawPolyline(const float *vertex, uint64_t numVertex) override
Definition CGraphicsCairo.cpp:1113
void update()
Definition CGraphicsCairo.cpp:665
uint32_t blockTextWithModifiers(const std::string &text, const iv::ui::TextModifier &textModifier, double *widthText, double *heightTextOut) override
Definition CGraphicsCairo.cpp:1302
void initDevice() override
Definition CGraphicsCairo.cpp:744
void pushMaterial() override
Definition CGraphicsCairo.cpp:808
void removeBlock(uint32_t *idBlock) override
Definition CGraphicsCairo.cpp:1404
void setNormal(double Nx, double Ny, double Nz) override
Definition CGraphicsCairo.cpp:990
bool isDefinedMaterial(const std::string &materialName) override
Definition CGraphicsCairo.cpp:791
void drawImageWithColor(double x, double y, iv::types::color colorRGB, double width, double height, const iv::ui::resources::ImageResource &resourceName) override
Definition CGraphicsCairo.cpp:1049
void scale(double sx, double sy, double sz) override
Definition CGraphicsCairo.cpp:984
void definePerspective(double fovY, double ratioXForY, double zNear, double zFar) override
Definition CGraphicsCairo.cpp:962
void drawArc(double radiusMark, iv::types::radian angleInitial, iv::types::radian angleFinal, float thickness, uint64_t kPrvNumPoints) override
Definition CGraphicsCairo.cpp:1099
void defineOrthogonal(double xOrg, double yOrg, double zOrg, double xMin, double yMin, double zMin, double xMax, double yMax, double zMax) override
Definition CGraphicsCairo.cpp:967
void drawTriangles(const float *points, const float *normals, const float *textureOpt, const float *rgbaOpt, uint64_t numPoints, const uint32_t *indVertex, uint64_t numVertex) override
Definition CGraphicsCairo.cpp:1245
void drawTextWithDeviceHeight(const std::string &text, double x, double y, double height, unsigned char justify) override
Definition CGraphicsCairo.cpp:1217
void drawRect(double x1, double y1, double x2, double y2) override
Definition CGraphicsCairo.cpp:1177
void drawPolylinesWithColors(const std::shared_ptr< std::vector< iv::math::geometry::Point2d > > &points, const std::vector< iv::math::geometry::Point3d > &rgb) override
Definition CGraphicsCairo.cpp:1125
void drawContours(const std::vector< std::shared_ptr< std::vector< iv::math::geometry::Point3d > > > &contours) override
Definition CGraphicsCairo.cpp:1002
uint64_t m_idNewBlock
Definition CGraphicsCairo.hpp:182
double m_gBackground
Definition CGraphicsCairo.hpp:175
void prvIntegrityGraphicsCairoWithSurface() const
Definition CGraphicsCairo.cpp:489
void setOnTexture(bool enableTexture) override
Definition CGraphicsCairo.cpp:913
void drawUnitCube() override
Definition CGraphicsCairo.cpp:1267
void drawImageRawSize(double x, double y, const iv::ui::resources::ImageResource &resource) override
Definition CGraphicsCairo.cpp:1041
_cairo_surface * getSurface() const
Definition CGraphicsCairo.cpp:694
static CGraphicsCairo * createImageForScreen(iv::types::color colorRGBBackground)
Definition CGraphicsCairo.cpp:562
std::unordered_map< std::string, SCairoImageLoaded > m_imageLoaded
Definition CGraphicsCairo.hpp:179
CStackTransformation * m_transformation
Definition CGraphicsCairo.hpp:193
CFontManagerCairo * m_managerFontOpt
Definition CGraphicsCairo.hpp:189
void drawStripTriangles(const float *points, const float *normals, const float *textureOpt, const float *rgbaOpt, uint64_t numPoints, const uint32_t *indVertex, uint64_t numVertex) override
Definition CGraphicsCairo.cpp:1191
bool m_isStencilBufferActive
Definition CGraphicsCairo.hpp:188
bool m_isCairoRef
Definition CGraphicsCairo.hpp:185
void translation(double tx, double ty, double tz) override
Definition CGraphicsCairo.cpp:996
void drawBlock(uint32_t idBlock) override
Definition CGraphicsCairo.cpp:1389
void popMaterial() override
Definition CGraphicsCairo.cpp:844
uint32_t beginBlock() override
Definition CGraphicsCairo.cpp:1384
void onStencilBuffer() override
Definition CGraphicsCairo.cpp:1429
void appendMatrix(const CMatrix4x4 &matrix) override
Definition CGraphicsCairo.cpp:923
void endDraw()
Definition CGraphicsCairo.cpp:659
void drawUnitCylinder(IGraphics::EDetailLevel detailLevel) override
Definition CGraphicsCairo.cpp:1272
PangoLayout * m_pangoLayoutOpt
Definition CGraphicsCairo.hpp:187
void setModeDraw(IGraphics::EDrawSolidType drawSolidType) override
Definition CGraphicsCairo.cpp:1297
void drawQuads(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3, double x4, double y4, double z4) override
Definition CGraphicsCairo.cpp:1149
bool isUpdate() const
Definition CGraphicsCairo.cpp:713
void popTransformation() override
Definition CGraphicsCairo.cpp:928
void setMaterial(const std::string &materialName) override
Definition CGraphicsCairo.cpp:814
void drawRectFilled(double x1, double y1, double x2, double y2) override
Definition CGraphicsCairo.cpp:1184
void prvIntegrityGraphicsCairo() const
Definition CGraphicsCairo.cpp:484
CGraphicsCairo()
Definition CGraphicsCairo.cpp:523
void drawBlockText(uint32_t idBlockText, double x, double y, double widthText, double heightText, unsigned char justify) override
Definition CGraphicsCairo.cpp:1323
void getCoordTextCornerLeftDown(const std::string &text, double x, double y, double heightCharacter, unsigned char justify, double *xCornerLeftDown, double *yCornerLeftDown, double *widthTextOpt, double *heightTextOpt) override
Definition CGraphicsCairo.cpp:1436
void defineMaterial(const iv::ui::graphics::Material *material, const bool &isChanged) override
Definition CGraphicsCairo.cpp:762
void setBlend(bool isEnable) override
Definition CGraphicsCairo.cpp:1489
bool hasBlockText() const override
Definition CGraphicsCairo.cpp:1379
EPrvCairoType
Definition CGraphicsCairo.hpp:196
static CGraphicsCairo * createWithSurface(_cairo_surface *surface, _cairo *cairo, iv::types::color colorBackground)
Definition CGraphicsCairo.cpp:567
void drawLine(double x1, double y1, double z1, double x2, double y2, double z2) override
Definition CGraphicsCairo.cpp:1058
void clear() override
Definition CGraphicsCairo.cpp:757
~CGraphicsCairo() override
Definition CGraphicsCairo.cpp:573
void drawUnitDisk(IGraphics::EDetailLevel detailLevel) override
Definition CGraphicsCairo.cpp:1277
void rotation(double angleDegrees, double Ux, double Uy, double Uz) override
Definition CGraphicsCairo.cpp:979
void drawLineWithStyle(double x1, double y1, double z1, double x2, double y2, double z2, IGraphics::EDashedLineType dashedLineType) override
Definition CGraphicsCairo.cpp:1076
void setColorRGB(iv::types::color rgb) override
Definition CGraphicsCairo.cpp:850
void drawTriangle(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3) override
Definition CGraphicsCairo.cpp:1226
void defineLight(IGraphics::ELight light, IGraphics::ELightType lightType, double rColor, double gColor, double bColor) override
Definition CGraphicsCairo.cpp:946
CGraphicsCairo(CGraphicsCairo &&other)=delete
std::vector< SPrvBlockText > m_blockTexts
Definition CGraphicsCairo.hpp:183
void resetAlpha() override
Definition CGraphicsCairo.cpp:898
CGraphicsCairo(const CGraphicsCairo &other)=delete
void endBlock(uint32_t idBlock) override
Definition CGraphicsCairo.cpp:1394
EPrvCairoType m_cairoType
Definition CGraphicsCairo.hpp:173
void drawUnitSphere(IGraphics::EDetailLevel detailLevel) override
Definition CGraphicsCairo.cpp:1282
iv::ui::graphics::Image * getImage()
Definition CGraphicsCairo.cpp:671
void positionLight(IGraphics::ELight light, double x, double y, double z) override
Definition CGraphicsCairo.cpp:952
Definition CMatrix4x4.hpp:23
Definition CStackTransformation.hpp:7
Definition IGraphics.hpp:20
EDetailLevel
Definition IGraphics.hpp:29
ELight
Definition IGraphics.hpp:44
EDashedLineType
Definition IGraphics.hpp:23
EMatrixModel
Definition IGraphics.hpp:57
ELightType
Definition IGraphics.hpp:50
EDrawSolidType
Definition IGraphics.hpp:37
Definition Image.hpp:12
Definition Material.hpp:49
Definition ImageResource.hpp:15
double radian
Definition types.hpp:19
uint32_t color
Definition types.hpp:12
Definition CGraphicsCairo.hpp:46
cairo_surface_t * m_surfaceRef
Definition CGraphicsCairo.hpp:50
std::string m_nameResource
Definition CGraphicsCairo.hpp:49
bool operator==(const SCairoImageLoaded &b) const
Definition CGraphicsCairo.cpp:719
Definition CGraphicsCairo.hpp:217
bool operator==(const SPrvBlockText &b) const
Definition CGraphicsCairo.cpp:739
float epsilon
Definition CGraphicsCairo.hpp:221
std::string m_text
Definition CGraphicsCairo.hpp:222
uint32_t m_idBlock
Definition CGraphicsCairo.hpp:220
double m_heightText
Definition CGraphicsCairo.hpp:223
Definition CGraphicsCairo.hpp:203
SPrvCairoLayer(SPrvCairoLayer &&other)=delete
iv::ui::graphics::Material * m_material
Definition CGraphicsCairo.hpp:213
SPrvCairoLayer()
Definition CGraphicsCairo.cpp:724
bool operator==(const SPrvCairoLayer &b) const
Definition CGraphicsCairo.cpp:734
SPrvCairoLayer & operator=(SPrvCairoLayer &&other)=delete
SPrvCairoLayer & operator=(const SPrvCairoLayer &other)=delete
Definition modifiers.hpp:15