sdl2_ffi 0.0.2 → 0.0.3

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.
@@ -50,7 +50,7 @@ module SDL2
50
50
  api :SDL_RenderSetClipRect, [Renderer.by_ref, Rect.by_ref], :int
51
51
  api :SDL_RenderGetClipRect, [Renderer.by_ref, Rect.by_ref], :int
52
52
  api :SDL_RenderSetScale, [Renderer.by_ref, :float, :float], :int
53
- api :SDL_RenderGetScale, [Renderer.by_ref, FloatStruct.by_ref, FloatStruct.by_ref], :int
53
+ api :SDL_RenderGetScale, [Renderer.by_ref, FloatPointer.by_ref, FloatPointer.by_ref], :int
54
54
  api :SDL_SetRenderDrawColor, [Renderer.by_ref, :uint8, :uint8, :uint8, :uint8], :int
55
55
  api :SDL_GetRenderDrawColor, [Renderer.by_ref, UInt8Struct.by_ref,UInt8Struct.by_ref,UInt8Struct.by_ref,UInt8Struct.by_ref], :int
56
56
  api :SDL_SetRenderDrawBlendMode, [Renderer.by_ref, :blend_mode], :int
@@ -70,7 +70,7 @@ module SDL2
70
70
  api :SDL_RenderPresent, [Renderer.by_ref], :void
71
71
  api :SDL_DestroyTexture, [Texture.by_ref], :void
72
72
  api :SDL_DestroyRenderer, [Renderer.by_ref], :void
73
- api :SDL_GL_BindTexture, [Texture.by_ref, FloatStruct.by_ref, FloatStruct.by_ref], :int
73
+ api :SDL_GL_BindTexture, [Texture.by_ref, FloatPointer.by_ref, FloatPointer.by_ref], :int
74
74
  api :SDL_GL_UnbindTexture, [Texture.by_ref], :int
75
75
 
76
76
 
@@ -1,83 +1,183 @@
1
- require 'sdl2'
1
+ require 'sdl2/error'
2
2
  require 'sdl2/rwops'
3
3
  require 'sdl2/pixels'
4
4
  require 'sdl2/rect'
5
+ require 'sdl2/palette'
6
+ require 'yinum'
7
+
5
8
  #require 'sdl2/pixel_format'
6
9
 
7
10
  module SDL2
8
11
  typedef :uint32, :surface_flags
12
+
13
+ #\brief A collection of pixels used in software blitting.
14
+ #
15
+ #\note This structure should be treated as read-only, except for \c pixels,
16
+ # which, if not NULL, contains the raw pixel data for the surface.
9
17
  class Surface < FFI::Struct
18
+
19
+ private :[]
20
+
10
21
  layout :flags, :surface_flags,
11
- :format, PixelFormat.by_ref,
12
- :w, :int,
13
- :h, :int,
14
- :pixels, :pointer,
15
- :userdata, :pointer,
16
- :locked, :int,
17
- :lock_data, :pointer,
18
- :clip_rect, Rect,
19
- :map, :pointer,
20
- :refcount, :int
21
-
22
+ :format, PixelFormat.by_ref,
23
+ :w, :int,
24
+ :h, :int,
25
+ :pixels, :pointer,
26
+ :userdata, :pointer,
27
+ :locked, :int,
28
+ :lock_data, :pointer,
29
+ :clip_rect, Rect,
30
+ :map, :pointer,
31
+ :refcount, :int
32
+
33
+ [:flags, :format, :w, :h, :pixels, :userdata, :locked, :lock_data, :clip_rect, :map, :refcount].each do |field|
34
+ define_method field do
35
+ self[field]
36
+ end
37
+ end
38
+
22
39
  def self.release(pointer)
23
40
  SDL2.free_surface(pointer)
24
41
  end
