mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-15 10:35:11 -04:00
Make virtual onscreen keyboard more usable
This commit is contained in:
parent
a76720d6a7
commit
ff9ef2285e
5
.github/workflows/build_ps2.yml
vendored
5
.github/workflows/build_ps2.yml
vendored
@ -20,6 +20,11 @@ jobs:
|
|||||||
make ps2
|
make ps2
|
||||||
|
|
||||||
|
|
||||||
|
# otherwise notify_failure doesn't work
|
||||||
|
- name: Install curl when necessary
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'failure' }}
|
||||||
|
run: apk add curl
|
||||||
|
|
||||||
- uses: ./.github/actions/notify_failure
|
- uses: ./.github/actions/notify_failure
|
||||||
if: ${{ always() && steps.compile.outcome == 'failure' }}
|
if: ${{ always() && steps.compile.outcome == 'failure' }}
|
||||||
with:
|
with:
|
||||||
|
@ -1106,6 +1106,7 @@ static void OnPointerUp(void* obj, int idx) {
|
|||||||
static void OnInputDown(void* obj, int key, cc_bool was) {
|
static void OnInputDown(void* obj, int key, cc_bool was) {
|
||||||
struct Screen* s;
|
struct Screen* s;
|
||||||
int i;
|
int i;
|
||||||
|
if (Window_Main.SoftKeyboardFocus) return;
|
||||||
|
|
||||||
#ifndef CC_BUILD_WEB
|
#ifndef CC_BUILD_WEB
|
||||||
if (Input_IsEscapeButton(key) && (s = Gui_GetClosable())) {
|
if (Input_IsEscapeButton(key) && (s = Gui_GetClosable())) {
|
||||||
|
@ -24,8 +24,9 @@ static void (*KB_MarkDirty)(void);
|
|||||||
#define KB_TOTAL_ROWS 5
|
#define KB_TOTAL_ROWS 5
|
||||||
#define KB_LAST_ROW (KB_TOTAL_ROWS - 1)
|
#define KB_LAST_ROW (KB_TOTAL_ROWS - 1)
|
||||||
|
|
||||||
#define KB_TOTAL_CHARS (KB_CELLS_PER_ROW * 4) + 3
|
#define KB_TOTAL_CHARS (KB_CELLS_PER_ROW * 4) + 4
|
||||||
#define KB_INDEX(x, y) ((y) * KB_CELLS_PER_ROW + (x))
|
#define KB_INDEX(x, y) ((y) * KB_CELLS_PER_ROW + (x))
|
||||||
|
#define KB_TOTAL_SIZE KB_CELLS_PER_ROW * KB_TOTAL_ROWS
|
||||||
|
|
||||||
#define KB_TILE_SIZE 32
|
#define KB_TILE_SIZE 32
|
||||||
|
|
||||||
@ -35,7 +36,7 @@ static const char* kb_table_lower[] =
|
|||||||
"q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "(", ")", "& ",
|
"q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "(", ")", "& ",
|
||||||
"a", "s", "d", "f", "g", "h", "j", "k", "l", "?", ";", "'", "Enter",
|
"a", "s", "d", "f", "g", "h", "j", "k", "l", "?", ";", "'", "Enter",
|
||||||
"z", "x", "c", "v", "b", "n", "m", ".", ",","\\", "!", "@", "/ ",
|
"z", "x", "c", "v", "b", "n", "m", ".", ",","\\", "!", "@", "/ ",
|
||||||
"Caps", "Shift", "Space"
|
"Caps", "Shift", "Space", "Close"
|
||||||
};
|
};
|
||||||
static const char* kb_table_upper[] =
|
static const char* kb_table_upper[] =
|
||||||
{
|
{
|
||||||
@ -43,7 +44,7 @@ static const char* kb_table_upper[] =
|
|||||||
"Q", "W", "E", "R", "T", "Y", "U", "I", "o", "p", "(", ")", "& ",
|
"Q", "W", "E", "R", "T", "Y", "U", "I", "o", "p", "(", ")", "& ",
|
||||||
"A", "S", "D", "F", "G", "H", "J", "K", "L", "?", ";", "'", "Enter",
|
"A", "S", "D", "F", "G", "H", "J", "K", "L", "?", ";", "'", "Enter",
|
||||||
"Z", "X", "C", "V", "B", "N", "M", ".", ",","\\", "!", "@", "/ ",
|
"Z", "X", "C", "V", "B", "N", "M", ".", ",","\\", "!", "@", "/ ",
|
||||||
"Caps", "Shift", "Space"
|
"Caps", "Shift", "Space", "Close"
|
||||||
};
|
};
|
||||||
|
|
||||||
extern void LWidget_DrawBorder(struct Context2D* ctx, BitmapCol color, int insetX, int insetY,
|
extern void LWidget_DrawBorder(struct Context2D* ctx, BitmapCol color, int insetX, int insetY,
|
||||||
@ -62,6 +63,17 @@ static int VirtualKeyboard_Width(void) {
|
|||||||
static int VirtualKeyboard_Height(void) {
|
static int VirtualKeyboard_Height(void) {
|
||||||
return KB_TOTAL_ROWS * KB_TILE_SIZE;
|
return KB_TOTAL_ROWS * KB_TILE_SIZE;
|
||||||
}
|
}
|
||||||
|
static int VirtualKeyboard_GetSelected(void) {
|
||||||
|
// Last row needs special handling since it uses 4 cells per item
|
||||||
|
int selected = kb_selected;
|
||||||
|
if (selected < 0) return -1;
|
||||||
|
|
||||||
|
int row = selected / KB_CELLS_PER_ROW;
|
||||||
|
int cell = selected % KB_CELLS_PER_ROW;
|
||||||
|
if (row != KB_LAST_ROW) return selected;
|
||||||
|
cell /= 4;
|
||||||
|
return row * KB_CELLS_PER_ROW + cell;
|
||||||
|
}
|
||||||
|
|
||||||
static void VirtualKeyboard_Close(void);
|
static void VirtualKeyboard_Close(void);
|
||||||
static void VirtualKeyboard_Hook(void);
|
static void VirtualKeyboard_Hook(void);
|
||||||
@ -76,6 +88,8 @@ static void VirtualKeyboard_Draw(struct Context2D* ctx) {
|
|||||||
cc_string str;
|
cc_string str;
|
||||||
int row, cell;
|
int row, cell;
|
||||||
int i, x, y, w, h, dx, dy;
|
int i, x, y, w, h, dx, dy;
|
||||||
|
int selected = VirtualKeyboard_GetSelected();
|
||||||
|
|
||||||
Drawer2D.Colors['f'] = Drawer2D.Colors['0'];
|
Drawer2D.Colors['f'] = Drawer2D.Colors['0'];
|
||||||
if (kb_needsHook) VirtualKeyboard_Hook();
|
if (kb_needsHook) VirtualKeyboard_Hook();
|
||||||
|
|
||||||
@ -91,7 +105,7 @@ static void VirtualKeyboard_Draw(struct Context2D* ctx) {
|
|||||||
w = KB_TILE_SIZE * (str.length > 1 ? 4 : 1);
|
w = KB_TILE_SIZE * (str.length > 1 ? 4 : 1);
|
||||||
h = KB_TILE_SIZE;
|
h = KB_TILE_SIZE;
|
||||||
|
|
||||||
Gradient_Noise(ctx, i == kb_selected ? KB_SELECTED_COLOR : KB_NORMAL_COLOR, 4, x, y, w, h);
|
Gradient_Noise(ctx, i == selected ? KB_SELECTED_COLOR : KB_NORMAL_COLOR, 4, x, y, w, h);
|
||||||
LWidget_DrawBorder(ctx, KB_BACKGROUND_COLOR, 1, 1, x, y, w, h);
|
LWidget_DrawBorder(ctx, KB_BACKGROUND_COLOR, 1, 1, x, y, w, h);
|
||||||
|
|
||||||
dx = (w - Drawer2D_TextWidth (&args)) / 2;
|
dx = (w - Drawer2D_TextWidth (&args)) / 2;
|
||||||
@ -121,8 +135,10 @@ static void VirtualKeyboard_Scroll(int delta) {
|
|||||||
if (kb_selected < 0) kb_selected = 0;
|
if (kb_selected < 0) kb_selected = 0;
|
||||||
|
|
||||||
kb_selected += delta;
|
kb_selected += delta;
|
||||||
if (kb_selected < 0) kb_selected += KB_TOTAL_CHARS;
|
if (kb_selected < 0) kb_selected += KB_TOTAL_SIZE;
|
||||||
Math_Clamp(kb_selected, 0, KB_TOTAL_CHARS - 1);
|
if (kb_selected >= KB_TOTAL_SIZE) kb_selected -= KB_TOTAL_SIZE;
|
||||||
|
|
||||||
|
Math_Clamp(kb_selected, 0, KB_TOTAL_SIZE - 1);
|
||||||
KB_MarkDirty();
|
KB_MarkDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,17 +155,17 @@ static void VirtualKeyboard_AppendChar(char c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void VirtualKeyboard_ClickSelected(void) {
|
static void VirtualKeyboard_ClickSelected(void) {
|
||||||
if (kb_selected < 0) return;
|
int selected = VirtualKeyboard_GetSelected();
|
||||||
|
if (selected < 0) return;
|
||||||
|
|
||||||
/* TODO kinda hacky, redo this */
|
/* TODO kinda hacky, redo this */
|
||||||
switch (kb_selected) {
|
switch (selected) {
|
||||||
case KB_INDEX(KB_LAST_CELL, 0):
|
case KB_INDEX(KB_LAST_CELL, 0):
|
||||||
if (kb_str.length) kb_str.length--;
|
if (kb_str.length) kb_str.length--;
|
||||||
Event_RaiseString(&InputEvents.TextChanged, &kb_str);
|
Event_RaiseString(&InputEvents.TextChanged, &kb_str);
|
||||||
KB_MarkDirty();
|
KB_MarkDirty();
|
||||||
break;
|
break;
|
||||||
case KB_INDEX(KB_LAST_CELL, 2):
|
case KB_INDEX(KB_LAST_CELL, 2):
|
||||||
KB_MarkDirty();
|
|
||||||
OnscreenKeyboard_Close();
|
OnscreenKeyboard_Close();
|
||||||
Input_SetPressed(CCKEY_ENTER);
|
Input_SetPressed(CCKEY_ENTER);
|
||||||
Input_SetReleased(CCKEY_ENTER);
|
Input_SetReleased(CCKEY_ENTER);
|
||||||
@ -165,9 +181,12 @@ static void VirtualKeyboard_ClickSelected(void) {
|
|||||||
case KB_INDEX(2, KB_LAST_ROW):
|
case KB_INDEX(2, KB_LAST_ROW):
|
||||||
VirtualKeyboard_AppendChar(' ');
|
VirtualKeyboard_AppendChar(' ');
|
||||||
break;
|
break;
|
||||||
|
case KB_INDEX(3, KB_LAST_ROW):
|
||||||
|
OnscreenKeyboard_Close();
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
VirtualKeyboard_AppendChar(kb_table[kb_selected][0]);
|
VirtualKeyboard_AppendChar(kb_table[selected][0]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include "Errors.h"
|
#include "Errors.h"
|
||||||
#include "ExtMath.h"
|
#include "ExtMath.h"
|
||||||
#include "Logger.h"
|
#include "Logger.h"
|
||||||
|
#include "VirtualKeyboard.h"
|
||||||
#include <libpad.h>
|
#include <libpad.h>
|
||||||
#include <packet.h>
|
#include <packet.h>
|
||||||
#include <dma_tags.h>
|
#include <dma_tags.h>
|
||||||
@ -195,10 +196,26 @@ void Window_FreeFramebuffer(struct Bitmap* bmp) {
|
|||||||
/*########################################################################################################################*
|
/*########################################################################################################################*
|
||||||
*------------------------------------------------------Soft keyboard------------------------------------------------------*
|
*------------------------------------------------------Soft keyboard------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { /* TODO implement */ }
|
void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) {
|
||||||
void OnscreenKeyboard_SetText(const cc_string* text) { }
|
if (Input.Sources & INPUT_SOURCE_NORMAL) return;
|
||||||
void OnscreenKeyboard_Draw2D(Rect2D* r, struct Bitmap* bmp) { }
|
VirtualKeyboard_Open(args, launcherMode);
|
||||||
void OnscreenKeyboard_Close(void) { /* TODO implement */ }
|
}
|
||||||
|
|
||||||
|
void OnscreenKeyboard_SetText(const cc_string* text) {
|
||||||
|
VirtualKeyboard_SetText(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnscreenKeyboard_Draw2D(Rect2D* r, struct Bitmap* bmp) {
|
||||||
|
VirtualKeyboard_Display2D(r, bmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnscreenKeyboard_Draw3D(void) {
|
||||||
|
VirtualKeyboard_Display3D();
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnscreenKeyboard_Close(void) {
|
||||||
|
VirtualKeyboard_Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*########################################################################################################################*
|
/*########################################################################################################################*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user