Blame gegl/buffer/gegl-tile-source.h

Packit bc1512
/* This file is part of GEGL.
Packit bc1512
 *
Packit bc1512
 * This library is free software; you can redistribute it and/or
Packit bc1512
 * modify it under the terms of the GNU Lesser General Public
Packit bc1512
 * License as published by the Free Software Foundation; either
Packit bc1512
 * version 3 of the License, or (at your option) any later version.
Packit bc1512
 *
Packit bc1512
 * This library is distributed in the hope that it will be useful,
Packit bc1512
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit bc1512
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit bc1512
 * Lesser General Public License for more details.
Packit bc1512
 *
Packit bc1512
 * You should have received a copy of the GNU Lesser General Public
Packit bc1512
 * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
Packit bc1512
 *
Packit bc1512
 * Copyright 2006-2011 Øyvind Kolås <pippin@gimp.org>
Packit bc1512
 */
Packit bc1512
Packit bc1512
#ifndef __GEGL_TILE_SOURCE_H__
Packit bc1512
#define __GEGL_TILE_SOURCE_H__
Packit bc1512
Packit bc1512
#include <glib-object.h>
Packit bc1512
#include <babl/babl.h>
Packit bc1512
#include "gegl-tile.h"
Packit bc1512
Packit bc1512
/***
Packit bc1512
 * GeglTileSource is the very top classes of the tile/buffer handling of Gegl. It defines the generic
Packit bc1512
 * command mechanism to interact with a set of tiles. This classe is derived in GeglTileBackend and
Packit bc1512
 * GeglTileHandler.
Packit bc1512
 */
Packit bc1512
Packit bc1512
G_BEGIN_DECLS
Packit bc1512
Packit bc1512
#define GEGL_TYPE_TILE_SOURCE            (gegl_tile_source_get_type ())
Packit bc1512
#define GEGL_TILE_SOURCE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEGL_TYPE_TILE_SOURCE, GeglTileSource))
Packit bc1512
#define GEGL_TILE_SOURCE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  GEGL_TYPE_TILE_SOURCE, GeglTileSourceClass))
Packit bc1512
#define GEGL_IS_TILE_SOURCE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEGL_TYPE_TILE_SOURCE))
Packit bc1512
#define GEGL_IS_TILE_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GEGL_TYPE_TILE_SOURCE))
Packit bc1512
#define GEGL_TILE_SOURCE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GEGL_TYPE_TILE_SOURCE, GeglTileSourceClass))
Packit bc1512
Packit bc1512
typedef gint GeglTileCommand;
Packit bc1512
Packit bc1512
struct _GeglTileSource
Packit bc1512
{
Packit bc1512
  GObject   parent_instance;
Packit bc1512
  gpointer  (*command)  (GeglTileSource  *gegl_tile_source,
Packit bc1512
                         GeglTileCommand  command,
Packit bc1512
                         gint             x,
Packit bc1512
                         gint             y,
Packit bc1512
                         gint             z,
Packit bc1512
                         gpointer         data);
Packit bc1512
  gpointer  padding[4];
Packit bc1512
};
Packit bc1512
Packit bc1512
struct _GeglTileSourceClass
Packit bc1512
{
Packit bc1512
  GObjectClass  parent_class;
Packit bc1512
  gpointer      padding[4];
Packit bc1512
};
Packit bc1512
Packit bc1512
GType      gegl_tile_source_get_type (void) G_GNUC_CONST;
Packit bc1512
Packit bc1512
/* All commands have the ability to pass commands to all tiles the handlers
Packit bc1512
 * add abstraction to the commands the documentaiton given here is valid
Packit bc1512
 * when the commands are issued to a full blown GeglBuffer instance.
Packit bc1512
 */
