import evas_types;

class Evas.Canvas3D.Object (Eo.Base, Evas.Common_Interface)
{
   legacy_prefix: null;
   data: Evas_Canvas3D_Object_Data;
   methods {
      change {
         [[Notify the object regarding its  state change.]]
         params {
           @in state: Evas.Canvas3D.State;  [[State that is changed.]]
           @in ref: Evas.Canvas3D.Object *; [[The Object that caused the change.]]
         }
      }
      type_get @const {
         [[Returns the type of the object.]]
          return: Evas.Canvas3D.Object_Type;
      }

      type_set {
         [[Returns the type of the object.]]
          params{
            @in type: Evas.Canvas3D.Object_Type;
          }
      }

      dirty_get @const {
         [[Returns the status of a particular state of the object.]]
          return: bool;
         params {
           @in state: Evas.Canvas3D.State; [[State whose status is being asked.]]
         }
      }

      update {
         [[Update request for the object.]]
      }
      update_notify {
         [[Pure virtual update_notify function.

           Update request for the object.]]
      }

      change_notify {
         [[Pure virtual change_notify function.

           Update request for the object.]]
         params {
           @in state: Evas.Canvas3D.State;  [[State that is changed.]]
           @in ref: Evas.Canvas3D.Object *; [[The Object that caused the change.]]
         }
      }
      callback_register {
         [[Pure virtual register samrt callback function.]]
         params {
           @in event: const(char)*; [[Event type.]]
           @in data: const(void)*;  [[User data.]]
         }
      }
      callback_unregister {
         [[Pure virtual unregister smart callback function.]]
         params {
           @in event: const(char)*; [[Event type.]]
         }
      }
   }

   implements {
      Eo.Base.constructor;
      Eo.Base.event_callback_priority_add;
      Eo.Base.event_callback_del;
      Evas.Common_Interface.evas.get;
      @virtual .update_notify;
      @virtual .change_notify;
      @virtual .callback_register;
      @virtual .callback_unregister;
   }
   events {
      clicked; [[Clicked Event.]]
      collision; [[Collision Event.]]
   }
}
