ffi-efl 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.
Files changed (43) hide show
  1. data/Changelog +13 -1
  2. data/README.rdoc +24 -14
  3. data/lib/efl/ecore.rb +7 -7
  4. data/lib/efl/ecore_evas.rb +78 -0
  5. data/lib/efl/ecore_getopt.rb +28 -29
  6. data/lib/efl/ecore_input.rb +14 -0
  7. data/lib/efl/edje.rb +47 -1
  8. data/lib/efl/eet.rb +18 -25
  9. data/lib/efl/eina.rb +14 -0
  10. data/lib/efl/eina_hash.rb +84 -0
  11. data/lib/efl/eina_list.rb +77 -0
  12. data/lib/efl/elementary.rb +22 -9
  13. data/lib/efl/evas.rb +67 -25
  14. data/lib/efl/{ecore/ecore-ffi.rb → ffi/ecore.rb} +8 -5
  15. data/lib/efl/{ecore/ecore_evas-ffi.rb → ffi/ecore_evas.rb} +10 -7
  16. data/lib/efl/{ecore/ecore_getopt-ffi.rb → ffi/ecore_getopt.rb} +8 -5
  17. data/lib/efl/{ecore/ecore_input-ffi.rb → ffi/ecore_input.rb} +9 -6
  18. data/lib/efl/{edje/edje-ffi.rb → ffi/edje.rb} +10 -7
  19. data/lib/efl/{eet/eet-ffi.rb → ffi/eet.rb} +8 -5
  20. data/lib/efl/ffi/eina.rb +48 -0
  21. data/lib/efl/ffi/eina_hash.rb +111 -0
  22. data/lib/efl/ffi/eina_list.rb +108 -0
  23. data/lib/efl/{eina/eina_types-ffi.rb → ffi/eina_types.rb} +8 -5
  24. data/lib/efl/{elementary/elementary-ffi.rb → ffi/elementary.rb} +16 -9
  25. data/lib/efl/{evas/evas-ffi.rb → ffi/evas.rb} +153 -150
  26. data/lib/efl/ffi.rb +81 -38
  27. data/lib/efl.rb +9 -4
  28. data/spec/ecore_evas_spec.rb +24 -0
  29. data/spec/ecore_getopt_spec.rb +1 -2
  30. data/spec/ecore_input_spec.rb +24 -0
  31. data/spec/ecore_spec.rb +2 -3
  32. data/spec/edje_spec.rb +1 -1
  33. data/spec/eet_spec.rb +68 -69
  34. data/spec/eina_hash_spec.rb +180 -0
  35. data/spec/eina_list_spec.rb +101 -0
  36. data/spec/eina_spec.rb +20 -0
  37. data/spec/evas_spec.rb +288 -40
  38. data/tasks/ffi.rake +1 -1
  39. data/test/test_edje.rb +141 -0
  40. data/test/test_elm_win.rb +25 -28
  41. data/test/test_elm_win_class.rb +7 -7
  42. data/test/test_evas.rb +106 -0
  43. metadata +30 -17
data/test/test_elm_win.rb CHANGED
@@ -3,36 +3,33 @@
3
3
  #
4
4
  require 'efl/elementary'
5
5
  #
6
- include Efl
6
+ Efl::Elm.init
7
7
  #
8
- puts Elm.init
9
-
10
8
  win_del = Proc.new { |data,evas_object,event_info|
11
- Efl::API.elm_exit();
9
+ Efl::Elm.elm_exit();
12
10
  }