25
-
26
- # Surface Flags, Used internally but maybe useful
42
+
43
+ # Allocate and free an RGB surface
44
+ # If depth is 4 or 8 bits, an empty palette is allocated for the surface.
45
+ # If depth is > 8 bits, the pixel format is set using the flag masks.
46
+ # If the function runs out of memory, it will return NULL.
47
+ def self.create_rgb(flags, width, height, depth, rmask = 0, gmask = 0, bmask = 0, amask = 0)
48
+ SDL2.create_rgb_surface!(flags, width, height, depth, rmask, gmask, bmask, amask)
49
+ end
50
+
51
+ def self.create_rgb_from(pixels, width, height, depth, pitch, rmask, gmask, bmask, amask)
52
+ SDL2.create_rgb_surface_from!(pixels, width, height, depth, pitch, rmask, gmask, bmask, amask)
53
+ end
54
+
55
+ def self.load_bmp_rw(rwops, freesrc = 0)
56
+ SDL2.load_bmp_rw!(rwops, freesrc)
57
+ end
58
+
59
+ def self.load_bmp(file)
60
+ SDL2.load_bmp!(file)
61
+ end
62
+
63
+ def save_bmp_rw(rwops, freedst = 0)
64
+ SDL2.save_bmp_rw!(self, rwops, freedst)
65
+ end
66
+
67
+ def save_bmp(file)
68
+ SDL2.save_bmp!(self, file)
69
+ end
70
+
71
+ def free
72
+ SDL2.free_surface(self)
73
+ end
74
+
75
+ def set_palette(palette)
76
+ SDL2.set_surface_palette!(self, palette)
77
+ end
78
+
79
+ def get_palette()
80
+ #SDL2.get_surface_palette!(self)
81
+ format.palette
82
+ end
83
+
84
+ alias_method :palette=, :set_palette
85
+ alias_method :palette, :get_palette
86
+
87
+ def lock()
88
+ SDL2.lock_surface(self)
89
+ end
90
+
91
+ def unlock()
92
+ SDL2.unlock_surface(self)
93
+ end
94
+
95
+ # Surface Flags
27
96
  SWSURFACE = 0
28
97
  PREALLOC = 0x00000001
29
98
  RLEACCEL = 0x00000002
30
99
  DONTFREE = 0x00000004
31
-
100
+
32
101
  # Macro, redefined here for use.
33
102
  def mustlock?
34
103
  self[:flags] & RLEACCEL != 0
35
104
  end
36
-
105
+
106
+ def blit_from(src, src_rect, dst_rect)
107
+ SDL2.blit!(src, src_rect, self, dst_rect)
108
+ end
109
+
110
+ def blit_to(src_rect, dst, dst_rect)
111
+ SDL2.blit!(self, src_rect, dst, dst_rect)
112
+ end
113
+
114
+ def set_rle(flag)
115
+ SDL2.set_surface_rle!(self, flag)
116
+ end
117
+
118
+ alias_method :rle=, :set_rle
119
+
120
+ def set_color_key(flag, key)
121
+ SDL2.set_color_key(self, flag, key)
122
+ end
123
+
124
+ def get_color_key()
125
+ key_s = UInt32Struct.new
126
+ SDL2.get_color_key!(self, key_s)
127
+ return key_s[:value]
128
+ end
37
129
  end
38
-
130
+
39
131
  callback :blit, [Surface.by_ref, Rect.by_ref, Surface.by_ref, Rect.by_ref], :int
40
-
41
-
42
- api :SDL_CreateRGBSurface, [:surface_flags, :int, :int, :int, :uint32, :uint32, :uint32, :uint32], Surface.auto_ptr
132
+
133
+ api :SDL_CreateRGBSurface, [:surface_flags, :int, :int, :int, :uint32, :uint32, :uint32, :uint32], Surface.auto_ptr, {error: true, filter: TRUE_WHEN_NOT_NULL}
43
134
  api :SDL_FreeSurface, [Surface.by_ref], :void
