summaryrefslogtreecommitdiff
path: root/glcdskin
diff options
context:
space:
mode:
authormrwastl <mrwastl@users.sourceforge.net>2011-06-05 18:33:23 +0200
committermrwastl <mrwastl@users.sourceforge.net>2011-06-05 18:33:23 +0200
commit245d1001901b69ded9dff996f7b09ac61ec5bed1 (patch)
treeaef595a3cb995da34c586dfa8124601b66837412 /glcdskin
parent26f096b5cbf5f5102ce8bd24dff50b9ce7ecc558 (diff)
downloadgraphlcd-base-245d1001901b69ded9dff996f7b09ac61ec5bed1.tar.gz
graphlcd-base-245d1001901b69ded9dff996f7b09ac61ec5bed1.tar.bz2
bug fixes: offset fix when using #variables in <text/>, scrolling texts now stay correctly in the object area (no more drawing outside the right side of the object area)
Diffstat (limited to 'glcdskin')
-rw-r--r--glcdskin/string.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/glcdskin/string.c b/glcdskin/string.c
index f2195c6..8eaca44 100644
--- a/glcdskin/string.c
+++ b/glcdskin/string.c
@@ -136,7 +136,7 @@ bool cSkinString::Parse(const std::string & Text, bool Translate)
// add #VARNAME#
mText.append(varNameStart, (ptr - varNameStart));
mText.append("#");
- offset ++; // # adds one character -> fix offset
+ offset +=2; // adds two '#' -> fix offset
ptr--; // we'd be at the correct position now but the for-loop does a ++ptr -> fix it by stepping back one char
last = ptr + 1;
}
@@ -236,20 +236,21 @@ bool cSkinString::Parse(const std::string & Text, bool Translate)
cType cSkinString::Evaluate(void) const
{
- std::string result_raw = "", result_trans = "";
- int offset = 0;
-
if (mText.length() == 0 && mTokens.size() == 1)
return mSkin->Config().GetToken(mTokens[0]);
- for (uint32_t i = 0; i < mTokens.size(); ++i) {
- result_raw.append(mText.c_str() + offset, mTokens[i].Offset - offset);
+ std::string result_raw = "";
+ int offset = 0;
+ for (uint32_t i = 0; i < mTokens.size(); i++) {
+ result_raw.append(mText.substr(offset, mTokens[i].Offset - offset) );
+ std::string bla = mSkin->Config().GetToken(mTokens[i]);
result_raw.append(mSkin->Config().GetToken(mTokens[i]));
offset = mTokens[i].Offset;
}
result_raw.append(mText.c_str() + offset);
// replace variable placeholders (#VARNAME#) with corresponding values
+ std::string result_trans = "";
size_t idxstart = 0, idxend = 0;
size_t pos = 0;
while ( (idxstart=result_raw.find("#", idxstart)) != std::string::npos ) {