Code

d6382b65145655b117b7771158eb4a78cfd5c457
[inkscape.git] / src / display / canvas-bpath.h
1 #ifndef __SP_CANVAS_BPATH_H__
2 #define __SP_CANVAS_BPATH_H__
4 /*
5  * Simple bezier bpath CanvasItem for inkscape
6  *
7  * Authors:
8  *   Lauris Kaplinski <lauris@ximian.com>
9  *
10  * Copyright (C) 2001 Lauris Kaplinski and Ximian, Inc.
11  *
12  * Released under GNU GPL
13  *
14  */
16 #include <glib/gtypes.h>
18 #include <display/sp-canvas.h>
20 struct SPCanvasBPath;
21 struct SPCanvasBPathClass;
22 struct SPCurve;
24 #define SP_TYPE_CANVAS_BPATH (sp_canvas_bpath_get_type ())
25 #define SP_CANVAS_BPATH(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_CANVAS_BPATH, SPCanvasBPath))
26 #define SP_CANVAS_BPATH_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_CANVAS_BPATH, SPCanvasBPathClass))
27 #define SP_IS_CANVAS_BPATH(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_CANVAS_BPATH))
28 #define SP_IS_CANVAS_BPATH_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_CANVAS_BPATH))
30 #define bpath_liv
32 class Shape;
34 /* stroke-linejoin */
36 typedef enum {
37     SP_STROKE_LINEJOIN_MITER,
38     SP_STROKE_LINEJOIN_ROUND,
39     SP_STROKE_LINEJOIN_BEVEL
40 } SPStrokeJoinType;
42 /* stroke-linecap */
44 typedef enum {
45     SP_STROKE_LINECAP_BUTT,
46     SP_STROKE_LINECAP_ROUND,
47     SP_STROKE_LINECAP_SQUARE
48 } SPStrokeCapType;
51 /* fill-rule */
52 /* clip-rule */
54 typedef enum {
55     SP_WIND_RULE_NONZERO,
56     SP_WIND_RULE_INTERSECT,
57     SP_WIND_RULE_EVENODD,
58     SP_WIND_RULE_POSITIVE
59 } SPWindRule;
62 struct SPCanvasBPath {
63     SPCanvasItem item;
65     /* Line def */
66     SPCurve *curve;
67         NR::Matrix affine;
69     /* Fill attributes */
70     guint32 fill_rgba;
71     SPWindRule fill_rule;
73     /* Line attributes */
74     guint32 stroke_rgba;
75     gdouble stroke_width;
76     gdouble dashes[2];
77     SPStrokeJoinType stroke_linejoin;
78     SPStrokeCapType stroke_linecap;
79     gdouble stroke_miterlimit;
81     /* State */
82     Shape  *fill_shp;
83     Shape  *stroke_shp;
84 };
86 struct SPCanvasBPathClass {
87     SPCanvasItemClass parent_class;
88 };
90 GtkType sp_canvas_bpath_get_type (void);
92 SPCanvasItem *sp_canvas_bpath_new (SPCanvasGroup *parent, SPCurve *curve);
94 void sp_canvas_bpath_set_bpath (SPCanvasBPath *cbp, SPCurve *curve);
95 void sp_canvas_bpath_set_fill (SPCanvasBPath *cbp, guint32 rgba, SPWindRule rule);
96 void sp_canvas_bpath_set_stroke (SPCanvasBPath *cbp, guint32 rgba, gdouble width, SPStrokeJoinType join, SPStrokeCapType cap, double dash=0, double gap=0);
99 /*
100  * FIXME: The following code should actually be in a separate file called display/canvas-text.h. It
101  * temporarily had to be moved here because of linker errors.
102  */
104 struct SPItem;
105 struct SPDesktop;
107 #define SP_TYPE_CANVASTEXT (sp_canvastext_get_type ())
108 #define SP_CANVASTEXT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_CANVASTEXT, SPCanvasText))
109 #define SP_IS_CANVASTEXT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_CANVASTEXT))
111 struct SPCanvasText : public SPCanvasItem{
112     SPItem *item;  // the item to which this line belongs in some sense; may be NULL for some users
113     guint32 rgba;
114     SPDesktop *desktop; // the desktop to which this text is attached; needed for coordinate transforms (TODO: these should be eliminated)
116     gchar* text;
117     NR::Point s;
118     NR::Matrix affine;
119     double fontsize;
120     double anchor_x;
121     double anchor_y;
122 };
123 struct SPCanvasTextClass : public SPCanvasItemClass{};
125 GtkType sp_canvastext_get_type (void);
127 SPCanvasItem *sp_canvastext_new(SPCanvasGroup *parent, SPDesktop *desktop, Geom::Point pos, gchar const *text);
129 void sp_canvastext_set_rgba32 (SPCanvasText *ct, guint32 rgba);
130 void sp_canvastext_set_coords (SPCanvasText *ct, gdouble x0, gdouble y0);
131 void sp_canvastext_set_coords (SPCanvasText *ct, const NR::Point start);
132 void sp_canvastext_set_text (SPCanvasText *ct, gchar const* new_text);
133 void sp_canvastext_set_number_as_text (SPCanvasText *ct, int num);
134 void sp_canvastext_set_fontsize (SPCanvasText *ct, double size);
135 void sp_canvastext_set_anchor (SPCanvasText *ct, double anchor_x, double anchor_y);
137 #endif
139 /*
140   Local Variables:
141   mode:c++
142   c-file-style:"stroustrup"
143   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
144   indent-tabs-mode:nil
145   fill-column:99
146   End:
147 */
148 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :