1
0
Fork 0
forked from len0rd/rockbox

Touchscreen targets: add basic progress bar & volume handling

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22068 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Maurus Cuelenaere 2009-07-27 13:27:38 +00:00
parent c08a2c7c53
commit 95c25d6d27
4 changed files with 84 additions and 25 deletions

View file

@ -553,12 +553,49 @@ int wps_get_touchaction(struct wps_data *data)
if (vx >= r->x && vx < r->x+r->width &&
vy >= r->y && vy < r->y+r->height)
{
if ((repeated && r->repeat) ||
(released && !r->repeat))
/* reposition the touch within the area */
vx -= r->x;
vy -= r->y;
switch(r->type)
{
case WPS_TOUCHREGION_ACTION:
if ((repeated && r->repeat) || (released && !r->repeat))
{
last_action = r->action;
return r->action;
}
break;
case WPS_TOUCHREGION_SCROLLBAR:
if(r->width > r->height)
/* landscape */
wps_state.id3->elapsed = (vx *
wps_state.id3->length) / r->width;
else
/* portrait */
wps_state.id3->elapsed = (vy *
wps_state.id3->length) / r->height;
audio_ff_rewind(wps_state.id3->elapsed);
break;
case WPS_TOUCHREGION_VOLUME:
{
const int min_vol = sound_min(SOUND_VOLUME);
const int max_vol = sound_max(SOUND_VOLUME);
if(r->width > r->height)
/* landscape */
global_settings.volume = (vx *
(max_vol - min_vol)) / r->width;
else
/* portrait */
global_settings.volume = (vy *
(max_vol-min_vol)) / r->height;
global_settings.volume += min_vol;
setvol();
break;
}
}
}
}
}

View file

@ -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 */
};

View file

@ -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|
@ -1212,7 +1214,17 @@ 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(!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
{
region->type = WPS_TOUCHREGION_ACTION;
if (*action == '&')
{
action++;
@ -1221,6 +1233,7 @@ static int parse_touchregion(const char *wps_bufptr,
else
region->repeat = false;
i = 0;
imax = ARRAYLEN(touchactions);
while ((region->action == ACTION_NONE) &&
(i < imax))
@ -1234,6 +1247,8 @@ static int parse_touchregion(const char *wps_bufptr,
}
if (region->action == ACTION_NONE)
return WPS_ERROR_INVALID_PARAM;
}
wps_data->touchregion_count++;
return skip_end_of_line(wps_bufptr);
}

View file

@ -9,6 +9,8 @@
%T|182|372|18|92|repmode|
%T|139|372|37|23|shuffle|
%T|90|238|60|20|playlist|
%T|22|284|199|13|progressbar|
%T|98|372|33|23|volume|
%X|wpsbackdrop-240x400x16.bmp|
%xl|A|lock-240x320x16.bmp|11|372|2|