diff options
Diffstat (limited to 'src/gwin')
-rw-r--r-- | src/gwin/list.c | 20 | ||||
-rw-r--r-- | src/gwin/list.h | 14 |
2 files changed, 34 insertions, 0 deletions
diff --git a/src/gwin/list.c b/src/gwin/list.c index 8374ff39..50c669f0 100644 --- a/src/gwin/list.c +++ b/src/gwin/list.c @@ -41,6 +41,7 @@ #define GLIST_FLG_HASIMAGES (GWIN_FIRST_CONTROL_FLAG << 1) #define GLIST_FLG_SCROLLALWAYS (GWIN_FIRST_CONTROL_FLAG << 2) #define GLIST_FLG_SCROLLSMOOTH (GWIN_FIRST_CONTROL_FLAG << 3) +#define GLIST_FLG_ENABLERENDER (GWIN_FIRST_CONTROL_FLAG << 4) // Flags on a ListItem. #define GLIST_FLG_SELECTED 0x0001 @@ -92,6 +93,11 @@ static void gwinListDefaultDraw(GWidgetObject* gw, void* param) { coord_t sy; #endif + // dont render if render has been disabled + if (!(gw->g.flags & GLIST_FLG_ENABLERENDER)) { + return; + } + ps = (gw->g.flags & GWIN_FLG_ENABLED) ? &gw->pstyle->enabled : &gw->pstyle->disabled; iheight = gdispGetFontMetric(gw->g.font, fontHeight) + VERTICAL_PADDING; x = 1; @@ -401,12 +407,26 @@ GHandle gwinGListCreate(GDisplay *g, GListObject* gobj, GWidgetInit* pInit, bool if (multiselect) gobj->w.g.flags |= GLIST_FLG_MULTISELECT; gobj->w.g.flags |= GLIST_FLG_SCROLLALWAYS; + gobj->w.g.flags |= GLIST_FLG_ENABLERENDER; gwinSetVisible(&gobj->w.g, pInit->g.show); return (GHandle)gobj; } +void gwinListEnableRender(GHandle gh, bool_t ena) { + // is it a valid handle? + if (gh->vmt != (gwinVMT *)&listVMT) + return; + + if (ena) { + gh->flags |= GLIST_FLG_ENABLERENDER; + gwinRedraw(gh); + } else { + gh->flags &=~ GLIST_FLG_ENABLERENDER; + } +} + void gwinListSetScroll(GHandle gh, scroll_t flag) { // is it a valid handle? if (gh->vmt != (gwinVMT *)&listVMT) diff --git a/src/gwin/list.h b/src/gwin/list.h index eb800439..2cc525a2 100644 --- a/src/gwin/list.h +++ b/src/gwin/list.h @@ -103,6 +103,20 @@ GHandle gwinGListCreate(GDisplay *g, GListObject *widget, GWidgetInit *pInit, bo #define gwinListCreate(w, pInit, m) gwinGListCreate(GDISP, w, pInit, m) /** + * @brief Enable or disable the rendering of the list + * + * @details Usually the list is being re-rendered when an item is added to the list. This can cause + * flickering and performance issues when many items are added at once. This can be prevented + * by temporarely disabling the render using this function. + * + * @param[in] gh The widget handle (must be a list handle) + * @param[in] ena TRUE or FALSE + * + * @api + */ +void gwinListEnableRender(GHandle gh, bool_t ena); + +/** * @brief Change the behaviour of the scroll bar * * @note Current possible values: @p scrollAlways, @p scrollAuto and @p scrollSmooth |