Packit bc1512
Packit bc1512
enum _GeglTileCommand
Packit bc1512
{
Packit bc1512
  GEGL_TILE_IDLE = 0,
Packit bc1512
  GEGL_TILE_SET,
Packit bc1512
  GEGL_TILE_GET,
Packit bc1512
  GEGL_TILE_IS_CACHED,
Packit bc1512
  GEGL_TILE_EXIST,
Packit bc1512
  GEGL_TILE_VOID,
Packit bc1512
  GEGL_TILE_FLUSH,
Packit bc1512
  GEGL_TILE_REFETCH,
Packit bc1512
  GEGL_TILE_REINIT,
Packit bc1512
  GEGL_TILE_LAST_COMMAND
Packit bc1512
};
Packit bc1512
Packit bc1512
#ifdef NOT_REALLY_COS_THIS_IS_MACROS
Packit bc1512
/* The functions documented below are actually macros, all using the command vfunc */
Packit bc1512
Packit bc1512
/**
Packit bc1512
 * gegl_tile_source_get_tile:
Packit bc1512
 * @source: a GeglTileSource *
Packit bc1512
 * @x: x coordinate
Packit bc1512
 * @y: y coordinate
Packit bc1512
 * @z: tile zoom level
Packit bc1512
 *
Packit bc1512
 * Get a GeglTile *from the buffer, mipmap tiles for levels z!=0 will be
Packit bc1512
 * created on the fly as needed, empty tiles returned are copy on write
Packit bc1512
 * and must be locked before written to, and unlocked afterwards.
Packit bc1512
 *
Packit bc1512
 * Returns: the tile at x,y,z or NULL if the tile could not be provided.
Packit bc1512
 */
Packit bc1512
GeglTile *gegl_tile_source_get_tile  (GeglTileSource *source,
Packit bc1512
                                      gint            x,
Packit bc1512
                                      gint            y,
Packit bc1512
                                      gint            z);
Packit bc1512
Packit bc1512
/**
Packit bc1512
 * gegl_tile_source_set_tile:
Packit bc1512
 * @source: a GeglTileSource *
Packit bc1512
 * @x: x coordinate
Packit bc1512
 * @y: y coordinate
Packit bc1512
 * @z: tile zoom level
Packit bc1512
 * @tile: a #GeglTile
Packit bc1512
 *
Packit bc1512
 * Set a GeglTile in *from the buffer.
Packit bc1512
 *
Packit bc1512
 * Returns: the TRUE if the set was successful.
Packit bc1512
 */
Packit bc1512
gboolean  gegl_tile_source_set_tile  (GeglTileSource *source,
Packit bc1512
                                      gint            x,
Packit bc1512
                                      gint            y,
Packit bc1512
                                      gint            z,
Packit bc1512
                                      GeglTile       *tile);
Packit bc1512
/**
Packit bc1512
 * gegl_tile_source_is_cached:
Packit bc1512
 * @source: a GeglTileSource *
Packit bc1512
 * @x: tile x coordinate
Packit bc1512
 * @y: tile y coordinate
Packit bc1512
 * @z: tile zoom level
Packit bc1512
 *
Packit bc1512
 * Checks if a tile is in cache and easily retrieved.
Packit bc1512
 */
Packit bc1512
gboolean  gegl_tile_source_is_cached (GeglTileSource *source,
Packit bc1512
                                      gint            x,
Packit bc1512
                                      gint            y,
Packit bc1512
                                      gint            z);
Packit bc1512
/**
Packit bc1512
 * gegl_tile_source_exist:
Packit bc1512
 * @source: a GeglTileSource *
Packit bc1512
 * @x: x coordinate
Packit bc1512
 * @y: y coordinate
Packit bc1512
 * @z: tile zoom level
Packit bc1512
 *
Packit bc1512
 * Checks if a tile exists, this check would not cause the tile to be swapped
Packit bc1512
 * in.
Packit bc1512
 */
Packit bc1512
gboolean  gegl_tile_source_exist     (GeglTileSource *source,
Packit bc1512
                                      gint            x,
Packit bc1512
                                      gint            y,
Packit bc1512
                                      gint            z);
Packit bc1512
Packit bc1512
/**
Packit bc1512
 * gegl_tile_source_reinit:
Packit bc1512
 * @source: a GeglTileSource *
Packit bc1512
 *
Packit bc1512
 * Causes all tiles in cache to be refetched.
Packit bc1512
 */
