ffi-efl 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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