From 8ed9e763c0f97f2946990a911bb940f8c80ff761 Mon Sep 17 00:00:00 2001 From: inmarket Date: Mon, 24 Jun 2013 22:58:37 +1000 Subject: GWIN reduce Initialisation parameters and fix visibility issues --- include/gwin/button.h | 9 ++------- include/gwin/checkbox.h | 9 ++------- include/gwin/class_gwin.h | 11 +++++------ include/gwin/console.h | 11 ++++------- include/gwin/graph.h | 8 ++------ include/gwin/gwidget.h | 16 ++++++++++++++++ include/gwin/gwin.h | 23 +++++++++++++++++------ include/gwin/slider.h | 9 ++------- 8 files changed, 50 insertions(+), 46 deletions(-) (limited to 'include') diff --git a/include/gwin/button.h b/include/gwin/button.h index 21de74bd..a6b19333 100644 --- a/include/gwin/button.h +++ b/include/gwin/button.h @@ -70,26 +70,21 @@ extern "C" { * @return NULL if there is no resultant drawing area, otherwise a window handle. * * @param[in] gb The GButtonObject structure to initialise. If this is NULL the structure is dynamically allocated. - * @param[in] x,y The screen co-ordinates for the top left corner of the window - * @param[in] width The width of the window - * @param[in] height The height of the window + * @param[in] pInit The initialisation parameters * * @note The drawing color and the background color get set to the current defaults. If you haven't called * @p gwinSetDefaultColor() or @p gwinSetDefaultBgColor() then these are White and Black respectively. * @note The font gets set to the current default font. If you haven't called @p gwinSetDefaultFont() then there * is no default font and text drawing operations will no nothing. - * @note The dimensions and position may be changed to fit on the real screen. * @note A button remembers its normal drawing state. If there is a window manager then it is automatically * redrawn if the window is moved or its visibility state is changed. - * @note The button is initially marked as invisible so that more properties can be set before display. - * Call @p gwinSetVisible() to display it when ready. * @note A button supports mouse and a toggle input. * @note When assigning a toggle, only one toggle is supported. If you try to assign more than one toggle it will * forget the previous toggle. When assigning a toggle the role parameter must be 0. * * @api */ -GHandle gwinCreateButton(GButtonObject *gb, coord_t x, coord_t y, coord_t width, coord_t height); +GHandle gwinCreateButton(GButtonObject *gb, GWidgetInit *pInit); /** * @brief Set the colors of a button. diff --git a/include/gwin/checkbox.h b/include/gwin/checkbox.h index 4a5e032a..9a19a2e1 100644 --- a/include/gwin/checkbox.h +++ b/include/gwin/checkbox.h @@ -59,26 +59,21 @@ typedef struct GCheckboxObject_t { * @return NULL if there is no resultant drawing area, otherwise a window handle. * * @param[in] gb The GCheckboxObject structure to initialise. If this is NULL, the structure is dynamically allocated. - * @param[in] x,y The screen co-ordinates for the top left corner of the window - * @param[in] width The width of the window - * @param[in] height The height of the window + * @param[in] pInit The initialization parameters to use * * @note The drawing color and the background color get set to the current defaults. If you haven't called * @p gwinSetDefaultColor() or @p gwinSetDefaultBgColor() then these are White and Black respectively. * @note The font gets set to the current default font. If you haven't called @p gwinSetDefaultFont() then there * is no default font and text drawing operations will no nothing. - * @note The dimensions and position may be changed to fit on the real screen. * @note A checkbox remembers its normal drawing state. If there is a window manager then it is automatically * redrawn if the window is moved or its visibility state is changed. - * @note The checkbox is initially marked as invisible so that more properties can be set before display. - * Call @p gwinSetVisible() to display it when ready. * @note A checkbox supports mouse and a toggle input. * @note When assigning a toggle, only one toggle is supported. If you try to assign more than one toggle it will * forget the previous toggle. When assigning a toggle the role parameter must be 0. * * @api */ -GHandle gwinCreateCheckbox(GCheckboxObject *gb, coord_t x, coord_t y, coord_t width, coord_t height); +GHandle gwinCreateCheckbox(GCheckboxObject *gb, GWidgetInit *pInit); /** * @brief Get the state of a checkbox diff --git a/include/gwin/class_gwin.h b/include/gwin/class_gwin.h index eda69e1e..c3d2ee36 100644 --- a/include/gwin/class_gwin.h +++ b/include/gwin/class_gwin.h @@ -45,6 +45,7 @@ */ typedef struct gwinVMT { const char * classname; // @< The GWIN classname (mandatory) + size_t size; // @< The size of the class object void (*Destroy) (GWindowObject *gh); // @< The GWIN destroy function (optional) void (*Redraw) (GWindowObject *gh); // @< The GWIN redraw routine (optional) void (*AfterClear) (GWindowObject *gh); // @< The GWIN after-clear function (optional) @@ -116,7 +117,7 @@ typedef struct gwinVMT { typedef struct gwmVMT { void (*Init) (void); // @< The window manager has just been set as the current window manager void (*DeInit) (void); // @< The window manager has just been removed as the current window manager - bool_t (*Add) (GHandle gh, coord_t x, coord_t y, coord_t w, coord_t h); // @< A window has been added + bool_t (*Add) (GHandle gh, GWindowInit *pInit); // @< A window has been added void (*Delete) (GHandle gh); // @< A window has been deleted void (*Visible) (GHandle gh); // @< A window has changed its visibility state void (*Redim) (GHandle gh, coord_t x, coord_t y, coord_t w, coord_t h); // @< A window wants to be moved or resized @@ -139,15 +140,13 @@ extern "C" { * @brief Initialise (and allocate if necessary) the base GWIN object * * @param[in] pgw The GWindowObject structure. If NULL one is allocated from the heap - * @param[in] x, y The top left corner of the GWIN relative to the screen - * @param[in] w, h The width and height of the GWIN window - * @param[in] size The size of the GWIN object to allocate + * @param[in] pInit The user initialization parameters * @param[in] vmt The virtual method table for the GWIN object * @param[in] flags The default flags to use * * @notapi */ -GHandle _gwindowCreate(GWindowObject *pgw, coord_t x, coord_t y, coord_t w, coord_t h, size_t size, const gwinVMT *vmt, uint16_t flags); +GHandle _gwindowCreate(GWindowObject *pgw, GWindowInit *pInit, const gwinVMT *vmt, uint16_t flags); #if GWIN_NEED_WIDGET || defined(__DOXYGEN__) /** @@ -161,7 +160,7 @@ GHandle _gwindowCreate(GWindowObject *pgw, coord_t x, coord_t y, coord_t w, coor * * @notapi */ - GHandle _gwidgetCreate(GWidgetObject *pgw, coord_t x, coord_t y, coord_t w, coord_t h, size_t size, const gwidgetVMT *vmt); + GHandle _gwidgetCreate(GWidgetObject *pgw, GWidgetInit *pInit, const gwidgetVMT *vmt); /** * @brief Destroy the Widget object diff --git a/include/gwin/console.h b/include/gwin/console.h index 5682113e..38c88f63 100644 --- a/include/gwin/console.h +++ b/include/gwin/console.h @@ -51,23 +51,20 @@ extern "C" { * @return NULL if there is no resultant drawing area, otherwise a window handle. * * @param[in] gc The GConsoleObject structure to initialise. If this is NULL the structure is dynamically allocated. - * @param[in] x,y The screen co-ordinates for the top left corner of the window - * @param[in] width The width of the window - * @param[in] height The height of the window + * @param[in] pInit The initialization parameters to use * * @note The drawing color and the background color get set to the current defaults. If you haven't called * @p gwinSetDefaultColor() or @p gwinSetDefaultBgColor() then these are White and Black respectively. * @note The font gets set to the current default font. If you haven't called @p gwinSetDefaultFont() then there * is no default font and text drawing operations will no nothing. - * @note The dimensions and position may be changed to fit on the real screen. - * @note On creation the window is marked as visible but is not automatically cleared. You may do that by calling @p gwinClear() - * (possibly after changing your background color) + * @note On creation even if the window is visible it is not automatically cleared. + * You may do that by calling @p gwinClear() (possibly after changing your background color) * @note A console does not save the drawing state. It is not automatically redrawn if the window is moved or * its visibility state is changed. * * @api */ -GHandle gwinCreateConsole(GConsoleObject *gc, coord_t x, coord_t y, coord_t width, coord_t height); +GHandle gwinCreateConsole(GConsoleObject *gc, GWindowInit *pInit); #if GFX_USE_OS_CHIBIOS && GWIN_CONSOLE_USE_BASESTREAM /** diff --git a/include/gwin/graph.h b/include/gwin/graph.h index 2595d2e7..5e6abee1 100644 --- a/include/gwin/graph.h +++ b/include/gwin/graph.h @@ -91,17 +91,13 @@ extern "C" { * @return NULL if there is no resultant drawing area, otherwise a window handle. * * @param[in] gg The GGraphObject structure to initialise. If this is NULL the structure is dynamically allocated. - * @param[in] x,y The screen co-ordinates for the top left corner of the window - * @param[in] width The width of the window - * @param[in] height The height of the window + * @param[in] pInit The initialization parameters to use * * @note The drawing color and the background color get set to the current defaults. If you haven't called * @p gwinSetDefaultColor() or @p gwinSetDefaultBgColor() then these are White and Black respectively. * @note The font gets set to the current default font. If you haven't called @p gwinSetDefaultFont() then there * is no default font and text drawing operations will no nothing. * @note The dimensions and position may be changed to fit on the real screen. - * @note On creation the window is marked as visible but is not automatically cleared. You may do that by calling @p gwinClear() - * (possibly after changing your background color) * @note A graph does not save the drawing state. It is not automatically redrawn if the window is moved or * its visibility state is changed. * @note The coordinate system within the window for graphing operations (but not for any other drawing @@ -111,7 +107,7 @@ extern "C" { * * @api */ -GHandle gwinCreateGraph(GGraphObject *gg, coord_t x, coord_t y, coord_t width, coord_t height); +GHandle gwinCreateGraph(GGraphObject *gg, GWindowInit *pInit); /** * @brief Set the style of the graphing operations. diff --git a/include/gwin/gwidget.h b/include/gwin/gwidget.h index 0c47dfde..50f19193 100644 --- a/include/gwin/gwidget.h +++ b/include/gwin/gwidget.h @@ -52,6 +52,22 @@ typedef struct GWidgetObject { } GWidgetObject; /* @} */ +/** + * @brief The structure to initialise a widget. + * + * @note Some widgets may have extra parameters. + * @note The text element must be static string (not stack allocated). If you want to use + * a dynamic string (eg a stack allocated string) use NULL for this member and then call + * @p gwinSetText() with useAlloc set to TRUE. + * + * @{ + */ +typedef struct GWidgetInit { + GWindowInit g; // @< The GWIN initializer + const char * text; // @< The initial text +} GWidgetInit; +/* @} */ + /** * A comment/rant on the above structure: * We would really like the GWindowObject member to be anonymous. While this is diff --git a/include/gwin/gwin.h b/include/gwin/gwin.h index efce49fc..2a03c125 100644 --- a/include/gwin/gwin.h +++ b/include/gwin/gwin.h @@ -49,6 +49,21 @@ typedef struct GWindowObject { } GWindowObject, * GHandle; /* @} */ +/** + * @brief The structure to initialise a GWIN. + * + * @note Some gwin's will need extra parameters. + * @note The dimensions and position may be changed to fit on the real screen. + * + * @{ + */ +typedef struct GWindowInit { + coord_t x, y; // @< The initial screen position + coord_t width, height; // @< The initial dimension + bool_t show; // @< Should the window be visible initially +} GWindowInit; +/* @} */ + /** * @brief A window's minimized, maximized or normal size */ @@ -128,22 +143,18 @@ extern "C" { * @return NULL if there is no resultant drawing area, otherwise a window handle. * * @param[in] pgw The window structure to initialize. If this is NULL the structure is dynamically allocated. - * @param[in] x,y The screen coordinates for the top left corner of the window - * @param[in] width The width of the window - * @param[in] height The height of the window + * @param[in] pInit How to initialise the window * * @note The drawing color and the background color get set to the current defaults. If you haven't called * @p gwinSetDefaultColor() or @p gwinSetDefaultBgColor() then these are White and Black respectively. * @note The font gets set to the current default font. If you haven't called @p gwinSetDefaultFont() then there * is no default font and text drawing operations will no nothing. - * @note The dimensions and position may be changed to fit on the real screen. - * @note On creation the window is marked as visible. * @note A basic window does not save the drawing state. It is not automatically redrawn if the window is moved or * its visibility state is changed. * * @api */ - GHandle gwinCreateWindow(GWindowObject *pgw, coord_t x, coord_t y, coord_t width, coord_t height); + GHandle gwinCreateWindow(GWindowObject *pgw, GWindowInit *pInit); /** * @brief Destroy a window (of any type). Releases any dynamically allocated memory. diff --git a/include/gwin/slider.h b/include/gwin/slider.h index 9baecbb1..4479950f 100644 --- a/include/gwin/slider.h +++ b/include/gwin/slider.h @@ -64,19 +64,14 @@ extern "C" { * @return NULL if there is no resultant drawing area, otherwise a window handle. * * @param[in] gb The GSliderObject structure to initialise. If this is NULL the structure is dynamically allocated. - * @param[in] x,y The screen co-ordinates for the top left corner of the window - * @param[in] width The width of the window - * @param[in] height The height of the window + * @param[in] pInit The initialization parameters to use * * @note The drawing color and the background color get set to the current defaults. If you haven't called * @p gwinSetDefaultColor() or @p gwinSetDefaultBgColor() then these are White and Black respectively. * @note The font gets set to the current default font. If you haven't called @p gwinSetDefaultFont() then there * is no default font and text drawing operations will no nothing. - * @note The dimensions and position may be changed to fit on the real screen. * @note A slider remembers its normal drawing state. If there is a window manager then it is automatically * redrawn if the window is moved or its visibility state is changed. - * @note The slider is initially marked as invisible so that more properties can be set before display. - * Call @p gwinSetVisible() to display it when ready. * @note The initial slider range is from 0 to 100 with an initial position of 0. * @note A slider supports mouse, toggle and dial input. * @note When assigning a toggle, only one toggle is supported per role. If you try to assign more than @@ -87,7 +82,7 @@ extern "C" { * * @api */ -GHandle gwinCreateSlider(GSliderObject *gb, coord_t x, coord_t y, coord_t width, coord_t height); +GHandle gwinCreateSlider(GSliderObject *gb, GWidgetInit *pInit); /** * @brief Set the slider range. -- cgit v1.2.3