libpromeki main
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
paintengine.h
Go to the documentation of this file.
1
8#pragma once
12#include <promeki/core/list.h>
13#include <promeki/core/size2d.h>
14#include <promeki/core/point.h>
15#include <promeki/core/line.h>
16#include <promeki/core/rect.h>
17
19
20class Image;
21
31 public:
34
37
40
43
51 class Impl {
53 public:
55 virtual ~Impl();
56
61 const PixelFormat *pixelFormat() const { return _pixelFormat; }
62
71 virtual bool blit(const Point2Di32 &destTopLeft, const Image &src,
72 const Point2Di32 &srcTopLeft, const Size2Du32 &srcSize) const;
73
86 virtual Pixel createPixel(const uint16_t *comps, size_t compCount) const;
87
95 virtual size_t drawPoints(const Pixel &pixel, const Point2Di32 *points, size_t pointCount) const;
96
110 virtual size_t compositePoints(const Pixel &pixel, const Point2Di32 *points,
111 const float *alphas, size_t pointCount) const;
112
118 virtual bool fill(const Pixel &pixel) const;
119
132 virtual size_t drawLines(const Pixel &pixel, const Line2Di32 *lines, size_t count) const;
133
144 virtual size_t drawRect(const Pixel &pixel, const Rect<int32_t> &rect) const;
145
155 virtual size_t fillRect(const Pixel &pixel, const Rect<int32_t> &rect) const;
156
167 virtual size_t drawCircle(const Pixel &pixel, const Point2Di32 &center, int radius) const;
168
180 virtual size_t fillCircle(const Pixel &pixel, const Point2Di32 &center, int radius) const;
181
192 virtual size_t drawEllipse(const Pixel &pixel, const Point2Di32 &center, const Size2Du32 &size) const;
193
205 virtual size_t fillEllipse(const Pixel &pixel, const Point2Di32 &center, const Size2Du32 &size) const;
206
207 protected:
209 const PixelFormat *_pixelFormat = nullptr;
210 };
211
220 static PointList plotLine(int x1, int y1, int x2, int y2);
221
223 PaintEngine() : d(SharedPtr<Impl, false>::create()) {};
224
229 PaintEngine(Impl *impl) : d(SharedPtr<Impl, false>::takeOwnership(impl)) {}
230
235 const PixelFormat *pixelFormat() const {
236 return d->pixelFormat();
237 }
238
245 Pixel createPixel(const uint16_t *comps, size_t compCount) const {
246 return d->createPixel(comps, compCount);
247 }
248
255 return d->createPixel(&c1, 1);
256 }
257
265 uint16_t data[] = { c1, c2 };
266 return d->createPixel(data, 2);
267 }
268
277 uint16_t data[] = { c1, c2, c3 };
278 return d->createPixel(data, 3);
279 }
280
290 uint16_t data[] = { c1, c2, c3, c4 };
291 return d->createPixel(data, 4);
292 }
293
301 size_t drawPoints(const Pixel &pixel, const Point2Di32 *points, size_t pointCount) const {
302 return d->drawPoints(pixel, points, pointCount);
303 }
304
311 size_t drawPoints(const Pixel &pixel, const PointList &points) const {
312 return d->drawPoints(pixel, points.data(), points.size());
313 }
314
323 size_t compositePoints(const Pixel &pixel, const Point2Di32 *points, const float *alphas, size_t pointCount) const {
324 return d->compositePoints(pixel, points, alphas, pointCount);
325 }
326
334 size_t compositePoints(const Pixel &pixel, const PointList &points, const AlphaList &alphas) const {
335 return d->compositePoints(pixel, points.data(), alphas.data(), points.size());
336 }
337
345 size_t drawLines(const Pixel &pixel, const Line2Di32 *lines, size_t lineCount) const {
346 return d->drawLines(pixel, lines, lineCount);
347 }
348
355 size_t drawLine(const Pixel &pixel, const Line2Di32 &line) const {
356 return d->drawLines(pixel, &line, 1);
357 }
358
368 size_t drawLine(const Pixel &pixel, int x1, int y1, int x2, int y2) const {
370 return d->drawLines(pixel, &line, 1);
371 }
372
378 bool fill(const Pixel &pixel) {
379 return d->fill(pixel);
380 }
381
388 size_t drawRect(const Pixel &pixel, const Rect<int32_t> &rect) const {
389 return d->drawRect(pixel, rect);
390 }
391
398 size_t fillRect(const Pixel &pixel, const Rect<int32_t> &rect) const {
399 return d->fillRect(pixel, rect);
400 }
401
409 size_t drawCircle(const Pixel &pixel, const Point2Di32 &center, int radius) const {
410 return d->drawCircle(pixel, center, radius);
411 }
412
420 size_t fillCircle(const Pixel &pixel, const Point2Di32 &center, int radius) const {
421 return d->fillCircle(pixel, center, radius);
422 }
423
431 size_t drawEllipse(const Pixel &pixel, const Point2Di32 &center, const Size2Du32 &size) const {
432 return d->drawEllipse(pixel, center, size);
433 }
434
442 size_t fillEllipse(const Pixel &pixel, const Point2Di32 &center, const Size2Du32 &size) const {
443 return d->fillEllipse(pixel, center, size);
444 }
445
454 bool blit(const Point2Di32 &destTopLeft, const Image &src,
455 const Point2Di32 &srcTopLeft = Point2Di32(0, 0), const Size2Du32 &srcSize = Size2Du32()) const {
456 return d->blit(destTopLeft, src, srcTopLeft, srcSize);
457 }
458
459
460 private:
462};
463
465
Raster image with pixel format, planes, and metadata.
Definition image.h:48
Dynamic array container wrapping std::vector.
Definition list.h:40
size_t size() const noexcept
Returns the number of elements in the list.
Definition list.h:301
T * data() noexcept
Returns a pointer to the underlying contiguous storage.
Definition list.h:286
Abstract implementation backend for PaintEngine.
Definition paintengine.h:51
virtual bool fill(const Pixel &pixel) const
Fills the entire surface with a single pixel value.
virtual size_t drawRect(const Pixel &pixel, const Rect< int32_t > &rect) const
Draws a rectangle outline.
virtual size_t drawLines(const Pixel &pixel, const Line2Di32 *lines, size_t count) const
Draws a set of line segments onto the surface.
const PixelFormat * pixelFormat() const
Returns the pixel format used by this implementation.
Definition paintengine.h:61
const PixelFormat * _pixelFormat
Pixel format for this implementation.
Definition paintengine.h:209
virtual bool blit(const Point2Di32 &destTopLeft, const Image &src, const Point2Di32 &srcTopLeft, const Size2Du32 &srcSize) const
Blits a rectangular region from a source image onto the surface.
virtual size_t drawEllipse(const Pixel &pixel, const Point2Di32 &center, const Size2Du32 &size) const
Draws an ellipse outline.
virtual Pixel createPixel(const uint16_t *comps, size_t compCount) const
Creates a Pixel value from component values.
virtual size_t drawPoints(const Pixel &pixel, const Point2Di32 *points, size_t pointCount) const
Draws a set of points onto the surface.
virtual size_t fillRect(const Pixel &pixel, const Rect< int32_t > &rect) const
Fills a rectangle with a solid color.
virtual size_t compositePoints(const Pixel &pixel, const Point2Di32 *points, const float *alphas, size_t pointCount) const
Composites a set of points onto the surface with per-point alpha.
virtual ~Impl()
Virtual destructor.
virtual size_t fillEllipse(const Pixel &pixel, const Point2Di32 &center, const Size2Du32 &size) const
Fills an ellipse with a solid color.
virtual size_t drawCircle(const Pixel &pixel, const Point2Di32 &center, int radius) const
Draws a circle outline.
virtual size_t fillCircle(const Pixel &pixel, const Point2Di32 &center, int radius) const
Fills a circle with a solid color.
2D drawing engine for rendering primitives onto images.
Definition paintengine.h:30
size_t fillCircle(const Pixel &pixel, const Point2Di32 &center, int radius) const
Fills a circle with a solid color.
Definition paintengine.h:420
Pixel createPixel(const uint16_t *comps, size_t compCount) const
Creates a Pixel from an array of component values.
Definition paintengine.h:245
size_t compositePoints(const Pixel &pixel, const PointList &points, const AlphaList &alphas) const
Composites points from lists onto the surface with per-point alpha.
Definition paintengine.h:334
PaintEngine(Impl *impl)
Constructs a PaintEngine that takes ownership of the given Impl.
Definition paintengine.h:229
Pixel createPixel(uint16_t c1, uint16_t c2, uint16_t c3, uint16_t c4) const
Creates a Pixel from four component values.
Definition paintengine.h:289
size_t drawRect(const Pixel &pixel, const Rect< int32_t > &rect) const
Draws a rectangle outline.
Definition paintengine.h:388
size_t drawLine(const Pixel &pixel, const Line2Di32 &line) const
Draws a single line segment onto the surface.
Definition paintengine.h:355
size_t fillEllipse(const Pixel &pixel, const Point2Di32 &center, const Size2Du32 &size) const
Fills an ellipse with a solid color.
Definition paintengine.h:442
Pixel createPixel(uint16_t c1, uint16_t c2) const
Creates a Pixel from two component values.
Definition paintengine.h:264
size_t drawPoints(const Pixel &pixel, const PointList &points) const
Draws points from a PointList onto the surface.
Definition paintengine.h:311
Pixel createPixel(uint16_t c1, uint16_t c2, uint16_t c3) const
Creates a Pixel from three component values.
Definition paintengine.h:276
size_t drawPoints(const Pixel &pixel, const Point2Di32 *points, size_t pointCount) const
Draws points onto the surface.
Definition paintengine.h:301
const PixelFormat * pixelFormat() const
Returns the pixel format of the underlying implementation.
Definition paintengine.h:235
size_t compositePoints(const Pixel &pixel, const Point2Di32 *points, const float *alphas, size_t pointCount) const
Composites points onto the surface with per-point alpha.
Definition paintengine.h:323
Pixel createPixel(uint16_t c1) const
Creates a Pixel from a single component value.
Definition paintengine.h:254
size_t drawLine(const Pixel &pixel, int x1, int y1, int x2, int y2) const
Draws a single line segment specified by endpoint coordinates.
Definition paintengine.h:368
size_t drawCircle(const Pixel &pixel, const Point2Di32 &center, int radius) const
Draws a circle outline.
Definition paintengine.h:409
bool fill(const Pixel &pixel)
Fills the entire surface with a single pixel value.
Definition paintengine.h:378
size_t fillRect(const Pixel &pixel, const Rect< int32_t > &rect) const
Fills a rectangle with a solid color.
Definition paintengine.h:398
size_t drawLines(const Pixel &pixel, const Line2Di32 *lines, size_t lineCount) const
Draws multiple line segments onto the surface.
Definition paintengine.h:345
static PointList plotLine(int x1, int y1, int x2, int y2)
Plots a line using Bresenham's algorithm.
PaintEngine()
Constructs a PaintEngine with a default (no-op) implementation.
Definition paintengine.h:223
size_t drawEllipse(const Pixel &pixel, const Point2Di32 &center, const Size2Du32 &size) const
Draws an ellipse outline.
Definition paintengine.h:431
bool blit(const Point2Di32 &destTopLeft, const Image &src, const Point2Di32 &srcTopLeft=Point2Di32(0, 0), const Size2Du32 &srcSize=Size2Du32()) const
Blits a rectangular region from a source image onto the surface.
Definition paintengine.h:454
Describes a pixel packing format and provides format-specific operations.
Definition pixelformat.h:43
A smart pointer class with reference counting and optional copy-on-write semantics.
Definition sharedptr.h:252
#define PROMEKI_SHARED(BASE)
Macro to simplify making a base object into a native shared object.
Definition sharedptr.h:44
#define PROMEKI_NAMESPACE_BEGIN
Starts a promeki namespace block.
Definition namespace.h:14
#define PROMEKI_NAMESPACE_END
Ends a promeki namespace block.
Definition namespace.h:19
Point< int32_t, 2 > Point2Di32
2D point with int32_t components.
Definition point.h:275
Size2DTemplate< uint32_t > Size2Du32
2D size with uint32_t components.
Definition size2d.h:107
TextStream & center(TextStream &s)
Sets field alignment to Center.
Definition textstream.h:457