44
- api :SDL_SetSurfacePalette, [Surface.by_ref, Palette.by_ref], :int
135
+ api :SDL_SetSurfacePalette, [Surface.by_ref, Palette.by_ref], :int, {error: true}
45
136
  api :SDL_LockSurface, [Surface.by_ref], :int
46
137
  api :SDL_UnlockSurface, [Surface.by_ref], :void
47
138
  api :SDL_LoadBMP_RW, [RWops.by_ref, :int], Surface.auto_ptr
139
+
48
140
  # Redefine SDL_LoadBMP macro:
49
141
  def self.load_bmp(file)
50
142
  SDL2.load_bmp_rw(RWops.from_file(file, 'rb'), 1)
51
143
  end
144
+
52
145
  api :SDL_SaveBMP_RW, [Surface.by_ref, RWops.by_ref, :int], :int
53
-
146
+
54
147
  def self.save_bmp(file)
55
148
  SDL2.save_bmp_rw(RWops.from_file(file, 'wb'), 1)
56
149
  end
57
-
150
+
58
151
  api :SDL_SetSurfaceRLE, [Surface.by_ref, :int], :int
59
152
  api :SDL_SetColorKey, [Surface.by_ref, :int, :uint32], :int
60
153
  api :SDL_GetColorKey, [Surface.by_ref, UInt32Struct.by_ref], :int
61
154
  api :SDL_SetSurfaceColorMod, [Surface.by_ref, :uint8, :uint8, :uint8], :int
62
155
  api :SDL_GetSurfaceColorMod, [Surface.by_ref, UInt8Struct.by_ref,UInt8Struct.by_ref,UInt8Struct.by_ref], :int
63
- api :SDL_SetSurfaceAlphaMod, [Surface.by_ref, :uint8], :int
64
- api :SDL_GetSurfaceAlphaMod, [Surface.by_ref,UInt8Struct.by_ref], :int
65
- api :SDL_SetSurfaceBlendMode, [Surface.by_ref, :blend_mode], :int
66
- api :SDL_GetSurfaceBlendMode, [Surface.by_ref, BlendModeStruct.by_ref], :int
67
- api :SDL_SetClipRect, [Surface.by_ref, Rect.by_ref], :int
68
- api :SDL_GetClipRect, [Surface.by_ref, Rect.by_ref], :int
156
+ api :SDL_SetSurfaceAlphaMod, [Surface.by_ref, :uint8], :int, {error: true}
157
+ api :SDL_GetSurfaceAlphaMod, [Surface.by_ref,UInt8Struct.by_ref], :int, {error: true}
158
+ api :SDL_SetSurfaceBlendMode, [Surface.by_ref, :blend_mode], :int, {error: true}
159
+ api :SDL_GetSurfaceBlendMode, [Surface.by_ref, BlendModeStruct.by_ref], :int, {error: true}
160
+ api :SDL_SetClipRect, [Surface.by_ref, Rect.by_ref], :int, {error: true}
161
+ api :SDL_GetClipRect, [Surface.by_ref, Rect.by_ref], :int, {error: true}
69
162
  api :SDL_ConvertSurface, [Surface.by_ref, PixelFormat.by_ref, :surface_flags], Surface.auto_ptr
70
163
  api :SDL_ConvertSurfaceFormat, [Surface.by_ref, :pixel_format, :surface_flags], Surface.auto_ptr
