## SwfdecRenderer SwfdecRenderer — provide accelerated rendering and caching abilities |

## Synopsis

    #include <swfdec/swfdec.h>

                        SwfdecRenderer;
                        SwfdecRendererClass;
    SwfdecRenderer*     swfdec_renderer_new                 (cairo_surface_t *surface);
    SwfdecRenderer*     swfdec_renderer_new_for_player      (cairo_surface_t *surface,
                                                             SwfdecPlayer *player);
    cairo_surface_t*    swfdec_renderer_get_surface         (SwfdecRenderer *renderer);

## Object Hierarchy

      GObject
       +----SwfdecRenderer

## Properties

      "surface"                  gpointer              : Read / Write / Construct Only

## Description

The SwfdecRenderer object is used internally to improve rendering done by Swfdec.

The first thing a SwfdecRenderer does is provide a way to cache data relevant to rendering. This means it will cache surfaces that are expensive to create (like decoded JPEG images) in a format most suitable to quick rendering. Therefore, it's a good idea to keep renderers around as long as any drawing to the attached surface happens.

The second thing a SwfdecRenderer does is provide access to the surface that is used for rendering, even when not in the process of rendering. This is relevant for font backends, as different surfaces provide different native fonts. See `swfdec_player_set_default_backend()` for details about this.

The third thing SwfdecRenderer does is provide a list of virtual functions for critical operations that you can optimize using subclasses to provide faster implementations. Note that a working default implementation is provided, so you only need to override the functions you care about. See SwfdecRendererClass for details about these functions.

## Details

### SwfdecRenderer

    typedef struct _SwfdecRenderer SwfdecRenderer;

The base renderer object. All its members are private.

### SwfdecRendererClass

    typedef struct {
      cairo_surface_t *	(* create_similar)		(SwfdecRenderer *	renderer,
    							 cairo_surface_t *	surface);
      cairo_surface_t *	(* create_for_data)		(SwfdecRenderer *	renderer,
    							 guint8 *		data,
    							 cairo_format_t		format,
    							 guint			width,
    							 guint			height,
    							 guint			rowstride);
    } SwfdecRendererClass;

The base class for the renderer. It contains some virtual functions that can be overridden in subclasses to accelerate certain time-critical Swfdec functions. For example, a subclass could make use of special hardware features on embedded devices.

`create_similar` () | This function imitates `cairo_surface_create_similar()`. It is supposed to create a surface with identical contents as the given surface, but tuned for usage with the given renderer.
`create_for_data` () | This function imitates `cairo_surface_create_for_data()`. It creates a surface for the given data, tuned for the given renderer. The function takes ownership of the passed in data and is responsible for freeing it with `g_free()` when it no longer needs it.

### swfdec_renderer_new ()

    SwfdecRenderer*     swfdec_renderer_new                 (cairo_surface_t *surface);

Creates a new renderer to be used with the given `surface`.

`surface` : | a cairo surface
Returns : | a new renderer

### swfdec_renderer_new_for_player ()

    SwfdecRenderer*     swfdec_renderer_new_for_player      (cairo_surface_t *surface,
                                                             SwfdecPlayer *player);

Creates a renderer to be used with the given `surface` and `player`. The renderer will use the same cache as the `player`.

`surface` : | a cairo surface
`player` : | the player this renderer should be used with
Returns : | a new renderer

### swfdec_renderer_get_surface ()

    cairo_surface_t*    swfdec_renderer_get_surface         (SwfdecRenderer *renderer);

Gets the surface that was used when creating this surface.

`renderer` : | a renderer
Returns : | the surface used by this renderer

## Property Details

### The `"surface"` property

      "surface"                  gpointer              : Read / Write / Construct Only

cairo surface in use by this renderer.