import eina_types;

abstract Ector.Renderer.Generic.Base (Eo.Base)
{
   eo_prefix: ector_renderer;
   legacy_prefix: null;
   methods {
      @property transformation {
         set {
	 }
	 get {
	 }
	 values {
	    m: const(Eina_Matrix3) *;
	 }
      }
      @property origin {
         set {
	 }
	 get {
	 }
	 values {
	    x: double;
	    y: double;
	 }
      }
      @property visibility {
         set {
            [[Makes the given Ector renderer visible or invisible.]]
	 }
	 get {
            [[Retrieves whether or not the given Ector renderer is visible.]]
	 }
	 values {
	    v: bool; [[true if to make the object visible, false otherwise]]
	 }
      }
      @property color {
         set {
            [[Sets the general/main color of the given Ector renderer to the
              given one.

              These color values are expected to be premultiplied by alpha.
            ]]
         }
         get {
            [[Retrieves the general/main color of the given Ector renderer.

              Retrieves the main color's RGB component (and alpha channel)
              values, which range from 0 to 255. For the alpha channel,
              which defines the object's transparency level, 0 means totally
              transparent, while 255 means opaque. These color values are
              premultiplied by the alpha value.

              Use null pointers on the components you're not interested in,
              they'll be ignored by the function.
            ]]
	 }
	 values {
            r: int; [[The red component of the given color.]]
            g: int; [[The green component of the given color.]]
            b: int; [[The blue component of the given color.]]
            a: int; [[The alpha component of the given color.]]
	 }
      }
      @property mask {
         set {
	 }
	 get {
	 }
	 values {
	    r: Ector_Renderer *;
	 }
      }
      @property quality {
         set {
	 }
	 get {
	 }
	 values {
	    q: Ector_Quality;
	 }
      }
      @property crc {
         get {
            return: uint;
	 }
      }
      bounds_get {
	 params {
	    @out r: Eina.Rectangle;
	 }
      }
      draw {
         return: bool @warn_unused;
	 params {
	    @in op: Ector_Rop;
	    @in clips: array<Eina.Rectangle *> *; [[array of @Eina.Rectangle clip]]
	    @in mul_col: uint;
	 }
      }
      prepare {
         return: bool @warn_unused;
	 params {
	 }
      }
      done {
         return: bool @warn_unused;
      }
   }
   implements {
      Eo.Base.destructor;
      @virtual .draw;
      @virtual .bounds_get;
      @virtual .done;
   }
}
