133 lines
3.1 KiB
C
133 lines
3.1 KiB
C
#ifndef TEXTENTRY_H_
|
|
#define TEXTENTRY_H_
|
|
|
|
#include "widget.h"
|
|
|
|
/*
|
|
* Forward declarations
|
|
*/
|
|
typedef struct _textEntry textEntry;
|
|
typedef struct _textEntryVtbl textEntryVtbl;
|
|
|
|
struct _textEntryVtbl
|
|
{
|
|
struct _widgetVtbl widgetVtbl;
|
|
};
|
|
|
|
struct _textEntry
|
|
{
|
|
/*
|
|
* Parent
|
|
*/
|
|
struct _widget widget;
|
|
|
|
/*
|
|
* Our vtable
|
|
*/
|
|
textEntryVtbl *vtbl;
|
|
|
|
/*
|
|
* The character buffer (contents), UTF-8 encoded
|
|
*/
|
|
char *text;
|
|
|
|
/*
|
|
* The size of text (how much space was allocated), not including the '\0'
|
|
* byte
|
|
*/
|
|
size_t textSize;
|
|
|
|
/*
|
|
* The actual length of the string (how much space is used); since text is
|
|
* encoded in UTF-8 this is *not* the character count
|
|
*/
|
|
size_t textHead;
|
|
|
|
/*
|
|
* The current insert position (where in the byte-stream characters should
|
|
* be inserted to); again this has no relation to the character count
|
|
*/
|
|
int insertPosition;
|
|
|
|
/*
|
|
* The offet of the leftmost pixel that is to be rendered:
|
|
* |*-------------------|
|
|
* "The rain in S|pain falls mainly on|the..."
|
|
* |--------------------|
|
|
*
|
|
* The * shows the location represented by this value
|
|
*/
|
|
int renderLeftOffset;
|
|
};
|
|
|
|
/*
|
|
* Type information
|
|
*/
|
|
extern const classInfo textEntryClassInfo;
|
|
|
|
/*
|
|
* Helper macros
|
|
*/
|
|
#define TEXT_ENTRY(self) (assert(widgetIsA(WIDGET(self), &textEntryClassInfo)), \
|
|
(textEntry *) (self))
|
|
|
|
/*
|
|
* Protected methods
|
|
*/
|
|
void textEntryInit(textEntry *self, const char *id);
|
|
void textEntryDestroyImpl(widget *self);
|
|
void textEntryDoDrawImpl(widget *self);
|
|
size textEntryGetMinSizeImpl(widget *self);
|
|
size textEntryGetMaxSizeImpl(widget *self);
|
|
|
|
|
|
/*
|
|
* Public methods
|
|
*/
|
|
|
|
/**
|
|
* Constructs a new textEntry object and returns it.
|
|
*
|
|
* @param id The id of the widget.
|
|
* @return A pointer to an textEntry on success; otherwise NULL.
|
|
*/
|
|
textEntry *textEntryCreate(const char *id);
|
|
|
|
/**
|
|
* Fetches the contents of the text entry field, returning a copy of them. It is
|
|
* important to note that the returned string remains the responsibility of the
|
|
* user and must be free'ed when no longer required.
|
|
*
|
|
* @param self The text entry field to get the contents of.
|
|
* @return A pointer to a freshly allocated copy of the contents on success;
|
|
* otherwise NULL.
|
|
*/
|
|
const char *textEntryGetContents(textEntry *self);
|
|
|
|
/**
|
|
* Sets the contents of the entry field to a copy of the contents of contents.
|
|
*
|
|
* @param self The text entry to set the contents of.
|
|
* @param contents The string to set the contents to. This should be UTF-8
|
|
* encoded and NULL terminated.
|
|
* @return true if the contents were successfully set; otherwise false.
|
|
*/
|
|
bool textEntrySetContents(textEntry *self, const char *contents);
|
|
|
|
/*
|
|
* Protected methods
|
|
*/
|
|
|
|
/**
|
|
* Called by widgetDoDraw to draw the frame of the text entry field. The frame
|
|
* consists of the background and border of the entry field. This method will be
|
|
* called before the text and caret are rendered.
|
|
*
|
|
* @param self The text entry to draw the frame of.
|
|
*/
|
|
void textEntryDoDrawFrame(textEntry *self);
|
|
|
|
void textEntryDoDrawText(textEntry *self);
|
|
|
|
#endif /*TEXTENTRY_H_*/
|