summaryrefslogtreecommitdiffstats
path: root/gui
diff options
context:
space:
mode:
Diffstat (limited to 'gui')
-rw-r--r--gui/input.cpp58
-rw-r--r--gui/objects.hpp7
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;