aboutsummaryrefslogtreecommitdiffstats
path: root/libgnomecanvas/gnome-canvas-line.h
blob: f2a53c487c88d250fab164f63dc3d386727ff478 (plain) (blame)
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*
 * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
 * All rights reserved.
 *
 * This file is part of the Gnome Library.
 *
 * The Gnome Library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * The Gnome Library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with the Gnome Library; see the file COPYING.LIB.  If not,
 * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */
/*
  @NOTATION@
 */

/* Line/curve item type for GnomeCanvas widget
 *
 * GnomeCanvas is basically a port of the Tk toolkit's most excellent canvas widget.  Tk is
 * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties.
 *
 *
 * Author: Federico Mena <federico@nuclecu.unam.mx>
 */

#ifndef GNOME_CANVAS_LINE_H
#define GNOME_CANVAS_LINE_H

#include <libgnomecanvas/gnome-canvas.h>

G_BEGIN_DECLS

/* Line item for the canvas.  This is a polyline with configurable width, cap/join styles, and arrowheads.
 * If arrowheads are enabled, then three values are used to specify their shape:
 *
 *  arrow_shape_a:  Distance from tip of arrowhead to the center point.
 *  arrow_shape_b:  Distance from tip of arrowhead to trailing point, measured along the shaft.
 *  arrow_shape_c:  Distance of trailing point from outside edge of shaft.
 *
 * The following object arguments are available:
 *
 * name         type            read/write  description
 * ------------------------------------------------------------------------------------------
 * points       GnomeCanvasPoints*  RW      Pointer to a GnomeCanvasPoints structure.
 *                              This can be created by a call to
 *                              gnome_canvas_points_new() (in gnome-canvas-util.h).
 *                              X coordinates are in the even indices of the
 *                              points->coords array, Y coordinates are in
 *                              the odd indices.
 * fill_color       string          W       X color specification for line
 * fill_color_gdk   GdkColor*       RW      Pointer to an allocated GdkColor
 * fill_stipple     GdkBitmap*      RW      Stipple pattern for the line
 * width_pixels     uint            R       Width of the line in pixels.  The line width
 *                              will not be scaled when the canvas zoom factor changes.
 * width_units      gdouble         R       Width of the line in canvas units.  The line width
 *                              will be scaled when the canvas zoom factor changes.
 * cap_style        GdkCapStyle     RW      Cap ("endpoint") style for the line.
 * join_style       GdkJoinStyle        RW      Join ("vertex") style for the line.
 * line_style       GdkLineStyle        RW      Line dash style
 * first_arrowhead  boolean         RW      Specifies whether to draw an arrowhead on the
 *                              first point of the line.
 * last_arrowhead   boolean         RW      Specifies whether to draw an arrowhead on the
 *                              last point of the line.
 * smooth       boolean         RW      Specifies whether to smooth the line using
 *                              parabolic splines.
 * spline_steps     uint            RW      Specifies the number of steps to use when rendering curves.
 * arrow_shape_a    gdouble         RW      First arrow shape specifier.
 * arrow_shape_b    gdouble         RW      Second arrow shape specifier.
 * arrow_shape_c    gdouble         RW      Third arrow shape specifier.
 */

#define GNOME_TYPE_CANVAS_LINE            (gnome_canvas_line_get_type ())
#define GNOME_CANVAS_LINE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNOME_TYPE_CANVAS_LINE, GnomeCanvasLine))
#define GNOME_CANVAS_LINE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GNOME_TYPE_CANVAS_LINE, GnomeCanvasLineClass))
#define GNOME_IS_CANVAS_LINE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GNOME_TYPE_CANVAS_LINE))
#define GNOME_IS_CANVAS_LINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GNOME_TYPE_CANVAS_LINE))
#define GNOME_CANVAS_LINE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GNOME_TYPE_CANVAS_LINE, GnomeCanvasLineClass))

typedef struct _GnomeCanvasLine GnomeCanvasLine;
typedef struct _GnomeCanvasLineClass GnomeCanvasLineClass;

struct _GnomeCanvasLine {
    GnomeCanvasItem item;

    gdouble *coords;        /* Array of coordinates for the line's points.  X coords are in the
                 * even indices, Y coords are in the odd indices.  If the line has
                 * arrowheads then the first and last points have been adjusted to
                 * refer to the necks of the arrowheads rather than their tips.  The
                 * actual endpoints are stored in the first_arrow and last_arrow
                 * arrays, if they exist.
                 */

    gdouble *first_coords;  /* Array of points describing polygon for the first arrowhead */
    gdouble *last_coords;   /* Array of points describing polygon for the last arrowhead */

    GdkGC *gc;      /* GC for drawing line */

    GdkBitmap *stipple; /* Stipple pattern */

        ArtSVP *fill_svp;       /* The SVP for the outline shape */ /*AA*/
    ArtSVP *first_svp;      /* The SVP for the first arrow */ /*AA*/
    ArtSVP *last_svp;       /* The SVP for the last arrow */ /*AA*/

    gdouble width;      /* Width of the line */

    gdouble shape_a;        /* Distance from tip of arrowhead to center */
    gdouble shape_b;        /* Distance from tip of arrowhead to trailing point, measured along shaft */
    gdouble shape_c;        /* Distance of trailing points from outside edge of shaft */

    GdkCapStyle cap;    /* Cap style for line */
    GdkJoinStyle join;  /* Join style for line */
    GdkLineStyle line_style;/* Style for the line */

    gulong fill_pixel;  /* Color for line */

    guint32 fill_rgba;      /* RGBA color for outline */ /*AA*/

    gint num_points;        /* Number of points in the line */
    guint fill_color;   /* Fill color, RGBA */

    gint spline_steps;  /* Number of steps in each spline segment */

    guint width_pixels : 1; /* Is the width specified in pixels or units? */
    guint first_arrow : 1;  /* Draw first arrowhead? */
    guint last_arrow : 1;   /* Draw last arrowhead? */
    guint smooth : 1;   /* Smooth line (with parabolic splines)? */
};

struct _GnomeCanvasLineClass {
    GnomeCanvasItemClass parent_class;
};

/* Standard Gtk function */
GType gnome_canvas_line_get_type (void) G_GNUC_CONST;

G_END_DECLS

#endif