class Evas.Text (Evas.Object, Efl.Text, Efl.Text_Properties, Evas.Filter)
{
   legacy_prefix: evas_object_text;
   eo_prefix: evas_obj_text;
   methods {
      @property shadow_color {
         [[Controls the shadow color for the given text object.

           Shadow effects, which are fading colors decorating the text
           underneath it, will just be shown if the object is set to one of
           the following styles:

           - @Evas.Text_Style_Type.shadow
           - @Evas.Text_Style_Type.outline_shadow
           - @Evas.Text_Style_Type.far_shadow
           - @Evas.Text_Style_Type.outline_soft_shadow
           - @Evas.Text_Style_Type.soft_shadow
           - @Evas.Text_Style_Type.far_soft_shadow

           One can also change the direction where the shadow grows to, with
           @.style

           See @.shadow_color]]
         set {
         }
         get {
            [[Note: Use $NULL pointers on the color 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 ellipsis {
         [[Conttrols the ellipsis that should be used for the text object.

          This is a value between 0.0 and 1.0 indicating the position of the text
          to be shown. 0.0 means the start will be shown and the end trimmed, 1.0
          means the beginning will be trimmed and the end will be shown, and any value
          in between will cause ellipsis to be added in both end of the text and the
          requested part to be shown.
          -1.0 means ellipsis is turned off.

          @since 1.8]]
         set {
         }
         get {
         }
         values {
            ellipsis: double(-1); [[the ellipsis. Allowed values: -1.0 or 0.0-1.0]]
         }
      }
      @property bidi_delimiters {
         [[Sets the BiDi delimiters used in the textblock.

           BiDi delimiters are use for in-paragraph separation of bidi segments. This
           is useful for example in recipients fields of e-mail clients where bidi
           oddities can occur when mixing RTL and LTR.

           @since 1.1]]
         set {
         }
         get {
         }
         values {
            delim: const(char)*; [[A null terminated string of delimiters, e.g ",|".]]
         }
      }
      @property outline_color {
         [[Controlss the outline color for the given text object.

           Outline effects (colored lines around text glyphs) will just be
           shown if the object is set to one of the following styles:
           - @Evas.Text_Style_Type.outline
           - @Evas.Text_Style_Type.soft_outline
           - @Evas.Text_Style_Type.outline_shadow
           - @Evas.Text_Style_Type.outline_soft_shadow]]
         set {
         }
         get {
         }
         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 glow2_color {
         [[Sets the 'glow 2' color for the given text object.

           'Glow 2' effects, which are glowing colors decorating the text's
           (immediate) surroundings, will just be shown if the object is set
           to the @Evas.Text_Style_Type.glow style. See also
           @.glow_color.]]
         set {
         }
         get {
         }
         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 style {
            [[Controls the style to apply on the given text object.

              Text object styles are one of the values in @Evas.Text_Style_Type
              Some of those values are combinations of more than one style,
              and some account for the direction of the rendering of shadow effects.

              Note: One may use the helper macros #EVAS_TEXT_STYLE_BASIC_SET and
              #EVAS_TEXT_STYLE_SHADOW_DIRECTION_SET to assemble a style value.]]

            /* FIXME-doc:
            The following figure illustrates the text styles:

            @image html text-styles.png
            @image rtf text-styles.png
            @image latex text-styles.eps

            @see evas_object_text_style_get()
            @see evas_object_text_shadow_color_set()
            @see evas_object_text_outline_color_set()
            @see evas_object_text_glow_color_set()
            @see evas_object_text_glow2_color_set() */
         set {
         }
         get {
         }
         values {
            style: Evas.Text_Style_Type; [[a style type.]]
         }
      }
      @property glow_color {
         [[Sets the glow color for the given text object.

           Glow effects, which are glowing colors decorating the text's
           surroundings, will just be shown if the object is set to the
           @Evas.Text_Style_Type.glow style.

           Note: Glow effects are placed from a short distance of the text
           itself, but no touching it. For glowing effects right on the
           borders of the glyphs, see 'glow 2' effects.]]
         set {
         }
         get {
         }
         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 max_descent {
         get {
            return: Evas.Coord;
         }
      }
      @property style_pad {
         get {
            [[Gets the text style pad of a text object.]]
         }
         values {
            l: int; [[The left pad (or $NULL).]]
            r: int; [[The right pad (or $NULL).]]
            t: int; [[The top pad (or $NULL).]]
            b: int; [[The bottom pad (or $NULL).]]
         }
      }
      @property direction {
         get {
            [[Retrieves the direction of the text currently being displayed in the
            text object.]]

            return: Evas.BiDi_Direction;
         }
      }
      @property ascent {
         get {
            return: Evas.Coord;
         }
      }
      @property horiz_advance {
         get {
            return: Evas.Coord;
         }
      }
      @property inset {
         get {
            return: Evas.Coord;
         }
      }
      @property max_ascent {
         get {
            return: Evas.Coord;
         }
      }
      @property vert_advance {
         get {
            return: Evas.Coord;
         }
      }
      @property descent {
         get {
            return: Evas.Coord;
         }
      }
      last_up_to_pos @const {
         [[Returns the logical position of the last char in the text up to the pos given. this is NOT the position of the last char because of the possibility of RTL in the text.]]
         return: int(-1);
         params {
            @in x: Evas.Coord;
            @in y: Evas.Coord;
         }
      }
      char_coords_get @const {
         return: int;
         params {
            @in x: Evas.Coord;
            @in y: Evas.Coord;
            @out cx: Evas.Coord;
            @out cy: Evas.Coord;
            @out cw: Evas.Coord;
            @out ch: Evas.Coord;
         }
      }
      char_pos_get @const {
         [[Retrieve position and dimension information of a character within a text @Evas.Object

         This function is used to obtain the X, Y, width and height of the character
         located at $pos within the @Evas.Object $obj. $obj must be a text object
         Any of the $Evas_Coord parameters ($cx, $cy, $cw, $ch) may be $NULL in which case no value will be assigned to that
         parameter.]]

         return: bool; [[$false on success, $true otherwise]]
         params {
            @in pos: int; [[The character position to request co-ordinates for.]]
            @out cx: Evas.Coord; [[A pointer to an @Evas.Coord to store the X value in (can be NULL).]]
            @out cy: Evas.Coord; [[A pointer to an @Evas.Coord to store the Y value in (can be NULL).]]
            @out cw: Evas.Coord; [[A pointer to an @Evas.Coord to store the Width value in (can be NULL).]]
            @out ch: Evas.Coord; [[A pointer to an @Evas.Coord to store the Height value in (can be NULL).]]
         }
      }
   }
   implements {
      Eo.Base.constructor;
      Eo.Base.destructor;
      Eo.Base.dbg_info_get;
      Efl.Gfx.Base.size.set;
      Efl.Text.text.set;
      Efl.Text.text.get;
      Efl.Text_Properties.font.get;
      Efl.Text_Properties.font.set;
      Efl.Text_Properties.font_source.get;
      Efl.Text_Properties.font_source.set;
      Efl.Gfx.Filter.program.set;
      Evas.Filter.input_alpha;
      Evas.Filter.input_render;
      Evas.Filter.dirty;
   }
}
