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
|
#ifndef GNOME_CANVAS_SHAPE_PRIVATE_H
#define GNOME_CANVAS_SHAPE_PRIVATE_H
/* Bpath 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.
*
* Copyright (C) 1998,1999 The Free Software Foundation
*
* Authors: Federico Mena <federico@nuclecu.unam.mx>
* Raph Levien <raph@acm.org>
* Lauris Kaplinski <lauris@ariman.ee>
*/
#include <gdk/gdk.h>
#include <libart_lgpl/art_vpath.h>
#include <libart_lgpl/art_svp.h>
#include <libart_lgpl/art_vpath_dash.h>
#include <libart_lgpl/art_svp_wind.h>
#include <libgnomecanvas/gnome-canvas.h>
#include <libgnomecanvas/gnome-canvas-path-def.h>
G_BEGIN_DECLS
typedef struct _GnomeCanvasShapePrivGdk GnomeCanvasShapePrivGdk;
typedef struct _GCBPDrawCtx GCBPDrawCtx;
/* Per canvas private structure, holding necessary data for rendering
* temporary masks, which are needed for drawing multipart bpaths.
* As canvas cannot multithread, we can be sure, that masks are used
* serially, also one set of masks per canvas is sufficent to guarantee,
* that masks are created on needed X server. Masks grow as needed.
* Full structure is refcounted in Bpath implementation
*/
struct _GCBPDrawCtx {
gint refcount;
GnomeCanvas * canvas;
gint width;
gint height;
GdkBitmap * mask;
GdkBitmap * clip;
GdkGC * clear_gc;
GdkGC * xor_gc;
};
/* Per Bpath private structure, holding Gdk specific data */
struct _GnomeCanvasShapePrivGdk {
gulong fill_pixel; /* Color for fill */
gulong outline_pixel; /* Color for outline */
GdkBitmap *fill_stipple; /* Stipple for fill */
GdkBitmap *outline_stipple; /* Stipple for outline */
GdkGC * fill_gc; /* GC for filling */
GdkGC * outline_gc; /* GC for outline */
gint len_points; /* Size of allocated points array */
gint num_points; /* Gdk points in canvas coords */
GdkPoint * points; /* Ivariant: closed paths are before open ones */
GSList * closed_paths; /* List of lengths */
GSList * open_paths; /* List of lengths */
GCBPDrawCtx * ctx; /* Pointer to per-canvas drawing context */
};
struct _GnomeCanvasShapePriv {
GnomeCanvasPathDef * path; /* Our bezier path representation */
gdouble scale; /* CTM scaling (for pen) */
guint fill_set : 1; /* Is fill color set? */
guint outline_set : 1; /* Is outline color set? */
guint width_pixels : 1; /* Is outline width specified in pixels or units? */
double width; /* Width of outline, in user coords */
guint32 fill_rgba; /* Fill color, RGBA */
guint32 outline_rgba; /* Outline color, RGBA */
GdkCapStyle cap; /* Cap style for line */
GdkJoinStyle join; /* Join style for line */
ArtWindRule wind; /* Winding rule */
double miterlimit; /* Miter limit */
ArtVpathDash dash; /* Dashing pattern */
ArtSVP * fill_svp; /* The SVP for the filled shape */
ArtSVP * outline_svp; /* The SVP for the outline shape */
GnomeCanvasShapePrivGdk * gdk; /* Gdk specific things */
};
G_END_DECLS
#endif
|