summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2011-04-20 17:43:48 +0200
committerJérémy Zurcher <jeremy@asynk.ch>2011-04-20 17:43:48 +0200
commit6865df2bd776a80afc485e23b223ac1dac289b86 (patch)
tree7ec0c5a714eb0ed184cf96fe4521d05cea2d3fa6
parent1e52dc26575a472fd108e187bda2cd2447a387cc (diff)
downloadffi-efl-6865df2bd776a80afc485e23b223ac1dac289b86.zip
ffi-efl-6865df2bd776a80afc485e23b223ac1dac289b86.tar.gz
add elementary ffi + quick and dirty test window
-rw-r--r--lib/efl/elementary.rb33
-rw-r--r--lib/efl/elementary/elementary-ffi.rb4
-rw-r--r--test/elm_win.rb38
-rw-r--r--test/elm_win_class.rb43
4 files changed, 115 insertions, 3 deletions
diff --git a/lib/efl/elementary.rb b/lib/efl/elementary.rb
index efe444a..4d82d54 100644
--- a/lib/efl/elementary.rb
+++ b/lib/efl/elementary.rb
@@ -1,10 +1,41 @@
#! /usr/bin/env ruby
# -*- coding: UTF-8 -*-
#
+require 'efl/evas'
require 'efl/elementary/elementary-ffi'
#
module Efl
- module Elementary
+ module Elm
+ #
+ class << self
+ def init *args
+ a = args.select { |e| e.is_a? String }
+ return Efl::API.elm_init 0, FFI::MemoryPointer::NULL if a.length==0
+ ptr = FFI::MemoryPointer.new :pointer, a.length
+ a.each_with_index do |s,i|
+ ptr[i].write_pointer FFI::MemoryPointer.from_string(s)
+ end
+ Efl::API.elm_init a.length, ptr
+ end
+ end
+ #
+ class ElmWin < Efl::Evas::EvasObject
+ attr_reader :ptr
+ def initialize parent, title, type=:elm_win_basic
+ @ptr = Efl::API.elm_win_add parent, title, type
+ yield self if block_given?
+ end
+ def add e
+ Efl::API.send "elm_#{e}_add", @ptr
+ end
+ def method_missing m, *args, &block
+ [ 'elm_win_', 'elm_' ].each do |s|
+ sym = s+m.to_s
+ puts sym
+ return Efl::API.send( sym, @ptr, *args, &block ) if Efl::API.respond_to? sym
+ end
+ end
+ end
#
end
end
diff --git a/lib/efl/elementary/elementary-ffi.rb b/lib/efl/elementary/elementary-ffi.rb
index 5257487..987a155 100644
--- a/lib/efl/elementary/elementary-ffi.rb
+++ b/lib/efl/elementary/elementary-ffi.rb
@@ -5,9 +5,9 @@ require 'efl/ffi'
#
module Efl
#
- module Elementary
+ module Elm
def self.method_missing m, *args, &block
- return Efl::API.send 'elementary_'+m.to_s, *args, &block
+ return Efl::API.send 'elm_'+m.to_s, *args, &block
end
end
#
diff --git a/test/elm_win.rb b/test/elm_win.rb
new file mode 100644
index 0000000..58c9462
--- /dev/null
+++ b/test/elm_win.rb
@@ -0,0 +1,38 @@
+#! /usr/bin/env ruby
+# -*- coding: UTF-8 -*-
+#
+require 'efl/elementary'
+#
+include Efl
+#
+puts Elm.init
+
+win_del = Proc.new { |data,evas_object,event_info|
+ Efl::API.elm_exit();
+}
+
+win = Efl::API.elm_win_add FFI::MemoryPointer::NULL, "App name", :elm_win_basic
+Efl::API.elm_win_title_set win, "Window title"
+Efl::API.evas_object_smart_callback_add win, "delete,request", win_del, FFI::MemoryPointer::NULL
+
+bg = Efl::API.elm_bg_add win
+Efl::API.evas_object_size_hint_weight_set bg, 1.0, 1.0
+Efl::API.elm_win_resize_object_add win, bg
+Efl::API.evas_object_show bg
+
+lb = Efl::API.elm_label_add win
+Efl::API.elm_label_label_set lb, "Hello World!"
+Efl::API.evas_object_size_hint_weight_set lb, 1.0, 1.0
+Efl::API.elm_win_resize_object_add win, lb
+Efl::API.evas_object_show lb
+
+Efl::API.evas_object_move win, 300, 300
+Efl::API.evas_object_resize win, 200, 100
+
+Efl::API.evas_object_show win
+
+Elm.run
+puts Elm.shutdown
+#
+# EOF
+
diff --git a/test/elm_win_class.rb b/test/elm_win_class.rb
new file mode 100644
index 0000000..dad9b4e
--- /dev/null
+++ b/test/elm_win_class.rb
@@ -0,0 +1,43 @@
+#! /usr/bin/env ruby
+# -*- coding: UTF-8 -*-
+#
+require 'efl/elementary'
+#
+include Efl
+#
+puts Elm.init
+
+class MyWin < Elm::ElmWin
+ def initialize name, title
+ super FFI::MemoryPointer::NULL, name
+ win_title_set title
+ feed
+ Efl::API.evas_object_smart_callback_add @ptr, "delete,request", method(:exit), FFI::MemoryPointer::NULL
+ end
+ def feed
+ @bg = add 'bg'
+ Efl::API.evas_object_size_hint_weight_set @bg, 1.0, 1.0
+ resize_object_add @bg
+ Efl::API.evas_object_show @bg
+ @lb = add 'label'
+ Efl::API.elm_label_label_set @lb, "Hello World!"
+ Efl::API.evas_object_size_hint_weight_set @lb, 1.0, 1.0
+ resize_object_add @lb
+ Efl::API.evas_object_show @lb
+ end
+ def exit *args
+ Efl::API.elm_exit();
+ end
+end
+#
+win = MyWin.new "App name", "Window Title" do |w|
+ Efl::API.evas_object_move w.ptr, 300, 300
+ Efl::API.evas_object_resize w.ptr, 200, 100
+ Efl::API.evas_object_show w.ptr
+end
+
+Elm.run
+puts Elm.shutdown
+#
+# EOF
+