/**
 * @file lv_textarea_private.h
 *
 */

#ifndef LV_TEXTAREA_PRIVATE_H
#define LV_TEXTAREA_PRIVATE_H

#ifdef __cplusplus
extern "C" {
#endif

/*********************
 *      INCLUDES
 *********************/

#include "../../core/lv_obj_private.h"
#include "lv_textarea.h"

#if LV_USE_TEXTAREA != 0

/*********************
 *      DEFINES
 *********************/

/**********************
 *      TYPEDEFS
 **********************/

/** Data of text area */
struct _lv_textarea_t {
    lv_obj_t obj;
    lv_obj_t * label;            /**< Label of the text area */
    char * placeholder_txt;      /**< Place holder label. only visible if text is an empty string */
    char * pwd_tmp;              /**< Used to store the original text in password mode */
    char * pwd_bullet;           /**< Replacement characters displayed in password mode */
    char * accepted_chars;       /**< Only these characters will be accepted. NULL: accept all */
    uint32_t max_length;         /**< The max. number of characters. 0: no limit */
    uint32_t pwd_show_time;      /**< Time to show characters in password mode before change them to '*' */
    struct {
        int32_t valid_x;         /**< Used when stepping up/down to a shorter line.
                                  *(Used by the library) */
        uint32_t pos;            /**< The current cursor position
                                  *(0: before 1st letter; 1: before 2nd letter ...) */
        lv_area_t area;          /**< Cursor area relative to the Text Area */
        uint32_t txt_byte_pos;   /**< Byte index of the letter after (on) the cursor */
        uint8_t show : 1;        /**< Cursor is visible now or not (Handled by the library) */
        uint8_t click_pos : 1;   /**< 1: Enable positioning the cursor by clicking the text area */
    } cursor;
#if LV_LABEL_TEXT_SELECTION
    uint32_t sel_start;           /**< Temporary values for text selection */
    uint32_t sel_end;
    uint8_t text_sel_in_prog : 1; /**< User is in process of selecting */
    uint8_t text_sel_en : 1;      /**< Text can be selected on this text area */
#endif
    uint8_t pwd_mode : 1;         /**< Replace characters with '*' */
    uint8_t one_line : 1;         /**< One line mode (ignore line breaks) */
    uint8_t static_accepted_chars : 1; /**<1: Only a pointer is saved in `accepted_chars` */
};


/**********************
 * GLOBAL PROTOTYPES
 **********************/

/**********************
 *      MACROS
 **********************/

#endif /* LV_USE_TEXTAREA != 0 */

#ifdef __cplusplus
} /*extern "C"*/
#endif

#endif /*LV_TEXTAREA_PRIVATE_H*/
