rays 0.1.1

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.
Files changed (66) hide show
  1. data/ChangeLog +8 -0
  2. data/README +4 -0
  3. data/Rakefile +72 -0
  4. data/VERSION +1 -0
  5. data/ext/rays/bitmap.cpp +322 -0
  6. data/ext/rays/extconf.rb +61 -0
  7. data/ext/rays/font.cpp +125 -0
  8. data/ext/rays/image.cpp +166 -0
  9. data/ext/rays/native.cpp +24 -0
  10. data/ext/rays/painter.cpp +573 -0
  11. data/ext/rays/rays.cpp +61 -0
  12. data/ext/rays/rays.h +39 -0
  13. data/ext/rays/texture.cpp +130 -0
  14. data/include/rays.h +20 -0
  15. data/include/rays/bitmap.h +80 -0
  16. data/include/rays/colorspace.h +101 -0
  17. data/include/rays/defs.h +33 -0
  18. data/include/rays/font.h +49 -0
  19. data/include/rays/helpers.h +37 -0
  20. data/include/rays/image.h +68 -0
  21. data/include/rays/opengl.h +15 -0
  22. data/include/rays/painter.h +179 -0
  23. data/include/rays/rays.h +19 -0
  24. data/include/rays/ruby.h +15 -0
  25. data/include/rays/ruby/bitmap.h +39 -0
  26. data/include/rays/ruby/font.h +39 -0
  27. data/include/rays/ruby/image.h +39 -0
  28. data/include/rays/ruby/painter.h +39 -0
  29. data/include/rays/ruby/rays.h +21 -0
  30. data/include/rays/ruby/texture.h +39 -0
  31. data/include/rays/texture.h +56 -0
  32. data/include/rays/transform.h +35 -0
  33. data/lib/rays.rb +9 -0
  34. data/lib/rays/autoinit.rb +10 -0
  35. data/lib/rays/bitmap.rb +25 -0
  36. data/lib/rays/image.rb +15 -0
  37. data/lib/rays/module.rb +30 -0
  38. data/lib/rays/painter.rb +99 -0
  39. data/lib/rays/texture.rb +15 -0
  40. data/rays.gemspec +54 -0
  41. data/src/cocoa/bitmap.mm +286 -0
  42. data/src/cocoa/font.mm +193 -0
  43. data/src/cocoa/helpers.h +26 -0
  44. data/src/cocoa/helpers.mm +25 -0
  45. data/src/cocoa/rays.mm +40 -0
  46. data/src/colorspace.cpp +183 -0
  47. data/src/helpers.cpp +22 -0
  48. data/src/image.cpp +133 -0
  49. data/src/painter.cpp +769 -0
  50. data/src/texture.cpp +360 -0
  51. data/src/transform.cpp +88 -0
  52. data/src/win32/bitmap.cpp +212 -0
  53. data/src/win32/font.cpp +99 -0
  54. data/src/win32/gdi.cpp +771 -0
  55. data/src/win32/gdi.h +226 -0
  56. data/src/win32/rays.cpp +36 -0
  57. data/support.rb +58 -0
  58. data/task/ext.rake +41 -0
  59. data/task/gem.rake +33 -0
  60. data/task/git.rake +22 -0
  61. data/task/lib.rake +54 -0
  62. data/test/helpers.rb +15 -0
  63. data/test/test_painter.rb +11 -0
  64. data/test/test_rays.rb +19 -0
  65. data/test/test_texture.rb +11 -0
  66. metadata +153 -0