13
-
14
- win = Efl::API.elm_win_add FFI::MemoryPointer::NULL, "App name", :elm_win_basic
15
- Efl::API.elm_win_title_set win, "Window title"
16
- Efl::API.evas_object_smart_callback_add win, "delete,request", win_del, FFI::MemoryPointer::NULL
17
-
18
- bg = Efl::API.elm_bg_add win
19
- Efl::API.evas_object_size_hint_weight_set bg, 1.0, 1.0
20
- Efl::API.elm_win_resize_object_add win, bg
21
- Efl::API.evas_object_show bg
22
-
23
- lb = Efl::API.elm_label_add win
24
- Efl::API.elm_label_label_set lb, "Hello World!"
25
- Efl::API.evas_object_size_hint_weight_set lb, 1.0, 1.0
26
- Efl::API.elm_win_resize_object_add win, lb
27
- Efl::API.evas_object_show lb
28
-
29
- Efl::API.evas_object_move win, 300, 300
30
- Efl::API.evas_object_resize win, 200, 100
31
-
32
- Efl::API.evas_object_show win
33
-
34
- Elm.run
35
- puts Elm.shutdown
11
+ #
12
+ win = Efl::Elm.elm_win_add FFI::MemoryPointer::NULL, "App name", :elm_win_basic
13
+ Efl::Elm.elm_win_title_set win, "Window title"
14
+ Efl::Evas.evas_object_smart_callback_add win, "delete,request", win_del, FFI::MemoryPointer::NULL
15
+ #
16
+ bg = Efl::Elm.elm_bg_add win
17
+ Efl::Evas.evas_object_size_hint_weight_set bg, 1.0, 1.0
18
+ Efl::Elm.elm_win_resize_object_add win, bg
19
+ Efl::Evas.evas_object_show bg
20
+ #
21
+ lb = Efl::Elm.elm_label_add win
22
+ Efl::Elm.elm_label_label_set lb, "Hello World!"
23
+ Efl::Evas.evas_object_size_hint_weight_set lb, 1.0, 1.0
24
+ Efl::Elm.elm_win_resize_object_add win, lb
25
+ Efl::Evas.evas_object_show lb
26
+ #
27
+ Efl::Evas.evas_object_move win, 300, 300
28
+ Efl::Evas.evas_object_resize win, 200, 100
29
+ #
30
+ Efl::Evas.evas_object_show win
31
+ #
32
+ Efl::Elm.run
33
+ Efl::Elm.shutdown
36
34
  #
37
35
  # EOF
38
-
@@ -5,28 +5,27 @@ require 'efl/elementary'
5
5
  #
6
6
  include Efl
7
7
  #
8
- DATA = FFI::MemoryPointer.from_string("my data")
9
- #
10
8
  class MyWin < Elm::ElmWin
11
9
  def initialize name, title
12
10
  super FFI::MemoryPointer::NULL, name
13
11
  title_set title
14
12
  feed
15
- smart_callback_add "delete,request", method(:exit), DATA
13
+ smart_callback_add "delete,request", method(:exit), FFI::MemoryPointer.from_string("my data")
16
14
  end
17
15
  def feed
18
16
  # using block
19
17
  @bg = add 'bg' do |bg|
20
18
  bg.size_hint_weight_set 1.0, 1.0
19
+ bg.color = 200,255,100,200 # same as bg.color_set 200,255,100,200
21
20
  bg.show
22
21
  end
23
- resize_object_add @bg.ptr
22
+ resize_object_add @bg.to_ptr
24
23
  @lb = add 'label'do |lb|
25
- lb.elm_label_label_set "Hello World!" # complete function name
26
- lb.size_hint_weight_set 1.0, 1.0 # implicit evas_object function name prefix
24
+ lb.label_label_set "Hello World!" # complete function name
25
+ lb.size_hint_weight_set 1.0, 1.0 # implicit evas_object function name prefix
27
26
  end
28
27
  @lb.show
29
- resize_object_add @lb.ptr
28
+ resize_object_add @lb.to_ptr
30
29
  end
31
30
  def exit data, evas_object, event_info
32
31
  puts "EXIT #{data.read_string}"
@@ -37,6 +36,7 @@ end
37
36
  Elm.init
38
37
  #
39
38
  win = MyWin.new "App name", "Window Title" do |w,eo|
39
+ w.alpha_set true
40
40
  eo.move 300, 300
41
41
  eo.resize 200, 100
42
42
  eo.show
