diff options
Diffstat (limited to 'gui')
-rw-r--r-- | gui/input.cpp | 58 | ||||
-rw-r--r-- | gui/objects.hpp | 7 |
2 files changed, 32 insertions, 33 deletions
diff --git a/gui/input.cpp b/gui/input.cpp index 4bf01ada2..ec370abe5 100644 --- a/gui/input.cpp +++ b/gui/input.cpp @@ -71,6 +71,7 @@ GUIInput::GUIInput(xml_node<>* node) CursorWidth = 3; ConvertStrToColor("black", &mBackgroundColor); ConvertStrToColor("white", &mCursorColor); + mValue = ""; displayValue = ""; if (!node) @@ -124,10 +125,6 @@ GUIInput::GUIInput(xml_node<>* node) mFontHeight = mFont->GetHeight(); } - child = FindNode(node, "text"); - if (child) mText = child->value(); - mLastValue = gui_parse_text(mText); - child = FindNode(node, "data"); if (child) { @@ -196,7 +193,7 @@ void GUIInput::HandleTextLocation(int x) { lastX = x; } -void GUIInput::UpdateTextWidth() { +void GUIInput::UpdateDisplayText() { void* fontResource = NULL; if (mFont) { @@ -206,14 +203,17 @@ void GUIInput::UpdateTextWidth() { return; } - DataManager::GetValue(mVariable, displayValue); + DataManager::GetValue(mVariable, mValue); if (HasMask) { - int index, string_size = displayValue.size(); + int index, string_size = mValue.size(); string maskedValue; for (index=0; index<string_size; index++) maskedValue += mMask; displayValue = maskedValue; + } else { + displayValue = mValue; } + textWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource); } @@ -274,19 +274,19 @@ void GUIInput::HandleCursorByText() { return; } - int cursorWidth = textWidth; + int cursorTextWidth = textWidth; // width of text to the left of the cursor if (mCursorLocation != -1) { string cursorDisplay = displayValue; cursorDisplay.resize(mCursorLocation); - cursorWidth = gr_ttf_measureEx(cursorDisplay.c_str(), fontResource); + cursorTextWidth = gr_ttf_measureEx(cursorDisplay.c_str(), fontResource); } - cursorX = mRenderX + cursorWidth + scrollingX; + cursorX = mRenderX + cursorTextWidth + scrollingX; if (cursorX >= mRenderX + mRenderW) { - scrollingX = mRenderW - cursorWidth; + scrollingX = mRenderW - cursorTextWidth; cursorX = mRenderX + mRenderW - CursorWidth; } else if (cursorX < mRenderX) { - scrollingX = cursorWidth * -1; + scrollingX = cursorTextWidth * -1; cursorX = mRenderX; } } @@ -425,14 +425,14 @@ int GUIInput::NotifyVarChange(const std::string& varName, const std::string& val if (varName == mVariable) { if (!isLocalChange) { - UpdateTextWidth(); + UpdateDisplayText(); HandleTextLocation(TW_INPUT_NO_UPDATE); } else isLocalChange = false; return 0; } if (varName.empty()) { - UpdateTextWidth(); + UpdateDisplayText(); HandleTextLocation(TW_INPUT_NO_UPDATE); HandleCursorByText(); } @@ -497,16 +497,16 @@ int GUIInput::NotifyCharInput(int key) if (HasInputFocus) { if (key == KEYBOARD_BACKSPACE) { //Backspace - if (displayValue.size() > 0 && mCursorLocation != 0) { + if (mValue.size() > 0 && mCursorLocation != 0) { if (mCursorLocation == -1) { - displayValue.resize(displayValue.size() - 1); + mValue.resize(mValue.size() - 1); } else { - displayValue.erase(mCursorLocation - 1, 1); + mValue.erase(mCursorLocation - 1, 1); mCursorLocation--; } isLocalChange = true; - DataManager::SetValue(mVariable, displayValue); - UpdateTextWidth(); + DataManager::SetValue(mVariable, mValue); + UpdateDisplayText(); HandleTextLocation(TW_INPUT_NO_UPDATE); HandleCursorByText(); } @@ -515,15 +515,15 @@ int GUIInput::NotifyCharInput(int key) isLocalChange = true; if (mCursorLocation == -1) { DataManager::SetValue (mVariable, ""); - displayValue = ""; + mValue = ""; textWidth = 0; mCursorLocation = -1; } else { - displayValue.erase(0, mCursorLocation); - DataManager::SetValue(mVariable, displayValue); - UpdateTextWidth(); + mValue.erase(0, mCursorLocation); + DataManager::SetValue(mVariable, mValue); mCursorLocation = 0; } + UpdateDisplayText(); cursorX = mRenderX; scrollingX = 0; mRendered = false; @@ -536,24 +536,24 @@ int GUIInput::NotifyCharInput(int key) if (HasDisabled && DisabledList.find((char)key) != string::npos) { return 0; } - if (MaxLen != 0 && displayValue.size() >= MaxLen) { + if (MaxLen != 0 && mValue.size() >= MaxLen) { return 0; } if (mCursorLocation == -1) { - displayValue += key; + mValue += key; } else { - displayValue.insert(mCursorLocation, 1, key); + mValue.insert(mCursorLocation, 1, key); mCursorLocation++; } isLocalChange = true; - DataManager::SetValue(mVariable, displayValue); - UpdateTextWidth(); + DataManager::SetValue(mVariable, mValue); + UpdateDisplayText(); HandleTextLocation(TW_INPUT_NO_UPDATE); HandleCursorByText(); } else if (key == KEYBOARD_ACTION) { // Action if (mAction) { - unsigned inputLen = displayValue.length(); + unsigned inputLen = mValue.length(); if (inputLen < MinLen) return 0; else if (MaxLen != 0 && inputLen > MaxLen) diff --git a/gui/objects.hpp b/gui/objects.hpp index 7913b36cb..84a9e5ecf 100644 --- a/gui/objects.hpp +++ b/gui/objects.hpp @@ -1000,7 +1000,7 @@ protected: // Handles displaying the text properly when chars are added, deleted, or for scrolling void HandleTextLocation(int x); - void UpdateTextWidth(); + void UpdateDisplayText(); void HandleCursorByTouch(int x); void HandleCursorByText(); @@ -1010,15 +1010,14 @@ protected: ImageResource* mBackground; ImageResource* mCursor; FontResource* mFont; - std::string mText; - std::string mLastValue; std::string mVariable; std::string mMask; + std::string mValue; std::string displayValue; COLOR mBackgroundColor; COLOR mCursorColor; int scrollingX; - int cursorX; + int cursorX; // actual x axis location of the cursor int lastX; int mCursorLocation; int mBackgroundX, mBackgroundY, mBackgroundW, mBackgroundH; |