Packit bc1512
void      gegl_tile_source_reinit    (GeglTileSource *source);
Packit bc1512
Packit bc1512
/**
Packit bc1512
 * gegl_tile_source_void:
Packit bc1512
 * @source: a GeglTileSource *
Packit bc1512
 * @x: x coordinate
Packit bc1512
 * @y: y coordinate
Packit bc1512
 * @z: tile zoom level
Packit bc1512
 *
Packit bc1512
 * Causes all references to a tile to be removed.
Packit bc1512
 */
Packit bc1512
void      gegl_tile_source_void      (GeglTileSource *source,
Packit bc1512
                                      gint            x,
Packit bc1512
                                      gint            y,
Packit bc1512
                                      gint            z);
Packit bc1512
/*    INTERNAL API
Packit bc1512
 * gegl_tile_source_refetch:
Packit bc1512
 * @source: a GeglTileSource *
Packit bc1512
 * @x: x coordinate
Packit bc1512
 * @y: y coordinate
Packit bc1512
 * @z: tile zoom level
Packit bc1512
 *
Packit bc1512
 * A message used internally when watching external buffers to indicate that
Packit bc1512
 * a refresh of all data relating to the coordinates needs to be refetched.
Packit bc1512
 * Subsequent get calls should get new and valid data for the tile coordinates.
Packit bc1512
 */
Packit bc1512
void      gegl_tile_source_refetch   (GeglTileSource *source,
Packit bc1512
                                      gint            x,
Packit bc1512
                                      gint            y,
Packit bc1512
                                      gint            z);
Packit bc1512
/*   INTERNAL API
Packit bc1512
 * gegl_tile_source_idle:
Packit bc1512
 * @source: a GeglTileSource *
Packit bc1512
 *
Packit bc1512
 * Allow different parts of the buffer to do idle work (saving cached
Packit bc1512
 * data lazily, perhaps prefetching in the future?), monitoring for
Packit bc1512
 * changes or other tasks. Used internally by the buffer object.
Packit bc1512
 *
Packit bc1512
 * Returns: the TRUE if some work was done.
Packit bc1512
 */
Packit bc1512
gboolean  gegl_tile_source_idle      (GeglTileSource *source);
Packit bc1512
Packit bc1512
#endif
Packit bc1512
Packit bc1512
#define gegl_tile_source_command(source,cmd,x,y,z,tile)\
Packit bc1512
   (((GeglTileSource*)(source))->command(source,cmd,x,y,z,tile))
Packit bc1512
Packit bc1512
#define gegl_tile_source_set_tile(source,x,y,z,tile) \
Packit bc1512
   (gboolean)GPOINTER_TO_INT(gegl_tile_source_command(source,GEGL_TILE_SET,x,y,z,tile))
Packit bc1512
#define gegl_tile_source_get_tile(source,x,y,z) \
Packit bc1512
   (GeglTile*)gegl_tile_source_command(source,GEGL_TILE_GET,x,y,z,NULL)
Packit bc1512
#define gegl_tile_source_is_cached(source,x,y,z) \
Packit bc1512
   (gboolean)GPOINTER_TO_INT(gegl_tile_source_command(source,GEGL_TILE_IS_CACHED,x,y,z,NULL))
Packit bc1512
#define gegl_tile_source_exist(source,x,y,z) \
Packit bc1512
   (gboolean)GPOINTER_TO_INT(gegl_tile_source_command(source,GEGL_TILE_EXIST,x,y,z,NULL))
Packit bc1512
#define gegl_tile_source_void(source,x,y,z) \
Packit bc1512
   gegl_tile_source_command(source,GEGL_TILE_VOID,x,y,z,NULL)
Packit bc1512
#define gegl_tile_source_refetch(source,x,y,z) \
Packit bc1512
   gegl_tile_source_command(source,GEGL_TILE_REFETCH,x,y,z,NULL)
Packit bc1512
#define gegl_tile_source_reinit(source) \
Packit bc1512
   gegl_tile_source_command(source,GEGL_TILE_REINIT,0,0,0,NULL)
Packit bc1512
#define gegl_tile_source_idle(source) \
Packit bc1512
   (gboolean)GPOINTER_TO_INT(gegl_tile_source_command(source,GEGL_TILE_IDLE,0,0,0,NULL))
Packit bc1512
Packit bc1512
G_END_DECLS
Packit bc1512
Packit bc1512
#endif