mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
skin engine softlock support for touchscreens:
Modify the %Tl() tag to add a new region 'lock' which will lock/unlock the wps/sbs from touches (hardware buttons still work) You can also specify a region to work when locked by prepending ^ to the action name (this is probably about to change though) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30218 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
b9f3230273
commit
bb618dbd84
5 changed files with 28 additions and 5 deletions
|
@ -250,6 +250,7 @@ enum {
|
|||
ACTION_TOUCH_MUTE,
|
||||
ACTION_TOUCH_SCROLLBAR,
|
||||
ACTION_TOUCH_VOLUME,
|
||||
ACTION_TOUCH_SOFTLOCK,
|
||||
#endif
|
||||
|
||||
/* USB HID codes */
|
||||
|
|
|
@ -1039,7 +1039,7 @@ static int parse_lasttouch(struct skin_element *element,
|
|||
struct touchaction {const char* s; int action;};
|
||||
static const struct touchaction touchactions[] = {
|
||||
/* generic actions, convert to screen actions on use */
|
||||
{"none", ACTION_TOUCHSCREEN},
|
||||
{"none", ACTION_TOUCHSCREEN}, {"lock", ACTION_TOUCH_SOFTLOCK },
|
||||
{"prev", ACTION_STD_PREV }, {"next", ACTION_STD_NEXT },
|
||||
{"rwd", ACTION_STD_PREVREPEAT }, {"ffwd", ACTION_STD_NEXTREPEAT },
|
||||
{"hotkey", ACTION_STD_HOTKEY}, {"select", ACTION_STD_OK },
|
||||
|
@ -1122,17 +1122,23 @@ static int parse_touchregion(struct skin_element *element,
|
|||
region->value = 0;
|
||||
region->last_press = 0xffff;
|
||||
region->press_length = PRESS;
|
||||
region->allow_while_locked = false;
|
||||
action = element->params[p++].data.text;
|
||||
|
||||
strcpy(temp, action);
|
||||
action = temp;
|
||||
|
||||
if (*action == '!')
|
||||
switch (*action)
|
||||
{
|
||||
region->reverse_bar = true;
|
||||
action++;
|
||||
case '!':
|
||||
region->reverse_bar = true;
|
||||
action++;
|
||||
break;
|
||||
case '^':
|
||||
action++;
|
||||
region->allow_while_locked = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if(!strcmp(pb_string, action))
|
||||
region->action = ACTION_TOUCH_SCROLLBAR;
|
||||
else if(!strcmp(vol_string, action))
|
||||
|
|
|
@ -1378,6 +1378,10 @@ const char *get_token_value(struct gui_wps *gwps,
|
|||
#endif
|
||||
|
||||
case SKIN_TOKEN_MAIN_HOLD:
|
||||
#ifdef HAVE_TOUCHSCREEN
|
||||
if (data->touchscreen_locked)
|
||||
return "t";
|
||||
#endif
|
||||
#ifdef HAS_BUTTON_HOLD
|
||||
if (button_hold())
|
||||
#else
|
||||
|
|
|
@ -72,6 +72,12 @@ int skin_get_touchaction(struct wps_data *data, int* edge_offset,
|
|||
regions = regions->next;
|
||||
continue;
|
||||
}
|
||||
if (data->touchscreen_locked &&
|
||||
(r->action != ACTION_TOUCH_SOFTLOCK && !r->allow_while_locked))
|
||||
{
|
||||
regions = regions->next;
|
||||
continue;
|
||||
}
|
||||
needs_repeat = r->press_length != PRESS;
|
||||
/* check if it's inside this viewport */
|
||||
if (viewport_point_within_vp(&(r->wvp->vp), x, y))
|
||||
|
@ -150,6 +156,10 @@ int skin_get_touchaction(struct wps_data *data, int* edge_offset,
|
|||
}
|
||||
switch (returncode)
|
||||
{
|
||||
case ACTION_TOUCH_SOFTLOCK:
|
||||
data->touchscreen_locked = !data->touchscreen_locked;
|
||||
returncode = ACTION_NONE;
|
||||
break;
|
||||
case ACTION_WPS_PLAY:
|
||||
if (!audio_status())
|
||||
{
|
||||
|
|
|
@ -189,6 +189,7 @@ struct touchregion {
|
|||
short int width; /* width */
|
||||
short int height; /* height */
|
||||
bool reverse_bar; /* if true 0% is the left or top */
|
||||
bool allow_while_locked;
|
||||
enum {
|
||||
PRESS, /* quick press only */
|
||||
LONG_PRESS, /* Long press without repeat */
|
||||
|
@ -308,6 +309,7 @@ struct wps_data
|
|||
|
||||
#ifdef HAVE_TOUCHSCREEN
|
||||
struct skin_token_list *touchregions;
|
||||
bool touchscreen_locked;
|
||||
#endif
|
||||
#ifdef HAVE_ALBUMART
|
||||
struct skin_albumart *albumart;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue