annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1507
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
1 /* Paranormal - A highly customizable audio visualization library
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
2 * Copyright (C) 2001 Jamie Gennis <jgennis@mindspring.com>
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
3 *
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
4 * This library is free software; you can redistribute it and/or
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
5 * modify it under the terms of the GNU Library General Public
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
6 * License as published by the Free Software Foundation; either
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
7 * version 2 of the License, or (at your option) any later version.
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
8 *
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
9 * This library is distributed in the hope that it will be useful,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
12 * Library General Public License for more details.
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
13 *
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
14 * You should have received a copy of the GNU Library General Public
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
15 * License along with this library; if not, write to the Free
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
16 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
17 */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
18
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
19 #ifndef __PN_IMAGE_H__
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
20 #define __PN_IMAGE_H__
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
21
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
22 #include <glib.h>
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
23 #include "pnobject.h"
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
24
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
25 G_BEGIN_DECLS
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
26
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
27 typedef enum
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
28 {
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
29 PN_BLEND_MODE_IGNORE, /* Ignore the source image */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
30 PN_BLEND_MODE_REPLACE, /* Replace the destination image with the source */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
31 PN_BLEND_MODE_5050, /* Use the mean of the source and destination images */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
32 PN_BLEND_MODE_LAST /* INVALID */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
33 } PnBlendMode;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
34 extern const gchar *pn_image_blend_mode_strings[];
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
35 extern const guint pn_image_blend_mode_count;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
36
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
37 #define PN_TYPE_IMAGE (pn_image_get_type ())
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
38 #define PN_IMAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PN_TYPE_IMAGE, PnImage))
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
39 #define PN_IMAGE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), PN_TYPE_IMAGE, PnImageClass))
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
40 #define PN_IS_IMAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PN_TYPE_IMAGE))
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
41 #define PN_IS_IMAGE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), PN_TYPE_IMAGE))
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
42 #define PN_IMAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PN_TYPE_IMAGE, PnImageClass))
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
43
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
44 /* Member access macros */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
45 #define PN_IMAGE_PITCH(obj) (PN_IMAGE (obj)->pitch)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
46 #define PN_IMAGE_WIDTH(obj) (PN_IMAGE (obj)->width)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
47 #define PN_IMAGE_HEIGHT(obj) (PN_IMAGE (obj)->height)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
48 #define PN_IMAGE_IMAGE_BUF(obj) (PN_IMAGE (obj)->image_buffer)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
49 #define PN_IMAGE_XFORM_BUF(obj) (PN_IMAGE (obj)->transform_buffer)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
50
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
51 /* This is to help with passing just the PnImage part of a
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
52 * PnImage (e.g. to assembly code)
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
53 */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
54 #define PN_IMAGE_START(obj) (G_STRUCT_MEMBER_P (obj, G_STRUCT_OFFSET (PnImage, pitch)))
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
55
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
56 typedef struct _PnColor PnColor;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
57
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
58 struct _PnColor
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
59 {
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
60 guint8 red;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
61 guint8 green;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
62 guint8 blue;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
63 guint8 unused;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
64 };
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
65
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
66 typedef struct _PnImage PnImage;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
67 typedef struct _PnImageClass PnImageClass;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
68
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
69 struct _PnImage
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
70 {
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
71 PnObject parent;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
72
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
73 /* The width of the image buffers in bytes */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
74 guint pitch;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
75
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
76 /* The dimensions of the valid image area in pixels */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
77 guint width;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
78 guint height;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
79
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
80 /* The pixel bleding modes to be used when rendering individual
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
81 * pixels and when applying the transform buffer to the
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
82 * image buffer
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
83 */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
84 PnBlendMode render_mode;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
85 PnBlendMode transform_mode;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
86
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
87 /* The pixel buffers */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
88 PnColor *image_buffer;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
89 PnColor *transform_buffer;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
90 };
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
91
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
92 struct _PnImageClass
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
93 {
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
94 PnObjectClass parent_class;
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
95 };
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
96
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
97 /* Creators */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
98 GType pn_image_get_type (void);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
99 PnImage *pn_image_new (void);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
100 PnImage *pn_image_new_with_size (guint width,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
101 guint height);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
102
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
103 /* Accessors */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
104 void pn_image_set_size (PnImage *image,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
105 guint width,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
106 guint height);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
107 guint pn_image_get_width (PnImage *image);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
108 guint pn_image_get_height (PnImage *image);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
109 guint pn_image_get_pitch (PnImage *image);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
110 void pn_image_set_render_mode (PnImage *image,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
111 PnBlendMode render_mode);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
112 void pn_image_set_transform_mode (PnImage *image,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
113 PnBlendMode transform_mode);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
114 PnColor *pn_image_get_image_buffer (PnImage *image);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
115 PnColor *pn_image_get_transform_buffer (PnImage *image);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
116
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
117 /* Actions */
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
118 void pn_image_render_pixel (PnImage *image,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
119 guint x,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
120 guint y,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
121 PnColor color);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
122 void pn_image_render_pixel_by_offset (PnImage *image,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
123 guint offset,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
124 PnColor color);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
125 void pn_image_render_line (PnImage *image,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
126 guint x0,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
127 guint y0,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
128 guint x1,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
129 guint y1,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
130 PnColor color);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
131 void pn_image_apply_transform (PnImage *image);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
132 void pn_image_render_image (PnImage *image,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
133 PnImage *src,
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
134 PnBlendMode blend_mode);
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
135
0c5fdcf3f947 [svn] - incomplete stuff
nenolod
parents:
diff changeset
136 #endif /* __PN_IMAGE_H__ */