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
|
#ifndef SEEN_PEN_CONTEXT_H
#define SEEN_PEN_CONTEXT_H
/** \file
* SPPenContext: a context for pen tool events.
*/
#include "draw-context.h"
#include "live_effects/effect.h"
#define SP_PEN_CONTEXT(obj) (dynamic_cast<SPPenContext*>((SPEventContext*)obj))
#define SP_IS_PEN_CONTEXT(obj) (dynamic_cast<const SPPenContext*>((const SPEventContext*)obj) != NULL)
struct SPCtrlLine;
/**
* SPPenContext: a context for pen tool events.
*/
class SPPenContext : public SPDrawContext {
public:
SPPenContext();
virtual ~SPPenContext();
enum Mode {
MODE_CLICK,
MODE_DRAG
};
enum State {
POINT,
CONTROL,
CLOSE,
STOP
};
Geom::Point p[5];
/** \invar npoints in {0, 2, 5}. */
// npoints somehow determines the type of the node (what does it mean, exactly? the number of Bezier handles?)
gint npoints;
Mode mode;
State state;
bool polylines_only;
bool polylines_paraxial;
//SpiroLive
//Propiedad que guarda si el modo Spiro está activo o no
bool spiro;
bool bspline;
//SpiroLIve End
int num_clicks;
unsigned int expecting_clicks_for_LPE; // if positive, finish the path after this many clicks
Inkscape::LivePathEffect::Effect *waiting_LPE; // if NULL, waiting_LPE_type in SPDrawContext is taken into account
SPLPEItem *waiting_item;
SPCanvasItem *c0;
SPCanvasItem *c1;
SPCtrlLine *cl0;
SPCtrlLine *cl1;
unsigned int events_disabled : 1;
static const std::string prefsPath;
virtual const std::string& getPrefsPath();
protected:
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);
};
inline bool sp_pen_context_has_waiting_LPE(SPPenContext *pc) {
// note: waiting_LPE_type is defined in SPDrawContext
return (pc->waiting_LPE != NULL ||
pc->waiting_LPE_type != Inkscape::LivePathEffect::INVALID_LPE);
}
void sp_pen_context_set_polyline_mode(SPPenContext *const pc);
void sp_pen_context_wait_for_LPE_mouse_clicks(SPPenContext *pc, Inkscape::LivePathEffect::EffectType effect_type,
unsigned int num_clicks, bool use_polylines = true);
void sp_pen_context_cancel_waiting_for_LPE(SPPenContext *pc);
void sp_pen_context_put_into_waiting_mode(SPDesktop *desktop, Inkscape::LivePathEffect::EffectType effect_type,
unsigned int num_clicks, bool use_polylines = true);
#endif /* !SEEN_PEN_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 :
|