Dusk Audio Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
dgl
Cairo.hpp
1
/*
2
* DISTRHO Plugin Framework (DPF)
3
* Copyright (C) 2012-2025 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
BaseW
id
get>
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() final
169
{
170
onCairoDisplay
(
static_cast<
const
CairoGraphicsContext
&
>
(BaseWidget::getGraphicsContext()));
171
}
172
173
DAF_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(
CairoBaseWidget
);
174
};
175
176
typedef
CairoBaseWidget<SubWidget>
CairoSubWidget;
177
typedef
CairoBaseWidget<TopLevelWidget>
CairoTopLevelWidget;
178
typedef
CairoBaseWidget<StandaloneWindow>
CairoStandaloneWindow;
179
180
// --------------------------------------------------------------------------------------------------------------------
181
182
typedef
ImageBaseAboutWindow<CairoImage>
CairoImageAboutWindow;
183
typedef
ImageBaseButton<CairoImage>
CairoImageButton;
184
typedef
ImageBaseKnob<CairoImage>
CairoImageKnob;
185
typedef
ImageBaseSlider<CairoImage>
CairoImageSlider;
186
typedef
ImageBaseSwitch<CairoImage>
CairoImageSwitch;
187
188
// --------------------------------------------------------------------------------------------------------------------
189
190
END_NAMESPACE_DGL
191
192
#endif
Application
Definition
Application.hpp:90
CairoBaseWidget
Definition
Cairo.hpp:129
CairoBaseWidget::CairoBaseWidget
CairoBaseWidget(Window &windowToMapTo)
CairoBaseWidget::CairoBaseWidget
CairoBaseWidget(Application &app)
CairoBaseWidget::CairoBaseWidget
CairoBaseWidget(Widget *const parentGroupWidget)
CairoBaseWidget::onCairoDisplay
virtual void onCairoDisplay(const CairoGraphicsContext &context)=0
CairoBaseWidget::~CairoBaseWidget
~CairoBaseWidget() override
Definition
Cairo.hpp:154
CairoBaseWidget::CairoBaseWidget
CairoBaseWidget(Application &app, Window &parentWindow)
CairoImage::getSurface
cairo_surface_t * getSurface() const noexcept
Definition
Cairo.hpp:98
CairoImage::CairoImage
CairoImage(const char *rawData, uint width, uint height, ImageFormat format)
CairoImage::~CairoImage
~CairoImage() override
CairoImage::loadFromMemory
void loadFromMemory(const char *rawData, const Size< uint > &size, ImageFormat format=kImageFormatBGRA) noexcept override
CairoImage::CairoImage
CairoImage(const CairoImage &image)
CairoImage::loadFromPNG
void loadFromPNG(const char *pngData, uint dataSize) noexcept
CairoImage::drawAt
void drawAt(const GraphicsContext &context, const Point< int > &pos) override
CairoImage::operator=
CairoImage & operator=(const CairoImage &image) noexcept
CairoImage::CairoImage
CairoImage(const char *rawData, const Size< uint > &size, ImageFormat format)
CairoImage::CairoImage
CairoImage()
ImageBaseAboutWindow
Definition
ImageBaseWidgets.hpp:40
ImageBaseButton
Definition
ImageBaseWidgets.hpp:86
ImageBaseKnob
Definition
ImageBaseWidgets.hpp:132
ImageBaseSlider
Definition
ImageBaseWidgets.hpp:173
ImageBaseSwitch
Definition
ImageBaseWidgets.hpp:225
ImageBase::ImageBase
ImageBase()
Point
Definition
Geometry.hpp:41
Size
Definition
Geometry.hpp:133
Window
Definition
Window.hpp:67
CairoGraphicsContext
Definition
Cairo.hpp:33
GraphicsContext
Definition
Base.hpp:287
Generated by
1.18.0