#ifndef __DW_IMAGE_H__ #define __DW_IMAGE_H__ #include #include "dw_widget.h" #include "url.h" /* for DilloUrl */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define DW_TYPE_IMAGE (a_Dw_image_get_type ()) #define DW_IMAGE(obj) GTK_CHECK_CAST (obj,DW_TYPE_IMAGE, DwImage) #define DW_IMAGE_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, DW_TYPE_IMAGE, \ DwImageClass) #define DW_IS_IMAGE(obj) GTK_CHECK_TYPE (obj, DW_TYPE_IMAGE) typedef enum { DW_IMAGE_RGB } DwImageType; typedef struct _DwImage DwImage; typedef struct _DwImageClass DwImageClass; typedef struct _DwImageMap DwImageMap; typedef struct _DwImageMapList DwImageMapList; typedef struct _DwImageMapShape DwImageMapShape; struct _DwImage { DwWidget widget; DilloUrl *url; gint version; DwImageType type; guchar *buffer; gint width; gint height; gint alt_text_width; /* non NULL if image is scaled */ guchar *scaled_buffer; /* ALT text (for selection) */ gchar *alt_text; DwImageMapList *map_list; DilloUrl *usemap_url; gboolean ismap; gint hover_link; gint pressed_link; gboolean selected[DW_HIGHLIGHT_NUM_LAYERS]; }; struct _DwImageClass { DwWidgetClass parent_class; gboolean (*link_entered) (DwImage *page, gint link, gint x, gint y); gboolean (*link_pressed) (DwImage *page, gint link, gint x, gint y, GdkEventButton *event); gboolean (*link_released) (DwImage *page, gint link, gint x, gint y, GdkEventButton *event); gboolean (*link_clicked) (DwImage *page, gint link, gint x, gint y, GdkEventButton *event); }; /* * Image Maps */ #define DW_IMAGE_MAP_SHAPE_RECT 0 #define DW_IMAGE_MAP_SHAPE_CIRCLE 1 #define DW_IMAGE_MAP_SHAPE_POLY 2 struct _DwImageMapList { DwImageMap *maps; gint num_maps; gint num_maps_max; DwImageMapShape *shapes; gint num_shapes; gint num_shapes_max; }; struct _DwImageMap { DilloUrl *url; gint start_shape; }; struct _DwImageMapShape { gint type; gint link; union { GdkRegion *poly; struct { gint32 x; gint32 y; gint32 r2; } circle; struct { gint32 top; gint32 bottom; gint32 left; gint32 right; } rect; } data; }; /* * Function prototypes */ GtkType a_Dw_image_get_type (void); DwWidget* a_Dw_image_new (DwImageType type, const gchar *alt_text); void a_Dw_image_size (DwImage *image, gint width, gint height); void a_Dw_image_draw_row(DwImage *image, gint Width, gint Height, gint x, gint y); void a_Dw_image_set_buffer(DwImage *image, guchar *ImageBuffer, DilloUrl *url, gint version); void a_Dw_image_set_ismap (DwImage *image); void a_Dw_image_set_usemap (DwImage *image, DwImageMapList *map_list, DilloUrl *usemap_url); /* Image maps */ void a_Dw_image_map_list_init (DwImageMapList *list); void a_Dw_image_map_list_free (DwImageMapList *list); void a_Dw_image_map_list_add_map (DwImageMapList *list, DilloUrl *url); void a_Dw_image_map_list_add_shape (DwImageMapList *list, gint type, gint link, GdkPoint *points, gint num_points); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __DW_IMAGE_H__ */