b10c0e5b90
FIX - softlock not allowing power button to shutdown device when active FIX - autolock not working unless Selective backlight enabled Rework - get_action_worker split into more managable chunks Rework - moved all static variables to a single struct action_last to be passed through all internal functions Rework - current action state moved to struct action_current to be initialized at each get_action /get_action_custom call Rework - action lookup in button maps changed slightly to prefer fully formed actions rather than blindly returning action with BUTTON_NONE as pre_button this should allow actions defined in keymaps positional independence Rework / Clean-up - moved conditionals on internal functions to inside the functions -Allows much cleaner code & empty functions should be optimized out by compiler Rework / Clean-up - softlock and backlight exemptions code Clean-up - remove a lot of (now) unused defines Clean-up - organize / move all exported functions to their own section in the file Comments added to all internal functions to better explain their purpose Change-Id: I0ac02d1a2b45826843611513fea3c20a819d2fed
483 lines
16 KiB
C
483 lines
16 KiB
C
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
*
|
|
* Copyright (C) 2004 Brent Coutts
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
****************************************************************************/
|
|
#ifndef __ACTION_H__
|
|
#define __ACTION_H__
|
|
|
|
#include "stdbool.h"
|
|
#include "button.h"
|
|
#include "viewport.h"
|
|
|
|
#define TIMEOUT_BLOCK -1
|
|
#define TIMEOUT_NOBLOCK 0
|
|
|
|
#define CONTEXT_STOPSEARCHING 0xFFFFFFFF
|
|
#define CONTEXT_REMOTE 0x80000000 /* | this against another context to get remote buttons for that context */
|
|
#define CONTEXT_CUSTOM 0x40000000 /* | this against anything to get your context number */
|
|
#define CONTEXT_CUSTOM2 0x20000000 /* as above */
|
|
#define CONTEXT_PLUGIN 0x10000000 /* for plugins using get_custom_action */
|
|
|
|
#define LAST_ITEM_IN_LIST { CONTEXT_STOPSEARCHING, BUTTON_NONE, BUTTON_NONE }
|
|
#define LAST_ITEM_IN_LIST__NEXTLIST(a) { a, BUTTON_NONE, BUTTON_NONE }
|
|
|
|
#if !defined(HAS_BUTTON_HOLD)
|
|
#define ALLOW_SOFTLOCK 0x08000000 /* will be stripped.. never needed except in calls to get_action() */
|
|
#else
|
|
#define ALLOW_SOFTLOCK 0
|
|
#endif
|
|
|
|
#if defined(HAVE_BACKLIGHT) || !defined(HAS_BUTTON_HOLD)
|
|
/* Selective action selection flags */
|
|
#define SEL_ACTION_NONE 0
|
|
#define SEL_ACTION_VOL 0x001U
|
|
#define SEL_ACTION_PLAY 0x002U
|
|
#define SEL_ACTION_SEEK 0x004U
|
|
#define SEL_ACTION_SKIP 0x008U
|
|
#define SEL_ACTION_NOUNMAPPED 0x010U/* disable backlight on unmapped buttons */
|
|
/* Available 0x020U*/
|
|
/* Available 0x040U*/
|
|
#define SEL_ACTION_NOTOUCH 0x080U/* disable touch screen/pad on screen lock */
|
|
#define SEL_ACTION_AUTOLOCK 0x100U/* autolock on backlight off */
|
|
#define SEL_ACTION_NOEXT 0x200U/* disable selective backlight while charge*/
|
|
#define SEL_ACTION_NONOTIFY 0x200U/* don't notify user softlock is active */
|
|
/* Flags below are internal to selective functions */
|
|
#define SEL_ACTION_ALOCK_OK 0x400U/*autolock only active after key lock once*/
|
|
#define SEL_ACTION_FFKEYPRESS 0x400U/* backlight Filter First Keypress active*/
|
|
#define SEL_ACTION_ENABLED 0x800U
|
|
/* Selective Actions flags */
|
|
|
|
#if !defined(HAS_BUTTON_HOLD)
|
|
/* returns true if keys_locked and screen_has_lock */
|
|
bool is_keys_locked(void);
|
|
/* Enable selected actions to bypass a locked state
|
|
* mask is combination of Selective action selection flags */
|
|
void set_selective_softlock_actions(bool selective, unsigned int mask);
|
|
#endif
|
|
|
|
#if defined(HAVE_BACKLIGHT)
|
|
/* Enable selected actions to leave the backlight off
|
|
* mask is combination of Selective action selection flags */
|
|
void set_selective_backlight_actions(bool selective, unsigned int mask,
|
|
bool filter_fkp);
|
|
#endif
|
|
|
|
#endif /* defined(HAVE_BACKLIGHT) || !defined(HAS_BUTTON_HOLD) */
|
|
|
|
enum {
|
|
CONTEXT_STD = 0,
|
|
/* These CONTEXT_ values were here before me,
|
|
there values may have significance, so dont touch! */
|
|
CONTEXT_WPS = 1,
|
|
CONTEXT_TREE = 2,
|
|
CONTEXT_RECORD = 3,
|
|
CONTEXT_MAINMENU = 4, /* uses CONTEXT_TREE and ACTION_TREE_* */
|
|
CONTEXT_ID3DB = 5,
|
|
/* Add new contexts here, no need to explicitly define a value for them */
|
|
CONTEXT_LIST,
|
|
CONTEXT_SETTINGS, /* regular setting screens (and debug screens) */
|
|
/* bellow are setting screens which may need to redefine the standard
|
|
setting screen keys, targets should return the CONTEXT_SETTINGS
|
|
keymap unless they are not adequate for the screen
|
|
NOTE: uses ACTION_STD_[NEXT|PREV] so make sure they are there also
|
|
and (possibly) ACTION_SETTINGS_[INC|DEC] */
|
|
CONTEXT_SETTINGS_EQ,
|
|
CONTEXT_SETTINGS_COLOURCHOOSER,
|
|
CONTEXT_SETTINGS_TIME,
|
|
CONTEXT_SETTINGS_RECTRIGGER,
|
|
|
|
/* The following contexts should use ACTION_STD_[NEXT|PREV]
|
|
and (possibly) ACTION_SETTINGS_[INC|DEC]
|
|
Also add any extra actions they need */
|
|
CONTEXT_BOOKMARKSCREEN, /* uses ACTION_BMS_ defines */
|
|
CONTEXT_ALARMSCREEN, /* uses ACTION_AS_ defines */
|
|
CONTEXT_QUICKSCREEN, /* uses ACTION_QS_ defines below */
|
|
CONTEXT_PITCHSCREEN, /* uses ACTION_PS_ defines below */
|
|
|
|
CONTEXT_YESNOSCREEN, /*NOTE: make sure your target has this and ACTION_YESNO_ACCEPT */
|
|
CONTEXT_RECSCREEN,
|
|
CONTEXT_KEYBOARD,
|
|
CONTEXT_MORSE_INPUT,
|
|
CONTEXT_FM,
|
|
CONTEXT_USB_HID,
|
|
CONTEXT_USB_HID_MODE_MULTIMEDIA,
|
|
CONTEXT_USB_HID_MODE_PRESENTATION,
|
|
CONTEXT_USB_HID_MODE_BROWSER,
|
|
CONTEXT_USB_HID_MODE_MOUSE,
|
|
};
|
|
|
|
|
|
enum {
|
|
|
|
ACTION_NONE = BUTTON_NONE,
|
|
ACTION_UNKNOWN,
|
|
ACTION_REDRAW, /* returned if keys are locked and we splash()'ed */
|
|
ACTION_TOUCHSCREEN,
|
|
ACTION_TOUCHSCREEN_MODE, /* toggle the touchscreen mode */
|
|
ACTION_TOUCHSCREEN_IGNORE, /* used for the 'none' action in skins */
|
|
|
|
/* standard actions, use these first */
|
|
ACTION_STD_PREV,
|
|
ACTION_STD_PREVREPEAT,
|
|
ACTION_STD_NEXT,
|
|
ACTION_STD_NEXTREPEAT,
|
|
|
|
ACTION_STD_OK,
|
|
ACTION_STD_CANCEL,
|
|
ACTION_STD_CONTEXT,
|
|
ACTION_STD_MENU,
|
|
ACTION_STD_QUICKSCREEN,
|
|
ACTION_STD_KEYLOCK,
|
|
ACTION_STD_REC,
|
|
ACTION_STD_HOTKEY,
|
|
|
|
ACTION_F3, /* just so everything works again, possibly change me */
|
|
/* code context actions */
|
|
|
|
/* WPS codes */
|
|
ACTION_WPS_BROWSE,
|
|
ACTION_WPS_PLAY,
|
|
ACTION_WPS_SEEKBACK,
|
|
ACTION_WPS_SEEKFWD,
|
|
ACTION_WPS_STOPSEEK,
|
|
ACTION_WPS_SKIPNEXT,
|
|
ACTION_WPS_SKIPPREV,
|
|
ACTION_WPS_STOP,
|
|
ACTION_WPS_VOLDOWN,
|
|
ACTION_WPS_VOLUP,
|
|
ACTION_WPS_PITCHSCREEN,/* optional */
|
|
ACTION_WPS_ID3SCREEN,/* optional */
|
|
ACTION_WPS_CONTEXT,
|
|
ACTION_WPS_QUICKSCREEN,/* optional */
|
|
ACTION_WPS_MENU, /*this should be the same as ACTION_STD_MENU */
|
|
ACTION_WPS_VIEW_PLAYLIST,
|
|
ACTION_WPS_LIST_BOOKMARKS,/* optional */
|
|
ACTION_WPS_CREATE_BOOKMARK,/* optional */
|
|
ACTION_WPS_REC,
|
|
#if 0
|
|
ACTION_WPSAB_SINGLE, /* This needs to be #defined in
|
|
the config-<target>.h to one of the ACTION_WPS_ actions
|
|
so it can be used */
|
|
#endif
|
|
ACTION_WPS_ABSETA_PREVDIR, /* these should be safe to put together seen as */
|
|
ACTION_WPS_ABSETB_NEXTDIR, /* you shouldnt want to change dir in ab-mode */
|
|
ACTION_WPS_ABRESET,
|
|
ACTION_WPS_HOTKEY,
|
|
|
|
/* list and tree page up/down */
|
|
ACTION_LISTTREE_PGUP,/* optional */
|
|
ACTION_LISTTREE_PGDOWN,/* optional */
|
|
#ifdef HAVE_VOLUME_IN_LIST
|
|
ACTION_LIST_VOLUP,
|
|
ACTION_LIST_VOLDOWN,
|
|
#endif
|
|
|
|
/* tree */
|
|
ACTION_TREE_ROOT_INIT,
|
|
ACTION_TREE_PGLEFT,/* optional */
|
|
ACTION_TREE_PGRIGHT,/* optional */
|
|
ACTION_TREE_STOP,
|
|
ACTION_TREE_WPS,
|
|
ACTION_TREE_HOTKEY,
|
|
|
|
/* radio */
|
|
ACTION_FM_MENU,
|
|
ACTION_FM_PRESET,
|
|
ACTION_FM_RECORD,
|
|
ACTION_FM_FREEZE,
|
|
ACTION_FM_STOP,
|
|
ACTION_FM_MODE,
|
|
ACTION_FM_EXIT,
|
|
ACTION_FM_PLAY,
|
|
ACTION_FM_RECORD_DBLPRE,
|
|
ACTION_FM_NEXT_PRESET,
|
|
ACTION_FM_PREV_PRESET,
|
|
|
|
/* recording screen */
|
|
ACTION_REC_LCD,
|
|
ACTION_REC_PAUSE,
|
|
ACTION_REC_NEWFILE,
|
|
ACTION_REC_F2,
|
|
ACTION_REC_F3,
|
|
|
|
/* main menu */
|
|
/* These are not strictly actions, but must be here
|
|
so they dont conflict with real actions in the menu code */
|
|
ACTION_REQUEST_MENUITEM,
|
|
ACTION_EXIT_MENUITEM,
|
|
ACTION_EXIT_AFTER_THIS_MENUITEM, /* if a menu returns this the menu will exit
|
|
once the subitem returns */
|
|
ACTION_ENTER_MENUITEM,
|
|
|
|
/* id3db */
|
|
|
|
/* list */
|
|
|
|
/* settings */
|
|
ACTION_SETTINGS_INC,
|
|
ACTION_SETTINGS_INCREPEAT,
|
|
ACTION_SETTINGS_INCBIGSTEP,
|
|
ACTION_SETTINGS_DEC,
|
|
ACTION_SETTINGS_DECREPEAT,
|
|
ACTION_SETTINGS_DECBIGSTEP,
|
|
ACTION_SETTINGS_RESET,
|
|
ACTION_SETTINGS_SET, /* Used by touchscreen targets */
|
|
|
|
/* bookmark screen */
|
|
ACTION_BMS_DELETE,
|
|
|
|
/* quickscreen */
|
|
ACTION_QS_LEFT,
|
|
ACTION_QS_RIGHT,
|
|
ACTION_QS_DOWN,
|
|
ACTION_QS_TOP,
|
|
|
|
/* pitchscreen */
|
|
/* obviously ignore if you dont have thise screen */
|
|
ACTION_PS_INC_SMALL,
|
|
ACTION_PS_INC_BIG,
|
|
ACTION_PS_DEC_SMALL,
|
|
ACTION_PS_DEC_BIG,
|
|
ACTION_PS_NUDGE_LEFT,
|
|
ACTION_PS_NUDGE_RIGHT,
|
|
ACTION_PS_NUDGE_LEFTOFF,
|
|
ACTION_PS_NUDGE_RIGHTOFF,
|
|
ACTION_PS_TOGGLE_MODE,
|
|
ACTION_PS_RESET,
|
|
ACTION_PS_EXIT, /* _STD_* isnt going to work here */
|
|
ACTION_PS_SLOWER,
|
|
ACTION_PS_FASTER,
|
|
|
|
/* yesno screen */
|
|
ACTION_YESNO_ACCEPT,
|
|
|
|
/* keyboard screen */
|
|
ACTION_KBD_LEFT,
|
|
ACTION_KBD_RIGHT,
|
|
ACTION_KBD_CURSOR_LEFT,
|
|
ACTION_KBD_CURSOR_RIGHT,
|
|
ACTION_KBD_SELECT,
|
|
ACTION_KBD_PAGE_FLIP,
|
|
ACTION_KBD_DONE,
|
|
ACTION_KBD_ABORT,
|
|
ACTION_KBD_BACKSPACE,
|
|
ACTION_KBD_UP,
|
|
ACTION_KBD_DOWN,
|
|
ACTION_KBD_MORSE_INPUT,
|
|
ACTION_KBD_MORSE_SELECT,
|
|
|
|
#ifdef HAVE_TOUCHSCREEN
|
|
/* the following are helper actions for touchscreen targets,
|
|
* These are for actions which are not doable or required if buttons are
|
|
* being used, but are nice additions if the touchscreen is used */
|
|
ACTION_TOUCH_SHUFFLE,
|
|
ACTION_TOUCH_REPMODE,
|
|
ACTION_TOUCH_MUTE,
|
|
ACTION_TOUCH_SCROLLBAR,
|
|
ACTION_TOUCH_VOLUME,
|
|
ACTION_TOUCH_SOFTLOCK,
|
|
ACTION_TOUCH_SETTING,
|
|
#endif
|
|
|
|
/* USB HID codes */
|
|
ACTION_USB_HID_FIRST, /* Place holder */
|
|
ACTION_USB_HID_NONE,
|
|
ACTION_USB_HID_MODE_SWITCH_NEXT,
|
|
ACTION_USB_HID_MODE_SWITCH_PREV,
|
|
ACTION_USB_HID_MULTIMEDIA_VOLUME_UP,
|
|
ACTION_USB_HID_MULTIMEDIA_VOLUME_DOWN,
|
|
ACTION_USB_HID_MULTIMEDIA_VOLUME_MUTE,
|
|
ACTION_USB_HID_MULTIMEDIA_PLAYBACK_PLAY_PAUSE,
|
|
ACTION_USB_HID_MULTIMEDIA_PLAYBACK_STOP,
|
|
ACTION_USB_HID_MULTIMEDIA_PLAYBACK_TRACK_PREV,
|
|
ACTION_USB_HID_MULTIMEDIA_PLAYBACK_TRACK_NEXT,
|
|
ACTION_USB_HID_PRESENTATION_SLIDESHOW_START,
|
|
ACTION_USB_HID_PRESENTATION_SLIDESHOW_LEAVE,
|
|
ACTION_USB_HID_PRESENTATION_SLIDE_PREV,
|
|
ACTION_USB_HID_PRESENTATION_SLIDE_NEXT,
|
|
ACTION_USB_HID_PRESENTATION_SLIDE_FIRST,
|
|
ACTION_USB_HID_PRESENTATION_SLIDE_LAST,
|
|
ACTION_USB_HID_PRESENTATION_SCREEN_BLACK,
|
|
ACTION_USB_HID_PRESENTATION_SCREEN_WHITE,
|
|
ACTION_USB_HID_PRESENTATION_LINK_PREV,
|
|
ACTION_USB_HID_PRESENTATION_LINK_NEXT,
|
|
ACTION_USB_HID_PRESENTATION_MOUSE_CLICK,
|
|
ACTION_USB_HID_PRESENTATION_MOUSE_OVER,
|
|
ACTION_USB_HID_BROWSER_SCROLL_UP,
|
|
ACTION_USB_HID_BROWSER_SCROLL_DOWN,
|
|
ACTION_USB_HID_BROWSER_SCROLL_PAGE_DOWN,
|
|
ACTION_USB_HID_BROWSER_SCROLL_PAGE_UP,
|
|
ACTION_USB_HID_BROWSER_ZOOM_IN,
|
|
ACTION_USB_HID_BROWSER_ZOOM_OUT,
|
|
ACTION_USB_HID_BROWSER_ZOOM_RESET,
|
|
ACTION_USB_HID_BROWSER_TAB_PREV,
|
|
ACTION_USB_HID_BROWSER_TAB_NEXT,
|
|
ACTION_USB_HID_BROWSER_TAB_CLOSE,
|
|
ACTION_USB_HID_BROWSER_HISTORY_BACK,
|
|
ACTION_USB_HID_BROWSER_HISTORY_FORWARD,
|
|
ACTION_USB_HID_BROWSER_VIEW_FULL_SCREEN,
|
|
ACTION_USB_HID_MOUSE_UP,
|
|
ACTION_USB_HID_MOUSE_UP_REP,
|
|
ACTION_USB_HID_MOUSE_DOWN,
|
|
ACTION_USB_HID_MOUSE_DOWN_REP,
|
|
ACTION_USB_HID_MOUSE_LEFT,
|
|
ACTION_USB_HID_MOUSE_LEFT_REP,
|
|
ACTION_USB_HID_MOUSE_RIGHT,
|
|
ACTION_USB_HID_MOUSE_RIGHT_REP,
|
|
ACTION_USB_HID_MOUSE_LDRAG_UP,
|
|
ACTION_USB_HID_MOUSE_LDRAG_UP_REP,
|
|
ACTION_USB_HID_MOUSE_LDRAG_DOWN,
|
|
ACTION_USB_HID_MOUSE_LDRAG_DOWN_REP,
|
|
ACTION_USB_HID_MOUSE_LDRAG_LEFT,
|
|
ACTION_USB_HID_MOUSE_LDRAG_LEFT_REP,
|
|
ACTION_USB_HID_MOUSE_LDRAG_RIGHT,
|
|
ACTION_USB_HID_MOUSE_LDRAG_RIGHT_REP,
|
|
ACTION_USB_HID_MOUSE_RDRAG_UP,
|
|
ACTION_USB_HID_MOUSE_RDRAG_UP_REP,
|
|
ACTION_USB_HID_MOUSE_RDRAG_DOWN,
|
|
ACTION_USB_HID_MOUSE_RDRAG_DOWN_REP,
|
|
ACTION_USB_HID_MOUSE_RDRAG_LEFT,
|
|
ACTION_USB_HID_MOUSE_RDRAG_LEFT_REP,
|
|
ACTION_USB_HID_MOUSE_RDRAG_RIGHT,
|
|
ACTION_USB_HID_MOUSE_RDRAG_RIGHT_REP,
|
|
ACTION_USB_HID_MOUSE_BUTTON_LEFT,
|
|
ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL,
|
|
ACTION_USB_HID_MOUSE_BUTTON_RIGHT,
|
|
ACTION_USB_HID_MOUSE_BUTTON_RIGHT_REL,
|
|
ACTION_USB_HID_MOUSE_WHEEL_SCROLL_UP,
|
|
ACTION_USB_HID_MOUSE_WHEEL_SCROLL_DOWN,
|
|
ACTION_USB_HID_LAST, /* Place holder */
|
|
|
|
LAST_ACTION_PLACEHOLDER, /* custom actions should be this + something */
|
|
};
|
|
|
|
/* act_cur holds action state during get_action() call */
|
|
typedef struct
|
|
{
|
|
int action;
|
|
int button;
|
|
int context;
|
|
int timeout;
|
|
const struct button_mapping *items;
|
|
const struct button_mapping* (*get_context_map)(int);
|
|
bool is_prebutton;
|
|
} action_cur_t;
|
|
|
|
/* act_last holds action state between get_action() calls */
|
|
typedef struct
|
|
{
|
|
int action;
|
|
long tick;
|
|
int button;
|
|
int context;
|
|
intptr_t data;
|
|
|
|
#if defined(HAVE_BACKLIGHT)
|
|
unsigned int backlight_mask;
|
|
long bl_filter_tick;
|
|
#endif
|
|
|
|
#if !defined(HAS_BUTTON_HOLD)
|
|
long sl_filter_tick;
|
|
unsigned int softlock_mask;
|
|
int unlock_combo;
|
|
bool keys_locked;
|
|
bool screen_has_lock;
|
|
|
|
#endif
|
|
|
|
bool repeated;
|
|
bool wait_for_release;
|
|
|
|
#ifdef HAVE_TOUCHSCREEN
|
|
bool ts_short_press;
|
|
int ts_data;
|
|
#endif
|
|
} action_last_t;
|
|
|
|
struct button_mapping {
|
|
int action_code;
|
|
int button_code;
|
|
int pre_button_code;
|
|
};
|
|
|
|
/* use if you want to supply your own button mappings, PLUGINS ONLY */
|
|
/* get_context_map is a function which returns a button_mapping* depedning on the given context */
|
|
/* custom button_mappings may "chain" to inbuilt CONTEXT's */
|
|
int get_custom_action(int context,int timeout,
|
|
const struct button_mapping* (*get_context_map)(int));
|
|
/* use if one of the standard CONTEXT_ mappings will work (ALL the core should be using this! */
|
|
int get_action(int context, int timeout);
|
|
|
|
/* call this if you need to check for ACTION_STD_CANCEL only (i.e user abort! */
|
|
bool action_userabort(int timeout);
|
|
|
|
/* no other code should need this apart from action.c */
|
|
const struct button_mapping* get_context_mapping(int context);
|
|
|
|
/* returns the status code variable from action.c for the button just pressed
|
|
If button != NULL it will be set to the actual button code */
|
|
#define ACTION_REMOTE 0x1 /* remote was pressed */
|
|
#define ACTION_REPEAT 0x2 /* action was repeated (NOT button) */
|
|
int get_action_statuscode(int *button);
|
|
|
|
/* returns the data value associated with the last action that is not
|
|
BUTTON_NONE or flagged with SYS_EVENT */
|
|
intptr_t get_action_data(void);
|
|
|
|
#ifdef HAVE_TOUCHSCREEN
|
|
/* return BUTTON_NONE on error
|
|
* BUTTON_REPEAT if repeated press
|
|
* BUTTON_REPEAT|BUTTON_REL if release after repeated press
|
|
* BUTTON_REL if it's a short press = release after press
|
|
* BUTTON_TOUCHSCREEN if press
|
|
*/
|
|
int action_get_touchscreen_press(short *x, short *y);
|
|
|
|
/*
|
|
* wrapper action_get_touchscreen_press()
|
|
* to filter the touchscreen coordinates through a viewport
|
|
*
|
|
* returns the action and x1, y1 relative to the viewport if
|
|
* the press was within the viewport,
|
|
* ACTION_UNKNOWN (and x1, y1 untouched) if the press was outside
|
|
* BUTTON_NONE else
|
|
*
|
|
**/
|
|
int action_get_touchscreen_press_in_vp(short *x1, short *y1, struct viewport *vp);
|
|
#endif
|
|
|
|
/*******************************************************
|
|
* action_wait_for_release will not allow
|
|
* get_action(|_custom)() to return
|
|
* any ACTION_* values until the current buttons
|
|
* have been released.
|
|
* SYS_* and BUTTON_NONE will pass through.
|
|
* but, any actions relying on _RELEASE won't be seen.
|
|
*
|
|
* Note this doesn't currently work for
|
|
* touchscreen targets if called when the
|
|
* screen isn't currently touched because,
|
|
* if the touch coordinates change they can send
|
|
* normal (non-BUTTON_REPEAT) events repeatedly,
|
|
* this cannot be distinguished
|
|
* from normal button events.
|
|
*/
|
|
void action_wait_for_release(void);
|
|
|
|
#endif /* __ACTION_H__ */
|