Use gdk_rectangle_intersect() in renderer-tiles
[geeqie.git] / src / pixbuf-renderer.h
index 136f1f0..8f3fff0 100644 (file)
 #ifndef PIXBUF_RENDERER_H
 #define PIXBUF_RENDERER_H
 
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <gdk/gdk.h>
+#include <glib-object.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include "typedefs.h"
+
+struct PixbufRenderer;
+
 #define TYPE_PIXBUF_RENDERER           (pixbuf_renderer_get_type())
 #define PIXBUF_RENDERER(obj)           (G_TYPE_CHECK_INSTANCE_CAST((obj), TYPE_PIXBUF_RENDERER, PixbufRenderer))
 #define PIXBUF_RENDERER_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST((klass), TYPE_PIXBUF_RENDERER, PixbufRendererClass))
 #define ROUND_DOWN(A,B) ((gint)(((A))/(B))*(B))
 
 
-typedef struct _RendererFuncs RendererFuncs;
-
-typedef struct _PixbufRenderer PixbufRenderer;
-typedef struct _PixbufRendererClass PixbufRendererClass;
-
-
-typedef gint (* PixbufRendererTileRequestFunc)(PixbufRenderer *pr, gint x, gint y,
-                                              gint width, gint height, GdkPixbuf *pixbuf, gpointer user_data);
-typedef void (* PixbufRendererTileDisposeFunc)(PixbufRenderer *pr, gint x, gint y,
-                                              gint width, gint height, GdkPixbuf *pixbuf, gpointer user_data);
+using PixbufRendererTileRequestFunc = gint (*)(PixbufRenderer *, gint, gint, gint, gint, GdkPixbuf *, gpointer);
+using PixbufRendererTileDisposeFunc = void (*)(PixbufRenderer *, gint, gint, gint, gint, GdkPixbuf *, gpointer);
 
-typedef void (* PixbufRendererPostProcessFunc)(PixbufRenderer *pr, GdkPixbuf **pixbuf, gint x, gint y,
-                                              gint width, gint height, gpointer user_data);
+using PixbufRendererPostProcessFunc = void (*)(PixbufRenderer *, GdkPixbuf **, gint, gint, gint, gint, gpointer);
 
-typedef enum {
-       PR_SCROLL_RESET_TOPLEFT = 0,
-       PR_SCROLL_RESET_CENTER,
-       PR_SCROLL_RESET_NOCHANGE,
-       PR_SCROLL_RESET_COUNT,
-} PixbufRendererScrollResetType;
-
-typedef enum {
+enum ImageRenderType {
        TILE_RENDER_NONE = 0, /**< do nothing */
        TILE_RENDER_AREA, /**< render an area of the tile */
        TILE_RENDER_ALL /**< render the whole tile */
-} ImageRenderType;
+};
 
-typedef enum {
+enum OverlayRendererFlags {
        OVL_NORMAL      = 0,
        OVL_RELATIVE    = 1 << 0, /**< x,y coordinates are relative, negative values start bottom right */
        /* OVL_HIDE_ON_SCROLL = 1 << 1*/ /**< hide temporarily when scrolling (not yet implemented) */
-} OverlayRendererFlags;
+};
 
-struct _RendererFuncs
+struct RendererFuncs
 {
-//     void (*redraw)(void *renderer, gint x, gint y, gint w, gint h,
-  //                   gint clamp, ImageRenderType render, gboolean new_data, gboolean only_existing);
     void (*area_changed)(void *renderer, gint src_x, gint src_y, gint src_w, gint src_h); /**< pixbuf area changed */
        void (*invalidate_region)(void *renderer, gint x, gint y, gint w, gint h);
        void (*scroll)(void *renderer, gint x_off, gint y_off); /**< scroll */
@@ -114,7 +106,7 @@ struct _RendererFuncs
        void (*free)(void *renderer);
 };
 
