#ifndef ATTACHABLECURSOR_HPP #define ATTACHABLECURSOR_HPP #include #include #include #include #include #include #include #include #include #include using namespace touchgfx; // #define DEFINE_MY_OWN_CURSOR namespace tdylib { /** \brief Attachable only to a TextAreaWithOneWildcard * */ class AttachableCursor { public: AttachableCursor(); void AddCursorToScreen(Container rootContainer); void AttachCursorToTextArea(TextArea* textArea, bool visible = true); FORCE_INLINE_FUNCTION bool getCursorIsVisible() const { return cursorIsVisible; } void setCursorIsVisible(bool value); /** \brief Position in this case refers to character position, not X-Coordinate */ FORCE_INLINE_FUNCTION int16_t getCursorPosition() const { return cursorPosition; } void incrementCursorPosition(); void decrementCursorPosition(); void setCursorPosition(const uint16_t value); #ifndef DEFINE_MY_OWN_CURSOR void setCursor(Line* line); #endif FORCE_INLINE_FUNCTION Line getCursor() { #ifdef DEFINE_MY_OWN_CURSOR return cursor; #else return *cursor; #endif } protected: void calculateCursorCoordinate(); bool cursorIsVisible; int16_t cursorPosition; // Character position of cursor (0 = before 1st character, 1 before 2nd character, etc int16_t cursorXCoord; // Calculated cursor position private: PainterARGB2222 cursorPainter; // A painter for our line/cursor // If we try to define the Line here it explodes the first time TouchGFX tries to render it #ifdef DEFINE_MY_OWN_CURSOR Line cursor; #else Line* cursor; #endif TextAreaWithOneWildcard* txtAttached; }; } #endif