blob: b4113b9a9bc38758457040cc117416edafe3e849 (
plain)
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
129
130
131
132
|
#ifndef COMMON_CONTEXT_H_SEEN
#define COMMON_CONTEXT_H_SEEN
/*
* Common drawing mode
*
* Authors:
* Mitsuru Oka <oka326@parkcity.ne.jp>
* Lauris Kaplinski <lauris@kaplinski.com>
*
* The original dynadraw code:
* Paul Haeberli <paul@sgi.com>
*
* Copyright (C) 1998 The Free Software Foundation
* Copyright (C) 1999-2002 authors
* Copyright (C) 2001-2002 Ximian, Inc.
* Copyright (C) 2008 Jon A. Cruz
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
#include "event-context.h"
#include "display/curve.h"
#include <2geom/point.h>
#define SP_TYPE_COMMON_CONTEXT (sp_common_context_get_type())
#define SP_COMMON_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_COMMON_CONTEXT, SPCommonContext))
#define SP_COMMON_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_COMMON_CONTEXT, SPCommonContextClass))
#define SP_IS_COMMON_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_COMMON_CONTEXT))
#define SP_IS_COMMON_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_COMMON_CONTEXT))
#define SAMPLING_SIZE 8 /* fixme: ?? */
class CCommonContext;
class SPCommonContext : public SPEventContext {
public:
CCommonContext* ccommoncontext;
/** accumulated shape which ultimately goes in svg:path */
SPCurve *accumulated;
/** canvas items for "comitted" segments */
GSList *segments;
/** canvas item for red "leading" segment */
SPCanvasItem *currentshape;
/** shape of red "leading" segment */
SPCurve *currentcurve;
/** left edge of the stroke; combined to get accumulated */
SPCurve *cal1;
/** right edge of the stroke; combined to get accumulated */
SPCurve *cal2;
/** left edge points for this segment */
Geom::Point point1[SAMPLING_SIZE];
/** right edge points for this segment */
Geom::Point point2[SAMPLING_SIZE];
/** number of edge points for this segment */
gint npoints;
/* repr */
Inkscape::XML::Node *repr;
/* common */
Geom::Point cur;
Geom::Point vel;
double vel_max;
Geom::Point acc;
Geom::Point ang;
Geom::Point last;
Geom::Point del;
/* extended input data */
gdouble pressure;
gdouble xtilt;
gdouble ytilt;
/* attributes */
guint dragging : 1; /* mouse state: mouse is dragging */
guint usepressure : 1;
guint usetilt : 1;
double mass, drag;
double angle;
double width;
double vel_thin;
double flatness;
double tremor;
double cap_rounding;
Inkscape::MessageContext *_message_context;
bool is_drawing;
/** uses absolute width independent of zoom */
bool abs_width;
};
struct SPCommonContextClass : public SPEventContextClass{};
class CCommonContext : public CEventContext {
public:
CCommonContext(SPCommonContext* commoncontext);
virtual void setup();
virtual void set(Inkscape::Preferences::Entry* val);
virtual gint root_handler(GdkEvent* event);
private:
SPCommonContext* spcommoncontext;
};
GType sp_common_context_get_type(void);
#endif // COMMON_CONTEXT_H_SEEN
/*
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 :
|