Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
sp-marker.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
2#ifndef SEEN_SP_MARKER_H
3#define SEEN_SP_MARKER_H
4
5/*
6 * SVG <marker> implementation
7 *
8 * Authors:
9 * Lauris Kaplinski <lauris@kaplinski.com>
10 *
11 * Copyright (C) 1999-2003 Lauris Kaplinski
12 * Copyright (C) 2008 Johan Engelen
13 *
14 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
15 */
16/*
17 * This is quite similar in logic to <svg>
18 * Maybe we should merge them somehow (Lauris)
19 */
20
21class SPMarkerView;
22
23#include <map>
24
25#include <2geom/rect.h>
26#include <2geom/affine.h>
27
28#include "enums.h"
29#include "svg/svg-length.h"
30#include "svg/svg-angle.h"
31#include "sp-item-group.h"
32#include "uri-references.h"
33#include "viewbox.h"
34
40
41class SPMarker final : public SPGroup, public SPViewBox {
42public:
43 SPMarker();
44 ~SPMarker() override;
45 int tag() const override { return tag_of<decltype(*this)>; }
46
47 /* units */
48 unsigned int markerUnits_set : 1;
49 unsigned int markerUnits : 1;
50
51 /* reference point */
54
55 /* dimensions */
58
59 /* orient */
60 unsigned int orient_set : 1;
63
64 Geom::Affine get_marker_transform(Geom::Affine const &base, double linewidth, bool for_display = false) const;
65
66 /* Private views indexed by key that corresponds to a
67 * particular marker type (start, mid, end) on a particular
68 * path. SPMarkerView is a wrapper for a vector of pointers to
69 * Inkscape::DrawingItem instances, one pointer for each
70 * rendered marker.
71 */
72 std::map<unsigned int, SPMarkerView> views_map;
73
75 void release() override;
76 void set(SPAttr key, gchar const* value) override;
77 void update(SPCtx *ctx, guint flags) override;
79
80 Inkscape::DrawingItem* show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) override;
81 virtual Inkscape::DrawingItem* private_show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags);
82 void hide(unsigned int key) override;
83
84 void print(SPPrintContext *ctx) override;
85};
86
87
91 return static_cast<SPMarker *>(URIReference::getObject());
92 }
93protected:
94 bool _acceptObject(SPObject *obj) const override {
95 return is<SPMarker>(obj) && URIReference::_acceptObject(obj);
96 }
97};
98
99void sp_validate_marker(SPMarker *sp_marker, SPDocument *doc);
100void sp_marker_show_dimension (SPMarker *marker, unsigned int key, unsigned int size);
102 unsigned int key, unsigned int pos, unsigned int z_order,
103 Geom::Affine const &marker_transform, float linewidth);
104void sp_marker_hide (SPMarker *marker, unsigned int key);
105const char *generate_marker (std::vector<Inkscape::XML::Node*> &reprs, Geom::Rect bounds, SPDocument *document, Geom::Point center, Geom::Affine move);
107
108void sp_marker_set_orient(SPMarker* marker, const char* value);
109void sp_marker_set_size(SPMarker* marker, double sx, double sy);
110void sp_marker_scale_with_stroke(SPMarker* marker, bool scale_with_stroke);
111void sp_marker_set_offset(SPMarker* marker, double dx, double dy);
114
115#endif
3x3 affine transformation matrix.
SPAttr
Definition attributes.h:27
Geom::IntRect bounds
Definition canvas.cpp:182
constexpr int tag_of
Convenience function to retrieve the tag (class id) of a given type.
Definition cast.h:26
3x3 matrix representing an affine transformation.
Definition affine.h:70
Two-dimensional point that doubles as a vector.
Definition point.h:66
Axis aligned, non-empty rectangle.
Definition rect.h:92
SVG drawing item for display.
A class encapsulating a reference to a particular URI; observers can be notified when the URI comes t...
URIReference(SPObject *owner)
Constructor.
Interface for refcounted XML nodes.
Definition node.h:80
Typed SVG document implementation.
Definition document.h:101
SPMarkerReference(SPObject *obj)
Definition sp-marker.h:89
bool _acceptObject(SPObject *obj) const override
Definition sp-marker.h:94
SPMarker * getObject() const
Definition sp-marker.h:90
SVGLength refY
Definition sp-marker.h:53
void release() override
Removes, releases and unrefs all children of object.
unsigned int markerUnits
Definition sp-marker.h:49
int tag() const override
Definition sp-marker.h:45
SVGLength refX
Definition sp-marker.h:52
std::map< unsigned int, SPMarkerView > views_map
Definition sp-marker.h:72
SVGLength markerWidth
Definition sp-marker.h:56
unsigned int orient_set
Definition sp-marker.h:60
SVGLength markerHeight
Definition sp-marker.h:57
unsigned int markerUnits_set
Definition sp-marker.h:48
Inkscape::DrawingItem * show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) override
virtual Inkscape::DrawingItem * private_show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags)
void hide(unsigned int key) override
Inkscape::XML::Node * write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) override
void print(SPPrintContext *ctx) override
Geom::Affine get_marker_transform(Geom::Affine const &base, double linewidth, bool for_display=false) const
Calculate the transformation for this marker.
markerOrient orient_mode
Definition sp-marker.h:61
~SPMarker() override
Initializes an SPMarker object.
void update(SPCtx *ctx, guint flags) override
SVGAngle orient
Definition sp-marker.h:62
void build(SPDocument *document, Inkscape::XML::Node *repr) override
Virtual build callback for SPMarker.
Definition sp-marker.cpp:80
SPObject is an abstract base class of all of the document nodes at the SVG document level.
Definition sp-object.h:160
Inkscape::XML::Node * repr
Definition sp-object.h:193
SPDocument * document
Definition sp-object.h:188
SVG length type.
Definition svg-length.h:22
Geom::IntPoint size
static char const *const parent
Definition dir-util.cpp:70
static cairo_user_data_key_t key
Axis-aligned rectangle.
void sp_marker_set_orient(SPMarker *marker, const char *value)
void sp_marker_hide(SPMarker *marker, unsigned int key)
Hides/removes all views of the given marker that have key 'key'.
void sp_marker_scale_with_stroke(SPMarker *marker, bool scale_with_stroke)
const char * generate_marker(std::vector< Inkscape::XML::Node * > &reprs, Geom::Rect bounds, SPDocument *document, Geom::Point center, Geom::Affine move)
markerOrient
Definition sp-marker.h:35
@ MARKER_ORIENT_ANGLE
Definition sp-marker.h:36
@ MARKER_ORIENT_AUTO
Definition sp-marker.h:37
@ MARKER_ORIENT_AUTO_START_REVERSE
Definition sp-marker.h:38
Inkscape::DrawingItem * sp_marker_show_instance(SPMarker *marker, Inkscape::DrawingItem *parent, unsigned int key, unsigned int pos, unsigned int z_order, Geom::Affine const &marker_transform, float linewidth)
Shows an instance of a marker.
void sp_validate_marker(SPMarker *sp_marker, SPDocument *doc)
SPObject * sp_marker_fork_if_necessary(SPObject *marker)
void sp_marker_set_offset(SPMarker *marker, double dx, double dy)
void sp_marker_set_uniform_scale(SPMarker *marker, bool uniform)
void sp_marker_set_size(SPMarker *marker, double sx, double sy)
void sp_marker_show_dimension(SPMarker *marker, unsigned int key, unsigned int size)
Removes any SPMarkerViews that a marker has with a specific key.
void sp_marker_flip_horizontally(SPMarker *marker)
Interface for XML documents.
Definition document.h:43
Unused.
Definition sp-object.h:94
SVG angle type.
double uniform()