jeyzu pushed a commit to branch master.

http://git.enlightenment.org/bindings/ruby/ffi-efl.git/commit/?id=a9849b967d92b18b1960c00cc6e7be0d6c2eb49a

commit a9849b967d92b18b1960c00cc6e7be0d6c2eb49a
Author: Jérémy Zurcher <jer...@asynk.ch>
Date:   Mon Dec 1 10:03:40 2014 +0100

    test_genlist: use defined callback types to avoid building  FFI::Function 
by hand
---
 test/test_genlist.rb | 75 ++++++++++++++++++++++++++++++++--------------------
 1 file changed, 47 insertions(+), 28 deletions(-)

diff --git a/test/test_genlist.rb b/test/test_genlist.rb
index 76303c5..86f7c51 100644
--- a/test/test_genlist.rb
+++ b/test/test_genlist.rb
@@ -3,17 +3,29 @@
 #
 require 'efl/elementary_all'
 #
-class ElmGenItemClass < FFI::Struct
-  layout  :version, :int,
-  :refcount, :uint,
-  :delete_me, :pointer,
-  :item_style, :pointer,
-  :decorate_item_style, :pointer,
-  :decorate_all_item_style, :pointer,
-  :text_get, :pointer,
-  :content_get, :pointer,
-  :state_get, :pointer,
-  :del, :pointer
+# require 'efl/native/elm/elm_gen'
+module Efl::Native
+    class ElmGenItemClass < FFI::Struct
+      layout  :version, :int,
+      :refcount, :uint,
+      :delete_me, :pointer,
+      :item_style, :pointer,
+      :decorate_item_style, :pointer,
+      :decorate_all_item_style, :pointer,
+      # :text_get, :elm_gen_item_text_get_cb,
+      :text_get, :elm_gen_item_content_get_cb,
+      :content_get, :elm_gen_item_content_get_cb,
+      :state_get, :elm_gen_item_state_get_cb,
+      :del, :elm_gen_item_del_cb
+
+       def self.create style, text_get_fct, content_get_fct
+          i = ElmGenItemClass.new(Native.elm_genlist_item_class_new)
+          i[:item_style] = FFI::MemoryPointer.from_string(style)
+          i[:text_get] = text_get_fct
+          i[:content_get] = content_get_fct
+          i
+       end
+    end
 end
 #
 include Efl
@@ -31,33 +43,40 @@ class Window < Elm::ElmWin
       show
     end
     resize_object_add(@bg)
-    @itc = ElmGenItemClass.new(Native.elm_genlist_item_class_new)
-    @itc[:item_style] = FFI::MemoryPointer.from_string("default")
-    @itc[:text_get] = FFI::Function.new(:pointer, [:pointer, :pointer, 
:string]) do |data, *_|
-      ptr = FFI::MemoryPointer.from_string("Item # #{data.read_string}")
-      ptr.autorelease = false
-      ptr
-    end
-    @itc[:content_get] =  FFI::Function.new(:pointer, [:pointer, :pointer, 
:string]) do |data, obj, part|
-      Elm::ElmIcon.new(self) do
-        standard_set(part == "elm.swallow.icon" ? "home" : "clock")
-        size_hint_aspect_set 0, 1, 1
-      end.to_ptr
-    end
+
     @list = Elm::ElmGenList.new(self) do
       size_hint_weight_expand
       show
     end
+    resize_object_add(@list)
+
+    @itc = Efl::Native::ElmGenItemClass.create('default', 
method(:item_text_get), method(:item_content_get))
     30.times do |i|
-      @list.item_append(@itc, i.to_s, nil, :elm_genlist_item_none,
-        FFI::Function.new(:pointer, [:pointer, :pointer, :pointer]) {|data, 
obj, evt|
-          p [:selected, data.read_string] }, i.to_s)
+      @list.item_append(@itc, i.to_s, nil, :elm_genlist_item_none, 
method(:evt_callback), i.to_s)
     end
-    resize_object_add(@list)
+
     smart_callback_add "delete,request", ->(*_) { Elm.exit }, nil
     resize 200, 300
     show
   end
+
+  def evt_callback data, obj, evt
+    p [:selected, data.read_string]
+  end
+
+  def item_text_get data, obj, part
+    ptr = FFI::MemoryPointer.from_string("Item # #{data.read_string}")
+    ptr.autorelease = false
+    ptr
+  end
+
+  def item_content_get data, obj, part
+    Elm::ElmIcon.new(self) do
+      standard_set(part == "elm.swallow.icon" ? "home" : "clock")
+      size_hint_aspect_set 0, 1, 1
+    end.to_ptr
+  end
+
 end
 #
 Window.new

-- 


Reply via email to