data/test/test_evas.rb ADDED
@@ -0,0 +1,106 @@
1
+ #! /usr/bin/env ruby
2
+ # -*- coding: UTF-8 -*-
3
+ #
4
+ require 'efl/evas'
5
+ #
6
+ include Efl
7
+ #
8
+ Evas::init
9
+ #
10
+ def create_canvas w, h
11
+ pixels = FFI::MemoryPointer.new :int, w*h
12
+ e = Evas::REvas.new
13
+ e.output_method_set Evas::render_method_lookup("buffer")
14
+ e.output_viewport_set 0, 0, w, h
15
+ e.output_size_set w, h
16
+ einfo = Efl::Evas::EngineInfoBufferStruct.new e.engine_info_get
17
+ einfo[:info][:depth_type] = Efl::Evas::EVAS_ENGINE_BUFFER_DEPTH_ARGB32
18
+ einfo[:info][:dest_buffer] = pixels
19
+ einfo[:info][:dest_buffer_row_bytes] = w * FFI::type_size(:int);
20
+ einfo[:info][:use_color_key] = 0;
21
+ einfo[:info][:alpha_threshold] = 0;
22
+ einfo[:info][:func][:new_update_region] = nil #FFI::Pointer::NULL;
23
+ einfo[:info][:func][:free_update_region] = nil #FFI::Pointer::NULL;
24
+ e.engine_info_set einfo
25
+ [e,pixels]
26
+ end
27
+ #
28
+ def destroy_canvas c, pixels
29
+ pixels.free
30
+ c.free
31
+ end
32
+ #
33
+ def draw_scene c
34
+ updates = c.render_updates
35
+ Evas::render_updates_free updates
36
+ # FIXME needs EinaRectangle
37
+ # require 'efl/eina/eina_list'
38
+ # updates = Eina::EinaList.new c.render_updates
39
+ # updates.each do |u|
40
+ # r = Eina::EinaRectangle.new u
41
+ # puts "UPDATED REGION: pos: #{r[:x]}, #{r[:y]} size: #{r[:w]}x#{r[:h]}"
42
+ # end
43
+ # Evas::render_updates_free updates.ptr
44
+ end
45
+ #
46
+ def save_scene canvas, dest
47
+ einfo = Efl::Evas::EngineInfoBufferStruct.new canvas.engine_info_get
48
+ w, h = canvas.output_size_get
49
+ # PPM P6 format is dead simple to write:
50
+ p = FFI::Pointer.new :int, einfo[:info][:dest_buffer]
51
+ pixels_end = p + (w*h*::FFI.type_size(:int))
52
+ open(dest,'w') do |f|
53
+ f << "P6\n#{w} #{h}\n255\n"
54
+ while p != pixels_end
55
+ i = p.read_int
56
+ a = [ (i & 0xff0000)>>16, (i & 0x00ff00)>>8, (i & 0x0000ff) ]
57
+ f << a.pack("ccc")
58
+ p = p+::FFI.type_size(:int)
59
+ end
60
+
61
+ # for (; pixels < pixels_end; pixels++) {
62
+ # int r, g, b;
63
+ # r = ((*pixels) & 0xff0000) >> 16;
64
+ # g = ((*pixels) & 0x00ff00) >> 8;
65
+ # b = (*pixels) & 0x0000ff;
66
+ # fprintf(f, "%c%c%c", r, g, b);
67
+ # }
68
+ end
69
+ puts "saved scene as '#{dest}'"
70
+ end
71
+ #
72
+ w = 320
73
+ h = 240
74
+ canvas, pixels = create_canvas w, h
75
+ #
76
+ bg = Evas::REvasObject.new canvas.object_rectangle_add
77
+ bg.color = 255, 255, 255, 255
78
+ bg.move 0, 0
79
+ bg.resize w, h
80
+ bg.show
81
+ #
82
+ draw_scene canvas
83
+ #
84
+ r1 = Evas::REvasObject.new canvas.object_rectangle_add
85
+ r1.color = 255, 0, 0, 255
86
+ r1.move 10, 10
87
+ r1.resize 100, 100
88
+ r1.show
89
+ #
90
+ r2 = Evas::REvasObject.new canvas.object_rectangle_add
91
+ r2.color = 0, 128, 0, 128
92
+ r2.move 10, 10
93
+ r2.resize 50, 50
94
+ r2.show
95
+ #
96
+ r3 = Evas::REvasObject.new canvas.object_rectangle_add
97
+ r3.color = 0, 128, 0, 255
98
+ r3.move 60, 60
99
+ r3.resize 50, 50
100
+ r3.show
101
+ #
102
+ draw_scene canvas
103
+ save_scene canvas, '/tmp/ffi-efl-evas-buffer-simple-render.ppm'
104
+ destroy_canvas canvas, pixels
105
+ #
106
+ Evas::shutdown
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: ffi-efl
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2
5
+ version: 0.0.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - "J\xC3\xA9r\xC3\xA9my Zurcher"
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-25 00:00:00 +02:00
13
+ date: 2011-05-01 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -35,11 +35,7 @@ dependencies:
35
35
  version: 3.6.5
