mirror of
https://git.planet-casio.com/Lephenixnoir/JustUI.git
synced 2024-12-29 13:03:40 +01:00
jinput: add keymap customization function
This commit is contained in:
parent
bea113f09e
commit
0e5ccf4cc3
3 changed files with 27 additions and 3 deletions
|
@ -11,6 +11,9 @@
|
||||||
|
|
||||||
#include <gint/display.h>
|
#include <gint/display.h>
|
||||||
|
|
||||||
|
/* Keymap function for jinput. See jinput_set_keymap_function(). */
|
||||||
|
typedef uint32_t jinput_keymap_function_t(int key, bool shift, bool alpha);
|
||||||
|
|
||||||
/* jinput: One-line input field
|
/* jinput: One-line input field
|
||||||
|
|
||||||
This widget is used to read input from the user. It has a single line of
|
This widget is used to read input from the user. It has a single line of
|
||||||
|
@ -63,6 +66,9 @@ typedef struct {
|
||||||
/* Timer ID for the cursor state */
|
/* Timer ID for the cursor state */
|
||||||
int8_t timer;
|
int8_t timer;
|
||||||
|
|
||||||
|
/* Custom keymap function (may be NULL) */
|
||||||
|
jinput_keymap_function_t *keymap_fun;
|
||||||
|
|
||||||
} jinput;
|
} jinput;
|
||||||
|
|
||||||
/* Type IDs */
|
/* Type IDs */
|
||||||
|
@ -81,6 +87,15 @@ void jinput_set_text_color(jinput *input, int color);
|
||||||
void jinput_set_font(jinput *input, font_t const *font);
|
void jinput_set_font(jinput *input, font_t const *font);
|
||||||
void jinput_set_prompt(jinput *input, char const *prompt);
|
void jinput_set_prompt(jinput *input, char const *prompt);
|
||||||
|
|
||||||
|
/* Set a custom keymap function. The keymap function is called when a key is
|
||||||
|
pressed that should produce input in the field. The following parameters are
|
||||||
|
provided:
|
||||||
|
* key is the code for the pressed key (<gint/keycodes.h>)
|
||||||
|
* shift and alpha indicate the state of modifiers
|
||||||
|
The function should return a Unicode code point. Note that jinput can deal
|
||||||
|
with any Unicode code point but the font used for the jinput might not! */
|
||||||
|
void jinput_set_keymap_function(jinput *input, jinput_keymap_function_t *kf);
|
||||||
|
|
||||||
/* Current value visible in the widget, normally useful upon receiving the
|
/* Current value visible in the widget, normally useful upon receiving the
|
||||||
JINPUT_VALIDATED event, not guaranteed otherwise */
|
JINPUT_VALIDATED event, not guaranteed otherwise */
|
||||||
char const *jinput_value(jinput *input);
|
char const *jinput_value(jinput *input);
|
||||||
|
|
|
@ -28,9 +28,9 @@ struct fileinfo {
|
||||||
/* Entry name (owned by the structure) */
|
/* Entry name (owned by the structure) */
|
||||||
char *name;
|
char *name;
|
||||||
/* File size in bytes if file, number of entries if folder */
|
/* File size in bytes if file, number of entries if folder */
|
||||||
int size;
|
int size :24;
|
||||||
/* Type from [struct dirent], -1 for the "Save As" entry */
|
/* Type from [struct dirent], -1 for the "Save As" entry */
|
||||||
int type;
|
int8_t type;
|
||||||
};
|
};
|
||||||
|
|
||||||
jfileselect *jfileselect_create(void *parent)
|
jfileselect *jfileselect_create(void *parent)
|
||||||
|
|
11
src/jinput.c
11
src/jinput.c
|
@ -56,6 +56,7 @@ jinput *jinput_create(char const *prompt, size_t length, void *parent)
|
||||||
|
|
||||||
i->mode = JINPUT_FLAT;
|
i->mode = JINPUT_FLAT;
|
||||||
i->timer = -1;
|
i->timer = -1;
|
||||||
|
i->keymap_fun = NULL;
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@ -79,6 +80,11 @@ void jinput_set_prompt(jinput *i, char const *prompt)
|
||||||
i->widget.dirty = 1;
|
i->widget.dirty = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void jinput_set_keymap_function(jinput *i, jinput_keymap_function_t *kf)
|
||||||
|
{
|
||||||
|
i->keymap_fun = kf;
|
||||||
|
}
|
||||||
|
|
||||||
//---
|
//---
|
||||||
// Input helpers
|
// Input helpers
|
||||||
//---
|
//---
|
||||||
|
@ -305,7 +311,10 @@ static bool jinput_poly_event(void *i0, jevent e)
|
||||||
i->mode |= JINPUT_ALPHA;
|
i->mode |= JINPUT_ALPHA;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
uint32_t code_point = keymap_translate(ev.key,
|
jinput_keymap_function_t *kf = i->keymap_fun;
|
||||||
|
if(!kf)
|
||||||
|
kf = &keymap_translate;
|
||||||
|
uint32_t code_point = (*kf)(ev.key,
|
||||||
(i->mode & JINPUT_SHIFT) || (i->mode & JINPUT_SHIFT_LOCK),
|
(i->mode & JINPUT_SHIFT) || (i->mode & JINPUT_SHIFT_LOCK),
|
||||||
(i->mode & JINPUT_ALPHA) || (i->mode & JINPUT_ALPHA_LOCK)
|
(i->mode & JINPUT_ALPHA) || (i->mode & JINPUT_ALPHA_LOCK)
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue