aboutsummaryrefslogtreecommitdiffstats
path: root/libgnomecanvas/gnome-canvas-line.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgnomecanvas/gnome-canvas-line.c')
-rw-r--r--libgnomecanvas/gnome-canvas-line.c135
1 files changed, 63 insertions, 72 deletions
diff --git a/libgnomecanvas/gnome-canvas-line.c b/libgnomecanvas/gnome-canvas-line.c
index fa7c74ccc1..563758b277 100644
--- a/libgnomecanvas/gnome-canvas-line.c
+++ b/libgnomecanvas/gnome-canvas-line.c
@@ -47,7 +47,6 @@
#define NUM_ARROW_POINTS 6 /* number of points in an arrowhead */
#define NUM_STATIC_POINTS 256 /* number of static points to use to avoid allocating arrays */
-
#define GROW_BOUNDS(bx1, by1, bx2, by2, x, y) { \
if (x < bx1) \
bx1 = x; \
@@ -62,7 +61,6 @@
by2 = y; \
}
-
enum {
PROP_0,
PROP_POINTS,
@@ -84,7 +82,6 @@ enum {
PROP_ARROW_SHAPE_C
};
-
static void gnome_canvas_line_class_init (GnomeCanvasLineClass *class);
static void gnome_canvas_line_init (GnomeCanvasLine *line);
static void gnome_canvas_line_destroy (GtkObject *object);
@@ -97,20 +94,18 @@ static void gnome_canvas_line_get_property (GObject *object,
GValue *value,
GParamSpec *pspec);
-static void gnome_canvas_line_update (GnomeCanvasItem *item, double *affine, ArtSVP *clip_path, int flags);
+static void gnome_canvas_line_update (GnomeCanvasItem *item, gdouble *affine, ArtSVP *clip_path, gint flags);
static void gnome_canvas_line_realize (GnomeCanvasItem *item);
static void gnome_canvas_line_unrealize (GnomeCanvasItem *item);
static void gnome_canvas_line_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
- int x, int y, int width, int height);
-static double gnome_canvas_line_point (GnomeCanvasItem *item, double x, double y,
- int cx, int cy, GnomeCanvasItem **actual_item);
-static void gnome_canvas_line_bounds (GnomeCanvasItem *item, double *x1, double *y1, double *x2, double *y2);
+ gint x, gint y, gint width, gint height);
+static gdouble gnome_canvas_line_point (GnomeCanvasItem *item, gdouble x, gdouble y,
+ gint cx, gint cy, GnomeCanvasItem **actual_item);
+static void gnome_canvas_line_bounds (GnomeCanvasItem *item, gdouble *x1, gdouble *y1, gdouble *x2, gdouble *y2);
static void gnome_canvas_line_render (GnomeCanvasItem *item, GnomeCanvasBuf *buf);
-
static GnomeCanvasItemClass *parent_class;
-
GType
gnome_canvas_line_get_type (void)
{
@@ -332,18 +327,18 @@ gnome_canvas_line_destroy (GtkObject *object)
* points in the line is not zero.
*/
static void
-get_bounds (GnomeCanvasLine *line, double *bx1, double *by1, double *bx2, double *by2)
+get_bounds (GnomeCanvasLine *line, gdouble *bx1, gdouble *by1, gdouble *bx2, gdouble *by2)
{
- double *coords;
- double x1, y1, x2, y2;
- double width;
- int i;
+ gdouble *coords;
+ gdouble x1, y1, x2, y2;
+ gdouble width;
+ gint i;
if (!line->coords) {
*bx1 = *by1 = *bx2 = *by2 = 0.0;
return;
}
-
+
/* Find bounding box of line's points */
x1 = x2 = line->coords[0];
@@ -370,7 +365,7 @@ get_bounds (GnomeCanvasLine *line, double *bx1, double *by1, double *bx2, double
if (line->join == GDK_JOIN_MITER)
for (i = line->num_points, coords = line->coords; i >= 3; i--, coords += 2) {
- double mx1, my1, mx2, my2;
+ gdouble mx1, my1, mx2, my2;
if (gnome_canvas_get_miter_points (coords[0], coords[1],
coords[2], coords[3],
@@ -404,7 +399,7 @@ get_bounds (GnomeCanvasLine *line, double *bx1, double *by1, double *bx2, double
* not zero. Affine is the i2c transformation.
*/
static void
-get_bounds_canvas (GnomeCanvasLine *line, double *bx1, double *by1, double *bx2, double *by2, double affine[6])
+get_bounds_canvas (GnomeCanvasLine *line, gdouble *bx1, gdouble *by1, gdouble *bx2, gdouble *by2, gdouble affine[6])
{
/* It would be possible to tighten the bounds somewhat by transforming the individual points before
aggregating them into the bbox. But it hardly seems worth it. */
@@ -425,15 +420,15 @@ get_bounds_canvas (GnomeCanvasLine *line, double *bx1, double *by1, double *bx2,
static void
reconfigure_arrows (GnomeCanvasLine *line)
{
- double *poly, *coords;
- double dx, dy, length;
- double sin_theta, cos_theta, tmp;
- double frac_height; /* Line width as fraction of arrowhead width */
- double backup; /* Distance to backup end points so the line ends in the middle of the arrowhead */
- double vx, vy; /* Position of arrowhead vertex */
- double shape_a, shape_b, shape_c;
- double width;
- int i;
+ gdouble *poly, *coords;
+ gdouble dx, dy, length;
+ gdouble sin_theta, cos_theta, tmp;
+ gdouble frac_height; /* Line width as fraction of arrowhead width */
+ gdouble backup; /* Distance to backup end points so the line ends in the middle of the arrowhead */
+ gdouble vx, vy; /* Position of arrowhead vertex */
+ gdouble shape_a, shape_b, shape_c;
+ gdouble width;
+ gint i;
if (line->num_points == 0)
return;
@@ -600,15 +595,15 @@ set_line_gc_foreground (GnomeCanvasLine *line)
static void
set_line_gc_width (GnomeCanvasLine *line)
{
- int width;
+ gint width;
if (!line->gc)
return;
if (line->width_pixels)
- width = (int) line->width;
+ width = (gint) line->width;
else
- width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5);
+ width = (gint) (line->width * line->item.canvas->pixels_per_unit + 0.5);
gdk_gc_set_line_attributes (line->gc,
width,
@@ -619,7 +614,7 @@ set_line_gc_width (GnomeCanvasLine *line)
/* Sets the stipple pattern for the line */
static void
-set_stipple (GnomeCanvasLine *line, GdkBitmap *stipple, int reconfigure)
+set_stipple (GnomeCanvasLine *line, GdkBitmap *stipple, gint reconfigure)
{
if (line->stipple && !reconfigure)
g_object_unref (line->stipple);
@@ -649,7 +644,7 @@ gnome_canvas_line_set_property (GObject *object,
GdkColor color = { 0, 0, 0, 0, };
GdkColor *pcolor;
gboolean color_changed;
- int have_pixel;
+ gint have_pixel;
g_return_if_fail (object != NULL);
g_return_if_fail (GNOME_IS_CANVAS_LINE (object));
@@ -674,7 +669,7 @@ gnome_canvas_line_set_property (GObject *object,
else {
line->num_points = points->num_points;
line->coords = g_new (double, 2 * line->num_points);
- memcpy (line->coords, points->coords, 2 * line->num_points * sizeof (double));
+ memcpy (line->coords, points->coords, 2 * line->num_points * sizeof (gdouble));
}
/* Drop the arrowhead polygons if they exist -- they will be regenerated */
@@ -814,10 +809,10 @@ gnome_canvas_line_set_property (GObject *object,
gnome_canvas_item_request_redraw_svp (item, line->fill_svp);
- if (line->first_svp)
+ if (line->first_svp)
gnome_canvas_item_request_redraw_svp (item, line->first_svp);
- if (line->last_svp)
+ if (line->last_svp)
gnome_canvas_item_request_redraw_svp (item, line->last_svp);
}
@@ -830,7 +825,7 @@ static GnomeCanvasPoints *
get_points (GnomeCanvasLine *line)
{
GnomeCanvasPoints *points;
- int start_ofs, end_ofs;
+ gint start_ofs, end_ofs;
if (line->num_points == 0)
return NULL;
@@ -859,7 +854,7 @@ get_points (GnomeCanvasLine *line)
memcpy (points->coords + 2 * start_ofs,
line->coords + 2 * start_ofs,
- 2 * (line->num_points - (start_ofs + end_ofs)) * sizeof (double));
+ 2 * (line->num_points - (start_ofs + end_ofs)) * sizeof (gdouble));
return points;
}
@@ -912,11 +907,11 @@ gnome_canvas_line_get_property (GObject *object,
case PROP_WIDTH_PIXELS:
g_value_set_uint (value, line->width);
break;
-
+
case PROP_WIDTH_UNITS:
g_value_set_double (value, line->width);
break;
-
+
case PROP_CAP_STYLE:
g_value_set_enum (value, line->cap);
break;
@@ -981,14 +976,13 @@ gnome_canvas_line_render (GnomeCanvasItem *item,
gnome_canvas_render_svp (buf, line->last_svp, line->fill_rgba);
}
-
static ArtSVP *
-svp_from_points (const double *item_coords, int num_points, const double affine[6])
+svp_from_points (const gdouble *item_coords, gint num_points, const gdouble affine[6])
{
ArtVpath *vpath;
ArtSVP *svp;
- double x, y;
- int i;
+ gdouble x, y;
+ gint i;
vpath = art_new (ArtVpath, num_points + 2);
@@ -1017,15 +1011,15 @@ svp_from_points (const double *item_coords, int num_points, const double affine[
}
static void
-gnome_canvas_line_update (GnomeCanvasItem *item, double *affine, ArtSVP *clip_path, int flags)
+gnome_canvas_line_update (GnomeCanvasItem *item, gdouble *affine, ArtSVP *clip_path, gint flags)
{
GnomeCanvasLine *line;
- int i;
+ gint i;
ArtVpath *vpath;
ArtPoint pi, pc;
- double width;
+ gdouble width;
ArtSVP *svp;
- double x1, y1, x2, y2;
+ gdouble x1, y1, x2, y2;
line = GNOME_CANVAS_LINE (item);
@@ -1071,18 +1065,16 @@ gnome_canvas_line_update (GnomeCanvasItem *item, double *affine, ArtSVP *clip_pa
if (line->first_arrow && line->first_coords) {
svp = svp_from_points (line->first_coords, NUM_ARROW_POINTS, affine);
- gnome_canvas_item_update_svp_clip (item,
+ gnome_canvas_item_update_svp_clip (item,
&line->first_svp, svp, clip_path);
}
-
if (line->last_arrow && line->last_coords) {
svp = svp_from_points (line->last_coords, NUM_ARROW_POINTS, affine);
- gnome_canvas_item_update_svp_clip (item,
+ gnome_canvas_item_update_svp_clip (item,
&line->last_svp, svp, clip_path);
}
-
} else {
set_line_gc_foreground (line);
set_line_gc_width (line);
@@ -1129,17 +1121,17 @@ gnome_canvas_line_unrealize (GnomeCanvasItem *item)
}
static void
-item_to_canvas (GnomeCanvas *canvas, double *item_coords, GdkPoint *canvas_coords, int num_points,
- int *num_drawn_points, double i2c[6], int x, int y)
+item_to_canvas (GnomeCanvas *canvas, gdouble *item_coords, GdkPoint *canvas_coords, gint num_points,
+ gint *num_drawn_points, gdouble i2c[6], gint x, gint y)
{
- int i;
- int old_cx, old_cy;
- int cx, cy;
+ gint i;
+ gint old_cx, old_cy;
+ gint cx, cy;
ArtPoint pi, pc;
#ifdef VERBOSE
{
- char str[128];
+ gchar str[128];
art_affine_to_string (str, i2c);
g_print ("line item_to_canvas %s\n", str);
}
@@ -1178,13 +1170,13 @@ item_to_canvas (GnomeCanvas *canvas, double *item_coords, GdkPoint *canvas_coord
static void
gnome_canvas_line_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
- int x, int y, int width, int height)
+ gint x, gint y, gint width, gint height)
{
GnomeCanvasLine *line;
GdkPoint static_points[NUM_STATIC_POINTS];
GdkPoint *points;
- int actual_num_points_drawn;
- double i2c[6];
+ gint actual_num_points_drawn;
+ gdouble i2c[6];
line = GNOME_CANVAS_LINE (item);
@@ -1198,7 +1190,6 @@ gnome_canvas_line_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
else
points = g_new (GdkPoint, line->num_points);
-
gnome_canvas_item_i2c_affine (item, i2c);
item_to_canvas (item->canvas, line->coords, points, line->num_points,
@@ -1230,18 +1221,18 @@ gnome_canvas_line_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
}
static double
-gnome_canvas_line_point (GnomeCanvasItem *item, double x, double y,
- int cx, int cy, GnomeCanvasItem **actual_item)
+gnome_canvas_line_point (GnomeCanvasItem *item, gdouble x, gdouble y,
+ gint cx, gint cy, GnomeCanvasItem **actual_item)
{
GnomeCanvasLine *line;
- double *line_points = NULL, *coords;
- double static_points[2 * NUM_STATIC_POINTS];
- double poly[10];
- double best, dist;
- double dx, dy;
- double width;
- int num_points = 0, i;
- int changed_miter_to_bevel;
+ gdouble *line_points = NULL, *coords;
+ gdouble static_points[2 * NUM_STATIC_POINTS];
+ gdouble poly[10];
+ gdouble best, dist;
+ gdouble dx, dy;
+ gdouble width;
+ gint num_points = 0, i;
+ gint changed_miter_to_bevel;
#ifdef VERBOSE
g_print ("gnome_canvas_line_point x, y = (%g, %g); cx, cy = (%d, %d)\n", x, y, cx, cy);
@@ -1412,7 +1403,7 @@ done:
}
static void
-gnome_canvas_line_bounds (GnomeCanvasItem *item, double *x1, double *y1, double *x2, double *y2)
+gnome_canvas_line_bounds (GnomeCanvasItem *item, gdouble *x1, gdouble *y1, gdouble *x2, gdouble *y2)
{
GnomeCanvasLine *line;