mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-07 13:45:03 -05:00
Morse code cheat sheet, better use [of] pixels available on screen
This improvement allows to show all characters even on a tiny screen like the screen of the iPod Minis Change-Id: Ibffd4f562d8bf9b3859528bbea59ca4f9190c4fd
This commit is contained in:
parent
14a8f9a863
commit
054ba76d81
1 changed files with 34 additions and 24 deletions
|
|
@ -951,8 +951,8 @@ static void kbd_draw_picker(struct keyboard_parameters *pm,
|
|||
#ifdef HAVE_MORSE_INPUT
|
||||
if (state->morse_mode)
|
||||
{
|
||||
const int w = 6, h = 8; /* sysfixed font width, height */
|
||||
int i, j, x, y;
|
||||
const int w = 6, h = 9; /* sysfixed font width, height */
|
||||
int i, iNext, j, x, y;
|
||||
int sc_w = vp->width, sc_h = vp->height;//pm->main_y - pm->keyboard_margin - 1;
|
||||
|
||||
/* Draw morse code screen with sysfont */
|
||||
|
|
@ -962,35 +962,45 @@ static void kbd_draw_picker(struct keyboard_parameters *pm,
|
|||
outline[1] = '\0';
|
||||
|
||||
/* Draw morse code table with code descriptions. */
|
||||
for (i = 0; morse_alphabets[i] != '\0'; i++)
|
||||
{
|
||||
for (i = 0; morse_alphabets[i] != '\0'; i++) {
|
||||
int morse_code;
|
||||
|
||||
outline[0] = morse_alphabets[i];
|
||||
sc->putsxy(x, y, outline);
|
||||
|
||||
morse_code = morse_codes[i];
|
||||
for (j = 0; morse_code > 0x01; morse_code >>= 1)
|
||||
for (j = 0; morse_code > 0x01; morse_code >>= 1) {
|
||||
j++;
|
||||
|
||||
x += w + 3 + j*4;
|
||||
}
|
||||
x += w + 3 + j * 4;
|
||||
morse_code = morse_codes[i];
|
||||
for (; morse_code > 0x01; morse_code >>= 1)
|
||||
{
|
||||
for (; morse_code > 0x01; morse_code >>= 1) {
|
||||
x -= 4;
|
||||
if (morse_code & 0x01)
|
||||
if (morse_code & 0x01) {
|
||||
sc->fillrect(x, y + 2, 3, 4);
|
||||
else
|
||||
} else {
|
||||
sc->fillrect(x, y + 3, 1, 2);
|
||||
}
|
||||
|
||||
x += w*5 - 3;
|
||||
if (x + w*6 >= sc_w)
|
||||
{
|
||||
}
|
||||
x += j * 4;
|
||||
iNext = i + 1;
|
||||
if (morse_alphabets[iNext] == '\0') {
|
||||
break;
|
||||
}
|
||||
morse_code = morse_codes[iNext];
|
||||
for (j = 0; morse_code > 0x01; morse_code >>= 1) {
|
||||
j++;
|
||||
}
|
||||
// If the next one will go out of line
|
||||
bool needNewLine = x + w + 3 + j * 4 + w >= sc_w;
|
||||
if (needNewLine) {
|
||||
if (y + h >= sc_h) {
|
||||
// No more height space
|
||||
break;
|
||||
}
|
||||
x = 0;
|
||||
y += h;
|
||||
if (y + h >= sc_h)
|
||||
break;
|
||||
} else {
|
||||
// Some pixels for spacing in the same line
|
||||
x += w;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue