ffi-efl 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/Changelog
    CHANGED
    
    | @@ -1,5 +1,17 @@ | |
| 1 | 
            +
            2011-05-01 Jérémy Zurcher <jeremy@asynk.ch>
         | 
| 2 | 
            +
            	* release 0.0.3
         | 
| 3 | 
            +
            	+ Evas, Evas_Ecore, Edje, Elm ... usable
         | 
| 4 | 
            +
            	* use FFI::AutoPointer in ruby classes
         | 
| 5 | 
            +
            	* cleanup method_missing proxies usage and definition
         | 
| 6 | 
            +
            	* Eina_List <=> Array
         | 
| 7 | 
            +
            	* Eina_Hash <=> Hash
         | 
| 8 | 
            +
            	* .*= setters handled
         | 
| 9 | 
            +
            	* .*? getters handled
         | 
| 10 | 
            +
            	* evas test from http://docs.enlightenment.org/auto/evas/ implemented
         | 
| 11 | 
            +
            	* edje test from http://docs.enlightenment.org/auto/edje/ implemented
         | 
| 12 | 
            +
             | 
| 1 13 | 
             
            2011-04-25 Jérémy Zurcher <jeremy@asynk.ch>
         | 
| 2 | 
            -
            	* release 0.2 | 
| 14 | 
            +
            	* release 0.0.2
         | 
| 3 15 | 
             
            	* ecore getopt seems good
         | 
| 4 16 | 
             
            	* basis of module function mapping and class method_missing usage setup
         | 
| 5 17 | 
             
            	* small elementary elm_Win test app
         | 
    
        data/README.rdoc
    CHANGED
    
    | @@ -4,31 +4,27 @@ ffi-efl | |
| 4 4 |  | 
| 5 5 | 
             
            == DESCRIPTION:
         | 
| 6 6 |  | 
| 7 | 
            -
             | 
