Add support to serialize special unicode chars in ui::Accelerator

This commit is contained in:
David Capello 2014-11-06 09:37:07 -03:00
parent 6d255dd3ab
commit ba73bcafed

View File

@ -76,32 +76,40 @@ Accelerator::Accelerator(const std::string& str)
// Scancode // Scancode
// Word with one character // Word with one character
else if (tok.size() == 1) { else if (base::utf8_length(tok) == 1) {
if ((tok[0] >= 'a') && (tok[0] <= 'z')) { std::wstring wstr = base::from_utf8(tok);
m_unicodeChar = tok[0]; if (wstr.size() != 1) {
} ASSERT(false && "Something wrong converting utf-8 to wchar string");
else { continue;
m_unicodeChar = tok[0];
} }
if ((tok[0] >= 'a') && (tok[0] <= 'z')) wchar_t wchr = wstr[0];
m_scancode = (KeyScancode)((int)kKeyA + std::tolower(tok[0]) - 'a'); wchr = tolower(wchr);
else if ((tok[0] >= '0') && (tok[0] <= '9'))
m_scancode = (KeyScancode)((int)kKey0 + tok[0] - '0'); if ((wchr >= 'a') && (wchr <= 'z')) {
m_unicodeChar = wchr;
m_scancode = (KeyScancode)((int)kKeyA + wchr - 'a');
}
else { else {
switch (tok[0]) { m_unicodeChar = wchr;
case '~': m_scancode = kKeyTilde; break;
case '-': m_scancode = kKeyMinus; break; if ((wchr >= '0') && (wchr <= '9'))
case '=': m_scancode = kKeyEquals; break; m_scancode = (KeyScancode)((int)kKey0 + wchr - '0');
case '[': m_scancode = kKeyOpenbrace; break; else {
case ']': m_scancode = kKeyClosebrace; break; switch (wchr) {
case ';': m_scancode = kKeyColon; break; case '~': m_scancode = kKeyTilde; break;
case '\'': m_scancode = kKeyQuote; break; case '-': m_scancode = kKeyMinus; break;
case '\\': m_scancode = kKeyBackslash; break; case '=': m_scancode = kKeyEquals; break;
case ',': m_scancode = kKeyComma; break; case '[': m_scancode = kKeyOpenbrace; break;
case '.': m_scancode = kKeyStop; break; case ']': m_scancode = kKeyClosebrace; break;
case '/': m_scancode = kKeySlash; break; case ';': m_scancode = kKeyColon; break;
case '*': m_scancode = kKeyAsterisk; break; case '\'': m_scancode = kKeyQuote; break;
case '\\': m_scancode = kKeyBackslash; break;
case ',': m_scancode = kKeyComma; break;
case '.': m_scancode = kKeyStop; break;
case '/': m_scancode = kKeySlash; break;
case '*': m_scancode = kKeyAsterisk; break;
}
} }
} }
} }