Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
drawing.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
/*
6 * Authors:
7 * Krzysztof KosiƄski <tweenk.pl@gmail.com>
8 *
9 * Copyright (C) 2011 Authors
10 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
11 */
12
13#ifndef INKSCAPE_DISPLAY_DRAWING_H
14#define INKSCAPE_DISPLAY_DRAWING_H
15
16#include <optional>
17#include <set>
18#include <cstdint>
19#include <vector>
20#include <boost/operators.hpp>
21#include <2geom/rect.h>
22#include <2geom/pathvector.h>
23#include <sigc++/sigc++.h>
24
26#include "display/rendermode.h"
28#include "preferences.h"
29#include "util/funclog.h"
30
31namespace Inkscape {
32
33class DrawingItem;
34class CanvasItemDrawing;
35class DrawingContext;
36
38{
39public:
40 Drawing(CanvasItemDrawing *drawing = nullptr);
41 Drawing(Drawing const &) = delete;
42 Drawing &operator=(Drawing const &) = delete;
43 ~Drawing();
44
46 DrawingItem *root() { return _root; }
48
51 void setOutlineOverlay(bool);
52 void setGrayscaleMatrix(double[20]);
53 void setClipOutlineColor(uint32_t);
54 void setMaskOutlineColor(uint32_t);
55 void setImageOutlineColor(uint32_t);
56 void setImageOutlineMode(bool);
57 void setFilterQuality(int);
58 void setBlurQuality(int);
59 void setDithering(bool);
60 void setCursorTolerance(double tol) { _cursor_tolerance = tol; }
61 void setSelectZeroOpacity(bool select_zero_opacity) { _select_zero_opacity = select_zero_opacity; }
62 void setCacheBudget(size_t bytes);
63 void setCacheLimit(Geom::OptIntRect const &rect);
64 void setClip(std::optional<Geom::PathVector> &&clip);
65 void setAntialiasingOverride(std::optional<Antialiasing> antialiasing_override);
66
67 RenderMode renderMode() const { return _rendermode; }
68 ColorMode colorMode() const { return _colormode; }
69 bool outlineOverlay() const { return _outlineoverlay; }
70 auto &grayscaleMatrix() const { return _grayscale_matrix; }
71 uint32_t clipOutlineColor() const { return _clip_outline_color; }
72 uint32_t maskOutlineColor() const { return _mask_outline_color; }
73 uint32_t imageOutlineColor() const { return _image_outline_color; }
74 bool imageOutlineMode() const { return _image_outline_mode; }
75 int filterQuality() const { return _filter_quality; }
76 int blurQuality() const { return _blur_quality; }
77 bool useDithering() const { return _use_dithering; }
78 double cursorTolerance() const { return _cursor_tolerance; }
79 bool selectZeroOpacity() const { return _select_zero_opacity; }
80 Geom::OptIntRect const &cacheLimit() const { return _cache_limit; }
81
82 void update(Geom::IntRect const &area = Geom::IntRect::infinite(), Geom::Affine const &affine = Geom::identity(),
83 unsigned flags = DrawingItem::STATE_ALL, unsigned reset = 0);
84 void render(DrawingContext &dc, Geom::IntRect const &area, unsigned flags = 0) const;
85 DrawingItem *pick(Geom::Point const &p, double delta, unsigned flags);
86
87 void snapshot();
88 void unsnapshot();
89 bool snapshotted() const { return _snapshotted; }
90
91 // Convenience
92 Colors::Color averageColor(Geom::IntRect const &area) const;
93 Colors::Color averageColor(Geom::PathVector const &path, bool evenodd) const;
94 void setExact();
95 void setOpacity(double opacity = 1.0);
96
97private:
99 void _clearCache();
100 void _loadPrefs();
101
102 DrawingItem *_root = nullptr;
104 std::unique_ptr<Preferences::PreferencesObserver> _pref_tracker;
105
108 bool _outlineoverlay = false;
120 std::optional<Geom::PathVector> _clip;
122 std::optional<Antialiasing> _antialiasing_override;
123
124 std::set<DrawingItem*> _cached_items; // modified by DrawingItem::_setCached()
125 CacheList _candidate_items; // keep this list always sorted with std::greater
126
127 /*
128 * Simple cacheline separator compatible with x86 (64 bytes) and M* (128 bytes).
129 * Ideally alignas(std::hardware_destructive_interference_size) could be used instead,
130 * but this is extremely painful to make work across all supported platforms/compilers.
131 */
133
134 bool _snapshotted = false;
136
137 template<typename F>
138 void defer(F &&f) { _snapshotted ? _funclog.emplace(std::forward<F>(f)) : f(); }
139
140 friend class DrawingItem;
141};
142
143} // namespace Inkscape
144
145#endif // INKSCAPE_DISPLAY_DRAWING_H
146
147/*
148 Local Variables:
149 mode:c++
150 c-file-style:"stroustrup"
151 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
152 indent-tabs-mode:nil
153 fill-column:99
154 End:
155*/
156// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
3x3 matrix representing an affine transformation.
Definition affine.h:70
Axis-aligned generic rectangle that can be empty.
Axis aligned, non-empty, generic rectangle.
static CRect infinite()
Create infinite rectangle.
Sequence of subpaths.
Definition pathvector.h:122
Two-dimensional point that doubles as a vector.
Definition point.h:66
Minimal wrapper over Cairo.
SVG drawing item for display.
uint32_t maskOutlineColor() const
Definition drawing.h:72
void setBlurQuality(int)
Definition drawing.cpp:168
void _pickItemsForCaching()
Definition drawing.cpp:279
uint32_t _image_outline_color
Definition drawing.h:112
void setGrayscaleMatrix(double[20])
Definition drawing.cpp:107
DrawingItem * _root
Definition drawing.h:102
uint32_t _clip_outline_color
Definition drawing.h:110
CanvasItemDrawing * _canvas_item_drawing
Definition drawing.h:103
void setOpacity(double opacity=1.0)
Definition drawing.cpp:432
void setSelectZeroOpacity(bool select_zero_opacity)
Definition drawing.h:61
uint32_t _mask_outline_color
Definition drawing.h:111
size_t _cache_budget
Maximum allowed size of cache.
Definition drawing.h:118
CacheList _candidate_items
Definition drawing.h:125
uint32_t imageOutlineColor() const
Definition drawing.h:73
void setImageOutlineColor(uint32_t)
Definition drawing.cpp:137
Drawing & operator=(Drawing const &)=delete
void setDithering(bool)
Definition drawing.cpp:179
void setRenderMode(RenderMode)
Definition drawing.cpp:74
void setRoot(DrawingItem *root)
Definition drawing.cpp:64
DrawingItem * root()
Definition drawing.h:46
std::optional< Geom::PathVector > _clip
Definition drawing.h:120
void setMaskOutlineColor(uint32_t)
Definition drawing.cpp:127
Geom::OptIntRect const & cacheLimit() const
Definition drawing.h:80
void setClip(std::optional< Geom::PathVector > &&clip)
Definition drawing.cpp:210
ColorMode colorMode() const
Definition drawing.h:68
double _cursor_tolerance
Definition drawing.h:117
CanvasItemDrawing * getCanvasItemDrawing()
Definition drawing.h:47
Drawing(Drawing const &)=delete
RenderMode _rendermode
Definition drawing.h:106
void setClipOutlineColor(uint32_t)
Definition drawing.cpp:117
uint32_t clipOutlineColor() const
Definition drawing.h:71
void setColorMode(ColorMode)
Definition drawing.cpp:87
void defer(F &&f)
Definition drawing.h:138
Filters::FilterColorMatrix::ColorMatrixMatrix _grayscale_matrix
Definition drawing.h:109
bool snapshotted() const
Definition drawing.h:89
Colors::Color averageColor(Geom::IntRect const &area) const
Definition drawing.cpp:374
void update(Geom::IntRect const &area=Geom::IntRect::infinite(), Geom::Affine const &affine=Geom::identity(), unsigned flags=DrawingItem::STATE_ALL, unsigned reset=0)
Definition drawing.cpp:228
RenderMode renderMode() const
Definition drawing.h:67
DrawingItem * pick(Geom::Point const &p, double delta, unsigned flags)
Definition drawing.cpp:261
ColorMode _colormode
Definition drawing.h:107
void render(DrawingContext &dc, Geom::IntRect const &area, unsigned flags=0) const
Definition drawing.cpp:239
char cacheline_separator[127]
Definition drawing.h:132
Util::FuncLog _funclog
Definition drawing.h:135
void setCacheLimit(Geom::OptIntRect const &rect)
Definition drawing.cpp:200
void setCursorTolerance(double tol)
Definition drawing.h:60
bool selectZeroOpacity() const
Definition drawing.h:79
bool outlineOverlay() const
Definition drawing.h:69
std::unique_ptr< Preferences::PreferencesObserver > _pref_tracker
Definition drawing.h:104
void setImageOutlineMode(bool)
Definition drawing.cpp:147
auto & grayscaleMatrix() const
Definition drawing.h:70
int blurQuality() const
Definition drawing.h:76
void setFilterQuality(int)
Definition drawing.cpp:157
bool useDithering() const
Definition drawing.h:77
bool _select_zero_opacity
Definition drawing.h:121
std::optional< Antialiasing > _antialiasing_override
Definition drawing.h:122
void setAntialiasingOverride(std::optional< Antialiasing > antialiasing_override)
Definition drawing.cpp:219
bool imageOutlineMode() const
Definition drawing.h:74
Geom::OptIntRect _cache_limit
Definition drawing.h:119
int filterQuality() const
Definition drawing.h:75
bool _image_outline_mode
Always draw images as images, even in outline mode.
Definition drawing.h:113
void setOutlineOverlay(bool)
Definition drawing.cpp:98
double cursorTolerance() const
Definition drawing.h:78
void setCacheBudget(size_t bytes)
Definition drawing.cpp:192
std::set< DrawingItem * > _cached_items
Definition drawing.h:124
A FuncLog is effectively a std::vector<std::function<void()>>, with the ability to hold move-only fun...
Definition funclog.h:24
void emplace(F &&f)
Append a callable object to the log.
Definition funclog.h:36
Canvas item belonging to an SVG drawing element.
Affine identity()
Create an identity matrix.
Definition affine.h:210
Helper class to stream background task notifications as a series of messages.
std::list< CacheRecord > CacheList
static T clip(T const &v, T const &a, T const &b)
PathVector - a sequence of subpaths.
Singleton class to access the preferences file in a convenient way.
Axis-aligned rectangle.
TODO: insert short description here.
int delta