| 8 | 
            -
            base components of the Enlightenment project. (EFL API[http://www.enlightenment.org/p.php?p=docs&l=en])
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            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]
         | 
| 7 | 
            +
            A ruby-ffi binding to efl libraries (Enlightenment Foundation Libraries).
         | 
| 11 8 |  | 
| 12 9 | 
             
            == FEATURES/PROBLEMS:
         | 
| 13 10 |  | 
| 14 | 
            -
            *  | 
| 11 | 
            +
            * Not 1.8 compatible yet !!!
         | 
| 15 12 |  | 
| 16 13 | 
             
            == SYNOPSIS:
         | 
| 17 14 |  | 
| 18 | 
            -
                require ' | 
| 19 | 
            -
                 | 
| 20 | 
            -
                Eet. | 
| 21 | 
            -
                Eet.open('/tmp/_eet.cfg', :eet_file_mode_write) do |f|
         | 
| 15 | 
            +
                require 'efl'
         | 
| 16 | 
            +
                Efl::Eet.init
         | 
| 17 | 
            +
                Efl::Eet::REetFile.open('/tmp/_eet.cfg', :eet_file_mode_write) do |f|
         | 
| 22 18 | 
             
                    f.write 'config2', 'test--key'
         | 
| 23 19 | 
             
                end
         | 
| 24 | 
            -
                Eet.open('/tmp/_eet.cfg', :eet_file_mode_read) do |f|
         | 
| 20 | 
            +
                Efl::Eet::REetFile.open('/tmp/_eet.cfg', :eet_file_mode_read) do |f|
         | 
| 25 21 | 
             
                    puts f.read('config2')
         | 
| 26 22 | 
             
                end
         | 
| 27 | 
            -
                Eet.shutdown
         | 
| 23 | 
            +
                Efl::Eet.shutdown
         | 
| 28 24 |  | 
| 29 25 | 
             
            For less minimalistic and more sane examples you may look at:
         | 
| 30 26 |  | 
| 31 | 
            -
            * the spec/  | 
| 27 | 
            +
            * the spec/ and test/ folders
         | 
| 32 28 |  | 
| 33 29 | 
             
            == REQUIREMENTS:
         | 
| 34 30 |  | 
| @@ -37,7 +33,7 @@ For less minimalistic and more sane examples you may look at: | |
| 37 33 |  | 
| 38 34 | 
             
            == DOWNLOAD/INSTALL:
         | 
| 39 35 |  | 
| 40 | 
            -
            From  | 
| 36 | 
            +
            From rubygems:
         | 
| 41 37 |  | 
| 42 38 | 
             
              [sudo] gem install ffi-efl
         | 
| 43 39 |  | 
| @@ -47,11 +43,25 @@ or from the git repository on github: | |
| 47 43 | 
             
              cd ffi-efl
         | 
| 48 44 | 
             
              rake gem:install
         | 
| 49 45 |  | 
| 46 | 
            +
            == RESOURCES:
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            You can find this project in a few places:
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            Online repositories:
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            * https://github.com/jeremyz/ffi-efl
         | 
| 53 | 
            +
            * http://cgit.asynk.ch/cgi-bin/cgit/ffi-efl/
         | 
| 54 | 
            +
            * https://gitorious.org/ffi-efl
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            Gem:
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            * https://rubygems.org/gems/ffi-efl
         | 
| 59 | 
            +
             | 
| 50 60 | 
             
            == CREDITS:
         | 
| 51 61 |  | 
| 52 62 | 
             
            Special thanks to:
         | 
| 53 63 |  | 
| 54 | 
            -
            *  | 
| 64 | 
            +
            * Lionel Orry
         | 
| 55 65 |  | 
| 56 66 | 
             
            == LICENSE:
         | 
| 57 67 |  | 
    
        data/lib/efl/ecore.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #! /usr/bin/env ruby
         | 
| 2 2 | 
             
            # -*- coding: UTF-8 -*-
         | 
| 3 3 | 
             
            #
         | 
| 4 | 
            -
            require 'efl/ | 
| 4 | 
            +
            require 'efl/ffi/ecore'
         | 
| 5 5 | 
             
            #
         | 
| 6 6 | 
             
            module Efl
         | 
| 7 7 | 
             
                module Ecore
         | 
| @@ -15,15 +15,15 @@ module Efl | |
| 15 15 | 
             
                    EVENT_SIGNAL_REALTIME = 5 # Realtime signal event
         | 
| 16 16 | 
             
                    EVENT_COUNT = 6
         | 
| 17 17 | 
             
                    #
         | 
| 18 | 
            -
                    class  | 
| 18 | 
            +
                    class REcorePipe
         | 
| 19 19 | 
             
                        def initialize cb, data
         | 
| 20 | 
            -
                            @ptr = Efl:: | 
| 20 | 
            +
                            @ptr = Efl::Ecore.ecore_pipe_add cb, data
         | 
| 21 21 | 
             
                        end
         | 
| 22 | 
            -
                        def del; Efl:: | 
| 23 | 
            -
                        def read_close; Efl:: | 
| 24 | 
            -
                        def write_close; Efl:: | 
| 22 | 
            +
                        def del; Efl::Ecore.ecore_pipe_del @ptr; end
         | 
| 23 | 
            +
                        def read_close; Efl::Ecore.ecore_pipe_read_close @ptr; end
         | 
| 24 | 
            +
                        def write_close; Efl::Ecore.ecore_pipe_write_close @ptr; end
         | 
| 25 25 | 
             
                        def write data
         | 
| 26 | 
            -
                            Efl:: | 
| 26 | 
            +
                            Efl::Ecore.ecore_pipe_write @ptr, FFI::MemoryPointer.from_string(data.to_s), data.to_s.length+1
         | 
| 27 27 | 
             
                        end
         | 
| 28 28 | 
             
                        #
         | 
| 29 29 | 
             
                    end
         | 
| @@ -0,0 +1,78 @@ | |
| 1 | 
            +
            #! /usr/bin/env ruby
         | 
| 2 | 
            +
            # -*- coding: UTF-8 -*-
         | 
| 3 | 
            +
            #
         | 
| 4 | 
            +
            require 'efl/ffi/ecore_evas'
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            module Efl
         | 
| 7 | 
            +
                #
         | 
| 8 | 
            +
                module EcoreEvas
         | 
| 9 | 
            +
                    #
         | 
| 10 | 
            +
                    class REcoreEvas
         | 
| 11 | 
            +
                        include Efl::ClassHelper
         | 
| 12 | 
            +
                        proxy_list [Efl::EcoreEvas,'ecore_evas_'].freeze
         | 
| 13 | 
            +
                        def initialize o=nil, &block
         | 
| 14 | 
            +
                            @ptr = (
         | 
| 15 | 
            +
                                case o
         | 
| 16 | 
            +
                                when NilClass
         | 
| 17 | 
            +
                                    FFI::AutoPointer.new Efl::EcoreEvas.ecore_evas_new(nil, 0, 0, 0, 0, nil), method(:free)
         | 
| 18 | 
            +
                                when self.class
         | 
| 19 | 
            +
                                    o.to_ptr
         | 
| 20 | 
            +
                                when FFI::AutoPointer
         | 
| 21 | 
            +
                                    o
         | 
| 22 | 
            +
                                when FFI::Pointer
         | 
| 23 | 
            +
                                    FFI::AutoPointer.new o, method(:free)
         | 
| 24 | 
            +
                                else
         | 
| 25 | 
            +
                                    raise ArgumentError.new "wrong argument #{o.class.name}"
         | 
| 26 | 
            +
                                end
         | 
| 27 | 
            +
                            )
         | 
| 28 | 
            +
                            yield self if block_given?
         | 
| 29 | 
            +
                        end
         | 
| 30 | 
            +
                        def free p=nil
         | 
| 31 | 
            +
                            return Efl::EcoreEvas.ecore_evas_free p unless p.nil?
         | 
| 32 | 
            +
                            Efl::EcoreEvas.ecore_evas_free @ptr
         | 
| 33 | 
            +
                            @ptr.free
         | 
| 34 | 
            +
                            @ptr=nil
         | 
| 35 | 
            +
                        end
         | 
| 36 | 
            +
                        def get
         | 
| 37 | 
            +
                            # EAPI Evas *ecore_evas_get(const Ecore_Evas *ee);
         | 
| 38 | 
            +
                            Efl::Evas::REvas.new Efl::EcoreEvas.ecore_evas_get @ptr
         | 
| 39 | 
            +
                        end
         | 
| 40 | 
            +
                        def object_image_new
         | 
| 41 | 
            +
                            # EAPI Evas_Object *ecore_evas_object_image_new(Ecore_Evas *ee_target);
         | 
| 42 | 
            +
                            Efl::Evas::REvasObject.new Efl::EcoreEvas.ecore_evas_object_image_new @prt
         | 
| 43 | 
            +
                        end
         | 
| 44 | 
            +
                        def object_associate_get
         | 
| 45 | 
            +
                            # EAPI Evas_Object *ecore_evas_object_associate_get(const Ecore_Evas *ee);
         | 
| 46 | 
            +
                            Efl::Evas::REvasObject.new Efl::EcoreEvas.ecore_evas_object_associate_get @prt
         | 
| 47 | 
            +
                        end
         | 
| 48 | 
            +
                        #
         | 
| 49 | 
            +
                    end
         | 
| 50 | 
            +
                    #
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
                #
         | 
| 53 | 
            +
                module Evas
         | 
| 54 | 
            +
                    #
         | 
| 55 | 
            +
                    class REvas
         | 
| 56 | 
            +
                        def ecore_evas_get
         | 
| 57 | 
            +
                            # EAPI Ecore_Evas *ecore_evas_ecore_evas_get(const Evas *e);
         | 
| 58 | 
            +
                            Efl::EcoreEvas::REcoreEvas.new Efl::EcoreEvas.ecore_evas_ecore_evas_get @ptr
         | 
| 59 | 
            +
                        end
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
                    #
         | 
| 62 | 
            +
                    class REvasObject
         | 
| 63 | 
            +
                        def ecore_evas_get
         | 
| 64 | 
            +
                            # EAPI Ecore_Evas *ecore_evas_object_ecore_evas_get(Evas_Object *obj);
         | 
| 65 | 
            +
                            Efl::EcoreEvas::REcoreEvas.new Efl::EcoreEvas.ecore_evas_object_ecore_evas_get @ptr
         | 
| 66 | 
            +
                        end
         | 
| 67 | 
            +
                        def evas_get
         | 
| 68 | 
            +
                            # EAPI Evas *ecore_evas_object_evas_get(Evas_Object *obj);
         | 
| 69 | 
            +
                            Efl::Evas::REvas.new Efl::EcoreEvas.ecore_evas_object_evas_get @ptr
         | 
| 70 | 
            +
                        end
         | 
| 71 | 
            +
                    end
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
                # TODO
         | 
| 74 | 
            +
                #EAPI unsigned char ecore_getopt_callback_ecore_evas_list_engines(const Ecore_Getopt *parser, const Ecore_Getopt_Desc *desc, const char *str, void *data, Ecore_Getopt_Value *storage);
         | 
| 75 | 
            +
                #
         | 
| 76 | 
            +
            end
         | 
| 77 | 
            +
            #
         | 
| 78 | 
            +
            # EOF
         | 
    
        data/lib/efl/ecore_getopt.rb
    CHANGED
    
    | @@ -1,12 +1,13 @@ | |
| 1 1 | 
             
            #! /usr/bin/env ruby
         | 
| 2 2 | 
             
            # -*- coding: UTF-8 -*-
         | 
| 3 3 | 
             
            #
         | 
| 4 | 
            -
            require 'efl/ | 
| 4 | 
            +
            require 'efl/ffi/ecore_getopt'
         | 
| 5 5 | 
             
            #
         | 
| 6 6 | 
             
            module Efl
         | 
| 7 | 
            -
                 | 
| 7 | 
            +
                #
         | 
| 8 | 
            +
                module EcoreGetopt
         | 
| 8 9 | 
             
                    #
         | 
| 9 | 
            -
                    class  | 
| 10 | 
            +
                    class Value < FFI::Union
         | 
| 10 11 | 
             
                        layout  :strp,          :pointer,
         | 
| 11 12 | 
             
                                :boolp,         :eina_bool_p,
         | 
| 12 13 | 
             
                                :shortp,        :short_p,
         | 
| @@ -20,7 +21,7 @@ module Efl | |
| 20 21 | 
             
                                :ptrp,          :void_p,
         | 
| 21 22 | 
             
                    end
         | 
| 22 23 | 
             
                    #
         | 
| 23 | 
            -
                    class  | 
| 24 | 
            +
                    class DescStoreDef < FFI::Union
         | 
| 24 25 | 
             
                        layout  :strv,          :pointer,
         | 
| 25 26 | 
             
                                :boolv,         :uchar,
         | 
| 26 27 | 
             
                                :shortv,        :short,
         | 
| @@ -32,37 +33,37 @@ module Efl | |
| 32 33 | 
             
                                :doublev,       :double,
         | 
| 33 34 | 
             
                    end
         | 
| 34 35 | 
             
                    #
         | 
| 35 | 
            -
                    class  | 
| 36 | 
            +
                    class DescStore < FFI::Struct
         | 
| 36 37 | 
             
                        layout  :type,          :ecore_getopt_type,                 # enum
         | 
| 37 38 | 
             
                                :arg_req,       :ecore_getopt_desc_arg_requirement, # enum
         | 
| 38 | 
            -
                                :def,            | 
| 39 | 
            +
                                :def,           DescStoreDef,
         | 
| 39 40 | 
             
                    end
         | 
| 40 41 | 
             
                    #
         | 
| 41 42 | 
             
                    callback :ecore_getopt_desc_cb, [:ecore_getopt_p, :ecore_getopt_desc_p, :string, :pointer, :ecore_getopt_value_p ], :eina_bool
         | 
| 42 43 | 
             
                    #
         | 
| 43 | 
            -
                    class  | 
| 44 | 
            +
                    class DescCallback < FFI::Struct
         | 
| 44 45 | 
             
                        layout  :func,          :ecore_getopt_desc_cb,
         | 
| 45 46 | 
             
                                :data,          :pointer,
         | 
| 46 47 | 
             
                                :arg_req,       :ecore_getopt_desc_arg_requirement, # enum
         | 
| 47 48 | 
             
                                :def,           :pointer,
         | 
| 48 49 | 
             
                    end
         | 
| 49 50 | 
             
                    #
         | 
| 50 | 
            -
                    class  | 
| 51 | 
            -
                        layout  :store,          | 
| 51 | 
            +
                    class ActionParam < FFI::Union
         | 
| 52 | 
            +
                        layout  :store,         DescStore,
         | 
| 52 53 | 
             
                                :store_const,   :pointer,
         | 
| 53 54 | 
             
                                :choices,       :pointer,
         | 
| 54 55 | 
             
                                :append_type,   :ecore_getopt_type,                 # enum
         | 
| 55 | 
            -
                                :callback,       | 
| 56 | 
            +
                                :callback,      DescCallback,
         | 
| 56 57 | 
             
                                :dummy,         :pointer,
         | 
| 57 58 | 
             
                    end
         | 
| 58 59 | 
             
                    #
         | 
| 59 | 
            -
                    class  | 
| 60 | 
            +
                    class Desc < FFI::Struct
         | 
| 60 61 | 
             
                        layout  :shortname,     :char,
         | 
| 61 62 | 
             
                                :longname,      :pointer,
         | 
| 62 63 | 
             
                                :help,          :pointer,
         | 
| 63 64 | 
             
                                :metavar,       :pointer,
         | 
| 64 65 | 
             
                                :action,        :ecore_getopt_action,               # enum
         | 
| 65 | 
            -
                                :action_param,   | 
| 66 | 
            +
                                :action_param,  ActionParam,
         | 
| 66 67 | 
             
                    end
         | 
| 67 68 | 
             
                    #
         | 
| 68 69 | 
             
                    class EcoreGetopt < FFI::Struct
         | 
| @@ -76,15 +77,13 @@ module Efl | |
| 76 77 | 
             
            #                    :descs,         :pointer,   # NULL terminated  EcoreGetopt_Desc[]
         | 
| 77 78 |  | 
| 78 79 | 
             
                        def desc_ptr idx
         | 
| 79 | 
            -
                             | 
| 80 | 
            +
                            Efl::EcoreGetopt::Desc.new to_ptr+Efl::EcoreGetopt::EcoreGetopt.size+(idx*Efl::EcoreGetopt::Desc.size)
         | 
| 80 81 | 
             
                        end
         | 
| 81 82 | 
             
                    end
         | 
| 82 83 | 
             
                    #
         | 
| 83 | 
            -
             | 
| 84 | 
            -
                #
         | 
| 85 | 
            -
                module EcoreGetopt
         | 
| 86 | 
            -
                    class Parser
         | 
| 84 | 
            +
                    class REcoreGetopt
         | 
| 87 85 | 
             
                        def initialize desc
         | 
| 86 | 
            +
                            @ecore_getopt = nil
         | 
| 88 87 | 
             
                            @desc = desc
         | 
| 89 88 | 
             
                            @options = [
         | 
| 90 89 | 
             
                                [ 0, FFI::Pointer::NULL, FFI::Pointer::NULL, FFI::Pointer::NULL, 0, {:dummy=>FFI::Pointer::NULL} ]
         | 
| @@ -107,16 +106,16 @@ module Efl | |
| 107 106 | 
             
                            @values.insert -2, [ type, ptr ]
         | 
| 108 107 | 
             
                        end
         | 
| 109 108 | 
             
                        def to_ptr
         | 
| 110 | 
            -
                            @ | 
| 109 | 
            +
                            @ecore_getopt.to_ptr
         | 
| 111 110 | 
             
                        end
         | 
| 112 111 | 
             
                        def create
         | 
| 113 | 
            -
                            @ | 
| 112 | 
            +
                            @ecore_getopt = Efl::EcoreGetopt::EcoreGetopt.new FFI::MemoryPointer.new (Efl::EcoreGetopt::EcoreGetopt.size+Efl::EcoreGetopt::Desc.size*@options.length), 1
         | 
| 114 113 | 
             
                            [:prog,:usage,:version,:copyright,:license,:description].each do |sym|
         | 
| 115 | 
            -
                                @ | 
| 114 | 
            +
                                @ecore_getopt[sym] = ( @desc.has_key?(sym) ? FFI::MemoryPointer.from_string(@desc[sym]) : FFI::Pointer::NULL )
         | 
| 116 115 | 
             
                            end
         | 
| 117 | 
            -
                            @ | 
| 116 | 
            +
                            @ecore_getopt[:strict] = @desc[:strict] if @desc.has_key? :strict
         | 
| 118 117 | 
             
                            @options.each_with_index do |o,i|
         | 
| 119 | 
            -
                                d = @ | 
| 118 | 
            +
                                d = @ecore_getopt.desc_ptr i
         | 
| 120 119 | 
             
                                d[:shortname] = o[0].ord
         | 
| 121 120 | 
             
                                d[:longname] = p_from_string o[1]
         | 
| 122 121 | 
             
                                d[:help] = p_from_string o[2]
         | 
| @@ -153,9 +152,9 @@ module Efl | |
| 153 152 | 
             
                                    d[:action_param][:dummy] = FFI::Pointer::NULL
         | 
| 154 153 | 
             
                                end
         | 
| 155 154 | 
             
                            end
         | 
| 156 | 
            -
                            @values_p = FFI::MemoryPointer.new Efl:: | 
| 155 | 
            +
                            @values_p = FFI::MemoryPointer.new Efl::EcoreGetopt::Value, @values.length, false
         | 
| 157 156 | 
             
                            @values.each_with_index do |v,i|
         | 
| 158 | 
            -
                                Efl:: | 
| 157 | 
            +
                                Efl::EcoreGetopt::Value.new(@values_p+(i*Efl::EcoreGetopt::Value.size))[v[0]] = v[1]
         | 
| 159 158 | 
             
                            end
         | 
| 160 159 | 
             
                        end
         | 
| 161 160 | 
             
                        def parse argv
         | 
| @@ -164,7 +163,7 @@ module Efl | |
| 164 163 | 
             
                                ptr[i].put_pointer 0, p_from_string(s)
         | 
| 165 164 | 
             
                            end
         | 
| 166 165 | 
             
                            ptr[argv.length].put_pointer 0, FFI::Pointer::NULL
         | 
| 167 | 
            -
                            Efl::EcoreGetopt. | 
| 166 | 
            +
                            Efl::EcoreGetopt.ecore_getopt_parse @ecore_getopt, @values_p, argv.length, ptr
         | 
| 168 167 | 
             
                        end
         | 
| 169 168 | 
             
                        def store_full short, long, help, meta, type, arg_req, def_val
         | 
| 170 169 | 
             
                            self << [ short, long, help, meta, :ecore_getopt_action_store, [:store, [type,arg_req, def_val] ] ]
         | 
| @@ -251,14 +250,14 @@ module Efl | |
| 251 250 | 
             
                        #
         | 
| 252 251 | 
             
                        def debug
         | 
| 253 252 | 
             
                            r = ''
         | 
| 254 | 
            -
                            r << "#{self.class} : #{@ | 
| 253 | 
            +
                            r << "#{self.class} : #{@ecore_getopt.to_ptr}\n"
         | 
| 255 254 | 
             
                            [:prog,:usage,:version,:copyright,:license,:description].each do |sym|
         | 
| 256 | 
            -
                                r<< "  #{sym.to_s} : #{@ | 
| 255 | 
            +
                                r<< "  #{sym.to_s} : #{@ecore_getopt[sym]==FFI::Pointer::NULL ? 'NULL' : @ecore_getopt[sym].read_string}\n"
         | 
| 257 256 | 
             
                            end
         | 
| 258 | 
            -
                            r << "  strict : #{@ | 
| 257 | 
            +
                            r << "  strict : #{@ecore_getopt[:strict]}\n"
         | 
| 259 258 | 
             
                            i=0
         | 
| 260 259 | 
             
                            while true
         | 
| 261 | 
            -
                                d = @ | 
| 260 | 
            +
                                d = @ecore_getopt.desc_ptr i
         | 
| 262 261 | 
             
                                break if d[:shortname]==0 and d[:longname] == FFI::Pointer::NULL
         | 
| 263 262 | 
             
                                r << "    desc #{d.to_ptr}\n"
         | 
| 264 263 | 
             
                                r << "     short: #{d[:shortname].chr}\n" unless d[:shortname]==0
         | 
    
        data/lib/efl/edje.rb
    CHANGED
    
    | @@ -1,11 +1,57 @@ | |
| 1 1 | 
             
            #! /usr/bin/env ruby
         | 
| 2 2 | 
             
            # -*- coding: UTF-8 -*-
         | 
| 3 3 | 
             
            #
         | 
| 4 | 
            -
            require 'efl/ | 
| 4 | 
            +
            require 'efl/evas'
         | 
| 5 | 
            +
            require 'efl/ffi/edje'
         | 
| 5 6 | 
             
            #
         | 
| 6 7 | 
             
            module Efl
         | 
| 8 | 
            +
                #
         | 
| 7 9 | 
             
                module Edje
         | 
| 8 10 | 
             
                    #
         | 
| 11 | 
            +
                    class REdje < Efl::Evas::REvasObject
         | 
| 12 | 
            +
                        #
         | 
| 13 | 
            +
                        proxy_list [Efl::Edje,'edje_object_'].freeze
         | 
| 14 | 
            +
                        def part_object_get part
         | 
| 15 | 
            +
                            # EAPI const Evas_Object *edje_object_part_object_get (const Evas_Object *obj, const char *part);
         | 
| 16 | 
            +
                            Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_object_get @ptr, part
         | 
| 17 | 
            +
                        end
         | 
| 18 | 
            +
                        def part_swallow_get part
         | 
| 19 | 
            +
                            # EAPI Evas_Object *edje_object_part_swallow_get (const Evas_Object *obj, const char *part);
         | 
| 20 | 
            +
                            Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_swallow_get @ptr, part
         | 
| 21 | 
            +
                        end
         | 
| 22 | 
            +
                        def external_object_get part
         | 
| 23 | 
            +
                            # EAPI Evas_Object *edje_object_part_external_object_get (const Evas_Object *obj, const char *part);
         | 
| 24 | 
            +
                            Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_external_object_get @ptr, part
         | 
| 25 | 
            +
                        end
         | 
| 26 | 
            +
                        def external_content_get part, content
         | 
| 27 | 
            +
                            # EAPI Evas_Object *edje_object_part_external_content_get (const Evas_Object *obj, const char *part, const char *content);
         | 
| 28 | 
            +
                            Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_external_content_get @ptr, part, content
         | 
| 29 | 
            +
                        end
         | 
| 30 | 
            +
                        def part_box_remove part, child
         | 
| 31 | 
            +
                            # EAPI Evas_Object *edje_object_part_box_remove (Evas_Object *obj, const char *part, Evas_Object *child);
         | 
| 32 | 
            +
                            Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_box_remove @ptr, part, child
         | 
| 33 | 
            +
                        end
         | 
| 34 | 
            +
                        def part_box_remove_at part, pos
         | 
| 35 | 
            +
                            # EAPI Evas_Object *edje_object_part_box_remove_at (Evas_Object *obj, const char *part, unsigned int pos);
         | 
| 36 | 
            +
                            Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_box_remove_at @ptr, part, pos
         | 
| 37 | 
            +
                        end
         | 
| 38 | 
            +
                        def part_child_get part, col, row
         | 
| 39 | 
            +
                            # EAPI Evas_Object *edje_object_part_table_child_get (Evas_Object *obj, const char *part, unsigned int col, unsigned int row);
         | 
| 40 | 
            +
                            Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_child_get @ptr, part, col, row
         | 
| 41 | 
            +
                        end
         | 
| 42 | 
            +
                    end
         | 
| 43 | 
            +
                    #
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
                #
         | 
| 46 | 
            +
                module Evas
         | 
| 47 | 
            +
                    #
         | 
| 48 | 
            +
                    class REvas
         | 
| 49 | 
            +
                        def edje_object_add
         | 
| 50 | 
            +
                            # EAPI Evas_Object *edje_object_add (Evas *evas);
         | 
| 51 | 
            +
                            Efl::Edje::REdje.new Efl::Edje.edje_object_add @ptr
         | 
| 52 | 
            +
                        end
         | 
| 53 | 
            +
                    end
         | 
| 54 | 
            +
                    #
         | 
| 9 55 | 
             
                end
         | 
| 10 56 | 
             
            end
         | 
| 11 57 | 
             
            #
         | 
    
        data/lib/efl/eet.rb
    CHANGED
    
    | @@ -1,49 +1,41 @@ | |
| 1 1 | 
             
            #! /usr/bin/env ruby
         | 
| 2 2 | 
             
            # -*- coding: UTF-8 -*-
         | 
| 3 3 | 
             
            #
         | 
| 4 | 
            -
            require 'efl/ | 
| 4 | 
            +
            require 'efl/ffi/eet'
         | 
| 5 5 | 
             
            #
         | 
| 6 6 | 
             
            module Efl
         | 
| 7 | 
            +
                #
         | 
| 7 8 | 
             
                module Eet
         | 
| 8 9 | 
             
                    #
         | 
| 9 | 
            -
                    class  | 
| 10 | 
            +
                    class REetFile
         | 
| 10 11 | 
             
                        #
         | 
| 11 | 
            -
                         | 
| 12 | 
            -
             | 
| 13 | 
            -
                                f = Efl::API.eet_open path, mode
         | 
| 14 | 
            -
                                raise Exception.new "Unable to open file #{path}" if f.nil?
         | 
| 15 | 
            -
                                yield EetFile.new f
         | 
| 16 | 
            -
                                Efl::API.eet_close f
         | 
| 17 | 
            -
                            else
         | 
| 18 | 
            -
                                f = Efl::API.eet_open path, mode
         | 
| 19 | 
            -
                                return EetFile.new f unless f.nil?
         | 
| 20 | 
            -
                            end
         | 
| 21 | 
            -
                        end
         | 
| 22 | 
            -
                    end
         | 
| 23 | 
            -
                    #
         | 
| 24 | 
            -
                    class EetFile
         | 
| 12 | 
            +
                        include Efl::ClassHelper
         | 
| 13 | 
            +
                        proxy_list [Efl::Eet,'eet_'].freeze
         | 
| 25 14 | 
             
                        #
         | 
| 26 15 | 
             
                        def initialize ptr
         | 
| 27 16 | 
             
                            @ptr=ptr
         | 
| 28 17 | 
             
                        end
         | 
| 29 18 | 
             
                        private :initialize
         | 
| 30 19 | 
             
                        #
         | 
| 31 | 
            -
                        def  | 
| 32 | 
            -
                             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
                             | 
| 20 | 
            +
                        def self.open path, mode=:eet_file_mode_read, &blk
         | 
| 21 | 
            +
                            if blk
         | 
| 22 | 
            +
                                f = Efl::Eet.eet_open path, mode
         | 
| 23 | 
            +
                                raise Exception.new "Unable to open file #{path}" if f.nil?
         | 
| 24 | 
            +
                                yield REetFile.new f
         | 
| 25 | 
            +
                                Efl::Eet.eet_close f
         | 
| 26 | 
            +
                            else
         | 
| 27 | 
            +
                                f = Efl::Eet.eet_open path, mode
         | 
| 28 | 
            +
                                return REetFile.new f unless f.nil?
         | 
| 29 | 
            +
                            end
         | 
| 38 30 | 
             
                        end
         | 
| 39 31 | 
             
                        #
         | 
| 40 32 | 
             
                        def write key, data, compress=false
         | 
| 41 | 
            -
                            Efl:: | 
| 33 | 
            +
                            Efl::Eet.eet_write @ptr, key, FFI::MemoryPointer.from_string(data), data.bytesize, ( compress ? 1 : 0 )
         | 
| 42 34 | 
             
                        end
         | 
| 43 35 | 
             
                        #
         | 
| 44 36 | 
             
                        def read key
         | 
| 45 37 | 
             
                            ptr = FFI::MemoryPointer.new(:int)
         | 
| 46 | 
            -
                            data = Efl:: | 
| 38 | 
            +
                            data = Efl::Eet.eet_read @ptr, key, ptr
         | 
| 47 39 | 
             
                            s = ptr.read_int
         | 
| 48 40 | 
             
                            ptr.free
         | 
| 49 41 | 
             
                            return nil if s==0
         | 
| @@ -53,6 +45,7 @@ module Efl | |
| 53 45 | 
             
                    end
         | 
| 54 46 | 
             
                    #
         | 
| 55 47 | 
             
                end
         | 
| 48 | 
            +
                #
         | 
| 56 49 | 
             
            end
         | 
| 57 50 | 
             
            #
         | 
| 58 51 | 
             
            # EOF
         | 
    
        data/lib/efl/eina.rb
    ADDED
    
    
| @@ -0,0 +1,84 @@ | |
| 1 | 
            +
            #! /usr/bin/env ruby
         | 
| 2 | 
            +
            # -*- coding: UTF-8 -*-
         | 
| 3 | 
            +
            #
         | 
| 4 | 
            +
            require 'efl/ffi/eina_hash'
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            class Hash
         | 
| 7 | 
            +
                def self.from_eina_hash o
         | 
| 8 | 
            +
                    if o.is_a? Efl::EinaHash::REinaHash
         | 
| 9 | 
            +
                        o.to_h
         | 
| 10 | 
            +
                    elsif o.is_a? FFI::Pointer
         | 
| 11 | 
            +
                        Efl::EinaHash::REinaHash.new(o).to_h
         | 
| 12 | 
            +
                    else
         | 
| 13 | 
            +
                        raise ArgumentError.new " wrong argument #{o.class.name}"
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
            end
         | 
| 17 | 
            +
            module Efl
         | 
| 18 | 
            +
                module EinaHash
         | 
| 19 | 
            +
                    #
         | 
| 20 | 
            +
                    class REinaHash
         | 
| 21 | 
            +
                        include Enumerable
         | 
| 22 | 
            +
                        include Efl::ClassHelper
         | 
| 23 | 
            +
                        proxy_list [Efl::EinaHash,'eina_hash_'].freeze
         | 
| 24 | 
            +
                        def initialize o=nil, &block
         | 
| 25 | 
            +
                            cstr = ( block_given? ? block : Proc.new { Efl::EinaHash.eina_hash_string_djb2_new FFI::Pointer::NULL } )
         | 
| 26 | 
            +
                            @ptr = (
         | 
| 27 | 
            +
                                case o
         | 
| 28 | 
            +
                                when NilClass
         | 
| 29 | 
            +
                                    FFI::AutoPointer.new cstr.call, method(:free)
         | 
| 30 | 
            +
                                when self.class
         | 
| 31 | 
            +
                                    o.to_ptr
         | 
| 32 | 
            +
                                when FFI::AutoPointer
         | 
| 33 | 
            +
                                    o
         | 
| 34 | 
            +
                                when FFI::Pointer
         | 
| 35 | 
            +
                                    FFI::AutoPointer.new ( o==FFI::Pointer::NULL ? cstr.call : o ), method(:free)
         | 
| 36 | 
            +
                                when Hash
         | 
| 37 | 
            +
                                    ptr = cstr.call
         | 
| 38 | 
            +
                                    o.each do |k,v| Efl::EinaHash.eina_hash_add ptr, k, v end
         | 
| 39 | 
            +
                                    FFI::AutoPointer.new ptr, method(:free)
         | 
| 40 | 
            +
                                else
         | 
| 41 | 
            +
                                    raise ArgumentError.new "wrong argument #{o.class.name}"
         | 
| 42 | 
            +
                                end
         | 
| 43 | 
            +
                            )
         | 
| 44 | 
            +
                        end
         | 
| 45 | 
            +
                        def free p=nil
         | 
| 46 | 
            +
                            return Efl::EinaHash.eina_hash_free p unless p.nil?
         | 
| 47 | 
            +
                            Efl::EinaHash.eina_hash_free @ptr
         | 
| 48 | 
            +
                            @ptr.free
         | 
| 49 | 
            +
                            @ptr = nil
         | 
| 50 | 
            +
                        end
         | 
| 51 | 
            +
                        def each data=FFI::Pointer::NULL, &block
         | 
| 52 | 
            +
                            return if not block_given?
         | 
| 53 | 
            +
                            Efl::EinaHash::eina_hash_foreach @ptr, Proc.new{|h,k,v,d| block.call(k,v) }, data
         | 
| 54 | 
            +
                        end
         | 
| 55 | 
            +
                        def to_h
         | 
| 56 | 
            +
                             rh = {}
         | 
| 57 | 
            +
                             each { |k,v| rh[k]=v; true }
         | 
| 58 | 
            +
                             rh
         | 
| 59 | 
            +
                        end
         | 
| 60 | 
            +
                        def to_h_conv &block
         | 
| 61 | 
            +
                             rh = {}
         | 
| 62 | 
            +
                             if block_given?
         | 
| 63 | 
            +
                                each { |k,v| rh[block.call(k)]=v; true }
         | 
| 64 | 
            +
                             else
         | 
| 65 | 
            +
                                each { |k,v| rh[k.read_string]=v; true }
         | 
| 66 | 
            +
                             end
         | 
| 67 | 
            +
                             rh
         | 
| 68 | 
            +
                        end
         | 
| 69 | 
            +
                        # for fun and tests
         | 
| 70 | 
            +
                        def add k, v
         | 
| 71 | 
            +
                            Efl::EinaHash.eina_hash_add @ptr, k, v
         | 
| 72 | 
            +
                            v
         | 
| 73 | 
            +
                        end
         | 
| 74 | 
            +
                        alias :[]= :add
         | 
| 75 | 
            +
                        def find k
         | 
| 76 | 
            +
                            r = Efl::EinaHash.eina_hash_find @ptr, k
         | 
| 77 | 
            +
                            return ( r==FFI::Pointer::NULL ? nil : r )
         | 
| 78 | 
            +
                        end
         | 
| 79 | 
            +
                        alias :[] :find
         | 
| 80 | 
            +
                    end
         | 
| 81 | 
            +
                end
         | 
| 82 | 
            +
            end
         | 
| 83 | 
            +
            #
         | 
| 84 | 
            +
            # EOF
         | 
| @@ -0,0 +1,77 @@ | |
| 1 | 
            +
            #! /usr/bin/env ruby
         | 
| 2 | 
            +
            # -*- coding: UTF-8 -*-
         | 
| 3 | 
            +
            #
         | 
| 4 | 
            +
            require 'efl/ffi/eina_list'
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            class Array
         | 
| 7 | 
            +
                def self.from_eina_list o
         | 
| 8 | 
            +
                    if o.is_a? Efl::EinaList::REinaList
         | 
| 9 | 
            +
                        o.to_ary
         | 
| 10 | 
            +
                    elsif o.is_a? FFI::Pointer
         | 
| 11 | 
            +
                        Efl::EinaList::REinaList.new(o).to_ary
         | 
| 12 | 
            +
                    else
         | 
| 13 | 
            +
                        raise ArgumentError.new "wrong argument #{o.class.name}"
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
            end
         | 
| 17 | 
            +
            module Efl
         | 
| 18 | 
            +
                module EinaList
         | 
| 19 | 
            +
                    #
         | 
| 20 | 
            +
                    class EinaListStruct < FFI::Struct
         | 
| 21 | 
            +
                        layout  :data,          :pointer,
         | 
| 22 | 
            +
                                :next,          :pointer,
         | 
| 23 | 
            +
                                :prev,          :pointer,
         | 
| 24 | 
            +
                                :accounting,    :pointer,
         | 
| 25 | 
            +
                                :magic,         :uint,
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
                    #
         | 
| 28 | 
            +
                    class REinaList
         | 
| 29 | 
            +
                        include Enumerable
         | 
| 30 | 
            +
                        include Efl::ClassHelper
         | 
| 31 | 
            +
                        proxy_list [Efl::EinaList,'eina_list_'].freeze
         | 
| 32 | 
            +
                        def initialize o=nil
         | 
| 33 | 
            +
                            @ptr = (
         | 
| 34 | 
            +
                                case o
         | 
| 35 | 
            +
                                when FFI::Pointer
         | 
| 36 | 
            +
                                    o
         | 
| 37 | 
            +
                                when NilClass
         | 
| 38 | 
            +
                                    FFI::Pointer::NULL
         | 
| 39 | 
            +
                                when self.class
         | 
| 40 | 
            +
                                    o.to_ptr
         | 
| 41 | 
            +
                                when Array
         | 
| 42 | 
            +
                                    o.inject(FFI::Pointer::NULL) { |p,e| Efl::EinaList.eina_list_append p, e }
         | 
| 43 | 
            +
                                else
         | 
| 44 | 
            +
                                    raise ArgumentError.new "wrong argument #{o.class.name}"
         | 
| 45 | 
            +
                                end
         | 
| 46 | 
            +
                            )
         | 
| 47 | 
            +
                        end
         | 
| 48 | 
            +
                        def free p=nil
         | 
| 49 | 
            +
                            return Efl::EinaList.eina_list_free p unless p.nil?
         | 
| 50 | 
            +
                            Efl::EinaList.eina_list_free @ptr
         | 
| 51 | 
            +
                            @ptr = nil
         | 
| 52 | 
            +
                        end
         | 
| 53 | 
            +
                        def each
         | 
| 54 | 
            +
                            p = @ptr
         | 
| 55 | 
            +
                            while p!=::FFI::Pointer::NULL
         | 
| 56 | 
            +
                                l = Efl::EinaList::EinaListStruct.new p
         | 
| 57 | 
            +
                                yield l[:data]
         | 
| 58 | 
            +
                                p = l[:next]
         | 
| 59 | 
            +
                            end
         | 
| 60 | 
            +
                        end
         | 
| 61 | 
            +
                        def to_ary
         | 
| 62 | 
            +
                            inject([]) { |s,e| s<<e }
         | 
| 63 | 
            +
                        end
         | 
| 64 | 
            +
                        # for fun and tests
         | 
| 65 | 
            +
                        def append p
         | 
| 66 | 
            +
                            @ptr = Efl::EinaList.eina_list_append @ptr, p
         | 
| 67 | 
            +
                        end
         | 
| 68 | 
            +
                        alias :<< :append
         | 
| 69 | 
            +
                        def prepend p
         | 
| 70 | 
            +
                            @ptr = Efl::EinaList.eina_list_prepend @ptr, p
         | 
| 71 | 
            +
                        end
         | 
| 72 | 
            +
                        alias :unshift :prepend
         | 
| 73 | 
            +
                    end
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
            end
         | 
| 76 | 
            +
            #
         | 
| 77 | 
            +
            # EOF
         |