Mercurial > audlegacy
diff Plugins/Visualization/paranormal/pn/pnimage.h @ 1507:0c5fdcf3f947 trunk
[svn] - incomplete stuff
author | nenolod |
---|---|
date | Sun, 06 Aug 2006 01:53:29 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Plugins/Visualization/paranormal/pn/pnimage.h Sun Aug 06 01:53:29 2006 -0700 @@ -0,0 +1,136 @@ +/* Paranormal - A highly customizable audio visualization library + * Copyright (C) 2001 Jamie Gennis <jgennis@mindspring.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef __PN_IMAGE_H__ +#define __PN_IMAGE_H__ + +#include <glib.h> +#include "pnobject.h" + +G_BEGIN_DECLS + +typedef enum +{ + PN_BLEND_MODE_IGNORE, /* Ignore the source image */ + PN_BLEND_MODE_REPLACE, /* Replace the destination image with the source */ + PN_BLEND_MODE_5050, /* Use the mean of the source and destination images */ + PN_BLEND_MODE_LAST /* INVALID */ +} PnBlendMode; +extern const gchar *pn_image_blend_mode_strings[]; +extern const guint pn_image_blend_mode_count; + +#define PN_TYPE_IMAGE (pn_image_get_type ()) +#define PN_IMAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PN_TYPE_IMAGE, PnImage)) +#define PN_IMAGE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), PN_TYPE_IMAGE, PnImageClass)) +#define PN_IS_IMAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PN_TYPE_IMAGE)) +#define PN_IS_IMAGE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), PN_TYPE_IMAGE)) +#define PN_IMAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PN_TYPE_IMAGE, PnImageClass)) + +/* Member access macros */ +#define PN_IMAGE_PITCH(obj) (PN_IMAGE (obj)->pitch) +#define PN_IMAGE_WIDTH(obj) (PN_IMAGE (obj)->width) +#define PN_IMAGE_HEIGHT(obj) (PN_IMAGE (obj)->height) +#define PN_IMAGE_IMAGE_BUF(obj) (PN_IMAGE (obj)->image_buffer) +#define PN_IMAGE_XFORM_BUF(obj) (PN_IMAGE (obj)->transform_buffer) + +/* This is to help with passing just the PnImage part of a + * PnImage (e.g. to assembly code) + */ +#define PN_IMAGE_START(obj) (G_STRUCT_MEMBER_P (obj, G_STRUCT_OFFSET (PnImage, pitch))) + +typedef struct _PnColor PnColor; + +struct _PnColor +{ + guint8 red; + guint8 green; + guint8 blue; + guint8 unused; +}; + +typedef struct _PnImage PnImage; +typedef struct _PnImageClass PnImageClass; + +struct _PnImage +{ + PnObject parent; + + /* The width of the image buffers in bytes */ + guint pitch; + + /* The dimensions of the valid image area in pixels */ + guint width; + guint height; + + /* The pixel bleding modes to be used when rendering individual + * pixels and when applying the transform buffer to the + * image buffer + */ + PnBlendMode render_mode; + PnBlendMode transform_mode; + + /* The pixel buffers */ + PnColor *image_buffer; + PnColor *transform_buffer; +}; + +struct _PnImageClass +{ + PnObjectClass parent_class; +}; + +/* Creators */ +GType pn_image_get_type (void); +PnImage *pn_image_new (void); +PnImage *pn_image_new_with_size (guint width, + guint height); + +/* Accessors */ +void pn_image_set_size (PnImage *image, + guint width, + guint height); +guint pn_image_get_width (PnImage *image); +guint pn_image_get_height (PnImage *image); +guint pn_image_get_pitch (PnImage *image); +void pn_image_set_render_mode (PnImage *image, + PnBlendMode render_mode); +void pn_image_set_transform_mode (PnImage *image, + PnBlendMode transform_mode); +PnColor *pn_image_get_image_buffer (PnImage *image); +PnColor *pn_image_get_transform_buffer (PnImage *image); + +/* Actions */ +void pn_image_render_pixel (PnImage *image, + guint x, + guint y, + PnColor color); +void pn_image_render_pixel_by_offset (PnImage *image, + guint offset, + PnColor color); +void pn_image_render_line (PnImage *image, + guint x0, + guint y0, + guint x1, + guint y1, + PnColor color); +void pn_image_apply_transform (PnImage *image); +void pn_image_render_image (PnImage *image, + PnImage *src, + PnBlendMode blend_mode); + +#endif /* __PN_IMAGE_H__ */