#ifndef GRR_ICON_H
#define GRR_ICON_H
+#include <rr.h>
+#include <svg-cairo.h>
+
typedef struct grr_icon {
- xsvg_t *xsvg;
+ svg_cairo_t *svg_cairo;
+
+ cairo_surface_t *surface;
+ int surface_width;
+ int surface_height;
} grr_icon_t;
grr_icon_t *
-grr_icon_create (char *name)
-{
- grr_icon *icon;
-
- icon = malloc (sizeof (grr_icon_t));
- if (icon == NULL)
- return NULL;
-
- _grr_icon_init (icon, name);
-
- return icon;
-}
-
-static rr_status_t
-_grr_icon_init (grr_icon_t *icon, char *name)
-{
- xsvg_status_t status;
- char *file, *buf;
-
- status = xsvg_create (&icon->xsvg);
- if (status)
- return RR_STATUS_NO_MEMORY;
-
- file = grr_icon_find_file (name);
-
- if (file) {
- status = xsvg_parse_file (icon->xsvg, file);
- if (status == XSVG_STATUS_SUCCESS) {
- free (file);
- return RR_STATUS_SUCCESS;
- }
- fprintf (stderr, "Error parsing SVG icon: %s\n", file);
- free (file);
- }
-
- buf = grr_icon_find_buffer (name);
- status = xsvg_parse_buffer (icon->xsvg, buf, strlen (buf));
- if (status) {
- fprintf (stderr, "Error parsing built-in SVG icon for: %s\n", name);
- return RR_STATUS_PARSE_ERROR;
- }
-
- return RR_STATUS_SUCCESS;
-}
-
-/* XXX: This could be made more interesting, (eg. search in ~/.grrobot
- or something). */
-static char *
-_grr_icon_find_file (char *name)
-{
- int err;
- char *file;
- struct stat stat_buf;
-
- rr_string_sprintf_alloc (&file, "%s/%s", GRR_ICON_DIR, name);
- if (file == NULL)
- return NULL;
-
- err = stat (file, &stat_buf);
- if (err == 0 && S_ISREG (state.st_mode))
- return (file);
- free (file);
-}
+grr_icon_create (char *name);
-extern char *GRR_ROBOT_BLUE_SVG;
-extern char *GRR_ROBOT_GREEN_SVG;
-extern char *GRR_ROBOT_RED_SVG;
-extern char *GRR_ROBOT_YELLOW_SVG;
+void
+grr_icon_destroy (grr_icon_t *icon);
-extern char *GRR_TARGET_BLUE_CIRCLE_SVG;
-extern char *GRR_TARGET_GREEN_CIRCLE_SVG;
-extern char *GRR_TARGET_RED_CIRCLE_SVG;
-extern char *GRR_TARGET_YELLOW_CIRCLE_SVG;
+void
+grr_icon_draw (grr_icon_t *icon, cairo_t *xrs);
-extern char *GRR_TARGET_BLUE_OCTAGON_SVG;
-extern char *GRR_TARGET_GREEN_OCTAGON_SVG;
-extern char *GRR_TARGET_RED_OCTAGON_SVG;
-extern char *GRR_TARGET_YELLOW_OCTAGON_SVG;
+void
+grr_icon_predraw (grr_icon_t *icon, cairo_t *xrs, int width, int height);
-extern char *GRR_TARGET_BLUE_SQUARE_SVG;
-extern char *GRR_TARGET_GREEN_SQUARE_SVG;
-extern char *GRR_TARGET_RED_SQUARE_SVG;
-extern char *GRR_TARGET_YELLOW_SQUARE_SVG;
+void
+grr_icon_draw_predrawn (grr_icon_t *icon, cairo_t *xrs, double alpha);
-extern char *GRR_TARGET_BLUE_TRIANGLE_SVG;
-extern char *GRR_TARGET_GREEN_TRIANGLE_SVG;
-extern char *GRR_TARGET_RED_TRIANGLE_SVG;
-extern char *GRR_TARGET_YELLOW_TRIANGLE_SVG;
+char *
+grr_icon_robot_name (rr_robot_t robot);
-extern char *GRR_TARGET_WHIRL_SVG;
+char *
+grr_icon_target_name (rr_target_t target);
#endif