data/src/win32/gdi.h ADDED
@@ -0,0 +1,226 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __RAYS_WIN32_GDI_H__
4
+ #define __RAYS_WIN32_GDI_H__
5
+
6
+
7
+ #include <windows.h>
8
+ #include <rays/defs.h>
9
+ #include <rays/helpers.h>
10
+
11
+
12
+ namespace Rays
13
+ {
14
+
15
+
16
+ namespace Win32
17
+ {
18
+
19
+
20
+ class Pen
21
+ {
22
+
23
+ public:
24
+
25
+ Pen (HPEN handle = NULL, bool owner = false);
26
+
27
+ Pen (int red, int green, int blue, int width = 1, int style = PS_SOLID);
28
+
29
+ ~Pen ();
30
+
31
+ bool get_color (int* red, int* green, int* blue) const;
32
+
33
+ HPEN handle () const;
34
+
35
+ operator bool () const;
36
+
37
+ bool operator ! () const;
38
+
39
+ struct Data;
40
+
41
+ Impl<Data> self;
42
+
43
+ };// Pen
44
+
45
+
46
+ class Brush
47
+ {
48
+
49
+ public:
50
+
51
+ Brush (HBRUSH handle = NULL, bool owner = false);
52
+
53
+ Brush (int red, int green, int blue, int style = BS_SOLID);
54
+
55
+ ~Brush ();
56
+
57
+ bool get_color (int* red, int* green, int* blue) const;
58
+
59
+ HBRUSH handle () const;
60
+
61
+ operator bool () const;
62
+
63
+ bool operator ! () const;
64
+
65
+ struct Data;
66
+
67
+ Impl<Data> self;
68
+
69
+ };// Brush
70
+
71
+
72
+ class Font
73
+ {
74
+
75
+ public:
76
+
77
+ Font (HFONT handle = NULL, bool owner = false);
78
+
79
+ Font (const char* name, coord size = 0);
80
+
81
+ ~Font ();
82
+
83
+ String name () const;
84
+
85
+ coord size () const;
86
+
87
+ bool get_extent (
88
+ coord* width, coord* height, const char* str, HDC hdc = NULL);
89
+
90
+ HFONT handle () const;
91
+
92
+ operator bool () const;
93
+
94
+ bool operator ! () const;
95
+
96
+ struct Data;
97
+
98
+ Impl<Data> self;
99
+
100
+ };// Font
101
+
102
+
103
+ class Bitmap
104
+ {
105
+
106
+ public:
107
+
108
+ Bitmap (HBITMAP handle = NULL, bool owner = false);
109
+
110
+ Bitmap (HDC hdc, int width, int height);
111
+
112
+ ~Bitmap ();
113
+
114
+ int width () const;
115
+
116
+ int height () const;
117
+
118
+ HBITMAP handle () const;
119
+
120
+ operator bool () const;
121
+
122
+ bool operator ! () const;
123
+
124
+ struct Data;
125
+
126
+ Impl<Data> self;
127
+
128
+ };// Bitmap
129
+
130
+
131
+ class DC
132
+ {
133
+
134
+ public:
135
+
136
+ enum DeleteType {DELETE_DC, RELEASE_DC};
137
+
138
+ DC (
139
+ HDC handle = NULL, bool owner = false,
140
+ DeleteType deltype = DELETE_DC);
141
+
142
+ ~DC ();
143
+
144
+ Pen pen () const;
145
+
146
+ bool set_pen (const Pen& pen);
147
+
148
+ Brush brush () const;
149
+
150
+ bool set_brush (const Brush& brush);
151
+
152
+ Font font () const;
153
+
154
+ bool set_font (const Font& font);
155
+
156
+ Bitmap bitmap () const;
157
+
158
+ bool set_bitmap (const Bitmap& bitmap);
159
+
160
+ COLORREF text_color () const;
161
+
162
+ bool set_text_color (COLORREF color);
163
+
164
+ COLORREF back_color () const;
165
+
166
+ bool set_back_color (COLORREF color);
167
+
168
+ int back_mode () const;
169
+
170
+ bool set_back_mode (int mode);
171
+
172
+ bool push ();
173
+
174
+ bool pop ();
175
+
176
+ HDC handle () const;
177
+
178
+ operator bool () const;
179
+
180
+ bool operator ! () const;
181
+
182
+ struct Data;
183
+
184
+ Impl<Data> self;
185
+
186
+ };// DC
187
+
188
+
189
+ class MemoryDC : public DC
190
+ {
191
+
192
+ typedef DC Super;
193
+
194
+ public:
195
+
196
+ MemoryDC ();
197
+
198
+ MemoryDC (HDC hdc, int width, int height);
199
+
200
+ MemoryDC (HDC hdc, const Bitmap& bitmap);
201
+
202
+ ~MemoryDC ();
203
+
204
+ const Bitmap& bitmap () const;
205
+
206
+ operator bool () const;
207
+
208
+ bool operator ! () const;
209
+
210
+ struct Data;
211
+
212
+ Impl<Data> self;
213
+
214
+ };// MemoryDC
215
+
216
+
217
+ DC screen_dc ();
218
+
219
+
220
+ }// Win32
221
+
222
+
223
+ }// Rays
224
+
225
+
226
+ #endif//EOH
@@ -0,0 +1,36 @@
1
+ // -*- objc -*-
2
+ #include "rays/rays.h"
3
+
4
+
5
+ namespace Rays
6
+ {
7
+
8
+
9
+ namespace global
10
+ {
11
+
12
+
13
+ static bool initialized = false;
14
+
15
+
16
+ }// global
17
+
18
+
19
+ bool
20
+ init ()
21
+ {
22
+ if (global::initialized) return false;
23
+ global::initialized = true;
24
+ return true;
25
+ }
26
+
27
+ bool
28
+ fin ()
29
+ {
30
+ if (!global::initialized) return false;
31
+ global::initialized = false;
32
+ return true;
33
+ }
34
+
35
+
36
+ }// Rays
data/support.rb ADDED
@@ -0,0 +1,58 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require 'erb'
5
+ require 'pp'
6
+
7
+
8
+ def version ()
9
+ open("VERSION") {|f| f.readline.chomp}
10
+ end
11
+
12
+ def glob (*patterns)
13
+ paths = []
14
+ patterns.each do |pattern|
15
+ paths.concat Dir.glob(pattern)
16
+ end
17
+ paths
18
+ end
19
+
20
+ def erb (str)
21
+ ERB.new(str, nil, "%").result binding
22
+ end
23
+
24
+ def compile (path, out)
25
+ open(path) do |input|
26
+ open(out, "w") do |output|
27
+ output.write erb(input.read)
28
+ end
29
+ end
30
+ #rescue
31
+ end
32
+
33
+ def convertions (paths, convs)
34
+ raise "empty conversion." if convs.empty?
35
+ paths = paths.map do |path|
36
+ convpath = path
37
+ convs.each do |from, to|
38
+ convpath = convpath.sub(/#{from.gsub('.', '\.')}$/, to)
39
+ end
40
+ [path, convpath]
41
+ end
42
+ Hash[*paths.flatten]
43
+ end
44
+
45
+ alias sh_original sh
46
+
47
+ def sh (*args)
48
+ sh_original *args
49
+ #rescue
50
+ end
51
+
52
+ def win32? ()
53
+ RUBY_PLATFORM =~ /mswin|ming|cygwin/
54
+ end
55
+
56
+ def cocoa? ()
57
+ RUBY_PLATFORM =~ /darwin/
58
+ end
data/task/ext.rake ADDED
@@ -0,0 +1,41 @@
1
+ # -*- mode: ruby; coding: utf-8 -*-
2
+
3
+
4
+ require 'rucy/module'
5
+
6
+
7
+ namespace :ext do
8
+
9
+ dir = "#{EXTDIR}/#{NAME}"
10
+ name = "#{NAME}/native"
11
+ outname = "#{name}.#{EXTEXT}"
12
+ out = File.join EXTDIR, outname
13
+
14
+ extconf = File.join dir, "extconf.rb"
15
+ makefile = File.join dir, "Makefile"
16
+ depend = File.join dir, "depend"
17
+
18
+ cpps = Dir.glob("#{dir}/**/*.cpp")
19
+
20
+ task :build => makefile do
21
+ sh %( cd #{dir} && #{MAKE} )
22
+ end
23
+
24
+ task :clean do
25
+ sh %( cd #{dir} && #{MAKE} clean ) if File.exist? makefile
26
+ sh %( rm -f #{makefile} #{depend} )
27
+ end
28
+
29
+ file makefile => [extconf, depend] do
30
+ sh %( cd #{dir} && #{RUBY} #{File.basename extconf} )
31
+ end
32
+
33
+ file depend => ["lib:build"] + cpps do
34
+ incdirs = INCDIRS + Rucy.include_dirs
35
+ incdirs = incdirs.map{|s| " -I#{s}"}.join
36
+ srcs = cpps.map{|cpp| File.basename cpp}.join ' '
37
+ dep = File.basename depend
38
+ sh %( cd #{dir} && #{CC} -M #{CFLAGS} #{incdirs} #{srcs} > #{dep} )
39
+ end
40
+
41
+ end# :ext
data/task/gem.rake ADDED
@@ -0,0 +1,33 @@
1
+ # -*- mode: ruby; coding: utf-8 -*-
2
+
3
+
4
+ namespace :gem do
5
+
6
+ name = NAME
7
+
8
+ gemspec = "#{name}.gemspec"
9
+ gem = "#{name}-#{version}.gem"
10
+
11
+ task :build => gem
12
+
13
+ task :install => gem do
14
+ sh %( #{GEM} install #{gem} )
15
+ end
16
+
17
+ task :uninstall do
18
+ sh %( #{GEM} uninstall #{name} )
19
+ end
20
+
21
+ task :clean do
22
+ sh %( rm -f #{gem} )
23
+ end
24
+
25
+ task :upload => gem do
26
+ sh %( #{GEM} push #{gem} )
27
+ end
28
+
29
+ file gem => "lib:build" do
30
+ sh %( #{GEM} build #{gemspec} )
31
+ end
32
+
33
+ end# :gem
data/task/git.rake ADDED
@@ -0,0 +1,22 @@
1
+ # -*- mode: ruby; coding: utf-8 -*-
2
+
3
+
4
+ namespace :git do
5
+
6
+ task :status do
7
+ sh %( #{GIT} status )
8
+ end
9
+
10
+ task :diff do
11
+ sh %( #{GIT} diff | cat )
12
+ end
13
+
14
+ task :push do
15
+ sh %( #{GIT} push )
16
+ end
17
+
18
+ task :pull do
19
+ sh %( #{GIT} pull )
20
+ end
21
+
22
+ end# :git
data/task/lib.rake ADDED
@@ -0,0 +1,54 @@
1
+ # -*- mode: ruby; coding: utf-8 -*-
2
+
3
+
4
+ require 'rake/loaders/makefile'
5
+
6
+
7
+ namespace :lib do
8
+
9
+ name = NAME
10
+ outname = "lib#{name}.a"
11
+ out = File.join LIBDIR, outname
12
+
13
+ headers = glob("include/**/*.h")
14
+ srcs = glob("src/**/*.cpp")
15
+ srcs += glob("src/**/*.mm") if cocoa?
16
+ srcs = srcs.reject {|s| s =~ %r(/win32/)} unless win32?
17
+ srcs = srcs.reject {|s| s =~ %r(/cocoa/)} unless cocoa?
18
+
19
+ depend = 'depend.mf'
20
+ objs = convertions srcs, {".cpp" => ".o", ".mm" => ".o"}
21
+ tmps = objs.values + [depend]
22
+
23
+ cflags = CFLAGS.dup
24
+ cflags << INCDIRS.map{|s| " -I#{s}"}.join
25
+
26
+ task :build => out
27
+
28
+ task :compile => objs.values
29
+
30
+ task :clean do
31
+ sh %( rm -rf #{tmps.join " "} #{out} )
32
+ end
33
+
34
+ file out => objs.values do
35
+ sh %( #{AR} #{ARFLAGS} #{out} #{objs.values.join " "} )
36
+ end
37
+
38
+ file depend do
39
+ sh %( #{CC} -M #{cflags} #{srcs.join ' '} > #{depend} )
40
+ input = open(depend) {|f| f.read}
41
+ open(depend, 'w') do |output|
42
+ output << input.gsub(/\w+\.o/, SRCDIR + '/\0')
43
+ end
44
+ end
45
+
46
+ import depend if File.exist? depend
47
+
48
+ objs.each do |(src, obj)|
49
+ file obj => [depend, src] do
50
+ sh %( #{CC} -c #{cflags} -o #{obj} #{src} )
51
+ end
52
+ end
53
+
54
+ end# :lib