enum Elm.Hover.Axis
{
   [[The orientation axis for the hover object]]
   none, [[ELM_HOVER_AXIS_NONE -- no preferred orientation.]]
   horizontal, [[ELM_HOVER_AXIS_HORIZONTAL -- horizontal.]]
   vertical, [[ELM_HOVER_AXIS_VERTICAL -- vertical.]]
   both [[ELM_HOVER_AXIS_BOTH -- both.]]
}

class Elm.Hover (Elm.Layout, Evas.Clickable_Interface,
                 Elm_Interface_Atspi_Widget_Action)
{
   eo_prefix: elm_obj_hover;
   methods {
      @property target {
         set @internal {
            [[Sets the target object for the hover.

              This function will cause the hover to be centered on the
              target object.
            ]]
         }
         get @internal {
            [[Get the target object for the hover.]]
         }
         values {
            target: Evas.Object *; [[The target object.]]
         }
      }
      best_content_location_get @const {
         [[Returns the best swallow location for content in the hover.

           Best is defined here as the location at which there is the most
           available space.

           $pref_axis may be either #ELM_HOVER_AXIS_NONE (for no preferred
           orientation), #ELM_HOVER_AXIS_HORIZONTAL, #ELM_HOVER_AXIS_VERTICAL
           or #ELM_HOVER_AXIS_BOTH.

           If #ELM_HOVER_AXIS_HORIZONTAL is chosen the returned position
           will necessarily be along the horizontal axis("left" or "right").
           If #ELM_HOVER_AXIS_VERTICAL is chosen the returned position will
           necessarily be along the vertical axis("top" or "bottom").
           Choosing #ELM_HOVER_AXIS_BOTH or #ELM_HOVER_AXIS_NONE has the
           same effect and the returned position may be in either axis.

           See also \@ref elm_object_part_content_set.
         ]]
         return: const(char)*;
         params {
            @in pref_axis: Elm.Hover.Axis; [[The preferred orientation axis
                                             for the hover object to use]]
         }
      }
      dismiss @internal {
         [[Dismiss a hover object]]
      }
   }
   implements {
      class.constructor;
      Eo.Base.constructor;
      Evas.Object_Smart.del;
      Evas.Object_Smart.hide;
      Evas.Object_Smart.show;
      Evas.Object_Smart.move;
      Evas.Object_Smart.add;
      Evas.Object_Smart.resize;
      Elm.Widget.theme_apply;
      Elm.Widget.sub_object_add;
      Elm.Widget.parent;
      Elm.Widget.focus_direction_manager_is;
      Elm.Widget.focus_next_manager_is;
      Elm.Widget.sub_object_del;
      Elm.Container.content_get;
      Elm.Container.content_set;
      Elm.Container.content_unset;
      Elm.Layout.sizing_eval;
      Elm.Layout.content_aliases.get;
      Elm_Interface_Atspi_Accessible.state_set.get;
      Elm_Interface_Atspi_Widget_Action.elm_actions.get;
      Elm_Interface_Atspi_Component.highlight_grab;
      Elm_Interface_Atspi_Component.highlight_clear;
   }
   events {
      smart,changed;
      dismissed;
   }

}
