diff options
Diffstat (limited to 'common/glc.h')
-rw-r--r-- | common/glc.h | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/common/glc.h b/common/glc.h new file mode 100644 index 00000000..6213c375 --- /dev/null +++ b/common/glc.h @@ -0,0 +1,158 @@ +/* + Copyright (C) 2009 Red Hat, Inc. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _H_GL_CANVASE +#define _H_GL_CANVASE + +#include <stdint.h> + +typedef void * GLCCtx; +typedef void * GLCPattern; +typedef void * GLCPath; + +typedef struct GLCRect { + double x; + double y; + double width; + double height; +} GLCRect; + +typedef struct GLCRecti { + int x; + int y; + int width; + int height; +} GLCRecti; + +typedef enum { + GLC_IMAGE_RGB32, + GLC_IMAGE_ARGB32, +} GLCImageFormat; + +typedef struct GLCPImage { + GLCImageFormat format; + int width; + int height; + int stride; + uint8_t *pixels; + uint32_t *pallet; +} GLCImage; + +GLCPattern glc_pattern_create(GLCCtx glc, int x_orign, int y_orign, const GLCImage *image); +void glc_pattern_set(GLCPattern pattern, int x_orign, int y_orign, const GLCImage *image); +void glc_pattern_destroy(GLCPattern pattern); + +void glc_path_move_to(GLCPath path, double x, double y); +void glc_path_line_to(GLCPath path, double x, double y); +void glc_path_curve_to(GLCPath path, double p1_x, double p1_y, double p2_x, double p2_y, + double p3_x, double p3_y); +void glc_path_rel_move_to(GLCPath path, double x, double y); +void glc_path_rel_line_to(GLCPath path, double x, double y); +void glc_path_rel_curve_to(GLCPath path, double p1_x, double p1_y, double p2_x, double p2_y, + double p3_x, double p3_y); +void glc_path_close(GLCPath path); + +void glc_path_cleare(GLCPath); +GLCPath glc_path_create(GLCCtx glc); +void glc_path_destroy(GLCPath path); + +void glc_set_rgb(GLCCtx glc, double red, double green, double blue); +void glc_set_rgba(GLCCtx glc, double red, double green, double blue, double alpha); +void glc_set_pattern(GLCCtx glc, GLCPattern pattern); + +typedef enum { + GLC_OP_CLEAR = 0x1500, + GLC_OP_SET = 0x150F, + GLC_OP_COPY = 0x1503, + GLC_OP_COPY_INVERTED = 0x150C, + GLC_OP_NOOP = 0x1505, + GLC_OP_INVERT = 0x150A, + GLC_OP_AND = 0x1501, + GLC_OP_NAND = 0x150E, + GLC_OP_OR = 0x1507, + GLC_OP_NOR = 0x1508, + GLC_OP_XOR = 0x1506, + GLC_OP_EQUIV = 0x1509, + GLC_OP_AND_REVERSE = 0x1502, + GLC_OP_AND_INVERTED = 0x1504, + GLC_OP_OR_REVERSE = 0x150B, + GLC_OP_OR_INVERTED = 0x150D, +} GLCOp; + +void glc_set_op(GLCCtx glc, GLCOp op); +void glc_set_alpha_factor(GLCCtx glc, double alpah); + +typedef enum { + GLC_FILL_MODE_WINDING_ODD, + GLC_FILL_MODE_WINDING_NONZERO, +} GLCFillMode; + +void glc_set_fill_mode(GLCCtx glc, GLCFillMode mode); +void glc_set_line_width(GLCCtx glc, double width); +void glc_set_line_end_cap(GLCCtx glc, int style); +void glc_set_line_join(GLCCtx glc, int style); +void glc_set_miter_limit(GLCCtx glc, int limit); +void glc_set_line_dash(GLCCtx glc, const double *dashes, int num_dashes, double offset); + +typedef enum { + GLC_MASK_A, + GLC_MASK_B, +} GLCMaskID; + +void glc_set_mask(GLCCtx glc, int x_dest, int y_dest, int width, int height, + int stride, const uint8_t *bitmap, GLCMaskID id); +void glc_mask_rects(GLCCtx glc, int num_rect, GLCRect *rects, GLCMaskID id); +void glc_clear_mask(GLCCtx glc, GLCMaskID id); + +typedef enum { + GLC_CLIP_OP_SET, + GLC_CLIP_OP_OR, + GLC_CLIP_OP_AND, + GLC_CLIP_OP_EXCLUDE, +} GLCClipOp; + +void glc_clip_rect(GLCCtx glc, const GLCRect *rect, GLCClipOp op); +void glc_clip_path(GLCCtx glc, GLCPath path, GLCClipOp op); +void glc_clip_mask(GLCCtx glc, int x_dest, int y_dest, int width, int height, int stride, + const uint8_t *bitmap, GLCClipOp op); +void glc_clip_reset(GLCCtx glc); + +void glc_fill_rect(GLCCtx glc, const GLCRect *rect); +void glc_fill_path(GLCCtx glc, GLCPath path); +void _glc_fill_mask(GLCCtx glc, int x_dest, int y_dest, int width, int height, int stride, + const uint8_t *bitmap); +void glc_fill_alpha(GLCCtx glc, int x_dest, int y_dest, int width, int height, int stride, + const uint8_t *alpha_mask); + +void glc_stroke_rect(GLCCtx glc, const GLCRect *rect); +void glc_stroke_path(GLCCtx glc, GLCPath path); + +void glc_draw_image(GLCCtx glc, const GLCRecti *dest, const GLCRecti *src, const GLCImage *image, + int scale_mode, double alpha); + +void glc_copy_pixels(GLCCtx glc, int x_dest, int y_dest, int x_src, int y_src, int width, + int height); +void glc_read_pixels(GLCCtx glc, int x, int y, GLCImage *image); + +void glc_flush(GLCCtx glc); +void glc_clear(GLCCtx glc); +GLCCtx glc_create(int width, int height); +void glc_destroy(GLCCtx glc, int textures_lost); + +#endif |