diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2011-04-20 17:43:48 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2011-04-20 17:43:48 +0200 |
commit | 6865df2bd776a80afc485e23b223ac1dac289b86 (patch) | |
tree | 7ec0c5a714eb0ed184cf96fe4521d05cea2d3fa6 | |
parent | 1e52dc26575a472fd108e187bda2cd2447a387cc (diff) | |
download | ffi-efl-6865df2bd776a80afc485e23b223ac1dac289b86.zip ffi-efl-6865df2bd776a80afc485e23b223ac1dac289b86.tar.gz |
add elementary ffi + quick and dirty test window
-rw-r--r-- | lib/efl/elementary.rb | 33 | ||||
-rw-r--r-- | lib/efl/elementary/elementary-ffi.rb | 4 | ||||
-rw-r--r-- | test/elm_win.rb | 38 | ||||
-rw-r--r-- | test/elm_win_class.rb | 43 |
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 + |