71
- api :SDL_ConvertPixels, [:int, :int, :pixel_format, :pointer, :int, :pixel_format, :pointer, :int], :int
72
- api :SDL_FillRect, [Surface.by_ref, Rect.by_ref, :uint32], :int
73
- api :SDL_FillRects, [Surface.by_ref, Rect.by_ref, :count, :uint32], :int
74
- api :SDL_UpperBlit, [Surface.by_ref, Rect.by_ref, Surface.by_ref, Rect.by_ref], :int
75
- #alias_method :blit_surface, :upper_blit # TODO: Review if this is what line 447 means.
76
- #alias_class_method :blit_surface, :upper_blit
164
+ api :SDL_ConvertPixels, [:int, :int, :pixel_format, :pointer, :int, :pixel_format, :pointer, :int], :int, {error: true}
165
+ api :SDL_FillRect, [Surface.by_ref, Rect.by_ref, :uint32], :int, {error: true}
166
+ api :SDL_FillRects, [Surface.by_ref, Rect.by_ref, :count, :uint32], :int, {error: true}
167
+ api :SDL_UpperBlit, [Surface.by_ref, Rect.by_ref, Surface.by_ref, Rect.by_ref], :int, {error: true}
168
+
169
+ def self.blit_surface(src, srcrect, dst, dstrect)
170
+ upper_blit(src, srcrect, dst, dstrect)
171
+ end
172
+
77
173
  api :SDL_LowerBlit, [Surface.by_ref, Rect.by_ref, Surface.by_ref, Rect.by_ref], :int
78
174
  api :SDL_SoftStretch, [Surface.by_ref, Rect.by_ref, Surface.by_ref, Rect.by_ref], :int
79
175
  api :SDL_UpperBlitScaled, [Surface.by_ref, Rect.by_ref, Surface.by_ref, Rect.by_ref], :int
80
- alias_method :blit_scaled, :upper_blit_scaled
176
+
177
+ def self.blit_scaled(src, srcrect, dst, dstrect)
178
+ upper_blit_scaled(src, srcrect, dst, dstrect)
179
+ end
180
+
81
181
  api :SDL_LowerBlitScaled, [Surface.by_ref, Rect.by_ref, Surface.by_ref, Rect.by_ref], :int
82
-
182
+
83
183
  end
