texplay 0.2.1-x86-mswin32-60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +68 -0
- data/README +21 -0
- data/README1st +9 -0
- data/Rakefile +85 -0
- data/examples/basic.rb +48 -0
- data/examples/basic2.rb +37 -0
- data/examples/benchmark.rb +299 -0
- data/examples/common.rb +8 -0
- data/examples/example_alpha_blend.rb +31 -0
- data/examples/example_bezier.rb +51 -0
- data/examples/example_color_control.rb +68 -0
- data/examples/example_color_transform.rb +29 -0
- data/examples/example_dup.rb +52 -0
- data/examples/example_each.rb +42 -0
- data/examples/example_effect.rb +35 -0
- data/examples/example_fill.rb +49 -0
- data/examples/example_fill_old.rb +49 -0
- data/examples/example_fluent.rb +31 -0
- data/examples/example_gen_eval.rb +34 -0
- data/examples/example_hash_arguments.rb +47 -0
- data/examples/example_melt.rb +27 -0
- data/examples/example_polyline.rb +43 -0
- data/examples/example_simple.rb +35 -0
- data/examples/example_sync.rb +60 -0
- data/examples/example_turtle.rb +40 -0
- data/examples/media/empty2.png +0 -0
- data/examples/media/gosu.png +0 -0
- data/examples/media/maria.png +0 -0
- data/examples/media/rose.bmp +0 -0
- data/examples/media/sand1.png +0 -0
- data/examples/media/sunset.png +0 -0
- data/examples/media/texplay.png +0 -0
- data/examples/specs.rb +240 -0
- data/examples/test.rb +70 -0
- data/examples/test2.rb +72 -0
- data/lib/ctexplay.18.so +0 -0
- data/lib/ctexplay.19.so +0 -0
- data/lib/texplay-contrib.rb +77 -0
- data/lib/texplay.rb +134 -0
- data/src/Makefile +181 -0
- data/src/TAGS +286 -0
- data/src/actions.c +1306 -0
- data/src/actions.h +52 -0
- data/src/actions.obj +0 -0
- data/src/bindings.c +1081 -0
- data/src/bindings.h +45 -0
- data/src/bindings.obj +0 -0
- data/src/cache.c +132 -0
- data/src/cache.h +24 -0
- data/src/cache.obj +0 -0
- data/src/compat.h +23 -0
- data/src/ctexplay-i386-mswin32.def +2 -0
- data/src/ctexplay-i386-mswin32.exp +0 -0
- data/src/ctexplay-i386-mswin32.lib +0 -0
- data/src/ctexplay-i386-mswin32.pdb +0 -0
- data/src/ctexplay.so +0 -0
- data/src/extconf.rb +18 -0
- data/src/gen_eval.c +209 -0
- data/src/gen_eval.h +20 -0
- data/src/gen_eval.obj +0 -0
- data/src/mkmf.log +18 -0
- data/src/object2module.c +171 -0
- data/src/object2module.h +11 -0
- data/src/object2module.obj +0 -0
- data/src/texplay.c +136 -0
- data/src/texplay.h +107 -0
- data/src/texplay.obj +0 -0
- data/src/utils.c +959 -0
- data/src/utils.h +143 -0
- data/src/utils.obj +0 -0
- data/src/vc60.pdb +0 -0
- metadata +132 -0
data/src/gen_eval.h
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
/* gen_eval.h */
|
2
|
+
|
3
|
+
#ifndef GUARD_GEN_EVAL_H
|
4
|
+
#define GUARD_GEN_EVAL_H
|
5
|
+
|
6
|
+
#include <ruby.h>
|
7
|
+
|
8
|
+
VALUE rb_gen_eval(int argc, VALUE * argv, VALUE self);
|
9
|
+
VALUE rb_capture(VALUE self);
|
10
|
+
VALUE retrieve_hidden_self(VALUE duped_context);
|
11
|
+
void set_hidden_self(VALUE duped_context, VALUE hidden_self);
|
12
|
+
|
13
|
+
/* change self to hidden self if __hidden_self__ defined */
|
14
|
+
#define ADJUST_SELF(X) \
|
15
|
+
do { \
|
16
|
+
if(!NIL_P(retrieve_hidden_self((X)))) \
|
17
|
+
(X) = retrieve_hidden_self((X)); \
|
18
|
+
} while(0)
|
19
|
+
|
20
|
+
#endif
|
data/src/gen_eval.obj
ADDED
Binary file
|
data/src/mkmf.log
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
have_library: checking for main() in glut32.lib... -------------------- yes
|
2
|
+
|
3
|
+
"cl -nologo -Feconftest -I. -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -I. -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -MD -Zi -O2b2xg- -G6 conftest.c msvcrt-ruby18-static.lib glut32.lib oldnames.lib user32.lib advapi32.lib shell32.lib ws2_32.lib -link -libpath:"." -libpath:"c:/ruby/lib" -stack:0x2000000"
|
4
|
+
conftest.c
|
5
|
+
checked program was:
|
6
|
+
/* begin */
|
7
|
+
1: #define WIN32_LEAN_AND_MEAN
|
8
|
+
2: #define WIN32
|
9
|
+
3: #include <winsock2.h>
|
10
|
+
4: #include <windows.h>
|
11
|
+
5:
|
12
|
+
6: /*top*/
|
13
|
+
7: int main() { return 0; }
|
14
|
+
8: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; }
|
15
|
+
/* end */
|
16
|
+
|
17
|
+
--------------------
|
18
|
+
|
data/src/object2module.c
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
/* object2module.c */
|
2
|
+
/* (C) John Mair 2009
|
3
|
+
* This program is distributed under the terms of the MIT License
|
4
|
+
* */
|
5
|
+
|
6
|
+
#include <ruby.h>
|
7
|
+
#include "compat.h"
|
8
|
+
|
9
|
+
#ifdef RUBY_19
|
10
|
+
# include <ruby/st.h>
|
11
|
+
#else
|
12
|
+
# include <st.h>
|
13
|
+
#endif
|
14
|
+
|
15
|
+
/* class creation. from class.c in 1.9.1 */
|
16
|
+
#ifdef RUBY_19
|
17
|
+
static VALUE
|
18
|
+
class_alloc(VALUE flags, VALUE klass)
|
19
|
+
{
|
20
|
+
rb_classext_t *ext = ALLOC(rb_classext_t);
|
21
|
+
NEWOBJ(obj, struct RClass);
|
22
|
+
OBJSETUP(obj, klass, flags);
|
23
|
+
obj->ptr = ext;
|
24
|
+
RCLASS_IV_TBL(obj) = 0;
|
25
|
+
RCLASS_M_TBL(obj) = 0;
|
26
|
+
RCLASS_SUPER(obj) = 0;
|
27
|
+
RCLASS_IV_INDEX_TBL(obj) = 0;
|
28
|
+
return (VALUE)obj;
|
29
|
+
}
|
30
|
+
#endif
|
31
|
+
|
32
|
+
/* a modified version of include_class_new from class.c */
|
33
|
+
static VALUE
|
34
|
+
j_class_new(VALUE module, VALUE sup)
|
35
|
+
{
|
36
|
+
|
37
|
+
#ifdef RUBY_19
|
38
|
+
VALUE klass = class_alloc(T_ICLASS, rb_cClass);
|
39
|
+
#else
|
40
|
+
NEWOBJ(klass, struct RClass);
|
41
|
+
OBJSETUP(klass, rb_cClass, T_ICLASS);
|
42
|
+
#endif
|
43
|
+
|
44
|
+
if (BUILTIN_TYPE(module) == T_ICLASS) {
|
45
|
+
module = KLASS_OF(module);
|
46
|
+
}
|
47
|
+
|
48
|
+
if (!RCLASS_IV_TBL(module)) {
|
49
|
+
|
50
|
+
RCLASS_IV_TBL(module) = (struct st_table *)st_init_numtable();
|
51
|
+
}
|
52
|
+
|
53
|
+
/* assign iv_tbl, m_tbl and super */
|
54
|
+
RCLASS_IV_TBL(klass) = RCLASS_IV_TBL(module);
|
55
|
+
RCLASS_SUPER(klass) = sup;
|
56
|
+
if(TYPE(module) != T_OBJECT) {
|
57
|
+
|
58
|
+
RCLASS_M_TBL(klass) = RCLASS_M_TBL(module);
|
59
|
+
}
|
60
|
+
else {
|
61
|
+
RCLASS_M_TBL(klass) = RCLASS_M_TBL(CLASS_OF(module));
|
62
|
+
}
|
63
|
+
|
64
|
+
/* */
|
65
|
+
|
66
|
+
if (TYPE(module) == T_ICLASS) {
|
67
|
+
KLASS_OF(klass) = KLASS_OF(module);
|
68
|
+
}
|
69
|
+
else {
|
70
|
+
KLASS_OF(klass) = module;
|
71
|
+
}
|
72
|
+
|
73
|
+
if(TYPE(module) != T_OBJECT) {
|
74
|
+
OBJ_INFECT(klass, module);
|
75
|
+
OBJ_INFECT(klass, sup);
|
76
|
+
}
|
77
|
+
return (VALUE)klass;
|
78
|
+
}
|
79
|
+
|
80
|
+
VALUE
|
81
|
+
rb_to_module(VALUE self)
|
82
|
+
{
|
83
|
+
VALUE rclass, chain_start, jcur, klass;
|
84
|
+
|
85
|
+
switch(BUILTIN_TYPE(self)) {
|
86
|
+
case T_MODULE:
|
87
|
+
return self;
|
88
|
+
case T_CLASS:
|
89
|
+
klass = self;
|
90
|
+
break;
|
91
|
+
case T_OBJECT:
|
92
|
+
default:
|
93
|
+
klass = rb_singleton_class(self);
|
94
|
+
}
|
95
|
+
|
96
|
+
chain_start = j_class_new(klass, rb_cObject);
|
97
|
+
|
98
|
+
KLASS_OF(chain_start) = rb_cModule;
|
99
|
+
RBASIC(chain_start)->flags = T_MODULE;
|
100
|
+
|
101
|
+
jcur = chain_start;
|
102
|
+
for(rclass = RCLASS_SUPER(klass); rclass != rb_cObject;
|
103
|
+
rclass = RCLASS_SUPER(rclass)) {
|
104
|
+
|
105
|
+
RCLASS_SUPER(jcur) = j_class_new(rclass, rb_cObject);
|
106
|
+
jcur = RCLASS_SUPER(jcur);
|
107
|
+
}
|
108
|
+
|
109
|
+
RCLASS_SUPER(jcur) = (VALUE)NULL;
|
110
|
+
|
111
|
+
return chain_start;
|
112
|
+
}
|
113
|
+
|
114
|
+
VALUE
|
115
|
+
rb_reset_tbls(VALUE self)
|
116
|
+
{
|
117
|
+
RCLASS_IV_TBL(self) = (struct st_table *) 0;
|
118
|
+
RCLASS_M_TBL(self) = (struct st_table *) st_init_numtable();
|
119
|
+
return Qnil;
|
120
|
+
}
|
121
|
+
|
122
|
+
/* cannot simply forward to gen_include as need to invoke 'extended' hook */
|
123
|
+
VALUE
|
124
|
+
rb_gen_extend(int argc, VALUE * argv, VALUE self)
|
125
|
+
{
|
126
|
+
int i;
|
127
|
+
|
128
|
+
if (argc == 0) rb_raise(rb_eArgError, "wrong number of arguments (0 for 1)");
|
129
|
+
|
130
|
+
rb_singleton_class(self);
|
131
|
+
|
132
|
+
for(i = 0; i < argc; i++) {
|
133
|
+
VALUE mod = rb_to_module(argv[i]);
|
134
|
+
rb_funcall(mod, rb_intern("extend_object"), 1, self);
|
135
|
+
rb_funcall(mod, rb_intern("extended"), 1, self);
|
136
|
+
|
137
|
+
/* only redirect if argv[i] is not a module */
|
138
|
+
if(argv[i] != mod) rb_reset_tbls(mod);
|
139
|
+
}
|
140
|
+
|
141
|
+
return self;
|
142
|
+
}
|
143
|
+
|
144
|
+
VALUE
|
145
|
+
rb_gen_include(int argc, VALUE * argv, VALUE self)
|
146
|
+
{
|
147
|
+
int i;
|
148
|
+
|
149
|
+
if (argc == 0) rb_raise(rb_eArgError, "wrong number of arguments (0 for 1)");
|
150
|
+
|
151
|
+
for(i = 0; i < argc; i++) {
|
152
|
+
VALUE mod = rb_to_module(argv[i]);
|
153
|
+
rb_funcall(mod, rb_intern("append_features"), 1, self);
|
154
|
+
rb_funcall(mod, rb_intern("included"), 1, self);
|
155
|
+
|
156
|
+
if(argv[i] != mod) rb_reset_tbls(mod);
|
157
|
+
}
|
158
|
+
|
159
|
+
return self;
|
160
|
+
}
|
161
|
+
|
162
|
+
|
163
|
+
void Init_object2module()
|
164
|
+
{
|
165
|
+
|
166
|
+
rb_define_method(rb_cObject, "to_module", rb_to_module , 0);
|
167
|
+
rb_define_method(rb_cObject, "gen_extend", rb_gen_extend, -1);
|
168
|
+
rb_define_method(rb_cModule, "gen_include", rb_gen_include, -1);
|
169
|
+
rb_define_method(rb_cModule, "reset_tbls", rb_reset_tbls, 0);
|
170
|
+
}
|
171
|
+
|
data/src/object2module.h
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
/* object2module.h */
|
2
|
+
|
3
|
+
#ifndef GUARD_OBJECT2MODULE_H
|
4
|
+
#define GUARD_OBJECT2MODULE_H
|
5
|
+
|
6
|
+
VALUE rb_gen_include(int argc, VALUE * argv, VALUE self);
|
7
|
+
VALUE rb_gen_extend(int argc, VALUE * argv, VALUE self);
|
8
|
+
VALUE rb_to_module(VALUE self);
|
9
|
+
VALUE rb_reset_tbls(VALUE self);
|
10
|
+
|
11
|
+
#endif
|
Binary file
|
data/src/texplay.c
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
/* texplay.c, light-weight alternative to rmagick for ruby */
|
2
|
+
/* (C) John Mair 2009
|
3
|
+
* This program is distributed under the terms of the MIT License
|
4
|
+
* */
|
5
|
+
|
6
|
+
#include <ruby.h>
|
7
|
+
#include <stdio.h>
|
8
|
+
#include <time.h>
|
9
|
+
#include "texplay.h"
|
10
|
+
#include "actions.h"
|
11
|
+
#include "utils.h"
|
12
|
+
#include "bindings.h"
|
13
|
+
#include "object2module.h"
|
14
|
+
#include "gen_eval.h"
|
15
|
+
|
16
|
+
/* setup ruby bindings */
|
17
|
+
|
18
|
+
/** constructor for TPPoint class **/
|
19
|
+
static VALUE m_init_TPPoint(int argc, VALUE * argv, VALUE self);
|
20
|
+
|
21
|
+
void
|
22
|
+
Init_ctexplay() {
|
23
|
+
|
24
|
+
VALUE jm_Module = rb_define_module("TexPlay");
|
25
|
+
VALUE TPPoint = rb_define_class_under(jm_Module, "TPPoint", rb_cObject);
|
26
|
+
|
27
|
+
/** define basic point class TPPoint **/
|
28
|
+
rb_attr(TPPoint, rb_intern("x"), 1, 1, Qtrue);
|
29
|
+
rb_attr(TPPoint, rb_intern("y"), 1, 1, Qtrue);
|
30
|
+
rb_define_method(TPPoint, "initialize", m_init_TPPoint, -1);
|
31
|
+
/** end of TPPoint definition **/
|
32
|
+
|
33
|
+
/* TexPlay methods */
|
34
|
+
rb_define_method(jm_Module, "paint", m_paint, -1);
|
35
|
+
rb_define_method(jm_Module, "get_pixel", m_getpixel, -1);
|
36
|
+
rb_define_method(jm_Module, "circle", m_circle, -1);
|
37
|
+
rb_define_method(jm_Module, "line", m_line, -1);
|
38
|
+
rb_define_method(jm_Module, "rect", m_rect, -1);
|
39
|
+
rb_define_method(jm_Module, "clear", m_clear, -1);
|
40
|
+
rb_define_method(jm_Module, "pixel", m_pixel, -1);
|
41
|
+
rb_define_method(jm_Module, "fill", m_flood_fill, -1);
|
42
|
+
rb_define_method(jm_Module, "bezier", m_bezier, -1);
|
43
|
+
rb_define_method(jm_Module, "polyline", m_polyline, -1);
|
44
|
+
rb_define_method(jm_Module, "ngon", m_ngon, -1);
|
45
|
+
|
46
|
+
rb_define_method(jm_Module, "splice", m_splice, -1);
|
47
|
+
|
48
|
+
rb_define_method(jm_Module, "color", m_color, -1);
|
49
|
+
rb_define_method(jm_Module, "offset", m_offset, -1);
|
50
|
+
rb_define_method(jm_Module, "method_missing", m_missing, -1);
|
51
|
+
rb_define_method(jm_Module, "quad_cached?", m_quad_cached, 0);
|
52
|
+
|
53
|
+
rb_define_method(jm_Module, "each", m_each, -1);
|
54
|
+
|
55
|
+
/* needs to be updated, not yet done **/
|
56
|
+
/* rb_define_method(jm_Module, "bitmask", m_bitmask, -1); */
|
57
|
+
/* rb_define_method(jm_Module, "leftshift", m_lshift, -1); */
|
58
|
+
/* rb_define_method(jm_Module, "rightshift", m_rshift, -1); */
|
59
|
+
/* rb_define_method(jm_Module, "[]=", m_special_pixel, -1); */
|
60
|
+
|
61
|
+
rb_define_method(jm_Module, "dup", m_dup_image, 0);
|
62
|
+
rb_define_method(jm_Module, "clone", m_clone_image, 0);
|
63
|
+
rb_define_method(jm_Module, "force_sync", m_force_sync, 1);
|
64
|
+
rb_define_method(jm_Module, "set_options", m_user_set_options, 1);
|
65
|
+
rb_define_method(jm_Module, "get_options", m_get_options, 0);
|
66
|
+
rb_define_method(jm_Module, "delete_options", m_user_delete_options, 0);
|
67
|
+
|
68
|
+
rb_define_method(jm_Module, "refresh_cache", m_cache_refresh, 0);
|
69
|
+
|
70
|
+
/* a constant containing the sidelength of largest allowable quad */
|
71
|
+
rb_define_const(jm_Module, "TP_MAX_QUAD_SIZE", INT2FIX(max_quad_size()));
|
72
|
+
|
73
|
+
/* singleton method for creating & removing macros */
|
74
|
+
rb_define_singleton_method(jm_Module, "create_macro", M_create_macro, 1);
|
75
|
+
rb_define_singleton_method(jm_Module, "remove_macro", M_remove_macro, 1);
|
76
|
+
rb_define_singleton_method(jm_Module, "refresh_cache_all", M_refresh_cache_all, 0);
|
77
|
+
rb_define_singleton_method(jm_Module, "create_blank_image", M_create_blank, 3);
|
78
|
+
|
79
|
+
/** aliases; must be made on singleton class because we're using class methods **/
|
80
|
+
rb_define_method(jm_Module, "box", m_rect, -1);
|
81
|
+
rb_define_method(jm_Module, "colour", m_color, -1);
|
82
|
+
rb_define_method(jm_Module, "composite", m_splice, -1);
|
83
|
+
rb_define_method(jm_Module, "set_pixel", m_pixel, -1);
|
84
|
+
rb_define_method(jm_Module, "[]", m_getpixel, 2);
|
85
|
+
/** end of aliases **/
|
86
|
+
|
87
|
+
/** associated with gen_eval **/
|
88
|
+
rb_define_method(rb_cObject, "gen_eval", rb_gen_eval, -1);
|
89
|
+
rb_define_method(rb_cObject, "capture", rb_capture, 0);
|
90
|
+
|
91
|
+
rb_define_method(rb_cObject, "to_module", rb_to_module , 0);
|
92
|
+
rb_define_method(rb_cObject, "reset_tbls", rb_reset_tbls , 0);
|
93
|
+
rb_define_method(rb_cObject, "gen_extend", rb_gen_extend, -1);
|
94
|
+
rb_define_method(rb_cModule, "gen_include", rb_gen_include, -1);
|
95
|
+
|
96
|
+
rb_define_alias(rb_cObject, "gen_eval_with", "gen_eval");
|
97
|
+
/** end of gen_eval defs **/
|
98
|
+
|
99
|
+
|
100
|
+
/** basic setup **/
|
101
|
+
|
102
|
+
/* seed the random number generator */
|
103
|
+
srand(time(NULL));
|
104
|
+
|
105
|
+
/** end basic setup **/
|
106
|
+
}
|
107
|
+
|
108
|
+
/** constructor for TPPoint class **/
|
109
|
+
static VALUE
|
110
|
+
m_init_TPPoint(int argc, VALUE * argv, VALUE self)
|
111
|
+
{
|
112
|
+
if(argc == 0) {
|
113
|
+
rb_iv_set(self, "@x", INT2FIX(0));
|
114
|
+
rb_iv_set(self, "@y", INT2FIX(0));
|
115
|
+
}
|
116
|
+
else if(argc == 2){
|
117
|
+
if(is_a_num(argv[0]) && is_a_num(argv[1])) {
|
118
|
+
rb_iv_set(self, "@x", argv[0]);
|
119
|
+
rb_iv_set(self, "@y", argv[1]);
|
120
|
+
}
|
121
|
+
else
|
122
|
+
rb_raise(rb_eArgError, "must provide two numbers");
|
123
|
+
}
|
124
|
+
else
|
125
|
+
rb_raise(rb_eArgError, "please provide x and y args only");
|
126
|
+
|
127
|
+
return Qnil;
|
128
|
+
|
129
|
+
}
|
130
|
+
/** end constructor for TPPoint **/
|
131
|
+
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
|
data/src/texplay.h
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
/* texplay.h (C) John Mair 2008
|
2
|
+
* This program is distributed under the terms of the MIT License
|
3
|
+
*
|
4
|
+
*
|
5
|
+
* */
|
6
|
+
|
7
|
+
#ifndef GUARD_TEXPLAY_H
|
8
|
+
#define GUARD_TEXPLAY_H
|
9
|
+
|
10
|
+
#include <ruby.h>
|
11
|
+
|
12
|
+
/* #defines */
|
13
|
+
#define OOB_VAL 9999
|
14
|
+
#define XMAX_OOB OOB_VAL
|
15
|
+
#define YMAX_OOB OOB_VAL
|
16
|
+
#define XMIN_OOB -OOB_VAL
|
17
|
+
#define YMIN_OOB -OOB_VAL
|
18
|
+
|
19
|
+
#define PI 3.14159265358979
|
20
|
+
|
21
|
+
/* macros */
|
22
|
+
#define SWAP(X, Y) {(X) ^= (Y); (Y) ^= (X); (X) ^= (Y);}
|
23
|
+
#define ROUND(X) (int)((X) + 0.5)
|
24
|
+
#define ARY_SIZE(X) sizeof(X) / sizeof(*X)
|
25
|
+
#define SGN(X) ((X) >= 0 ? 1 : -1)
|
26
|
+
#define MAX(X, Y) ((X) > (Y)) ? (X) :(Y)
|
27
|
+
#define MIN(X, Y) ((X) < (Y)) ? (X) : (Y)
|
28
|
+
#define ABS(X) ((X) >= 0 ? (X) : -(X))
|
29
|
+
|
30
|
+
/* enums */
|
31
|
+
typedef enum e_bool {
|
32
|
+
false, true
|
33
|
+
} bool;
|
34
|
+
|
35
|
+
typedef enum e_color {
|
36
|
+
red, green, blue, alpha
|
37
|
+
} color_t;
|
38
|
+
|
39
|
+
typedef enum e_sync_mode {
|
40
|
+
lazy_sync, eager_sync, no_sync
|
41
|
+
} sync;
|
42
|
+
|
43
|
+
/* structs */
|
44
|
+
typedef struct s_rgba {
|
45
|
+
float red, green, blue, alpha;
|
46
|
+
} rgba;
|
47
|
+
|
48
|
+
/* stores image data */
|
49
|
+
typedef struct {
|
50
|
+
int width, height;
|
51
|
+
float top, left;
|
52
|
+
int tname;
|
53
|
+
float * td_array;
|
54
|
+
int yincr, firstpixel;
|
55
|
+
int x_offset, y_offset;
|
56
|
+
VALUE image;
|
57
|
+
} texture_info;
|
58
|
+
|
59
|
+
|
60
|
+
/* convenience macro */
|
61
|
+
#define IMAGE_BOUNDS(X) ((image_bounds *) (X))
|
62
|
+
typedef struct {
|
63
|
+
int xmin;
|
64
|
+
int ymin;
|
65
|
+
int xmax;
|
66
|
+
int ymax;
|
67
|
+
} image_bounds;
|
68
|
+
|
69
|
+
typedef struct action_struct {
|
70
|
+
int xmin, ymin, xmax, ymax;
|
71
|
+
sync sync_mode;
|
72
|
+
|
73
|
+
/* pointer to associated texture */
|
74
|
+
/* a bit of a kludge having this here
|
75
|
+
since it's only being used by convert_image_local_color_to_rgba */
|
76
|
+
texture_info * tex;
|
77
|
+
|
78
|
+
VALUE hash_arg;
|
79
|
+
|
80
|
+
/* action color */
|
81
|
+
rgba color;
|
82
|
+
|
83
|
+
/* pen data */
|
84
|
+
struct {
|
85
|
+
|
86
|
+
/* color control, dynamic */
|
87
|
+
VALUE color_control_proc;
|
88
|
+
bool has_color_control_proc;
|
89
|
+
int color_control_arity;
|
90
|
+
|
91
|
+
/* color control, static */
|
92
|
+
bool has_color_control_transform;
|
93
|
+
rgba color_mult;
|
94
|
+
rgba color_add;
|
95
|
+
|
96
|
+
/* texture fill */
|
97
|
+
texture_info source_tex;
|
98
|
+
bool has_source_texture;
|
99
|
+
|
100
|
+
/* alpha blend */
|
101
|
+
bool alpha_blend;
|
102
|
+
} pen;
|
103
|
+
|
104
|
+
} action_struct;
|
105
|
+
|
106
|
+
|
107
|
+
#endif
|