aboutsummaryrefslogtreecommitdiffstats
path: root/src/gwin/gwin_list.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gwin/gwin_list.c')
-rw-r--r--src/gwin/gwin_list.c91
1 files changed, 48 insertions, 43 deletions
diff --git a/src/gwin/gwin_list.c b/src/gwin/gwin_list.c
index 2e3cb8e5..7ca300a9 100644
--- a/src/gwin/gwin_list.c
+++ b/src/gwin/gwin_list.c
@@ -19,10 +19,10 @@
#include <stdlib.h>
// user for the default drawing routine
-#define SCROLLWIDTH 16 // the border from the scroll buttons to the frame
-#define ARROW 10 // arrow side length
-#define HORIZONTAL_PADDING 5 // extra horizontal padding for text
-#define VERTICAL_PADDING 2 // extra vertical padding for text
+#define LST_SCROLLWIDTH 16 // the border from the scroll buttons to the frame
+#define LST_ARROW_SZ 10 // arrow side length
+#define LST_HORIZ_PAD 5 // extra horizontal padding for text
+#define LST_VERT_PAD 2 // extra vertical padding for text
// Macro's to assist in data type conversions
#define gh2obj ((GListObject *)gh)
@@ -77,13 +77,13 @@ static void sendListEvent(GWidgetObject *gw, int item) {
static void gwinListDefaultDraw(GWidgetObject* gw, void* param);
#if GINPUT_NEED_MOUSE
- static void MouseSelect(GWidgetObject* gw, coord_t x, coord_t y) {
+ static void ListMouseSelect(GWidgetObject* gw, coord_t x, coord_t y) {
const gfxQueueASyncItem* qi;
int item, i;
coord_t iheight;
(void) x;
- iheight = gdispGetFontMetric(gw->g.font, fontHeight) + VERTICAL_PADDING;
+ iheight = gdispGetFontMetric(gw->g.font, fontHeight) + LST_VERT_PAD;
// Handle click over the list area
item = (gw2obj->top + y) / iheight;
@@ -111,7 +111,7 @@ static void gwinListDefaultDraw(GWidgetObject* gw, void* param);
}
// a mouse down has occurred over the list area
- static void MouseDown(GWidgetObject* gw, coord_t x, coord_t y) {
+ static void ListMouseDown(GWidgetObject* gw, coord_t x, coord_t y) {
coord_t iheight, pgsz;
// Save our mouse start position
@@ -119,24 +119,24 @@ static void gwinListDefaultDraw(GWidgetObject* gw, void* param);
gw2obj->start_mouse_y = y;
gw2obj->last_mouse_y = y;
- // For smooth scrolling, scrolling is done in the MouseMove and selection is done on MouseUp
+ // For smooth scrolling, scrolling is done in the ListMouseMove and selection is done on ListMouseUp
if (gw->g.flags & GLIST_FLG_SCROLLSMOOTH)
return;
// Some initial stuff
- iheight = gdispGetFontMetric(gw->g.font, fontHeight) + VERTICAL_PADDING;
+ iheight = gdispGetFontMetric(gw->g.font, fontHeight) + LST_VERT_PAD;
pgsz = gw->g.height-2;
// Handle click over the scroll bar
- if (x >= gw->g.width-(SCROLLWIDTH+2) && (gw2obj->cnt > pgsz/iheight || (gw->g.flags & GLIST_FLG_SCROLLALWAYS))) {
- if (y < 2*ARROW) {
+ if (x >= gw->g.width-(LST_SCROLLWIDTH+2) && (gw2obj->cnt > pgsz/iheight || (gw->g.flags & GLIST_FLG_SCROLLALWAYS))) {
+ if (y < 2*LST_ARROW_SZ) {
if (gw2obj->top > 0) {
gw2obj->top -= iheight;
if (gw2obj->top < 0)
gw2obj->top = 0;
_gwinUpdate(&gw->g);
}
- } else if (y >= gw->g.height - 2*ARROW) {
+ } else if (y >= gw->g.height - 2*LST_ARROW_SZ) {
if (gw2obj->top < gw2obj->cnt * iheight - pgsz) {
gw2obj->top += iheight;
if (gw2obj->top > gw2obj->cnt * iheight - pgsz)
@@ -163,10 +163,10 @@ static void gwinListDefaultDraw(GWidgetObject* gw, void* param);
return;
}
- MouseSelect(gw, x, y);
+ ListMouseSelect(gw, x, y);
}
- static void MouseUp(GWidgetObject* gw, coord_t x, coord_t y) {
+ static void ListMouseUp(GWidgetObject* gw, coord_t x, coord_t y) {
// Only act when we are a smooth scrolling list
if (!(gw->g.flags & GLIST_FLG_SCROLLSMOOTH))
return;
@@ -175,10 +175,10 @@ static void gwinListDefaultDraw(GWidgetObject* gw, void* param);
if (abs(gw2obj->start_mouse_x - x) > 4 || abs(gw2obj->start_mouse_y - y) > 4)
return;
- MouseSelect(gw, x, y);
+ ListMouseSelect(gw, x, y);
}
- static void MouseMove(GWidgetObject* gw, coord_t x, coord_t y) {
+ static void ListMouseMove(GWidgetObject* gw, coord_t x, coord_t y) {
int iheight, oldtop;
(void) x;
@@ -186,7 +186,7 @@ static void gwinListDefaultDraw(GWidgetObject* gw, void* param);
if (gw2obj->last_mouse_y != y) {
oldtop = gw2obj->top;
- iheight = gdispGetFontMetric(gw->g.font, fontHeight) + VERTICAL_PADDING;
+ iheight = gdispGetFontMetric(gw->g.font, fontHeight) + LST_VERT_PAD;
gw2obj->top -= y - gw2obj->last_mouse_y;
if (gw2obj->top >= gw2obj->cnt * iheight - (gw->g.height-2))
@@ -202,7 +202,7 @@ static void gwinListDefaultDraw(GWidgetObject* gw, void* param);
#if GINPUT_NEED_TOGGLE
// a toggle-on has occurred
- static void ToggleOn(GWidgetObject *gw, uint16_t role) {
+ static void ListToggleOn(GWidgetObject *gw, uint16_t role) {
const gfxQueueASyncItem * qi;
const gfxQueueASyncItem * qix;
int i;
@@ -242,19 +242,19 @@ static void gwinListDefaultDraw(GWidgetObject* gw, void* param);
}
}
- static void ToggleAssign(GWidgetObject *gw, uint16_t role, uint16_t instance) {
+ static void ListToggleAssign(GWidgetObject *gw, uint16_t role, uint16_t instance) {
if (role)
gw2obj->t_up = instance;
else
gw2obj->t_dn = instance;
}
- static uint16_t ToggleGet(GWidgetObject *gw, uint16_t role) {
+ static uint16_t ListToggleGet(GWidgetObject *gw, uint16_t role) {
return role ? gw2obj->t_up : gw2obj->t_dn;
}
#endif
-static void _destroy(GHandle gh) {
+static void ListDestroy(GHandle gh) {
const gfxQueueASyncItem* qi;
while((qi = gfxQueueASyncGet(&gh2obj->list_head)))
@@ -267,25 +267,25 @@ static const gwidgetVMT listVMT = {
{
"List", // The class name
sizeof(GListObject), // The object size
- _destroy, // The destroy routine
+ ListDestroy, // The destroy routine
_gwidgetRedraw, // The redraw routine
0, // The after-clear routine
},
gwinListDefaultDraw, // default drawing routine
#if GINPUT_NEED_MOUSE
{
- MouseDown,
- MouseUp,
- MouseMove,
+ ListMouseDown,
+ ListMouseUp,
+ ListMouseMove,
},
#endif
#if GINPUT_NEED_TOGGLE
{
2, // two toggle roles
- ToggleAssign, // Assign toggles
- ToggleGet, // get toggles
+ ListToggleAssign, // Assign toggles
+ ListToggleGet, // Get toggles
0,
- ToggleOn, // process toggle on event
+ ListToggleOn, // Process toggle on event
},
#endif
#if GINPUT_NEED_DIAL
@@ -616,7 +616,7 @@ void gwinListViewItem(GHandle gh, int item) {
return;
// Work out a possible new top for the list
- iheight = gdispGetFontMetric(gh->font, fontHeight) + VERTICAL_PADDING;
+ iheight = gdispGetFontMetric(gh->font, fontHeight) + LST_VERT_PAD;
gh2obj->top = iheight * item;
// Adjust the list
@@ -656,8 +656,8 @@ static void gwinListDefaultDraw(GWidgetObject* gw, void* param) {
(void)param;
#if GDISP_NEED_CONVEX_POLYGON
- static const point upArrow[] = { {0, ARROW}, {ARROW, ARROW}, {ARROW/2, 0} };
- static const point downArrow[] = { {0, 0}, {ARROW, 0}, {ARROW/2, ARROW} };
+ static const point upArrow[] = { {0, LST_ARROW_SZ}, {LST_ARROW_SZ, LST_ARROW_SZ}, {LST_ARROW_SZ/2, 0} };
+ static const point downArrow[] = { {0, 0}, {LST_ARROW_SZ, 0}, {LST_ARROW_SZ/2, LST_ARROW_SZ} };
#endif
const gfxQueueASyncItem* qi;
@@ -678,7 +678,7 @@ static void gwinListDefaultDraw(GWidgetObject* gw, void* param) {
return;
ps = (gw->g.flags & GWIN_FLG_SYSENABLED) ? &gw->pstyle->enabled : &gw->pstyle->disabled;
- iheight = gdispGetFontMetric(gw->g.font, fontHeight) + VERTICAL_PADDING;
+ iheight = gdispGetFontMetric(gw->g.font, fontHeight) + LST_VERT_PAD;
x = 1;
// the scroll area
@@ -693,16 +693,16 @@ static void gwinListDefaultDraw(GWidgetObject* gw, void* param) {
}
}
} else if ((gw2obj->cnt > (gw->g.height-2) / iheight) || (gw->g.flags & GLIST_FLG_SCROLLALWAYS)) {
- iwidth = gw->g.width - (SCROLLWIDTH+3);
- gdispGFillArea(gw->g.display, gw->g.x+iwidth+2, gw->g.y+1, SCROLLWIDTH, gw->g.height-2, gdispBlendColor(ps->fill, gw->pstyle->background, 128));
+ iwidth = gw->g.width - (LST_SCROLLWIDTH+3);
+ gdispGFillArea(gw->g.display, gw->g.x+iwidth+2, gw->g.y+1, LST_SCROLLWIDTH, gw->g.height-2, gdispBlendColor(ps->fill, gw->pstyle->background, 128));
gdispGDrawLine(gw->g.display, gw->g.x+iwidth+1, gw->g.y+1, gw->g.x+iwidth+1, gw->g.y+gw->g.height-2, ps->edge);
#if GDISP_NEED_CONVEX_POLYGON
- gdispGFillConvexPoly(gw->g.display, gw->g.x+iwidth+((SCROLLWIDTH-ARROW)/2+2), gw->g.y+(ARROW/2+1), upArrow, 3, ps->fill);
- gdispGFillConvexPoly(gw->g.display, gw->g.x+iwidth+((SCROLLWIDTH-ARROW)/2+2), gw->g.y+gw->g.height-(ARROW+ARROW/2+1), downArrow, 3, ps->fill);
+ gdispGFillConvexPoly(gw->g.display, gw->g.x+iwidth+((LST_SCROLLWIDTH-LST_ARROW_SZ)/2+2), gw->g.y+(LST_ARROW_SZ/2+1), upArrow, 3, ps->fill);
+ gdispGFillConvexPoly(gw->g.display, gw->g.x+iwidth+((LST_SCROLLWIDTH-LST_ARROW_SZ)/2+2), gw->g.y+gw->g.height-(LST_ARROW_SZ+LST_ARROW_SZ/2+1), downArrow, 3, ps->fill);
#else
#warning "GWIN: Lists display better when GDISP_NEED_CONVEX_POLYGON is turned on"
- gdispGFillArea(gw->g.display, gw->g.x+iwidth+((SCROLLWIDTH-ARROW)/2+2), gw->g.y+(ARROW/2+1), ARROW, ARROW, ps->fill);
- gdispGFillArea(gw->g.display, gw->g.x+iwidth+((SCROLLWIDTH-ARROW)/2+2), gw->g.y+gw->g.height-(ARROW+ARROW/2+1), ARROW, ARROW, ps->fill);
+ gdispGFillArea(gw->g.display, gw->g.x+iwidth+((LST_SCROLLWIDTH-LST_ARROW_SZ)/2+2), gw->g.y+(LST_ARROW_SZ/2+1), LST_ARROW_SZ, LST_ARROW_SZ, ps->fill);
+ gdispGFillArea(gw->g.display, gw->g.x+iwidth+((LST_SCROLLWIDTH-LST_ARROW_SZ)/2+2), gw->g.y+gw->g.height-(LST_ARROW_SZ+LST_ARROW_SZ/2+1), LST_ARROW_SZ, LST_ARROW_SZ, ps->fill);
#endif
} else
iwidth = gw->g.width - 2;
@@ -733,18 +733,18 @@ static void gwinListDefaultDraw(GWidgetObject* gw, void* param) {
// Clear the image area
if (qi2li->pimg && gdispImageIsOpen(qi2li->pimg)) {
// Calculate which image
- sy = (qi2li->flags & GLIST_FLG_SELECTED) ? 0 : (iheight-VERTICAL_PADDING);
+ sy = (qi2li->flags & GLIST_FLG_SELECTED) ? 0 : (iheight-LST_VERT_PAD);
if (!(gw->g.flags & GWIN_FLG_SYSENABLED))
- sy += 2*(iheight-VERTICAL_PADDING);
+ sy += 2*(iheight-LST_VERT_PAD);
while (sy > qi2li->pimg->height)
- sy -= iheight-VERTICAL_PADDING;
+ sy -= iheight-LST_VERT_PAD;
// Draw the image
gdispImageSetBgColor(qi2li->pimg, fill);
- gdispGImageDraw(gw->g.display, qi2li->pimg, gw->g.x+1, gw->g.y+y, iheight-VERTICAL_PADDING, iheight-VERTICAL_PADDING, 0, sy);
+ gdispGImageDraw(gw->g.display, qi2li->pimg, gw->g.x+1, gw->g.y+y, iheight-LST_VERT_PAD, iheight-LST_VERT_PAD, 0, sy);
}
}
#endif
- gdispGFillStringBox(gw->g.display, gw->g.x+x+HORIZONTAL_PADDING, gw->g.y+y, iwidth-HORIZONTAL_PADDING, iheight, qi2li->text, gw->g.font, ps->text, fill, justifyLeft);
+ gdispGFillStringBox(gw->g.display, gw->g.x+x+LST_HORIZ_PAD, gw->g.y+y, iwidth-LST_HORIZ_PAD, iheight, qi2li->text, gw->g.font, ps->text, fill, justifyLeft);
}
// Fill any remaining item space
@@ -752,4 +752,9 @@ static void gwinListDefaultDraw(GWidgetObject* gw, void* param) {
gdispGFillArea(gw->g.display, gw->g.x+1, gw->g.y+y, iwidth, gw->g.height-1-y, gw->pstyle->background);
}
+#undef gh2obj
+#undef gw2obj
+#undef qi2li
+#undef qix2li
+#undef ple
#endif // GFX_USE_GWIN && GWIN_NEED_LIST