@@ -0,0 +1,125 @@
1
+ require 'sdl2'
2
+ require 'sdl2/version'
3
+ require 'sdl2/ttf/sdl_ttf_module'
4
+ require 'active_support/inflector'
5
+ require 'yinum'
6
+
7
+ module SDL2
8
+
9
+ module TTF
10
+
11
+ extend FFI::Library
12
+ ffi_lib SDL_TTF_MODULE
13
+
14
+ def self.api(func_name, args, type)
15
+ camelCaseName = func_name.to_s.gsub('TTF_','')
16
+ methodName = ActiveSupport::Inflector.underscore(camelCaseName).to_sym
17
+ self.attach_function methodName, func_name, args, type
18
+ return methodName
19
+ end
20
+
21
+ api :TTF_Linked_Version, [], Version.auto_ptr
22
+
23
+ UNICODE_BOM_NATIVE = 0xFEFF
24
+ UNICODE_BOM_SWAPPED = 0xFFFE
25
+
26
+ api :TTF_ByteSwappedUNICODE, [:int], :void
27
+
28
+ class Font < Struct
29
+
30
+ def self.release(pointer)
31
+ close_font(pointer)
32
+ end
33
+
34
+ end
35
+
36
+ api :TTF_Init, [], :int
37
+ api :TTF_OpenFont, [:string, :int], Font.auto_ptr
38
+ api :TTF_OpenFontIndex, [:string, :int, :long], Font.auto_ptr
39
+ api :TTF_OpenFontRW, [RWops.by_ref, :int, :int], Font.auto_ptr
40
+ api :TTF_OpenFontIndexRW, [RWops.by_ref, :int, :int, :long], Font.auto_ptr
41
+
42
+ STYLE = Enum.new(:STYLE, {
43
+ NORMAL: 0x00,
44
+ BOLD: 0x01,
45
+ ITALIC: 0x02,
46
+ UNDERLINE: 0x04,
47
+ STRIKETHROUGH: 0x08
48
+ })
49
+
50
+ enum :font_style, STYLE.by_name
51
+
52
+ api :TTF_GetFontStyle, [Font.by_ref], :int
53
+ api :TTF_SetFontStyle, [Font.by_ref, :int], :void
54
+ api :TTF_GetFontOutline, [Font.by_ref], :int
55
+ api :TTF_SetFontOutline, [Font.by_ref, :int], :void
56
+
57
+ HINTING = Enum.new(:HINTING, {
58
+ NORMAL: 0,
59
+ LIGHT: 1,
60
+ MONO: 2,
61
+ NONE: 3
62
+ })
63
+ enum :hinting, HINTING.by_name
64
+
65
+ api :TTF_GetFontHinting, [Font.by_ref], :int
66
+ api :TTF_SetFontHinting, [Font.by_ref, :int], :void
67
+
68
+ api :TTF_FontHeight, [Font.by_ref], :int
69
+ api :TTF_FontAscent, [Font.by_ref], :int
70
+ api :TTF_FontDescent, [Font.by_ref], :int
71
+ api :TTF_FontLineSkip, [Font.by_ref], :int
72
+ api :TTF_GetFontKerning, [Font.by_ref], :int
73
+ api :TTF_SetFontKerning, [Font.by_ref], :int
74
+ api :TTF_FontFaces, [Font.by_ref], :long
75
+ api :TTF_FontFaceIsFixedWidth, [Font.by_ref], :int
76
+ api :TTF_FontFaceFamilyName, [Font.by_ref], :string
77
+ api :TTF_FontFaceStyleName, [Font.by_ref], :string
78
+
79
+ api :TTF_GlyphIsProvided, [Font.by_ref, :uint16], :int
80
+
81
+ api :TTF_GlyphMetrics, [
82
+ Font.by_ref,
83
+ :uint16,
84
+ IntStruct.by_ref,
85
+ IntStruct.by_ref,
86
+ IntStruct.by_ref,
87
+ IntStruct.by_ref,
88
+ IntStruct.by_ref
89
+ ], :int
90
+
91
+
92
+ api :TTF_SizeText, [Font.by_ref, :string, IntStruct.by_ref, IntStruct.by_ref], :int
93
+ api :TTF_SizeUTF8, [Font.by_ref, :string, IntStruct.by_ref, IntStruct.by_ref], :int
94
+ api :TTF_SizeUNICODE, [Font.by_ref, :string, IntStruct.by_ref, IntStruct.by_ref], :int
95
+
96
+ api :TTF_RenderText_Solid, [Font.by_ref, :string, Color], Surface.auto_ptr
97
+ api :TTF_RenderUTF8_Solid, [Font.by_ref, :string, Color], Surface.auto_ptr
98
+ api :TTF_RenderUNICODE_Solid, [Font.by_ref, :string, Color], Surface.auto_ptr
99
+
100
+ api :TTF_RenderGlyph_Solid, [Font.by_ref, :uint16, Color], Surface.auto_ptr
101
+
102
+ api :TTF_RenderText_Shaded, [Font.by_ref, :string, Color, Color], Surface.auto_ptr
103
+ api :TTF_RenderUTF8_Shaded, [Font.by_ref, :string, Color, Color], Surface.auto_ptr
104
+ api :TTF_RenderUNICODE_Shaded, [Font.by_ref, :string, Color, Color], Surface.auto_ptr
105
+
106
+ api :TTF_RenderGlyph_Shaded, [Font.by_ref, :uint16, Color, Color], Surface.auto_ptr
107
+
108
+ api :TTF_RenderText_Blended, [Font.by_ref, :string, Color], Surface.auto_ptr
109
+ api :TTF_RenderUTF8_Blended, [Font.by_ref, :string, Color], Surface.auto_ptr
110
+ api :TTF_RenderUNICODE_Blended, [Font.by_ref, :string, Color], Surface.auto_ptr
111
+
112
+ api :TTF_RenderText_Blended_Wrapped, [Font.by_ref, :string, Color, :uint32], Surface.auto_ptr
113
+ api :TTF_RenderUTF8_Blended_Wrapped, [Font.by_ref, :string, Color, :uint32], Surface.auto_ptr
114
+ api :TTF_RenderUNICODE_Blended_Wrapped, [Font.by_ref, :string, Color, :uint32], Surface.auto_ptr
115
+
116
+ api :TTF_RenderGlyph_Blended, [Font.by_ref, :uint16, Color], Surface.auto_ptr
117
+
118
+ api :TTF_CloseFont, [Font.by_ref], :void
119
+ api :TTF_Quit, [], :void
120
+ api :TTF_WasInit, [], :int
121
+ api :TTF_GetFontKerningSize, [Font.by_ref, :int, :int], :int
122
+
123
+ end
124
+
125
+ end
@@ -0,0 +1,5 @@
1
+ module SDL2
2
+ module TTF
3
+ SDL_TTF_MODULE = ['libSDL2_ttf', '/usr/local/lib/libSDL2_ttf.so']
4
+ end
5
+ end
@@ -7,6 +7,10 @@ module SDL2
7
7
  :minor, :uint8,
