interface Efl.Gfx.Filter
{
   legacy_prefix: null;
   /* @since 1.15 */
   methods {
      @property program @beta {
         set {
            [[Set an evas filter program on this object.

              Valid for Text and Image objects at the moment.

              The argument passed to this function is a string
              containing a valid Lua program based on the filters
              API as described in the "Evas filters reference"
              page.

              Set to null to disable filtering.
            ]]
         }
         get {
            [[Gets the code of the filter program set on this object.
              May be null.
            ]]
         }
         values {
            code: const(char)*; [[filter program source code]]
            name: const(char)*(0); [[filter name (optional)]]
         }
      }
      @property state @beta {
         set {
            [[Set the current state of the filter (for use from Edje).]]
         }
         values {
            cur_state: const(char)*;
            cur_val: double(0.0);
            next_state: const(char)*;
            next_val: double(0.0);
            pos: double(0.0);
         }
      }
      @property padding @beta {
         get {
            [[Gets the padding required to apply this filter.]]
         }
         values {
            l: int;
            r: int;
            t: int;
            b: int;
         }
      }
      source_set @beta {
         [[Bind an object to use as a mask or texture with Evas Filters.

           This will create automatically a new RGBA buffer containing
           the source object's pixels (as it is rendered).
         ]]
         params {
            @in name: const(char)*; [[buffer name as used in the program]]
            @in source: Efl.Gfx.Base*; [[object to use as a proxy source]]
         }
      }
      source_get @const @beta {
         [[Retrieve which object is attached to this filter given its
           buffer name.
         ]]
         params {
            @in name: const(char)*; [[buffer name as used in the program]]
            @out source: Efl.Gfx.Base*; [[object used as a proxy source]]
         }
      }
      data_set @beta {
         [[Pass extra data to the filter program.

         This sets a global value as a string.]]
         params {
            @in name: const(char)*; [[Name of the global variable]]
            @in value: const(char)*; [[String value to use as data]]
            @in execute: bool; [[If true, execute 'name = value']]
         }
      }
   }
}
