mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-09 05:05:20 -05:00
Make the virtual keyboard easier to use for blind users.
From FS#6324 When moving up/down and landing on the edit line, say "edit". Otherwise it gets quite confusing. When moving left and right on the edit line, sound a beep when the left or right end is reached. Before, it would say nothing either when the cursor is over a blank or a char it doesn't know how to spell. So if we're on a blank spot, say "blank". Pass the whole utf8 char to be spelled. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15060 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
0279c71a92
commit
d529a3845b
2 changed files with 65 additions and 7 deletions
|
|
@ -11389,3 +11389,31 @@
|
||||||
lcd_color: "Line Selector Colours"
|
lcd_color: "Line Selector Colours"
|
||||||
</voice>
|
</voice>
|
||||||
</phrase>
|
</phrase>
|
||||||
|
<phrase>
|
||||||
|
id: VOICE_EDIT
|
||||||
|
desc: keyboard
|
||||||
|
user:
|
||||||
|
<source>
|
||||||
|
*: ""
|
||||||
|
</source>
|
||||||
|
<dest>
|
||||||
|
*: ""
|
||||||
|
</dest>
|
||||||
|
<voice>
|
||||||
|
*: "Edit"
|
||||||
|
</voice>
|
||||||
|
</phrase>
|
||||||
|
<phrase>
|
||||||
|
id: VOICE_BLANK
|
||||||
|
desc: keyboard
|
||||||
|
user:
|
||||||
|
<source>
|
||||||
|
*: ""
|
||||||
|
</source>
|
||||||
|
<dest>
|
||||||
|
*: ""
|
||||||
|
</dest>
|
||||||
|
<voice>
|
||||||
|
*: "Blank"
|
||||||
|
</voice>
|
||||||
|
</phrase>
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,8 @@
|
||||||
#include "hangul.h"
|
#include "hangul.h"
|
||||||
#include "action.h"
|
#include "action.h"
|
||||||
#include "icon.h"
|
#include "icon.h"
|
||||||
|
#include "pcmbuf.h"
|
||||||
|
#include "lang.h"
|
||||||
|
|
||||||
#ifndef O_BINARY
|
#ifndef O_BINARY
|
||||||
#define O_BINARY 0
|
#define O_BINARY 0
|
||||||
|
|
@ -188,15 +190,27 @@ int load_kbd(unsigned char* filename)
|
||||||
/* helper function to spell a char if voice UI is enabled */
|
/* helper function to spell a char if voice UI is enabled */
|
||||||
static void kbd_spellchar(unsigned short c)
|
static void kbd_spellchar(unsigned short c)
|
||||||
{
|
{
|
||||||
static char spell_char[2] = "\0\0"; /* store char to pass to talk_spell */
|
if (talk_menus_enabled()) /* voice UI? */
|
||||||
|
|
||||||
if (talk_menus_enabled() && c < 128) /* voice UI? */
|
|
||||||
{
|
{
|
||||||
spell_char[0] = (char)c;
|
unsigned char tmp[5];
|
||||||
talk_spell(spell_char, false);
|
/* store char to pass to talk_spell */
|
||||||
|
unsigned char* utf8 = utf8encode(c, tmp);
|
||||||
|
*utf8 = 0;
|
||||||
|
|
||||||
|
if(c == ' ')
|
||||||
|
talk_id(VOICE_BLANK, false);
|
||||||
|
else talk_spell(tmp, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef KBD_MODES
|
||||||
|
static void say_edit(void)
|
||||||
|
{
|
||||||
|
if(talk_menus_enabled())
|
||||||
|
talk_id(VOICE_EDIT, false);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void kbd_inschar(unsigned char* text, int buflen,
|
static void kbd_inschar(unsigned char* text, int buflen,
|
||||||
int* editpos, unsigned short ch)
|
int* editpos, unsigned short ch)
|
||||||
{
|
{
|
||||||
|
|
@ -814,7 +828,8 @@ int kbd_input(char* text, int buflen)
|
||||||
{
|
{
|
||||||
int c = utf8seek(text, ++editpos);
|
int c = utf8seek(text, ++editpos);
|
||||||
kbd_spellchar(text[c]);
|
kbd_spellchar(text[c]);
|
||||||
}
|
} else if(global_settings.beep)
|
||||||
|
pcmbuf_beep(1000, 150, 1500*global_settings.beep);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* KBD_MODES */
|
#endif /* KBD_MODES */
|
||||||
|
|
@ -855,7 +870,8 @@ int kbd_input(char* text, int buflen)
|
||||||
{
|
{
|
||||||
int c = utf8seek(text, --editpos);
|
int c = utf8seek(text, --editpos);
|
||||||
kbd_spellchar(text[c]);
|
kbd_spellchar(text[c]);
|
||||||
}
|
} else if(global_settings.beep)
|
||||||
|
pcmbuf_beep(1000, 150, 1500*global_settings.beep);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* KBD_MODES */
|
#endif /* KBD_MODES */
|
||||||
|
|
@ -884,7 +900,11 @@ int kbd_input(char* text, int buflen)
|
||||||
#ifdef KBD_MORSE_INPUT
|
#ifdef KBD_MORSE_INPUT
|
||||||
#ifdef KBD_MODES
|
#ifdef KBD_MODES
|
||||||
if (morse_mode)
|
if (morse_mode)
|
||||||
|
{
|
||||||
pm->line_edit = !pm->line_edit;
|
pm->line_edit = !pm->line_edit;
|
||||||
|
if(pm->line_edit)
|
||||||
|
say_edit();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
#else
|
#else
|
||||||
if (morse_mode)
|
if (morse_mode)
|
||||||
|
|
@ -902,7 +922,10 @@ int kbd_input(char* text, int buflen)
|
||||||
#endif
|
#endif
|
||||||
if (++pm->y >= pm->lines)
|
if (++pm->y >= pm->lines)
|
||||||
#ifdef KBD_MODES
|
#ifdef KBD_MODES
|
||||||
|
{
|
||||||
pm->line_edit = true;
|
pm->line_edit = true;
|
||||||
|
say_edit();
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
pm->y = 0;
|
pm->y = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -920,7 +943,11 @@ int kbd_input(char* text, int buflen)
|
||||||
#ifdef KBD_MORSE_INPUT
|
#ifdef KBD_MORSE_INPUT
|
||||||
#ifdef KBD_MODES
|
#ifdef KBD_MODES
|
||||||
if (morse_mode)
|
if (morse_mode)
|
||||||
|
{
|
||||||
pm->line_edit = !pm->line_edit;
|
pm->line_edit = !pm->line_edit;
|
||||||
|
if(pm->line_edit)
|
||||||
|
say_edit();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
#else
|
#else
|
||||||
if (morse_mode)
|
if (morse_mode)
|
||||||
|
|
@ -938,7 +965,10 @@ int kbd_input(char* text, int buflen)
|
||||||
#endif
|
#endif
|
||||||
if (--pm->y < 0)
|
if (--pm->y < 0)
|
||||||
#ifdef KBD_MODES
|
#ifdef KBD_MODES
|
||||||
|
{
|
||||||
pm->line_edit = true;
|
pm->line_edit = true;
|
||||||
|
say_edit();
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
pm->y = pm->lines - 1;
|
pm->y = pm->lines - 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue