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.
- data/Changelog +13 -1
- data/README.rdoc +24 -14
- data/lib/efl/ecore.rb +7 -7
- data/lib/efl/ecore_evas.rb +78 -0
- data/lib/efl/ecore_getopt.rb +28 -29
- data/lib/efl/ecore_input.rb +14 -0
- data/lib/efl/edje.rb +47 -1
- data/lib/efl/eet.rb +18 -25
- data/lib/efl/eina.rb +14 -0
- data/lib/efl/eina_hash.rb +84 -0
- data/lib/efl/eina_list.rb +77 -0
- data/lib/efl/elementary.rb +22 -9
- data/lib/efl/evas.rb +67 -25
- data/lib/efl/{ecore/ecore-ffi.rb → ffi/ecore.rb} +8 -5
- data/lib/efl/{ecore/ecore_evas-ffi.rb → ffi/ecore_evas.rb} +10 -7
- data/lib/efl/{ecore/ecore_getopt-ffi.rb → ffi/ecore_getopt.rb} +8 -5
- data/lib/efl/{ecore/ecore_input-ffi.rb → ffi/ecore_input.rb} +9 -6
- data/lib/efl/{edje/edje-ffi.rb → ffi/edje.rb} +10 -7
- data/lib/efl/{eet/eet-ffi.rb → ffi/eet.rb} +8 -5
- data/lib/efl/ffi/eina.rb +48 -0
- data/lib/efl/ffi/eina_hash.rb +111 -0
- data/lib/efl/ffi/eina_list.rb +108 -0
- data/lib/efl/{eina/eina_types-ffi.rb → ffi/eina_types.rb} +8 -5
- data/lib/efl/{elementary/elementary-ffi.rb → ffi/elementary.rb} +16 -9
- data/lib/efl/{evas/evas-ffi.rb → ffi/evas.rb} +153 -150
- data/lib/efl/ffi.rb +81 -38
- data/lib/efl.rb +9 -4
- data/spec/ecore_evas_spec.rb +24 -0
- data/spec/ecore_getopt_spec.rb +1 -2
- data/spec/ecore_input_spec.rb +24 -0
- data/spec/ecore_spec.rb +2 -3
- data/spec/edje_spec.rb +1 -1
- data/spec/eet_spec.rb +68 -69
- data/spec/eina_hash_spec.rb +180 -0
- data/spec/eina_list_spec.rb +101 -0
- data/spec/eina_spec.rb +20 -0
- data/spec/evas_spec.rb +288 -40
- data/tasks/ffi.rake +1 -1
- data/test/test_edje.rb +141 -0
- data/test/test_elm_win.rb +25 -28
- data/test/test_elm_win_class.rb +7 -7
- data/test/test_evas.rb +106 -0
- metadata +30 -17
data/test/test_elm_win.rb
CHANGED
@@ -3,36 +3,33 @@
|
|
3
3
|
#
|
4
4
|
require 'efl/elementary'
|
5
5
|
#
|
6
|
-
|
6
|
+
Efl::Elm.init
|
7
7
|
#
|
8
|
-
puts Elm.init
|
9
|
-
|
10
8
|
win_del = Proc.new { |data,evas_object,event_info|
|
11
|
-
Efl::
|
9
|
+
Efl::Elm.elm_exit();
|
12
10
|
}
|
13
|
-
|
14
|
-
win = Efl::
|
15
|
-
Efl::
|
16
|
-
Efl::
|
17
|
-
|
18
|
-
bg = Efl::
|
19
|
-
Efl::
|
20
|
-
Efl::
|
21
|
-
Efl::
|
22
|
-
|
23
|
-
lb = Efl::
|
24
|
-
Efl::
|
25
|
-
Efl::
|
26
|
-
Efl::
|
27
|
-
Efl::
|
28
|
-
|
29
|
-
Efl::
|
30
|
-
Efl::
|
31
|
-
|
32
|
-
Efl::
|
33
|
-
|
34
|
-
Elm.run
|
35
|
-
|
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
|
-
|
data/test/test_elm_win_class.rb
CHANGED
@@ -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),
|
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.
|
22
|
+
resize_object_add @bg.to_ptr
|
24
23
|
@lb = add 'label'do |lb|
|
25
|
-
lb.
|
26
|
-
lb.size_hint_weight_set 1.0, 1.0
|
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.
|
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.
|
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-
|
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/
|
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/
|
66
|
-
- lib/efl/
|
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
|
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
|