#ifndef __DW_GTK_VIEWPORT_H__ #define __DW_GTK_VIEWPORT_H__ #include #include "dw_widget.h" #include "findtext.h" #include "selection.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define GTK_TYPE_DW_VIEWPORT (a_Dw_gtk_viewport_get_type ()) #define GTK_DW_VIEWPORT(obj) (GTK_CHECK_CAST (obj, \ GTK_TYPE_DW_VIEWPORT,GtkDwViewport)) #define GTK_DW_VIEWPORT_CLASS(klass) (GTK_CHECK_CLASS_CAST (klass, \ GTK_TYPE_DW_VIEWPORT, \ GtkDwViewportClass) #define GTK_IS_DW_VIEWPORT(obj) GTK_CHECK_TYPE (obj, \ GTK_TYPE_DW_VIEWPORT) typedef enum { DW_GTK_VIEWPORT_DRAW, DW_GTK_VIEWPORT_RESIZE } DwGtkViewportDrawResizeAction; typedef struct _GtkDwViewport GtkDwViewport; typedef struct _GtkDwViewportClass GtkDwViewportClass; struct _GtkDwViewport { GtkLayout layout; GdkPixmap *back_pixmap; /* backing pixmap for buffering */ gint back_width, back_height; gint depth; DwWidget *child; DwWidget *last_entered; gboolean hscrollbar_used, vscrollbar_used, calc_size_blocked; /* updated by Dw_gtk_viewport_motion_notify */ gdouble mouse_x, mouse_y; gchar *anchor; DwRectPosition anchor_pos; gint anchor_idle_id; FindtextState *findtext_state; Selection *selection; /* Anchors of the widget tree. * Key: gchar*, has to be stored elsewhere * Value: an instance of GtkDwViewportAnchor (in .c file) */ GHashTable *anchors_table; /* Queue of draw and resize requests. */ gint draw_resize_idle_id; DwGtkViewportDrawResizeAction draw_resize_action; /* What has to be redrawn. DwRectangle's are in world coordinates. */ DwRectangle *draw_areas; gint num_draw_areas; gint num_draw_areas_max; /* number allocated */ }; struct _GtkDwViewportClass { GtkLayoutClass parent_class; }; GtkType a_Dw_gtk_viewport_get_type (void); GtkWidget* a_Dw_gtk_viewport_new (GtkAdjustment *hadjustment, GtkAdjustment *vadjustment); void a_Dw_gtk_viewport_add_dw (GtkDwViewport *viewport, DwWidget *widget); void a_Dw_gtk_viewport_set_anchor (GtkDwViewport *viewport, const gchar *anchor); void a_Dw_gtk_viewport_set_scrolling_position (GtkDwViewport *viewport, gint32 x, gint32 y); DwWidget* a_Dw_gtk_viewport_widget_at_viewport_point (GtkDwViewport *viewport, gint32 vx, gint32 vy); gchar* p_Dw_gtk_viewport_add_anchor (DwWidget *widget, const gchar* name, gint32 y); void p_Dw_gtk_viewport_change_anchor (DwWidget *widget, gchar *name, gint32 y); void p_Dw_gtk_viewport_remove_anchor (DwWidget *widget, gchar *name); void Dw_gtk_viewport_remove_dw (GtkDwViewport *viewport); void Dw_gtk_viewport_calc_size (GtkDwViewport *viewport); DwWidget* Dw_gtk_viewport_widget_at_point (GtkDwViewport *viewport, gint32 x, gint32 y); void Dw_gtk_viewport_update_anchor (GtkDwViewport *viewport); void Dw_gtk_viewport_scroll_to (GtkDwViewport *viewport, DwHPosition hpos, DwVPosition vpos, gint32 x, gint32 y, gint32 width, gint32 height); void Dw_gtk_viewport_remove_anchor (GtkDwViewport *viewport); void Dw_gtk_viewport_queue_draw (GtkDwViewport *viewport, gint32 x, gint32 y, gint32 width, gint32 height); void Dw_gtk_viewport_queue_resize (GtkDwViewport *viewport); void Dw_gtk_viewport_update_background (GtkDwViewport *viewport); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __DW_GTK_VIEWPORT_H__ */