abstract Efl.VG.Base (Eo.Base, Efl.Gfx.Base, Efl.Gfx.Stack)
{
   eo_prefix: efl_vg;
   legacy_prefix: evas_vg_node;
   methods {
      @property name {
         set {
            [[Set an unique name from the parent point of view. $null means
              no name.

              \@if MOBILE \@since_tizen 3.0
              \@elseif WEARABLE \@since_tizen 3.0
              \@endif

              @since 1.16
            ]]
         }
         get {
            [[Get an unique name from the parent point of view.

              $null means no name. When set a parent after the name what
              defined, it might be forced back to $null if the parent
              already has a node of that name.

              \@if MOBILE \@since_tizen 3.0
              \@elseif WEARABLE \@since_tizen 3.0
              \@endif

              @since 1.16
            ]]
         }
         values {
            name: const(char) *;
         }
      }
      @property transformation {
         set {
            [[Sets the transformation matrix to be used for this node object.

              Note: Pass $null to cancel the applied transformation.

              \@if MOBILE \@since_tizen 3.0
              \@elseif WEARABLE \@since_tizen 3.0
              \@endif

              @since 1.14
            ]]
         }
         get {
            [[Gets the transformation matrix used for this node object.

              \@if MOBILE \@since_tizen 3.0
              \@elseif WEARABLE \@since_tizen 3.0
              \@endif

              @since 1.14
            ]]
         }
         values {
            m: const(Eina_Matrix3) *; [[transformation matrix.]]
         }
      }
      @property origin {
         set {
            [[Sets the origin position of this node object.

              This origin position affects to node transformation.

              \@if MOBILE \@since_tizen 3.0
              \@elseif WEARABLE \@since_tizen 3.0
              \@endif

              @since 1.14
            ]]
         }
         get {
            [[Gets the origin position of this node object.

              \@if MOBILE \@since_tizen 3.0
              \@elseif WEARABLE \@since_tizen 3.0
              \@endif

              @since 1.14
            ]]
         }
         values {
            x: double; [[$origin x position.]]
            y: double; [[$origin y position.]]
         }
      }
      @property mask {
         set {
            [[
              \@if MOBILE \@since_tizen 3.0
              \@elseif WEARABLE \@since_tizen 3.0
              \@endif
            ]]
         }
         get {
            [[
              \@if MOBILE \@since_tizen 3.0
              \@elseif WEARABLE \@since_tizen 3.0
              \@endif
            ]]
         }
         values {
            m: Efl_VG *;
         }
      }
/*      quality {
         set {
         }
         get {
         }
         values {
            Evas_VG_Quality q;
         }
      } */
      bounds_get {
         [[Give the bounding box in screen coordinate as being drawn.

           It will start as the control box until it is refined once the shape
           is computed.

           \@if MOBILE \@since_tizen 3.0
           \@elseif WEARABLE \@since_tizen 3.0
           \@endif

           @since 1.14
         ]]
         params {
            @out r: Eina.Rectangle; [[bounding box to be returned.]]
         }
      }
      interpolate {
        return: bool;
        params {
          @in from: const(Efl.VG.Base)*;
          @in to: const(Efl.VG.Base)*;
          @in pos_map: double;
        }
      }
      dup {
        params {
          @in from: const(Efl.VG.Base)*;
        }
      }
   }
   implements {
      Eo.Base.parent.set;
      Eo.Base.constructor;
      Eo.Base.destructor;
      Efl.Gfx.Base.visible.set;
      Efl.Gfx.Base.visible.get;
      Efl.Gfx.Base.color.set;
      Efl.Gfx.Base.color.get;
      Efl.Gfx.Base.color_part.set;
      Efl.Gfx.Base.color_part.get;
      Efl.Gfx.Base.size.get;
      Efl.Gfx.Base.position.set;
      Efl.Gfx.Base.position.get;
      Efl.Gfx.Stack.below.get;
      Efl.Gfx.Stack.above.get;
      Efl.Gfx.Stack.stack_below;
      Efl.Gfx.Stack.stack_above;
      Efl.Gfx.Stack.raise;
      Efl.Gfx.Stack.lower;
      @virtual .bounds_get;
   }
}
