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 + | 