-struct _PixbufRenderer
+struct PixbufRenderer
 {
        GtkEventBox eventbox;
 
@@ -147,7 +139,7 @@ struct _PixbufRenderer
        gint y_scroll;
 
        gdouble norm_center_x;  /**< coordinates of viewport center in the image, in range 0.0 - 1.0 */
-       gdouble norm_center_y;  /**< these coordinates are used for PR_SCROLL_RESET_NOCHANGE and should be preserved over periods with NULL pixbuf */
+       gdouble norm_center_y;  /**< these coordinates are used for ScrollReset::NOCHANGE and should be preserved over periods with NULL pixbuf */
 
        gdouble subpixel_x_scroll; /**< subpixel scroll alignment, used to prevent accumulation of rounding errors */
        gdouble subpixel_y_scroll;
@@ -163,7 +155,7 @@ struct _PixbufRenderer
        gboolean zoom_2pass;
        gboolean zoom_expand;
 
-       PixbufRendererScrollResetType scroll_reset;
+       ScrollReset scroll_reset;
 
        gboolean has_frame;
 
@@ -177,7 +169,7 @@ struct _PixbufRenderer
        gint autofit_limit_size;
        gint enlargement_limit_size;
 
-       GdkColor color;
+       GdkRGBA color;
 
        /*< private >*/
        gboolean in_drag;
@@ -234,7 +226,7 @@ struct _PixbufRenderer
        gboolean ignore_alpha;
 };
 
-struct _PixbufRendererClass
+struct PixbufRendererClass
 {
        GtkEventBoxClass parent_class;
 
@@ -250,12 +242,11 @@ struct _PixbufRendererClass
 
 
 
-GType pixbuf_renderer_get_type(void);
+GType pixbuf_renderer_get_type();
 
-PixbufRenderer *pixbuf_renderer_new(void);
+PixbufRenderer *pixbuf_renderer_new();
 
 void pixbuf_renderer_set_parent(PixbufRenderer *pr, GtkWindow *window);
-GtkWindow *pixbuf_renderer_get_parent(PixbufRenderer *pr);
 
 /**
  * @headerfile pixbuf_renderer_set_pixbuf
@@ -272,7 +263,6 @@ void pixbuf_renderer_set_pixbuf_lazy(PixbufRenderer *pr, GdkPixbuf *pixbuf, gdou
 GdkPixbuf *pixbuf_renderer_get_pixbuf(PixbufRenderer *pr);
 
 void pixbuf_renderer_set_orientation(PixbufRenderer *pr, gint orientation);
-gint pixbuf_renderer_get_orientation(PixbufRenderer *pr);
 
 /**
  * @headerfile pixbuf_renderer_set_stereo_data
@@ -338,18 +328,11 @@ gboolean pixbuf_renderer_get_scaled_size(PixbufRenderer *pr, gint *width, gint *
  */
 gboolean pixbuf_renderer_get_visible_rect(PixbufRenderer *pr, GdkRectangle *rect);
 
-/**
- * @headerfile pixbuf_renderer_get_virtual_rect
- * actual size of the PixbufRenderer window minus borders,
- * x and y are the scroll offset and include zoom factor.
- */
-gboolean pixbuf_renderer_get_virtual_rect(PixbufRenderer *pr, GdkRectangle *rect);
-
 /**
  * @headerfile pixbuf_renderer_set_color
  *  background color
  */
-void pixbuf_renderer_set_color(PixbufRenderer *pr, GdkColor *color);
+void pixbuf_renderer_set_color(PixbufRenderer *pr, GdkRGBA *color);
 
 /* overlay */
 
@@ -376,11 +359,10 @@ gint pixbuf_renderer_stereo_get(PixbufRenderer *pr);
 void pixbuf_renderer_stereo_fixed_set(PixbufRenderer *pr, gint width, gint height, gint x1, gint y1, gint x2, gint y2);
 
 /**
- * @struct _SourceTile
+ * @struct SourceTile
  * protected - for renderer use only
  */
-typedef struct _SourceTile SourceTile;
-struct _SourceTile
+struct SourceTile
 {
        gint x;
        gint y;
@@ -389,9 +371,6 @@ struct _SourceTile
 };
 
 
-gboolean pr_clip_region(gint x, gint y, gint w, gint h,
-                              gint clip_x, gint clip_y, gint clip_w, gint clip_h,
-                              gint *rx, gint *ry, gint *rw, gint *rh);
 void pr_render_complete_signal(PixbufRenderer *pr);
 
 void pr_tile_coords_map_orientation(gint orientation,