+ PropertiesIcon *Properties = (PropertiesIcon*)hook_data;
+ DrawContext *Draw_Context = (DrawContext*)call_data;
+
+ LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes());
+ LttvAttributeValue value;
+ gchar icon_name[MAX_PATH_LEN] = "icons/";
+ IconStruct *icon_info;
+
+ strcat(icon_name, Properties->icon_name);
+
+ g_assert(lttv_iattribute_find_by_path(attributes, icon_name,
+ LTTV_POINTER, &value));
+ if(*(value.v_pointer) == NULL)
+ {
+ *(value.v_pointer) = icon_info = g_new(IconStruct,1);
+
+ icon_info->pixmap = gdk_pixmap_create_from_xpm(Draw_Context->drawable,
+ &icon_info->mask, NULL, Properties->icon_name);
+ }
+ else
+ {
+ icon_info = *(value.v_pointer);
+ }
+
+ gdk_gc_set_clip_mask(Draw_Context->gc, icon_info->mask);
+
+ switch(Properties->position) {
+ case OVER:
+ gdk_gc_set_clip_origin(
+ Draw_Context->gc,
+ Draw_Context->current->modify_over->x,
+ Draw_Context->current->modify_over->y);
+ gdk_draw_drawable(Draw_Context->drawable,
+ Draw_Context->gc,
+ icon_info->pixmap,
+ 0, 0,
+ Draw_Context->current->modify_over->x,
+ Draw_Context->current->modify_over->y,
+ Properties->width, Properties->height);
+
+ Draw_Context->current->modify_over->x += Properties->width;
+
+ break;
+ case MIDDLE:
+ gdk_gc_set_clip_origin(
+ Draw_Context->gc,
+ Draw_Context->current->modify_middle->x,
+ Draw_Context->current->modify_middle->y);
+ gdk_draw_drawable(Draw_Context->drawable,
+ Draw_Context->gc,
+ icon_info->pixmap,
+ 0, 0,
+ Draw_Context->current->modify_middle->x,
+ Draw_Context->current->modify_middle->y,
+ Properties->width, Properties->height);
+
+ Draw_Context->current->modify_middle->x += Properties->width;
+ break;
+ case UNDER:
+ gdk_gc_set_clip_origin(
+ Draw_Context->gc,
+ Draw_Context->current->modify_under->x,
+ Draw_Context->current->modify_under->y);
+ gdk_draw_drawable(Draw_Context->drawable,
+ Draw_Context->gc,
+ icon_info->pixmap,
+ 0, 0,
+ Draw_Context->current->modify_under->x,
+ Draw_Context->current->modify_under->y,
+ Properties->width, Properties->height);
+
+ Draw_Context->current->modify_under->x += Properties->width;
+ break;
+ }
+
+ gdk_gc_set_clip_origin(Draw_Context->gc, 0, 0);
+ gdk_gc_set_clip_mask(Draw_Context->gc, NULL);
+
+ return 0;