void EditField::UpdateTexture() throw() { try { Font& font = GetFont(); Size s = GetSize(); m_text.UpdateText(font, GetDisplayText(), s, TextTexture::textAlignLeft, Color::Black(), Color::White()); // TODO settable colors UpdateCaretPos(); } catch (...) { } }
void CEditorView::UpdateEditor() { //save current caret position. int x = m_pTermData->m_CaretPos.x; int y = m_pTermData->m_CaretPos.y; m_pTermData->m_CaretPos.x = 0; m_pTermData->m_CaretPos.y = 0; //clear screen. m_pTermData->ClearScreen(2); GetEditor()->EditorActions(CEditor::Load_Editor_Text); //reset caret position m_pTermData->m_CaretPos.x = x; m_pTermData->m_CaretPos.y = y; UpdateCaretPos(); }
bool EditField::OnKeyboardEvent(bool bKeyDown, unsigned int sym, unsigned int mod) { if (!bKeyDown) return true; switch (sym) { case SDLK_LEFT: if (m_uiCaretPos > 0) m_uiCaretPos--; UpdateCaretPos(); break; case SDLK_RIGHT: if (m_uiCaretPos < static_cast<unsigned int>(m_cszText.GetLength())) m_uiCaretPos++; UpdateCaretPos(); break; case SDLK_HOME: m_uiCaretPos = 0; UpdateCaretPos(); break; case SDLK_END: m_uiCaretPos = m_cszText.GetLength(); UpdateCaretPos(); break; case SDLK_DELETE: if (m_uiCaretPos < static_cast<unsigned int>(m_cszText.GetLength())) { m_cszText.Delete(m_uiCaretPos); UpdateTexture(); } break; case SDLK_BACKSPACE: if (m_uiCaretPos > 0) { m_cszText.Delete(--m_uiCaretPos); UpdateTexture(); } break; case SDLK_ESCAPE: GetWindowManager().SetFocus(); m_bFocused = false; break; default: if (IsAllowedChar(sym, mod)) { unsigned int ch = sym; if (sym >= SDLK_a && sym <= SDLK_z && (mod & KMOD_SHIFT) != 0) ch -= 32; // make uppercase m_cszText.Insert(m_uiCaretPos++, static_cast<TCHAR>(ch)); UpdateTexture(); } break; } // update text attribute SetAttr(EditFieldAttr::Text, m_cszText, true); return true; }