Improved keyboard
This commit is contained in:
@@ -4,44 +4,36 @@ static const char* kKeyAlphaMapLowerCase[26] = {
|
||||
"q", "w", "e", "r", "t", "y", "u", "i", "o", "p", //10
|
||||
"a", "s", "d", "f", "g", "h", "j", "k", "l", //9
|
||||
"z", "x", "c", "v", "b", "n", "m", //7
|
||||
};
|
||||
};
|
||||
|
||||
static const char* kKeyAlphaMapUpperCase[26] = {
|
||||
"Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", //10
|
||||
"A", "S", "D", "F", "G", "H", "J", "K", "L", //9
|
||||
"Z", "X", "C", "V", "B", "N", "M", //7
|
||||
};
|
||||
};
|
||||
|
||||
static const char* kKeyAlphaMapNumber[26] = {
|
||||
"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", //10
|
||||
"-", "/", ":", ";", "(", ")", "$", "&", "@", //9
|
||||
"_", "\"", ".", ",", "?", "!", "'", //7
|
||||
};
|
||||
};
|
||||
|
||||
static const char* kKeyAlphaMapSymbol[26] = {
|
||||
"[", "]", "{", "}", "#", "%", "^", "*", "+", "=", //10
|
||||
"_", "\\", "|", "~", "<", ">", "€", "£", "¥", //9
|
||||
"•", "✿", "\u221A", "\u221E", "\u2103", "\u2109", "\u2116", //7
|
||||
};
|
||||
|
||||
|
||||
// static const char* kRomaSpell[] = {
|
||||
// "あアぁァ"
|
||||
// "ばバびビぶブべべぼボびゃビャびゅビュびょビョ"
|
||||
// };
|
||||
};
|
||||
|
||||
enum {
|
||||
kKeySpace = 26,
|
||||
kKeyBackspace,
|
||||
kKeyWrap,
|
||||
kKeyCase,
|
||||
kKeySwitch,
|
||||
kKeyNumber
|
||||
};
|
||||
|
||||
enum {
|
||||
kSWCase = 0,
|
||||
kSWSwitch,
|
||||
kSWNumber
|
||||
};
|
||||
|
||||
@@ -52,44 +44,7 @@ enum {
|
||||
kLayoutSymbol
|
||||
};
|
||||
|
||||
EPDGUI_Keyboard::EPDGUI_Keyboard(int16_t dir, uint32_t style): EPDGUI_Base() {
|
||||
if(dir) { // Horizontal
|
||||
const uint16_t kKeyWidth = 72;
|
||||
const uint16_t kKeyHeight = 44;
|
||||
const uint16_t kKeyInterval = 8;
|
||||
const uint16_t kFirstLineY = 302;
|
||||
const uint16_t kSecondLineY = 356;
|
||||
const uint16_t kThirdLineY = 410;
|
||||
const uint16_t k4thLineY = 464;
|
||||
const uint16_t kBaseX = 84;
|
||||
|
||||
for(int i = 0; i < 10; i++) {
|
||||
_btn[i] = new EPDGUI_Button(kKeyAlphaMapLowerCase[i], kBaseX + (kKeyInterval + kKeyWidth) * i, kFirstLineY, kKeyWidth, kKeyHeight);
|
||||
}
|
||||
for(int i = 10; i < 19; i++) {
|
||||
_btn[i] = new EPDGUI_Button(kKeyAlphaMapLowerCase[i], kBaseX + 40 + (kKeyInterval + kKeyWidth) * (i - 10), kSecondLineY, kKeyWidth, kKeyHeight);
|
||||
}
|
||||
for(int i = 19; i < 26; i++) {
|
||||
_btn[i] = new EPDGUI_Button(kKeyAlphaMapLowerCase[i], kBaseX + 118 + (kKeyInterval + kKeyWidth) * (i - 19), kThirdLineY, kKeyWidth, kKeyHeight);
|
||||
}
|
||||
|
||||
_btn[kKeyBackspace] = new EPDGUI_Button("", kBaseX + 792 - 96, kThirdLineY, 96, kKeyHeight);
|
||||
_btn[kKeyBackspace]->CanvasNormal()->pushImage(_btn[kKeyBackspace]->getW() / 2 - 16, _btn[kKeyBackspace]->getH() / 2 - 16, 32, 32, ImageResource_backspace_32x32);
|
||||
_btn[kKeyBackspace]->CanvasPressed()->fillCanvas(0);
|
||||
_btn[kKeyBackspace]->CanvasPressed()->pushImage(_btn[kKeyBackspace]->getW() / 2 - 16, _btn[kKeyBackspace]->getH() / 2 - 16, 32, 32, ImageResource_backspace_32x32);
|
||||
_btn[kKeyBackspace]->CanvasPressed()->ReverseColor();
|
||||
|
||||
_btn[kKeySpace] = new EPDGUI_Button("Space", kBaseX + 162, k4thLineY, 468, kKeyHeight);
|
||||
if(style & STYLE_INPUTMODE_NORMALTEXT)
|
||||
_btn[kKeyWrap] = new EPDGUI_Button("Wrap", kBaseX + 792 - 152, k4thLineY, 152, kKeyHeight);
|
||||
else if(style & STYLE_INPUTMODE_NEEDCONFIRM)
|
||||
_btn[kKeyWrap] = new EPDGUI_Button("Confirm", kBaseX + 792 - 152, k4thLineY, 152, kKeyHeight);
|
||||
|
||||
// function key
|
||||
_sw[kSWCase] = new EPDGUI_Switch(2, kBaseX, kThirdLineY, 96, kKeyHeight);
|
||||
_sw[kSWSwitch] = new EPDGUI_Switch(2, kBaseX, k4thLineY, 68, kKeyHeight);
|
||||
_sw[kSWNumber] = new EPDGUI_Switch(2, kBaseX + 162 - kKeyInterval - 68, k4thLineY, 68, kKeyHeight);
|
||||
} else {
|
||||
EPDGUI_Keyboard::EPDGUI_Keyboard(uint32_t style): EPDGUI_Base() {
|
||||
const uint16_t kBaseX = 16;
|
||||
const uint16_t kBaseY = 700;
|
||||
const uint16_t kKeyWidth = 44;
|
||||
@@ -124,15 +79,11 @@ EPDGUI_Keyboard::EPDGUI_Keyboard(int16_t dir, uint32_t style): EPDGUI_Base() {
|
||||
|
||||
// function key
|
||||
_sw[kSWCase] = new EPDGUI_Switch(2, kBaseX, kThirdLineY, 60, kKeyHeight);
|
||||
_sw[kSWSwitch] = new EPDGUI_Switch(2, kBaseX, k4thLineY, 56, kKeyHeight);
|
||||
_sw[kSWNumber] = new EPDGUI_Switch(2, kBaseX + 56 + kKeyInterval, k4thLineY, 60, kKeyHeight);
|
||||
}
|
||||
_sw[kSWNumber] = new EPDGUI_Switch(2, kBaseX, k4thLineY, 124, kKeyHeight);
|
||||
|
||||
_sw[kSWCase]->Canvas(0)->pushImage(_sw[kSWCase]->getW() / 2 - 16, _sw[kSWCase]->getH() / 2 - 16, 32, 32, ImageResource_upper_32x32);
|
||||
_sw[kSWCase]->Canvas(1)->pushImage(_sw[kSWCase]->getW() / 2 - 16, _sw[kSWCase]->getH() / 2 - 16, 32, 32, ImageResource_upper_32x32);
|
||||
_sw[kSWCase]->Canvas(1)->ReverseColor();
|
||||
_sw[kSWSwitch]->SetLabel(0, "あ"); //TODO: Support for kana input
|
||||
_sw[kSWSwitch]->SetLabel(1, "Aa");
|
||||
_sw[kSWNumber]->SetLabel(0, "123");
|
||||
_sw[kSWNumber]->SetLabel(1, "Abc");
|
||||
|
||||
@@ -140,11 +91,8 @@ EPDGUI_Keyboard::EPDGUI_Keyboard(int16_t dir, uint32_t style): EPDGUI_Base() {
|
||||
_key[i] = _btn[i];
|
||||
}
|
||||
_key[kKeyCase] = _sw[kSWCase];
|
||||
_key[kKeySwitch] = _sw[kSWSwitch];
|
||||
_key[kKeyNumber] = _sw[kSWNumber];
|
||||
|
||||
// _sw[kSWSwitch]->SetHide(true);
|
||||
|
||||
_layout = kLayoutLowerAlpha;
|
||||
}
|
||||
|
||||
@@ -152,7 +100,7 @@ EPDGUI_Keyboard::~EPDGUI_Keyboard() {
|
||||
for(int i = 0; i < 29; i++) {
|
||||
delete _btn[i];
|
||||
}
|
||||
for(int i = 0; i < 3; i++) {
|
||||
for(int i = 0; i < 2; i++) {
|
||||
delete _sw[i];
|
||||
}
|
||||
}
|
||||
@@ -162,7 +110,7 @@ void EPDGUI_Keyboard::Draw(m5epd_update_mode_t mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
for(int i = 0; i < 32; i++) {
|
||||
for(int i = 0; i < 31; i++) {
|
||||
_key[i]->Draw(mode);
|
||||
}
|
||||
}
|
||||
@@ -172,7 +120,7 @@ void EPDGUI_Keyboard::Draw(M5EPD_Canvas* canvas) {
|
||||
return;
|
||||
}
|
||||
|
||||
for(int i = 0; i < 32; i++) {
|
||||
for(int i = 0; i < 31; i++) {
|
||||
_key[i]->Draw(canvas);
|
||||
}
|
||||
}
|
||||
@@ -186,23 +134,37 @@ void EPDGUI_Keyboard::UpdateState(int16_t x, int16_t y) {
|
||||
return;
|
||||
}
|
||||
// log_d("UpdateState %d, %d", x, y);
|
||||
for(int i = 0; i < 32; i++) {
|
||||
for(int i = 0; i < 31; i++) {
|
||||
bool keypressed = _key[i]->isInBox(x, y);
|
||||
_key[i]->UpdateState(x, y);
|
||||
if(keypressed) {
|
||||
if(i < 26) {
|
||||
switch(_layout) {
|
||||
case kLayoutLowerAlpha: _data += kKeyAlphaMapLowerCase[i]; break;
|
||||
case kLayoutUpperAlpha: _data += kKeyAlphaMapUpperCase[i]; break;
|
||||
case kLayoutNumber: _data += kKeyAlphaMapNumber[i]; break;
|
||||
case kLayoutSymbol: _data += kKeyAlphaMapSymbol[i]; break;
|
||||
case kLayoutLowerAlpha:
|
||||
_data += kKeyAlphaMapLowerCase[i];
|
||||
break;
|
||||
case kLayoutUpperAlpha:
|
||||
_data += kKeyAlphaMapUpperCase[i];
|
||||
break;
|
||||
case kLayoutNumber:
|
||||
_data += kKeyAlphaMapNumber[i];
|
||||
break;
|
||||
case kLayoutSymbol:
|
||||
_data += kKeyAlphaMapSymbol[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch(i) {
|
||||
case kKeyBackspace: _data += "\u0008"; break;
|
||||
case kKeySpace: _data += " "; break;
|
||||
case kKeyWrap: _data += "\n"; break;
|
||||
case kKeyCase: {
|
||||
case kKeyBackspace:
|
||||
_data += "\u0008";
|
||||
break;
|
||||
case kKeySpace:
|
||||
_data += " ";
|
||||
break;
|
||||
case kKeyWrap:
|
||||
_data += "\n";
|
||||
break;
|
||||
case kKeyCase:
|
||||
if(_layout == kLayoutNumber || _layout == kLayoutSymbol) {
|
||||
if(_sw[kSWCase]->getState() == 1) {
|
||||
for(int j = 0; j < 26; j++) {
|
||||
@@ -235,8 +197,7 @@ void EPDGUI_Keyboard::UpdateState(int16_t x, int16_t y) {
|
||||
M5.EPD.UpdateFull(UPDATE_MODE_GL16);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kKeyNumber: {
|
||||
case kKeyNumber:
|
||||
if(_sw[kSWNumber]->getState() == 1) {
|
||||
_sw[kSWCase]->setState(0);
|
||||
_sw[kSWCase]->Canvas(0)->fillCanvas(0);
|
||||
@@ -268,7 +229,6 @@ void EPDGUI_Keyboard::UpdateState(int16_t x, int16_t y) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String EPDGUI_Keyboard::getData(void) {
|
||||
|
||||
@@ -11,7 +11,7 @@ public:
|
||||
static const uint32_t STYLE_DEFAULT = STYLE_INPUTMODE_NORMALTEXT;
|
||||
|
||||
public:
|
||||
EPDGUI_Keyboard(int16_t dir = 1, uint32_t style = STYLE_DEFAULT);
|
||||
EPDGUI_Keyboard(uint32_t style = STYLE_DEFAULT);
|
||||
~EPDGUI_Keyboard();
|
||||
void Draw(m5epd_update_mode_t mode = UPDATE_MODE_DU4);
|
||||
void Draw(M5EPD_Canvas* canvas);
|
||||
@@ -21,8 +21,8 @@ public:
|
||||
|
||||
private:
|
||||
EPDGUI_Button *_btn[29];
|
||||
EPDGUI_Switch *_sw[3];
|
||||
EPDGUI_Base *_key[32];
|
||||
EPDGUI_Switch *_sw[2];
|
||||
EPDGUI_Base *_key[31];
|
||||
String _data;
|
||||
uint8_t _layout = 0;
|
||||
|
||||
|
||||
@@ -39,26 +39,18 @@ void key_textsize_reset_cb(epdgui_args_vector_t &args) {
|
||||
((EPDGUI_Textbox*)(args[0]))->SetTextSize(textsize);
|
||||
}
|
||||
|
||||
Frame_Keyboard::Frame_Keyboard(bool isHorizontal) : Frame_Base() {
|
||||
Frame_Keyboard::Frame_Keyboard() : Frame_Base() {
|
||||
_frame_name = "Frame_Keyboard";
|
||||
if(isHorizontal) {
|
||||
inputbox = new EPDGUI_Textbox(84, 25, 712, 250);
|
||||
key_textclear = new EPDGUI_Button("CLR", 804, 25, 72, 120);
|
||||
key_textsize_plus = new EPDGUI_Button("+", 804, 157, 72, 40);
|
||||
key_textsize_reset = new EPDGUI_Button("26", 804, 196, 72, 40);
|
||||
key_textsize_minus = new EPDGUI_Button("-", 804, 235, 72, 40);
|
||||
} else {
|
||||
const uint16_t kKeyBaseY = 628;
|
||||
inputbox = new EPDGUI_Textbox(4, 100, 532, 512);
|
||||
key_textclear = new EPDGUI_Button("CLR", 4, kKeyBaseY, 260, 52);
|
||||
key_textsize_plus = new EPDGUI_Button("+", 448, kKeyBaseY, 88, 52);
|
||||
key_textsize_reset = new EPDGUI_Button("26", 360, kKeyBaseY, 88, 52);
|
||||
key_textsize_minus = new EPDGUI_Button("-", 272, kKeyBaseY, 88, 52);
|
||||
}
|
||||
|
||||
inputbox->SetState(EPDGUI_Textbox::EVENT_PRESSED);
|
||||
|
||||
keyboard = new EPDGUI_Keyboard(isHorizontal);
|
||||
keyboard = new EPDGUI_Keyboard();
|
||||
|
||||
key_textclear->AddArgs(EPDGUI_Button::EVENT_RELEASED, 0, (void*)inputbox);
|
||||
key_textclear->Bind(EPDGUI_Button::EVENT_RELEASED, key_textclear_cb);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
class Frame_Keyboard : public Frame_Base {
|
||||
public:
|
||||
Frame_Keyboard(bool isHorizontal = false);
|
||||
Frame_Keyboard();
|
||||
~Frame_Keyboard();
|
||||
int run();
|
||||
int init(epdgui_args_vector_t &args);
|
||||
|
||||
@@ -35,7 +35,7 @@ void key_setting_cb(epdgui_args_vector_t &args) {
|
||||
void key_keyboard_cb(epdgui_args_vector_t &args) {
|
||||
Frame_Base *frame = EPDGUI_GetFrame("Frame_Keyboard");
|
||||
if(frame == NULL) {
|
||||
frame = new Frame_Keyboard(0);
|
||||
frame = new Frame_Keyboard();
|
||||
EPDGUI_AddFrame("Frame_Keyboard", frame);
|
||||
}
|
||||
EPDGUI_PushFrame(frame);
|
||||
|
||||
@@ -6,21 +6,16 @@ void key_passwordclear_cb(epdgui_args_vector_t &args) {
|
||||
}
|
||||
|
||||
|
||||
Frame_WifiPassword::Frame_WifiPassword(bool isHorizontal) : Frame_Base() {
|
||||
Frame_WifiPassword::Frame_WifiPassword() : Frame_Base() {
|
||||
_frame_name = "Frame_WifiPassword";
|
||||
if(isHorizontal) {
|
||||
inputbox = new EPDGUI_Textbox(84, 25, 712, 250);
|
||||
key_textclear = new EPDGUI_Button("CLR", 804, 25, 72, 120);
|
||||
} else {
|
||||
const uint16_t kKeyBaseY = 176;
|
||||
inputbox = new EPDGUI_Textbox(4, 100, 532, 60);
|
||||
key_textclear = new EPDGUI_Button("CLR", 4, kKeyBaseY, 260, 52);
|
||||
}
|
||||
|
||||
inputbox->SetTextMargin(8, 15, 8, 8);
|
||||
inputbox->SetState(EPDGUI_Textbox::EVENT_PRESSED);
|
||||
|
||||
keyboard = new EPDGUI_Keyboard(isHorizontal, EPDGUI_Keyboard::STYLE_INPUTMODE_NEEDCONFIRM);
|
||||
keyboard = new EPDGUI_Keyboard(EPDGUI_Keyboard::STYLE_INPUTMODE_NEEDCONFIRM);
|
||||
|
||||
key_textclear->AddArgs(EPDGUI_Button::EVENT_RELEASED, 0, (void*)inputbox);
|
||||
key_textclear->Bind(EPDGUI_Button::EVENT_RELEASED, key_passwordclear_cb);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
class Frame_WifiPassword : public Frame_Base {
|
||||
public:
|
||||
Frame_WifiPassword(bool isHorizontal = false);
|
||||
Frame_WifiPassword();
|
||||
~Frame_WifiPassword();
|
||||
int run();
|
||||
int init(epdgui_args_vector_t &args);
|
||||
|
||||
@@ -21,7 +21,7 @@ void key_wifi_cb(epdgui_args_vector_t &args) {
|
||||
_connect_key = (EPDGUI_Button*)(args[0]);
|
||||
Frame_Base *frame = EPDGUI_GetFrame("Frame_WifiPassword");
|
||||
if(frame == NULL) {
|
||||
frame = new Frame_WifiPassword(false);
|
||||
frame = new Frame_WifiPassword();
|
||||
EPDGUI_AddFrame("Frame_WifiPassword", frame);
|
||||
}
|
||||
EPDGUI_PushFrame(frame);
|
||||
|
||||
@@ -98,7 +98,7 @@ void SysInit_Start(void) {
|
||||
EPDGUI_AddFrame("Frame_Settings", frame_setting);
|
||||
Frame_Settings_Wallpaper *frame_wallpaper = new Frame_Settings_Wallpaper();
|
||||
EPDGUI_AddFrame("Frame_Settings_Wallpaper", frame_wallpaper);
|
||||
Frame_Keyboard *frame_keyboard = new Frame_Keyboard(0);
|
||||
Frame_Keyboard *frame_keyboard = new Frame_Keyboard();
|
||||
EPDGUI_AddFrame("Frame_Keyboard", frame_keyboard);
|
||||
Frame_WifiScan *frame_wifiscan = new Frame_WifiScan();
|
||||
EPDGUI_AddFrame("Frame_WifiScan", frame_wifiscan);
|
||||
|
||||
Reference in New Issue
Block a user