diff options
| -rw-r--r-- | lib/efl/evas.rb | 43 | ||||
| -rw-r--r-- | spec/evas_spec.rb | 91 | 
2 files changed, 100 insertions, 34 deletions
| diff --git a/lib/efl/evas.rb b/lib/efl/evas.rb index a0067e7..ff0f3bc 100644 --- a/lib/efl/evas.rb +++ b/lib/efl/evas.rb @@ -72,10 +72,21 @@ module Efl                  @ptr=nil              end              def object_add t -                # TODO should return Objects -                r = Evas::REvasObject.new Native.send "evas_object_#{t.to_s}_add", @ptr -                yield r if block_given? -                r +                ts = t.to_s +                o =  ( +                    case ts +                    when 'rectangle' +                        Evas::REvasRectangle.new Native.evas_object_rectangle_add @ptr +                    when 'line' +                        Evas::REvasLine.new Native.evas_object_line_add @ptr +                    when 'polygon' +                        Evas::REvasPolygon.new Native.evas_object_polygon_add @ptr +                    else +                        raise NameError.new "unknown or not implemented yet evas_object type #{ts}" +                    end +                ) +                yield o if block_given? +                o              end              def output_size_get                  x = FFI::MemoryPointer.new :int @@ -238,6 +249,30 @@ module Efl              end              alias :data :data_get          end +        # +        class REvasRectangle < REvasObject +        end +        # +        class REvasLine < REvasObject +            # +            search_prefixes 'evas_object_line_' +            # +            def line_xy_get +                x1 = FFI::MemoryPointer.new :int +                y1 = FFI::MemoryPointer.new :int +                x2 = FFI::MemoryPointer.new :int +                y2 = FFI::MemoryPointer.new :int +                Native.evas_object_line_xy_get @ptr, x1, y1, x2, y2 +                [ x1.read_int, y1.read_int, x2.read_int, y2.read_int ] +            end +        end +        # +        class REvasPolygon < REvasObject +            # +            search_prefixes 'evas_object_polygon_' +            # +        end +        #      end  end  # diff --git a/spec/evas_spec.rb b/spec/evas_spec.rb index d437619..8936cfe 100644 --- a/spec/evas_spec.rb +++ b/spec/evas_spec.rb @@ -5,6 +5,24 @@ require 'efl/ecore'  require 'efl/evas'  #  describe Efl::Evas do +    def realize_evas +        @width = 800 +        @height = 600 +        @pixels = FFI::MemoryPointer.new :int, @width*@height +        @e = Evas::REvas.new +        @e.output_method_set Evas::render_method_lookup("buffer") +        @e.output_viewport_set 0, 0, @width, @height +        @e.output_size_set @width, @height +        einfo = Native::EngineInfoBufferStruct.new @e.engine_info +        einfo[:info][:depth_type] = Efl::Evas::EVAS_ENGINE_BUFFER_DEPTH_ARGB32 +        einfo[:info][:dest_buffer] = @pixels +        einfo[:info][:dest_buffer_row_bytes] = @width * FFI::type_size(:int); +        einfo[:info][:use_color_key] = 0; +        einfo[:info][:alpha_threshold] = 0; +        einfo[:info][:func][:new_update_region] = nil #FFI::Pointer::NULL; +        einfo[:info][:func][:free_update_region] = nil #FFI::Pointer::NULL; +        @e.engine_info_set einfo +    end      #      before(:all) {          Evas = Efl::Evas @@ -59,22 +77,7 @@ describe Efl::Evas do      describe Efl::Evas::REvas do          before(:all) do              Evas.init -            @width = 800 -            @height = 600 -            @pixels = FFI::MemoryPointer.new :int, @width*@height -            @e = Evas::REvas.new -            @e.output_method_set Evas::render_method_lookup("buffer") -            @e.output_viewport_set 0, 0, @width, @height -            @e.output_size_set @width, @height -            einfo = Native::EngineInfoBufferStruct.new @e.engine_info -            einfo[:info][:depth_type] = Efl::Evas::EVAS_ENGINE_BUFFER_DEPTH_ARGB32 -            einfo[:info][:dest_buffer] = @pixels -            einfo[:info][:dest_buffer_row_bytes] = @width * FFI::type_size(:int); -            einfo[:info][:use_color_key] = 0; -            einfo[:info][:alpha_threshold] = 0; -            einfo[:info][:func][:new_update_region] = nil #FFI::Pointer::NULL; -            einfo[:info][:func][:free_update_region] = nil #FFI::Pointer::NULL; -            @e.engine_info_set einfo +            realize_evas          end          after(:all) do              @e.free @@ -306,20 +309,7 @@ describe Efl::Evas do          #          before(:all) do              Evas.init -            @pixels = FFI::MemoryPointer.new :int, 100*100 -            @e = Evas::REvas.new -            @e.output_method_set Evas.render_method_lookup("buffer") -            @e.output_viewport_set 0, 0, 100, 100 -            @e.output_size_set 100, 100 -            einfo = Native::EngineInfoBufferStruct.new @e.engine_info -            einfo[:info][:depth_type] = Efl::Evas::EVAS_ENGINE_BUFFER_DEPTH_ARGB32 -            einfo[:info][:dest_buffer] = @pixels -            einfo[:info][:dest_buffer_row_bytes] = 100 * FFI::type_size(:int); -            einfo[:info][:use_color_key] = 0; -            einfo[:info][:alpha_threshold] = 0; -            einfo[:info][:func][:new_update_region] = nil #FFI::Pointer::NULL; -            einfo[:info][:func][:free_update_region] = nil #FFI::Pointer::NULL; -            @e.engine_info_set einfo +            realize_evas              @o = @e.object_add(:rectangle) { |o|                  o.color = 200,200,200,200                  o.move 0, 0 @@ -567,6 +557,47 @@ describe Efl::Evas do              @o.static_clip?.should be_false              @o.static_clip.should be_false          end +        # +    end +    # +    describe Efl::Evas::REvasLine do +        # +        before(:all) do +            Evas.init +            realize_evas +            @l = @e.object_add 'line' +        end +        after(:all) do +            @e.free +            Evas.shutdown +        end +        it "xy get/set should work" do +            @l.line_xy_set 10, 20, 30, 40 +            @l.line_xy_get.should == [10, 20, 30, 40] +        end +    end +    # +    describe Efl::Evas::REvasPolygon do +        # +        before(:all) do +            Evas.init +            realize_evas +            @p = @e.object_add 'polygon' +        end +        after(:all) do +            @e.free +            Evas.shutdown +        end +        it "xy point_add should work" do +            @p.point_add 10, 20 +            @p.point_add 30, 40 +            @p.point_add 50, 60 +            @p.point_add 80, 80 +        end +        # +        it "point clear shold work" do +            @p.points_clear +        end      end      #  end | 
