Mercurial > hg > pub > prymula > com
comparison DPF-Prymula-audioplugins/dpf/dgl/Cairo.hpp @ 3:84e66ea83026
DPF-Prymula-audioplugins-0.231015-2
author | prymula <prymula76@outlook.com> |
---|---|
date | Mon, 16 Oct 2023 21:53:34 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:cf2cb71d31dd | 3:84e66ea83026 |
---|---|
1 /* | |
2 * DISTRHO Plugin Framework (DPF) | |
3 * Copyright (C) 2012-2022 Filipe Coelho <falktx@falktx.com> | |
4 * | |
5 * Permission to use, copy, modify, and/or distribute this software for any purpose with | |
6 * or without fee is hereby granted, provided that the above copyright notice and this | |
7 * permission notice appear in all copies. | |
8 * | |
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |
10 * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |
11 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |
12 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |
13 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |
14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
15 */ | |
16 | |
17 #ifndef DGL_CAIRO_HPP_INCLUDED | |
18 #define DGL_CAIRO_HPP_INCLUDED | |
19 | |
20 #include "ImageBase.hpp" | |
21 #include "ImageBaseWidgets.hpp" | |
22 | |
23 #include <cairo.h> | |
24 | |
25 START_NAMESPACE_DGL | |
26 | |
27 // -------------------------------------------------------------------------------------------------------------------- | |
28 | |
29 /** | |
30 Cairo Graphics context. | |
31 */ | |
32 struct CairoGraphicsContext : GraphicsContext | |
33 { | |
34 cairo_t* handle; | |
35 }; | |
36 | |
37 // -------------------------------------------------------------------------------------------------------------------- | |
38 | |
39 /** | |
40 Cairo Image class. | |
41 | |
42 TODO ... | |
43 */ | |
44 class CairoImage : public ImageBase | |
45 { | |
46 public: | |
47 /** | |
48 Constructor for a null Image. | |
49 */ | |
50 CairoImage(); | |
51 | |
52 /** | |
53 Constructor using raw image data. | |
54 @note @a rawData must remain valid for the lifetime of this Image. | |
55 */ | |
56 CairoImage(const char* rawData, uint width, uint height, ImageFormat format); | |
57 | |
58 /** | |
59 Constructor using raw image data. | |
60 @note @a rawData must remain valid for the lifetime of this Image. | |
61 */ | |
62 CairoImage(const char* rawData, const Size<uint>& size, ImageFormat format); | |
63 | |
64 /** | |
65 Constructor using another image data. | |
66 */ | |
67 CairoImage(const CairoImage& image); | |
68 | |
69 /** | |
70 Destructor. | |
71 */ | |
72 ~CairoImage() override; | |
73 | |
74 /** | |
75 Load raw image data from memory. | |
76 @note @a rawData must remain valid for the lifetime of this Image. | |
77 */ | |
78 void loadFromMemory(const char* rawData, | |
79 const Size<uint>& size, | |
80 ImageFormat format = kImageFormatBGRA) noexcept override; | |
81 | |
82 /** | |
83 Load PNG image from memory. | |
84 Image size is read from PNG contents. | |
85 @note @a pngData must remain valid for the lifetime of this Image. | |
86 */ | |
87 void loadFromPNG(const char* pngData, uint dataSize) noexcept; | |
88 | |
89 /** | |
90 Draw this image at position @a pos using the graphics context @a context. | |
91 */ | |
92 void drawAt(const GraphicsContext& context, const Point<int>& pos) override; | |
93 | |
94 /** | |
95 Get the cairo surface currently associated with this image. | |
96 FIXME might be removed | |
97 */ | |
98 inline cairo_surface_t* getSurface() const noexcept | |
99 { | |
100 return surface; | |
101 } | |
102 | |
103 /** | |
104 TODO document this. | |
105 */ | |
106 CairoImage& operator=(const CairoImage& image) noexcept; | |
107 | |
108 // FIXME this should not be needed | |
109 inline void loadFromMemory(const char* rdata, uint w, uint h, ImageFormat fmt = kImageFormatBGRA) | |
110 { loadFromMemory(rdata, Size<uint>(w, h), fmt); }; | |
111 inline void draw(const GraphicsContext& context) | |
112 { drawAt(context, Point<int>(0, 0)); }; | |
113 inline void drawAt(const GraphicsContext& context, int x, int y) | |
114 { drawAt(context, Point<int>(x, y)); }; | |
115 | |
116 private: | |
117 cairo_surface_t* surface; | |
118 uchar* surfacedata; | |
119 int* datarefcount; | |
120 }; | |
121 | |
122 // -------------------------------------------------------------------------------------------------------------------- | |
123 | |
124 /** | |
125 CairoWidget, handy class that takes graphics context during onDisplay and passes it in a new function. | |
126 */ | |
127 template <class BaseWidget> | |
128 class CairoBaseWidget : public BaseWidget | |
129 { | |
130 public: | |
131 /** | |
132 Constructor for a CairoSubWidget. | |
133 */ | |
134 explicit CairoBaseWidget(Widget* const parentGroupWidget); | |
135 | |
136 /** | |
137 Constructor for a CairoTopLevelWidget. | |
138 */ | |
139 explicit CairoBaseWidget(Window& windowToMapTo); | |
140 | |
141 /** | |
142 Constructor for a CairoStandaloneWindow without parent window. | |
143 */ | |
144 explicit CairoBaseWidget(Application& app); | |
145 | |
146 /** | |
147 Constructor for a CairoStandaloneWindow with parent window. | |
148 */ | |
149 explicit CairoBaseWidget(Application& app, Window& parentWindow); | |
150 | |
151 /** | |
152 Destructor. | |
153 */ | |
154 ~CairoBaseWidget() override {} | |
155 | |
156 protected: | |
157 /** | |
158 New virtual onDisplay function. | |
159 @see onDisplay | |
160 */ | |
161 virtual void onCairoDisplay(const CairoGraphicsContext& context) = 0; | |
162 | |
163 private: | |
164 /** | |
165 Widget display function. | |
166 Implemented internally to pass context into the drawing function. | |
167 */ | |
168 void onDisplay() override | |
169 { | |
170 const CairoGraphicsContext& context((const CairoGraphicsContext&)BaseWidget::getGraphicsContext()); | |
171 onCairoDisplay(context); | |
172 } | |
173 | |
174 DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CairoBaseWidget); | |
175 }; | |
176 | |
177 typedef CairoBaseWidget<SubWidget> CairoSubWidget; | |
178 typedef CairoBaseWidget<TopLevelWidget> CairoTopLevelWidget; | |
179 typedef CairoBaseWidget<StandaloneWindow> CairoStandaloneWindow; | |
180 | |
181 // -------------------------------------------------------------------------------------------------------------------- | |
182 | |
183 typedef ImageBaseAboutWindow<CairoImage> CairoImageAboutWindow; | |
184 typedef ImageBaseButton<CairoImage> CairoImageButton; | |
185 typedef ImageBaseKnob<CairoImage> CairoImageKnob; | |
186 typedef ImageBaseSlider<CairoImage> CairoImageSlider; | |
187 typedef ImageBaseSwitch<CairoImage> CairoImageSwitch; | |
188 | |
189 // -------------------------------------------------------------------------------------------------------------------- | |
190 | |
191 END_NAMESPACE_DGL | |
192 | |
193 #endif |