summaryrefslogtreecommitdiff
path: root/apps/gui/skin_engine/skin_touchsupport.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gui/skin_engine/skin_touchsupport.c')
-rw-r--r--apps/gui/skin_engine/skin_touchsupport.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/apps/gui/skin_engine/skin_touchsupport.c b/apps/gui/skin_engine/skin_touchsupport.c
index 64c797942c..59687bd99b 100644
--- a/apps/gui/skin_engine/skin_touchsupport.c
+++ b/apps/gui/skin_engine/skin_touchsupport.c
@@ -37,11 +37,14 @@
37/** Disarms all touchregions. */ 37/** Disarms all touchregions. */
38void skin_disarm_touchregions(struct wps_data *data) 38void skin_disarm_touchregions(struct wps_data *data)
39{ 39{
40 struct skin_token_list *regions = data->touchregions; 40 char* skin_buffer = get_skin_buffer(data);
41 struct skin_token_list *regions = SKINOFFSETTOPTR(skin_buffer, data->touchregions);
41 while (regions) 42 while (regions)
42 { 43 {
43 ((struct touchregion *)regions->token->value.data)->armed = false; 44 struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, regions->token);
44 regions = regions->next; 45 struct touchregion *region = SKINOFFSETTOPTR(skin_buffer, token->value.data);
46 region->armed = false;
47 regions = SKINOFFSETTOPTR(skin_buffer, regions->next);
45 } 48 }
46} 49}
47 50
@@ -56,35 +59,39 @@ int skin_get_touchaction(struct wps_data *data, int* edge_offset,
56 short x,y; 59 short x,y;
57 short vx, vy; 60 short vx, vy;
58 int type = action_get_touchscreen_press(&x, &y); 61 int type = action_get_touchscreen_press(&x, &y);
62 struct skin_viewport *wvp;
59 struct touchregion *r, *temp = NULL; 63 struct touchregion *r, *temp = NULL;
64 char* skin_buffer = get_skin_buffer(data);
60 bool repeated = (type == BUTTON_REPEAT); 65 bool repeated = (type == BUTTON_REPEAT);
61 bool released = (type == BUTTON_REL); 66 bool released = (type == BUTTON_REL);
62 bool pressed = (type == BUTTON_TOUCHSCREEN); 67 bool pressed = (type == BUTTON_TOUCHSCREEN);
63 struct skin_token_list *regions = data->touchregions; 68 struct skin_token_list *regions = SKINOFFSETTOPTR(skin_buffer, data->touchregions);
64 bool needs_repeat; 69 bool needs_repeat;
65 70
66 while (regions) 71 while (regions)
67 { 72 {
68 r = (struct touchregion *)regions->token->value.data; 73 struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, regions->token);
74 r = SKINOFFSETTOPTR(skin_buffer, token->value.data);
75 wvp = SKINOFFSETTOPTR(skin_buffer, r->wvp);
69 /* make sure this region's viewport is visible */ 76 /* make sure this region's viewport is visible */
70 if (r->wvp->hidden_flags&VP_DRAW_HIDDEN) 77 if (wvp->hidden_flags&VP_DRAW_HIDDEN)
71 { 78 {
72 regions = regions->next; 79 regions = SKINOFFSETTOPTR(skin_buffer, regions->next);
73 continue; 80 continue;
74 } 81 }
75 if (data->touchscreen_locked && 82 if (data->touchscreen_locked &&
76 (r->action != ACTION_TOUCH_SOFTLOCK && !r->allow_while_locked)) 83 (r->action != ACTION_TOUCH_SOFTLOCK && !r->allow_while_locked))
77 { 84 {
78 regions = regions->next; 85 regions = SKINOFFSETTOPTR(skin_buffer, regions->next);
79 continue; 86 continue;
80 } 87 }
81 needs_repeat = r->press_length != PRESS; 88 needs_repeat = r->press_length != PRESS;
82 /* check if it's inside this viewport */ 89 /* check if it's inside this viewport */
83 if (viewport_point_within_vp(&(r->wvp->vp), x, y)) 90 if (viewport_point_within_vp(&(wvp->vp), x, y))
84 { /* reposition the touch inside the viewport since touchregions 91 { /* reposition the touch inside the viewport since touchregions
85 * are relative to a preceding viewport */ 92 * are relative to a preceding viewport */
86 vx = x - r->wvp->vp.x; 93 vx = x - wvp->vp.x;
87 vy = y - r->wvp->vp.y; 94 vy = y - wvp->vp.y;
88 /* now see if the point is inside this region */ 95 /* now see if the point is inside this region */
89 if (vx >= r->x && vx < r->x+r->width && 96 if (vx >= r->x && vx < r->x+r->width &&
90 vy >= r->y && vy < r->y+r->height) 97 vy >= r->y && vy < r->y+r->height)
@@ -127,7 +134,7 @@ int skin_get_touchaction(struct wps_data *data, int* edge_offset,
127 } 134 }
128 } 135 }
129 } 136 }
130 regions = regions->next; 137 regions = SKINOFFSETTOPTR(skin_buffer, regions->next);
131 } 138 }
132 139
133 /* On release, all regions are disarmed. */ 140 /* On release, all regions are disarmed. */
@@ -214,7 +221,7 @@ int skin_get_touchaction(struct wps_data *data, int* edge_offset,
214 { 221 {
215 case F_T_CUSTOM: 222 case F_T_CUSTOM:
216 s->custom_setting 223 s->custom_setting
217 ->load_from_cfg(s->setting, data->value.text); 224 ->load_from_cfg(s->setting, SKINOFFSETTOPTR(skin_buffer, data->value.text));
218 break; 225 break;
219 case F_T_INT: 226 case F_T_INT:
220 case F_T_UINT: 227 case F_T_UINT: