mirror of
https://github.com/ipxe/ipxe
synced 2026-02-03 22:49:29 +03:00
[hci] Allow tab key to be used to cycle through UI elements
Add support for wraparound scrolling and allow the tab key to be used to move forward through a list of elements, wrapping back around to the beginning of the list on overflow. This is mildly useful for a menu, and likely to be a strong user expectation for an interactive form. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -9,6 +9,8 @@
|
||||
|
||||
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/** A jump scroller */
|
||||
struct jump_scroller {
|
||||
/** Maximum number of visible rows */
|
||||
@@ -21,6 +23,35 @@ struct jump_scroller {
|
||||
unsigned int first;
|
||||
};
|
||||
|
||||
/**
|
||||
* Construct scroll movement
|
||||
*
|
||||
* @v delta Change in scroller position
|
||||
* @ret move Scroll movement
|
||||
*/
|
||||
#define SCROLL( delta ) ( ( unsigned int ) ( uint16_t ) ( int16_t ) (delta) )
|
||||
|
||||
/**
|
||||
* Extract change in scroller position
|
||||
*
|
||||
* @v move Scroll movement
|
||||
* @ret delta Change in scroller position
|
||||
*/
|
||||
#define SCROLL_DELTA( scroll ) ( ( int16_t ) ( (scroll) & 0x0000ffffUL ) )
|
||||
|
||||
/** Scroll movement flags */
|
||||
#define SCROLL_FLAGS 0xffff0000UL
|
||||
#define SCROLL_WRAP 0x80000000UL /**< Wrap around scrolling */
|
||||
|
||||
/** Do not scroll */
|
||||
#define SCROLL_NONE SCROLL ( 0 )
|
||||
|
||||
/** Scroll up by one line */
|
||||
#define SCROLL_UP SCROLL ( -1 )
|
||||
|
||||
/** Scroll down by one line */
|
||||
#define SCROLL_DOWN SCROLL ( +1 )
|
||||
|
||||
/**
|
||||
* Check if jump scroller is currently on first page
|
||||
*
|
||||
@@ -43,8 +74,9 @@ static inline int jump_scroll_is_last ( struct jump_scroller *scroll ) {
|
||||
return ( ( scroll->first + scroll->rows ) >= scroll->count );
|
||||
}
|
||||
|
||||
extern int jump_scroll_key ( struct jump_scroller *scroll, int key );
|
||||
extern int jump_scroll_move ( struct jump_scroller *scroll, int move );
|
||||
extern unsigned int jump_scroll_key ( struct jump_scroller *scroll, int key );
|
||||
extern unsigned int jump_scroll_move ( struct jump_scroller *scroll,
|
||||
unsigned int move );
|
||||
extern int jump_scroll ( struct jump_scroller *scroll );
|
||||
|
||||
#endif /* _IPXE_JUMPSCROLL_H */
|
||||
|
||||
Reference in New Issue
Block a user