1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
#ifndef SEEN_CONNECTOR_CONTEXT_H
#define SEEN_CONNECTOR_CONTEXT_H
/*
* Connector creation tool
*
* Authors:
* Michael Wybrow <mjwybrow@users.sourceforge.net>
*
* Copyright (C) 2005 Michael Wybrow
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
#include <stddef.h>
#include <sigc++/sigc++.h>
#include <sigc++/connection.h>
#include "event-context.h"
#include <2geom/point.h>
#include "libavoid/connector.h"
#include <glibmm/i18n.h>
#define SP_CONNECTOR_CONTEXT(obj) (dynamic_cast<SPConnectorContext*>((SPEventContext*)obj))
//#define SP_IS_CONNECTOR_CONTEXT(obj) (dynamic_cast<const SPConnectorContext*>((const SPEventContext*)obj) != NULL)
struct SPKnot;
class SPCurve;
namespace Inkscape
{
class Selection;
}
enum {
SP_CONNECTOR_CONTEXT_IDLE,
SP_CONNECTOR_CONTEXT_DRAGGING,
SP_CONNECTOR_CONTEXT_CLOSE,
SP_CONNECTOR_CONTEXT_STOP,
SP_CONNECTOR_CONTEXT_REROUTING,
SP_CONNECTOR_CONTEXT_NEWCONNPOINT
};
typedef std::map<SPKnot *, int> SPKnotList;
class SPConnectorContext : public SPEventContext {
public:
SPConnectorContext();
virtual ~SPConnectorContext();
Inkscape::Selection *selection;
Geom::Point p[5];
/** \invar npoints in {0, 2}. */
gint npoints;
unsigned int state : 4;
// Red curve
SPCanvasItem *red_bpath;
SPCurve *red_curve;
guint32 red_color;
// Green curve
SPCurve *green_curve;
// The new connector
SPItem *newconn;
Avoid::ConnRef *newConnRef;
gdouble curvature;
bool isOrthogonal;
// The active shape
SPItem *active_shape;
Inkscape::XML::Node *active_shape_repr;
Inkscape::XML::Node *active_shape_layer_repr;
// Same as above, but for the active connector
SPItem *active_conn;
Inkscape::XML::Node *active_conn_repr;
sigc::connection sel_changed_connection;
// The activehandle
SPKnot *active_handle;
// The selected handle, used in editing mode
SPKnot *selected_handle;
SPItem *clickeditem;
SPKnot *clickedhandle;
SPKnotList knots;
SPKnot *endpt_handle[2];
guint endpt_handler_id[2];
gchar *shref;
gchar *ehref;
SPCanvasItem *c0, *c1, *cl0, *cl1;
static const std::string prefsPath;
virtual void setup();
virtual void finish();
virtual void set(const Inkscape::Preferences::Entry& val);
virtual bool root_handler(GdkEvent* event);
virtual bool item_handler(SPItem* item, GdkEvent* event);
virtual const std::string& getPrefsPath();
private:
void selection_changed(Inkscape::Selection *selection);
};
void cc_selection_set_avoid(bool const set_ignore);
void cc_create_connection_point(SPConnectorContext* cc);
void cc_remove_connection_point(SPConnectorContext* cc);
bool cc_item_is_connector(SPItem *item);
#endif /* !SEEN_CONNECTOR_CONTEXT_H */
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
indent-tabs-mode:nil
fill-column:99
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
|