8
8
  :patch, :uint8
9
9
 
10
+ def self.release(pointer)
11
+ pointer.free
12
+ end
13
+
10
14
  def major
11
15
  self[:major]
12
16
  end
@@ -22,6 +26,8 @@ module SDL2
22
26
  def to_s
23
27
  "SDL v#{major}.#{minor}.#{patch}"
24
28
  end
29
+
30
+
25
31
  end
26
32
 
27
33
  api :SDL_GetRevision, [], :string
@@ -198,7 +198,7 @@ module SDL2
198
198
  end
199
199
 
200
200
  def update_surface!()
201
- SDL2.throw_error_unless update_surface == 0
201
+ SDL2.raise_error_unless update_surface == 0
202
202
  return 0
203
203
  end
204
204
 
@@ -1,2 +1,4 @@
1
1
  require 'minitest/autorun'
2
+ require 'pry'
2
3
 
4
+ FIXTURE_DIR = File.expand_path('../fixtures/',__FILE__)
@@ -5,9 +5,9 @@ require 'sdl2/hints'
5
5
  describe SDL2 do
6
6
 
7
7
  it 'has hints' do
8
- assert SDL2.respond_to? :clear_hints
9
- assert SDL2.respond_to? :get_hint
10
- assert SDL2.respond_to? :set_hint
8
+ assert_respond_to SDL2, :clear_hints
9
+ assert_respond_to SDL2, :get_hint
10
+ assert_respond_to SDL2, :set_hint
11
11
 
12
12
  assert_equal 'constant', defined?(SDL2::HINT_FRAMEBUFFER_ACCELERATION)
13
13
  assert_equal 'constant', defined?(SDL2::HINT_IDLE_TIMER_DISABLED)
@@ -0,0 +1,9 @@
1
+ require 'sdl2/image'
2
+
3
+ describe SDL2::Image do
4
+
5
+ it 'has the SDL_image.h API' do
6
+ skip "Not yet implemented"
7
+ end
8
+
9
+ end
@@ -0,0 +1,26 @@
1
+ require_relative '../../test_helper'
2
+
3
+ require 'sdl2/pixels' #defines SDL_Palette
4
+
5
+ describe SDL2::Palette do
6
+
7
+ before do
8
+ @palette = SDL2::Palette.create(32)
9
+ end
10
+
11
+ after do
12
+ SDL2::Palette.release(@palette)
13
+ end
14
+
15
+ it 'can be created' do
16
+ refute @palette.null?
17
+ end
18
+
19
+ it 'can set colors from a ruby array of arrays' do
20
+ @palette.set_colors([[255,0,0],[0,255,0],[0,0,255]])
21
+ end
22
+
23
+
24
+
25
+
26
+ end