mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-19 05:40:38 +01:00
[simulator] Process letter keyboard events
This commit is contained in:
committed by
EmilieNumworks
parent
d189a60eff
commit
5e2ea6ee32
@@ -22,8 +22,8 @@ static const char* kCharForKey[Ion::Keyboard::NumberOfKeys] = {
|
||||
static const int kShortcutForKey[Ion::Keyboard::NumberOfKeys] = {
|
||||
FL_Left, FL_Up, FL_Down, FL_Right, FL_Enter, FL_Escape,
|
||||
FL_Home, 0, 0, 0, 0, 0,
|
||||
0, 0, 'x', 0, 0, FL_BackSpace,
|
||||
0, 0, 0, 'i', ',', 0,
|
||||
0, 0, 0, 0, 0, FL_BackSpace,
|
||||
0, 0, 0, 0, ',', 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
FL_SHIFT | '7', FL_SHIFT | '8', FL_SHIFT | '9', '(',')', 0,
|
||||
FL_SHIFT | '4', FL_SHIFT | '5', FL_SHIFT | '6', '*', '/', 0,
|
||||
@@ -44,6 +44,31 @@ static void keyHandler(Fl_Widget *, long key) {
|
||||
}
|
||||
}
|
||||
|
||||
static void alphabetEventHandler(Fl_Widget *, long c) {
|
||||
static Ion::Events::Event lowerEvents[FltkKbd::sNumberOfLettersInAlphabet] = {
|
||||
Ion::Events::LowerA, Ion::Events::LowerB, Ion::Events::LowerC, Ion::Events::LowerD, Ion::Events::LowerE,
|
||||
Ion::Events::LowerF, Ion::Events::LowerG, Ion::Events::LowerH, Ion::Events::LowerI, Ion::Events::LowerJ,
|
||||
Ion::Events::LowerK, Ion::Events::LowerL, Ion::Events::LowerM, Ion::Events::LowerN, Ion::Events::LowerO,
|
||||
Ion::Events::LowerP, Ion::Events::LowerQ, Ion::Events::LowerR, Ion::Events::LowerS, Ion::Events::LowerT,
|
||||
Ion::Events::LowerU, Ion::Events::LowerV, Ion::Events::LowerW, Ion::Events::LowerX, Ion::Events::LowerY,
|
||||
Ion::Events::LowerZ };
|
||||
static Ion::Events::Event upperEvents[FltkKbd::sNumberOfLettersInAlphabet] = {
|
||||
Ion::Events::UpperA, Ion::Events::UpperB, Ion::Events::UpperC, Ion::Events::UpperD, Ion::Events::UpperE,
|
||||
Ion::Events::UpperF, Ion::Events::UpperG, Ion::Events::UpperH, Ion::Events::UpperI, Ion::Events::UpperJ,
|
||||
Ion::Events::UpperK, Ion::Events::UpperL, Ion::Events::UpperM, Ion::Events::UpperN, Ion::Events::UpperO,
|
||||
Ion::Events::UpperP, Ion::Events::UpperQ, Ion::Events::UpperR, Ion::Events::UpperS, Ion::Events::UpperT,
|
||||
Ion::Events::UpperU, Ion::Events::UpperV, Ion::Events::UpperW, Ion::Events::UpperX, Ion::Events::UpperY,
|
||||
Ion::Events::UpperZ
|
||||
};
|
||||
if (currentEvent == Ion::Events::None) {
|
||||
if (c >= 'a' && c <= 'z') {
|
||||
currentEvent = lowerEvents[c - 'a'];
|
||||
} else if (c >= 'A' && c <= 'Z') {
|
||||
currentEvent = upperEvents[c - 'A'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FltkKbd::FltkKbd(int x, int y, int w, int h) : Fl_Group(x, y, w, h) {
|
||||
assert(KeyboardRows*KeyboardColumns == Ion::Keyboard::NumberOfKeys);
|
||||
int key_width = w/KeyboardColumns;
|
||||
@@ -69,6 +94,24 @@ FltkKbd::FltkKbd(int x, int y, int w, int h) : Fl_Group(x, y, w, h) {
|
||||
}
|
||||
m_buttons[k]->clear_visible_focus();
|
||||
}
|
||||
|
||||
// Get keyboard letters event
|
||||
for (int k = 0; k < sNumberOfLettersInAlphabet; k++) {
|
||||
char l = 'a' + k;
|
||||
m_alphabetShortcuts[k] = new Fl_Button(0, 0, 0, 0, "");
|
||||
m_alphabetShortcuts[k]->callback(alphabetEventHandler,l);
|
||||
m_alphabetShortcuts[k]->shortcut(l);
|
||||
m_alphabetShortcuts[k]->clear_visible_focus();
|
||||
}
|
||||
for (int k = 0; k < sNumberOfLettersInAlphabet; k++) {
|
||||
char l = 'A' + k;
|
||||
int index = sNumberOfLettersInAlphabet + k;
|
||||
m_alphabetShortcuts[index] = new Fl_Button(0, 0, 0, 0, "");
|
||||
m_alphabetShortcuts[index]->callback(alphabetEventHandler, l);
|
||||
m_alphabetShortcuts[index]->shortcut(FL_SHIFT | ('a' + k));
|
||||
m_alphabetShortcuts[index]->clear_visible_focus();
|
||||
}
|
||||
|
||||
end();
|
||||
}
|
||||
|
||||
|
||||
@@ -7,10 +7,12 @@
|
||||
|
||||
class FltkKbd : public Fl_Group {
|
||||
public:
|
||||
constexpr static int sNumberOfLettersInAlphabet = 26;
|
||||
FltkKbd(int x, int y, int w, int h);
|
||||
bool key_down(Ion::Keyboard::Key key);
|
||||
private:
|
||||
Fl_Button * m_buttons[Ion::Keyboard::NumberOfKeys];
|
||||
Fl_Button * m_alphabetShortcuts[2*sNumberOfLettersInAlphabet];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user