1 /* grrobot - Ricochet Robot using GTK+ and Xr
3 * Copyright © 2003 Carl Worth
5 * Permission to use, copy, modify, distribute, and sell this software
6 * and its documentation for any purpose is hereby granted without
7 * fee, provided that the above copyright notice appear in all copies
8 * and that both that copyright notice and this permission notice
9 * appear in supporting documentation, and that the name of Carl Worth
10 * not be used in advertising or publicity pertaining to distribution
11 * of the software without specific, written prior permission.
12 * Carl Worth makes no representations about the suitability of this
13 * software for any purpose. It is provided "as is" without express
14 * or implied warranty.
16 * CARL WORTH DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
18 * NO EVENT SHALL CARL WORTH BE LIABLE FOR ANY SPECIAL, INDIRECT OR
19 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
20 * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
21 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
22 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
24 * Author: Carl Worth <carl@theworths.org>
28 #include "grr_icon_svg.h"
36 "robot_blue", GRR_ICON_SVG_ROBOT_BLUE },
38 "robot_green", GRR_ICON_SVG_ROBOT_GREEN },
40 "robot_red", GRR_ICON_SVG_ROBOT_RED },
42 "robot_yellow", GRR_ICON_SVG_ROBOT_YELLOW },
44 { RR_TARGET_BLUE_CIRCLE,
45 "target_blue_circle", GRR_ICON_SVG_TARGET_BLUE_CIRCLE },
46 { RR_TARGET_BLUE_OCTAGON,
47 "target_blue_octagon", GRR_ICON_SVG_TARGET_BLUE_OCTAGON },
48 { RR_TARGET_BLUE_SQUARE,
49 "target_blue_square", GRR_ICON_SVG_TARGET_BLUE_SQUARE },
50 { RR_TARGET_BLUE_TRIANGLE,
51 "target_blue_triangle", GRR_ICON_SVG_TARGET_BLUE_TRIANGLE },
53 { RR_TARGET_GREEN_CIRCLE,
54 "target_green_circle", GRR_ICON_SVG_TARGET_GREEN_CIRCLE },
55 { RR_TARGET_GREEN_OCTAGON,
56 "target_green_octagon", GRR_ICON_SVG_TARGET_GREEN_OCTAGON },
57 { RR_TARGET_GREEN_SQUARE,
58 "target_green_square", GRR_ICON_SVG_TARGET_GREEN_SQUARE },
59 { RR_TARGET_GREEN_TRIANGLE,
60 "target_green_triangle", GRR_ICON_SVG_TARGET_GREEN_TRIANGLE },
62 { RR_TARGET_RED_CIRCLE,
63 "target_red_circle", GRR_ICON_SVG_TARGET_RED_CIRCLE },
64 { RR_TARGET_RED_OCTAGON,
65 "target_red_octagon", GRR_ICON_SVG_TARGET_RED_OCTAGON },
66 { RR_TARGET_RED_SQUARE,
67 "target_red_square", GRR_ICON_SVG_TARGET_RED_SQUARE },
68 { RR_TARGET_RED_TRIANGLE,
69 "target_red_triangle", GRR_ICON_SVG_TARGET_RED_TRIANGLE },
71 { RR_TARGET_YELLOW_CIRCLE,
72 "target_yellow_circle", GRR_ICON_SVG_TARGET_YELLOW_CIRCLE },
73 { RR_TARGET_YELLOW_OCTAGON,
74 "target_yellow_octagon", GRR_ICON_SVG_TARGET_YELLOW_OCTAGON },
75 { RR_TARGET_YELLOW_SQUARE,
76 "target_yellow_square", GRR_ICON_SVG_TARGET_YELLOW_SQUARE },
77 { RR_TARGET_YELLOW_TRIANGLE,
78 "target_yellow_triangle", GRR_ICON_SVG_TARGET_YELLOW_TRIANGLE },
81 "whirl", GRR_ICON_SVG_TARGET_WHIRL },
84 "wall", GRR_ICON_SVG_WALL },
87 "cell", GRR_ICON_SVG_CELL }
90 typedef struct grr_icon {
95 grr_icon_create (char *name)
99 icon = malloc (sizeof (grr_icon_t));
103 _grr_icon_init (icon, name);
109 _grr_icon_init (grr_icon_t *icon, char *name)
111 xsvg_status_t status;
114 status = xsvg_create (&icon->xsvg);
116 return RR_STATUS_NO_MEMORY;
118 file = grr_icon_find_file (name);
121 status = xsvg_parse_file (icon->xsvg, file);
122 if (status == XSVG_STATUS_SUCCESS) {
124 return RR_STATUS_SUCCESS;
126 fprintf (stderr, "Error parsing SVG icon: %s\n", file);
130 buf = grr_icon_find_buffer (name);
131 status = xsvg_parse_buffer (icon->xsvg, buf, strlen (buf));
133 fprintf (stderr, "Error parsing built-in SVG icon for: %s\n", name);
134 return RR_STATUS_PARSE_ERROR;
137 return RR_STATUS_SUCCESS;
140 /* XXX: This could be made more interesting, (eg. search in ~/.grrobot
143 _grr_icon_find_file (char *name)
147 struct stat stat_buf;
149 rr_string_sprintf_alloc (&file, "%s/%s", GRR_ICON_DIR, name);
153 err = stat (file, &stat_buf);
154 if (err == 0 && S_ISREG (state.st_mode))