1
0
Fork 0
hvif-light/src/hvif-cairo.h

89 lines
3.3 KiB
C

/**
* \file hvif-cairo.h
* \author Hans-Jörg Schurr
*
* \brief An experimental renderer for \a hvif images based on cairo.
*
* This library provides functions for rendering \a hvif images with cairo.
* The rendere is incomplete and serves only as a vehicle to understand the
* semantic of \a hvif images. In general it only attempts to render
* features exposed by Icon-o-Matic. Furthermore multiple stroke transforms
* and contour transforms are not supported. Furthermore the colour space
* is not equivalent to the colour space used on Haiku. The renderer is only
* lightly tested and most likely contains horrible bugs.
*/
#ifndef HVIF_CAIRO_H
#define HVIF_CAIRO_H
#include "hvif-light.h"
#include <cairo.h>
/** \typedef The result of rendering an image. */
typedef enum hvif_cairo_status
{
HVIF_CAIRO_SUCCESS = 0, /**< Rendering succeed completely. */
HVIF_CAIRO_UNSUPPORTED, /**< Success, but some features are unsupported. */
HVIF_CAIRO_ERROR_NOMEM, /**< Not enough memory could be allocated. */
HVIF_CAIRO_ERROR /**< Rendering failed. */
} hvif_cairo_status;
/**
* \brief Renders a \a hvif image into a PNG file.
*
* Renders an \a hvif image into a PNG file using the toy PNF output of cairo.
* The result is always a square picture. The image is scaled to fill the the
* square.
*
* \param[in] filename The filename of the resulting image.
* \param[in] image A parsed \a hvif image.
* \param[in] pixel_size The size of generated picture in pixels.
* \return A `hvif_cairo_status`.
* \note A status of `HVIF_CAIRO_UNSUPPORTED` does not indicate a rendering
* error, but informs the user that some unsupported features were
* encoutnered.
*/
hvif_cairo_status hvif_cairo_png_render(
const char* filename, hvif_image* image, unsigned pixel_size);
/**
* \brief Renders a \a hvif image into a cairo surface.
*
* Renders an \a hvif image into a cairo surface. The image is a 64 by 64 units
* square scaled by `scale`. Hence a `scala` of 2.0 indicates that the image
* should be 128 by 128.
*
* \param[in] surface A cairo surface.
* \param[in] image A parsed \a hvif image.
* \param[in] scale The amount the image should be scaled.
* \return A `hvif_cairo_status`.
* \note A status of `HVIF_CAIRO_UNSUPPORTED` does not indicate a rendering
* error, but informs the user that some unsupported features were
* encoutnered.
*/
hvif_cairo_status hvif_cairo_surface_render(
cairo_surface_t* surface, hvif_image* image, double scale);
/**
* \brief Renders a \a hvif image into a cairo context.
*
* Renders an \a hvif image into a cairo context. The image is a 64 by 64 units
* square. No scaling is performed. The scale parameter is used to for the
* LOD feauture. Hence, a scale of 0.5 hides shapes that have a minimum or
* maximum scale of 0.5. Usually, a scale of 0.5 indicates that the result has
* a size of 32 by 32 pixel.
*
* \param[in] context A cairo context.
* \param[in] image A parsed \a hvif image.
* \param[in] scale The the context was scaled.
* \return A `hvif_cairo_status`.
* \note A status of `HVIF_CAIRO_UNSUPPORTED` does not indicate a rendering
* error, but informs the user that some unsupported features were
* encoutnered.
*/
hvif_cairo_status hvif_cairo_render(
cairo_t* context, hvif_image* image, double scale);
#endif /* HVIF_CAIRO_H */