aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2014-01-17 18:36:28 +1000
committerinmarket <andrewh@inmarket.com.au>2014-01-17 18:36:28 +1000
commit199b89e4dc0b781310f40d0e5743bf355077f9ab (patch)
treefab28bd9fd0944113bc0a4136b733389edb2709e /include
parent1f3f8bdbe6714c2c8ba02f9a819db5bcf80500a3 (diff)
downloaduGFX-199b89e4dc0b781310f40d0e5743bf355077f9ab.tar.gz
uGFX-199b89e4dc0b781310f40d0e5743bf355077f9ab.tar.bz2
uGFX-199b89e4dc0b781310f40d0e5743bf355077f9ab.zip
Updates to console history. This now works well.
Diffstat (limited to 'include')
-rw-r--r--include/gwin/console.h24
-rw-r--r--include/gwin/options.h46
2 files changed, 53 insertions, 17 deletions
diff --git a/include/gwin/console.h b/include/gwin/console.h
index ec108984..252b627e 100644
--- a/include/gwin/console.h
+++ b/include/gwin/console.h
@@ -32,10 +32,9 @@ typedef struct GConsoleObject {
coord_t cx, cy; // Cursor position
#if GWIN_CONSOLE_USE_HISTORY
- char* buffer; // buffer to store console content
- uint16_t last_char; // the last rendered character
- size_t size; // size of buffer
- bool_t store; // shall PutChar() store into buffer
+ char * buffer; // buffer to store console content
+ size_t bufsize; // size of buffer
+ size_t bufpos; // the position of the next char
#endif
#if GFX_USE_OS_CHIBIOS && GWIN_CONSOLE_USE_BASESTREAM
@@ -91,18 +90,19 @@ GHandle gwinGConsoleCreate(GDisplay *g, GConsoleObject *gc, const GWindowInit *p
#if GWIN_CONSOLE_USE_HISTORY
/**
- * @brief Assing a buffer to keep track of the content while the widget is invisible.
+ * @brief Assign a buffer to keep track of the content while the widget is invisible.
* @pre GWIN_CONSOLE_USE_HISTORY must be set to TRUE in your gfxconf.h
*
* @param[in] gh The window handle (must be a console window)
- * @param[in] buffer The pointer of the buffer that shall be used. Buffer will be
- * dynamically allocated when this is NULL.
- * @param[in] size Size of the buffer that has been passed. If buffer is NULL, this
- * will be the size of the dynamically allocated buffer.
+ * @param[in] onoff If TRUE a buffer is allocated to maintain console text
+ * when the console is obscured or invisible. If FALSE, then
+ * any existing buffer is deallocated.
+ * @note When the history buffer is turned on, scrolling is implemented using the
+ * history buffer.
*
- * @return TRUE on success
- */
- bool_t gwinConsoleSetBuffer(GHandle gh, void* buffer, size_t size);
+ * @return TRUE if the history buffer is now turned on.
+ */
+ bool_t gwinConsoleSetBuffer(GHandle gh, bool_t onoff);
#endif
/**
diff --git a/include/gwin/options.h b/include/gwin/options.h
index e6d2a81e..882db572 100644
--- a/include/gwin/options.h
+++ b/include/gwin/options.h
@@ -106,17 +106,53 @@
#define GWIN_BUTTON_LAZY_RELEASE FALSE
#endif
/**
- * @brief Should the content of the console be logged or not
- * @details If this feature is enable, the content of the console will be stored.
- * Every content that gets printed to the console while being invisible
- * will be rendered once the console is visible again. All previous written
- * content will be restored too.
+ * @brief Should the content of the console be saved for redrawing.
* @details Defaults to FALSE
+ * @details If this feature is enabled, the contents of the console will be saved
+ * as it is written. If a redraw is required it will be redrawn from the
+ * history. Scrolling will also use the history buffer if it is turned on.
+ * @note Using this option allocates the amount of memory to store the
+ * history based on the minimum character width in the current font
+ * at the time the history is turned on. Using a fixed width font is a good
+ * idea to minimize memory usage.
+ * @note If you change the size of the window or you change the font being displayed
+ * you should turn off the history and then turn it back on in order to get
+ * a new buffer of the correct size for the window/font combination. Strange
+ * redrawing and scrolling effects can occur if the buffer is too small to
+ * save a complete screen of data. Note the system tries to optimize storage
+ * so this may only be evident in very limited situations eg with a console
+ * with many characters in it.
+ * @note @p gwinConsoleSetBuffer() can be used to turn the history buffer off and on.
*/
#ifndef GWIN_CONSOLE_USE_HISTORY
#define GWIN_CONSOLE_USE_HISTORY FALSE
#endif
/**
+ * @brief Use font width averaging for the history buffer allocation.
+ * @details Defaults to FALSE
+ * @details If this feature is enabled, the width one third of the way between
+ * the font's character width minimum and maximum will be used instead
+ * of the font's minimum width.
+ * @note This option reduces the memory allocation for a variable width font's
+ * history buffer. Note that strange
+ * redrawing and scrolling effects can occur if the buffer is too small to
+ * save a complete screen of data. The system tries to optimize storage
+ * so this may only be evident in very limited situations eg with a console
+ * with many characters in it.
+ */
+ #ifndef GWIN_CONSOLE_HISTORY_AVERAGING
+ #define GWIN_CONSOLE_HISTORY_AVERAGING FALSE
+ #endif
+ /**
+ * @brief Should the history be turned on for all console windows when they are first created.
+ * @details Defaults to FALSE
+ * @note @p gwinConsoleSetBuffer() can be used to turn the history buffer off and on at
+ * any time.
+ */
+ #ifndef GWIN_CONSOLE_HISTORY_ATCREATE
+ #define GWIN_CONSOLE_HISTORY_ATCREATE FALSE
+ #endif
+ /**
* @brief Console Windows need floating point support in @p gwinPrintf
* @details Defaults to FALSE
*/