From 95c25d6d274e932d01fe6b610f95744ea0882ede Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Mon, 27 Jul 2009 13:27:38 +0000 Subject: Touchscreen targets: add basic progress bar & volume handling git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22068 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/wps_engine/wps_internals.h | 5 ++++ apps/gui/wps_engine/wps_parser.c | 55 +++++++++++++++++++++++-------------- 2 files changed, 40 insertions(+), 20 deletions(-) (limited to 'apps/gui/wps_engine') diff --git a/apps/gui/wps_engine/wps_internals.h b/apps/gui/wps_engine/wps_internals.h index 581763fb9a..ce9b4d3d46 100644 --- a/apps/gui/wps_engine/wps_internals.h +++ b/apps/gui/wps_engine/wps_internals.h @@ -390,6 +390,11 @@ struct touchregion { short int y; /* y-pos */ short int width; /* width */ short int height; /* height */ + enum { + WPS_TOUCHREGION_ACTION, + WPS_TOUCHREGION_SCROLLBAR, + WPS_TOUCHREGION_VOLUME + } type; /* type of touch region */ bool repeat; /* requires the area be held for the action */ int action; /* action this button will return */ }; diff --git a/apps/gui/wps_engine/wps_parser.c b/apps/gui/wps_engine/wps_parser.c index 15acc1401d..91c63059b0 100644 --- a/apps/gui/wps_engine/wps_parser.c +++ b/apps/gui/wps_engine/wps_parser.c @@ -1173,6 +1173,8 @@ static int parse_touchregion(const char *wps_bufptr, struct touchregion *region; const char *ptr = wps_bufptr; const char *action; + const char pb_string[] = "progressbar"; + const char vol_string[] = "volume"; int x,y,w,h; /* format: %T|x|y|width|height|action| @@ -1203,7 +1205,7 @@ static int parse_touchregion(const char *wps_bufptr, /* Check there is a terminating | */ if (*ptr != '|') return WPS_ERROR_INVALID_PARAM; - + /* should probably do some bounds checking here with the viewport... but later */ region = &wps_data->touchregion[wps_data->touchregion_count]; region->action = ACTION_NONE; @@ -1212,28 +1214,41 @@ static int parse_touchregion(const char *wps_bufptr, region->width = w; region->height = h; region->wvp = &wps_data->viewports[wps_data->num_viewports]; - i = 0; - if (*action == '&') - { - action++; - region->repeat = true; - } - else - region->repeat = false; - imax = ARRAYLEN(touchactions); - while ((region->action == ACTION_NONE) && - (i < imax)) + if(!strncmp(pb_string, action, sizeof(pb_string)-1) + && *(action + sizeof(pb_string)-1) == '|') + region->type = WPS_TOUCHREGION_SCROLLBAR; + else if(!strncmp(vol_string, action, sizeof(vol_string)-1) + && *(action + sizeof(vol_string)-1) == '|') + region->type = WPS_TOUCHREGION_VOLUME; + else { - /* try to match with one of our touchregion screens */ - int len = strlen(touchactions[i].s); - if (!strncmp(touchactions[i].s, action, len) - && *(action+len) == '|') - region->action = touchactions[i].action; - i++; + region->type = WPS_TOUCHREGION_ACTION; + + if (*action == '&') + { + action++; + region->repeat = true; + } + else + region->repeat = false; + + i = 0; + imax = ARRAYLEN(touchactions); + while ((region->action == ACTION_NONE) && + (i < imax)) + { + /* try to match with one of our touchregion screens */ + int len = strlen(touchactions[i].s); + if (!strncmp(touchactions[i].s, action, len) + && *(action+len) == '|') + region->action = touchactions[i].action; + i++; + } + if (region->action == ACTION_NONE) + return WPS_ERROR_INVALID_PARAM; } - if (region->action == ACTION_NONE) - return WPS_ERROR_INVALID_PARAM; + wps_data->touchregion_count++; return skip_end_of_line(wps_bufptr); } -- cgit v1.2.3