Contents of /trunk/src/josm_elemstyles.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 46 - (hide annotations)
Mon Feb 2 20:59:14 2009 UTC (15 years, 3 months ago) by achadwick
File MIME type: text/plain
File size: 3067 byte(s)
Add support for variable-width dashes, make "Mapnik" style steps distinct
1 harbaum 1 /*
2     * Copyright (C) 2008 Till Harbaum <till@harbaum.org>.
3     *
4     * This file is part of OSM2Go.
5     *
6     * OSM2Go is free software: you can redistribute it and/or modify
7     * it under the terms of the GNU General Public License as published by
8     * the Free Software Foundation, either version 3 of the License, or
9     * (at your option) any later version.
10     *
11     * OSM2Go is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with OSM2Go. If not, see <http://www.gnu.org/licenses/>.
18     */
19    
20     #ifndef JOSM_ELEMSTYLES_H
21     #define JOSM_ELEMSTYLES_H
22    
23     // Ratio conversions
24    
25     float scaledn_to_zoom(const float scaledn);
26     float zoom_to_scaledn(const float zoom);
27    
28    
29     typedef enum {
30     ES_TYPE_NONE = 0,
31     ES_TYPE_LINE,
32 harbaum 15 ES_TYPE_AREA,
33     ES_TYPE_LINE_MOD
34 harbaum 1 } elemstyle_type_t;
35    
36 achadwick 46 #define DEFAULT_DASH_LENGTH 0
37    
38 harbaum 1 typedef gulong elemstyle_color_t;
39    
40     /* from elemstyles.xml:
41     * line attributes
42     * - width absolute width in pixel in every zoom level
43     * - realwidth relative width which will be scaled in meters, integer
44     * - colour
45     */
46    
47     typedef struct {
48     gint width;
49     elemstyle_color_t color;
50 achadwick 13 gboolean dashed;
51 achadwick 46 gint dash_length; // <= 0 means dash length is based on the width
52 harbaum 1
53     struct {
54     gboolean valid;
55     gint width;
56     } real;
57    
58     struct {
59     gboolean valid;
60     gint width;
61     elemstyle_color_t color;
62     } bg;
63    
64     float zoom_max; // XXX probably belongs in elemstyle_s
65     } elemstyle_line_t;
66    
67 harbaum 15 /* attribute modifiers */
68     typedef enum {
69     ES_MOD_NONE = 0, // don't change attribute
70     ES_MOD_ADD, // add constant value
71     ES_MOD_SUB, // subtract constant value
72     ES_MOD_PERCENT // scale by x percent
73     } elemstyle_mod_mode_t;
74    
75     /* a width with modifier */
76 harbaum 1 typedef struct {
77 harbaum 15 elemstyle_mod_mode_t mod;
78     gint width;
79     } elemstyle_width_mod_t;
80    
81    
82     typedef struct {
83     elemstyle_width_mod_t line, bg;
84     } elemstyle_line_mod_t;
85    
86     typedef struct {
87 harbaum 1 elemstyle_color_t color;
88     float zoom_max; // XXX probably belongs in elemstyle_s
89     } elemstyle_area_t;
90    
91     typedef struct {
92     gboolean annotate;
93     char *filename;
94     float zoom_max; // XXX probably belongs in elemstyle_s
95     } elemstyle_icon_t;
96    
97     typedef struct elemstyle_s {
98     struct {
99     char *key;
100     char *value;
101     } condition;
102    
103     elemstyle_type_t type;
104    
105     union {
106 harbaum 15 elemstyle_line_mod_t *line_mod;
107 harbaum 1 elemstyle_line_t *line;
108     elemstyle_area_t *area;
109     };
110    
111     elemstyle_icon_t *icon;
112    
113     struct elemstyle_s *next;
114     } elemstyle_t;
115    
116     elemstyle_t *josm_elemstyles_load(char *name);
117     void josm_elemstyles_free(elemstyle_t *elemstyles);
118     gboolean parse_color(xmlNode *a_node, char *name, elemstyle_color_t *color);
119    
120     void josm_elemstyles_colorize_node(struct style_s *style, node_t *node);
121     void josm_elemstyles_colorize_way(struct style_s *style, way_t *way);
122     void josm_elemstyles_colorize_world(struct style_s *style, osm_t *osm);
123    
124     #endif // JOSM_ELEMSTYLES_H
125 achadwick 13
126     // vim:et:ts=8:sw=2:sts=2:ai