36
36
  type: :development
37
37
  version_requirements: *id002
38
- description: |-
39
- ffi-efl is a FFI[https://github.com/ffi/ffi/wiki] binding to Enlightenment Foundation Libraries (eina,eet,evas,ecore,edje...)
40
- base components of the Enlightenment project. (EFL API[http://www.enlightenment.org/p.php?p=docs&l=en])
41
-
42
- ffi-efl project is developed on asynk[http://cgit.asynk.ch/cgi-bin/cgit/ffi-efl], github[https://github.com/jeremyz] and gitorious[https://gitorious.org/~jeyzu]
38
+ description: A ruby-ffi binding to efl libraries (Enlightenment Foundation Libraries).
43
39
  email: jeremy@asynk.ch
44
40
  executables: []
45
41
 
@@ -54,25 +50,38 @@ files:
54
50
  - Rakefile
55
51
  - lib/efl.rb
56
52
  - lib/efl/ecore.rb
57
- - lib/efl/ecore/ecore-ffi.rb
58
- - lib/efl/ecore/ecore_evas-ffi.rb
59
- - lib/efl/ecore/ecore_getopt-ffi.rb
60
- - lib/efl/ecore/ecore_input-ffi.rb
53
+ - lib/efl/ecore_evas.rb
61
54
  - lib/efl/ecore_getopt.rb
55
+ - lib/efl/ecore_input.rb
62
56
  - lib/efl/edje.rb
63
- - lib/efl/edje/edje-ffi.rb
64
57
  - lib/efl/eet.rb
65
- - lib/efl/eet/eet-ffi.rb
66
- - lib/efl/eina/eina_types-ffi.rb
58
+ - lib/efl/eina.rb
59
+ - lib/efl/eina_hash.rb
60
+ - lib/efl/eina_list.rb
67
61
  - lib/efl/elementary.rb
68
- - lib/efl/elementary/elementary-ffi.rb
69
62
  - lib/efl/evas.rb
70
- - lib/efl/evas/evas-ffi.rb
71
63
  - lib/efl/ffi.rb
64
+ - lib/efl/ffi/ecore.rb
65
+ - lib/efl/ffi/ecore_evas.rb
66
+ - lib/efl/ffi/ecore_getopt.rb
67
+ - lib/efl/ffi/ecore_input.rb
68
+ - lib/efl/ffi/edje.rb
69
+ - lib/efl/ffi/eet.rb
70
+ - lib/efl/ffi/eina.rb
71
+ - lib/efl/ffi/eina_hash.rb
72
+ - lib/efl/ffi/eina_list.rb
73
+ - lib/efl/ffi/eina_types.rb
74
+ - lib/efl/ffi/elementary.rb
75
+ - lib/efl/ffi/evas.rb
76
+ - spec/ecore_evas_spec.rb
72
77
  - spec/ecore_getopt_spec.rb
78
+ - spec/ecore_input_spec.rb
73
79
  - spec/ecore_spec.rb
74
80
  - spec/edje_spec.rb
75
81
  - spec/eet_spec.rb
82
+ - spec/eina_hash_spec.rb
83
+ - spec/eina_list_spec.rb
84
+ - spec/eina_spec.rb
76
85
  - spec/evas_spec.rb
77
86
  - tasks/ann.rake
78
87
  - tasks/constants.rb
@@ -88,8 +97,10 @@ files:
88
97
  - tasks/spec.rake
89
98
  - tasks/svn.rake
90
99
  - tasks/test.rake
100
+ - test/test_edje.rb
91
101
  - test/test_elm_win.rb
92
102
  - test/test_elm_win_class.rb
103
+ - test/test_evas.rb
93
104
  has_rdoc: true
94
105
  homepage: https://github.com/jeremyz/ffi-efl
95
106
  licenses: []
@@ -120,7 +131,9 @@ rubyforge_project: ffi-efl
120
131
  rubygems_version: 1.5.2
121
132
  signing_key:
122
133
  specification_version: 3
123
- summary: ffi-efl is a FFI[https://github
134
+ summary: A ruby-ffi binding to efl libraries (Enlightenment Foundation Libraries)
124
135
  test_files:
136
+ - test/test_evas.rb
137
+ - test/test_edje.rb
125
138
  - test/test_elm_win_class.rb
126
139
  - test/test_elm_win.rb