]> git.cworth.org Git - grrobot/blobdiff - src/grr_icon.h
grrobot will now load SVG icons from /share/grrobot/*.svg
[grrobot] / src / grr_icon.h
index 5a8951c41552f200c8f7f2074d4fb2924419973f..ca8dfef9f8299aea754e6153dd113e70f5151a9d 100644 (file)
 #ifndef GRR_ICON_H
 #define GRR_ICON_H
 
+#include <rr.h>
+#include <xsvg.h>
+
 typedef struct grr_icon {
     xsvg_t *xsvg;
+
+    XrSurface *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, XrState *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, XrState *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, XrState *xrs);
 
-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