Commit 4f01ee6a authored by hybrid's avatar hybrid

Autoscroll bugfix by Nox.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@2305 dfc29bdd-3216-0410-991c-e03cc46cb475
parent e7c19f9e
...@@ -28,10 +28,10 @@ namespace gui ...@@ -28,10 +28,10 @@ namespace gui
{ {
//! constructor //! constructor
CGUIEditBox::CGUIEditBox(const wchar_t* text, bool border, IGUIEnvironment* environment, CGUIEditBox::CGUIEditBox(const wchar_t* text, bool border,
IGUIElement* parent, s32 id, IGUIEnvironment* environment, IGUIElement* parent, s32 id,
const core::rect<s32>& rectangle) const core::rect<s32>& rectangle)
: IGUIEditBox(environment, parent, id, rectangle), MouseMarking(false), : IGUIEditBox(environment, parent, id, rectangle), MouseMarking(false),
Border(border), OverrideColorEnabled(false), MarkBegin(0), MarkEnd(0), Border(border), OverrideColorEnabled(false), MarkBegin(0), MarkEnd(0),
OverrideColor(video::SColor(101,255,255,255)), OverrideFont(0), LastBreakFont(0), OverrideColor(video::SColor(101,255,255,255)), OverrideFont(0), LastBreakFont(0),
Operator(0), BlinkStartTime(0), CursorPos(0), HScrollPos(0), VScrollPos(0), Max(0), Operator(0), BlinkStartTime(0), CursorPos(0), HScrollPos(0), VScrollPos(0), Max(0),
...@@ -252,8 +252,8 @@ bool CGUIEditBox::processKey(const SEvent& event) ...@@ -252,8 +252,8 @@ bool CGUIEditBox::processKey(const SEvent& event)
// copy to clipboard // copy to clipboard
if (!PasswordBox && Operator && MarkBegin != MarkEnd) if (!PasswordBox && Operator && MarkBegin != MarkEnd)
{ {
s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
core::stringc s; core::stringc s;
s = Text.subString(realmbgn, realmend - realmbgn).c_str(); s = Text.subString(realmbgn, realmend - realmbgn).c_str();
...@@ -264,8 +264,8 @@ bool CGUIEditBox::processKey(const SEvent& event) ...@@ -264,8 +264,8 @@ bool CGUIEditBox::processKey(const SEvent& event)
// cut to the clipboard // cut to the clipboard
if (!PasswordBox && Operator && MarkBegin != MarkEnd) if (!PasswordBox && Operator && MarkBegin != MarkEnd)
{ {
s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
// copy // copy
core::stringc sc; core::stringc sc;
...@@ -294,8 +294,8 @@ bool CGUIEditBox::processKey(const SEvent& event) ...@@ -294,8 +294,8 @@ bool CGUIEditBox::processKey(const SEvent& event)
// paste from the clipboard // paste from the clipboard
if (Operator) if (Operator)
{ {
s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
// add new character // add new character
const c8* p = Operator->getTextFromClipboard(); const c8* p = Operator->getTextFromClipboard();
...@@ -561,8 +561,8 @@ bool CGUIEditBox::processKey(const SEvent& event) ...@@ -561,8 +561,8 @@ bool CGUIEditBox::processKey(const SEvent& event)
if (MarkBegin != MarkEnd) if (MarkBegin != MarkEnd)
{ {
// delete marked text // delete marked text
s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
s = Text.subString(0, realmbgn); s = Text.subString(0, realmbgn);
s.append( Text.subString(realmend, Text.size()-realmend) ); s.append( Text.subString(realmend, Text.size()-realmend) );
...@@ -601,8 +601,8 @@ bool CGUIEditBox::processKey(const SEvent& event) ...@@ -601,8 +601,8 @@ bool CGUIEditBox::processKey(const SEvent& event)
if (MarkBegin != MarkEnd) if (MarkBegin != MarkEnd)
{ {
// delete marked text // delete marked text
s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
s = Text.subString(0, realmbgn); s = Text.subString(0, realmbgn);
s.append( Text.subString(realmend, Text.size()-realmend) ); s.append( Text.subString(realmend, Text.size()-realmend) );
...@@ -679,7 +679,7 @@ void CGUIEditBox::draw() ...@@ -679,7 +679,7 @@ void CGUIEditBox::draw()
if (!IsVisible) if (!IsVisible)
return; return;
bool focus = Environment->hasFocus(this); const bool focus = Environment->hasFocus(this);
IGUISkin* skin = Environment->getSkin(); IGUISkin* skin = Environment->getSkin();
if (!skin) if (!skin)
...@@ -724,17 +724,17 @@ void CGUIEditBox::draw() ...@@ -724,17 +724,17 @@ void CGUIEditBox::draw()
core::stringw s, s2; core::stringw s, s2;
// get mark position // get mark position
bool ml = (!PasswordBox && (WordWrap || MultiLine)); const bool ml = (!PasswordBox && (WordWrap || MultiLine));
s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
s32 hlineStart = ml ? getLineFromPos(realmbgn) : 0; const s32 hlineStart = ml ? getLineFromPos(realmbgn) : 0;
s32 hlineCount = ml ? getLineFromPos(realmend) - hlineStart + 1 : 1; const s32 hlineCount = ml ? getLineFromPos(realmend) - hlineStart + 1 : 1;
s32 lineCount = ml ? BrokenText.size() : 1; const s32 lineCount = ml ? BrokenText.size() : 1;
// Save the override color information. // Save the override color information.
// Then, alter it if the edit box is disabled. // Then, alter it if the edit box is disabled.
bool prevOver = OverrideColorEnabled; const bool prevOver = OverrideColorEnabled;
video::SColor prevColor = OverrideColor; const video::SColor prevColor = OverrideColor;
if (Text.size()) if (Text.size())
{ {
...@@ -999,10 +999,7 @@ s32 CGUIEditBox::getCursorPos(s32 x, s32 y) ...@@ -999,10 +999,7 @@ s32 CGUIEditBox::getCursorPos(s32 x, s32 y)
if (!OverrideFont) if (!OverrideFont)
font = skin->getFont(); font = skin->getFont();
u32 lineCount = 1; const u32 lineCount = (WordWrap || MultiLine) ? BrokenText.size() : 1;
if (WordWrap || MultiLine)
lineCount = BrokenText.size();
core::stringw *txtLine=0; core::stringw *txtLine=0;
s32 startPos=0; s32 startPos=0;
...@@ -1157,7 +1154,6 @@ void CGUIEditBox::breakText() ...@@ -1157,7 +1154,6 @@ void CGUIEditBox::breakText()
void CGUIEditBox::setTextRect(s32 line) void CGUIEditBox::setTextRect(s32 line)
{ {
core::dimension2du d; core::dimension2du d;
s32 lineCount = 1;
IGUISkin* skin = Environment->getSkin(); IGUISkin* skin = Environment->getSkin();
if (!skin) if (!skin)
...@@ -1169,9 +1165,9 @@ void CGUIEditBox::setTextRect(s32 line) ...@@ -1169,9 +1165,9 @@ void CGUIEditBox::setTextRect(s32 line)
return; return;
// get text dimension // get text dimension
const u32 lineCount = (WordWrap || MultiLine) ? BrokenText.size() : 1;
if (WordWrap || MultiLine) if (WordWrap || MultiLine)
{ {
lineCount = BrokenText.size();
d = font->getDimension(BrokenText[line].c_str()); d = font->getDimension(BrokenText[line].c_str());
} }
else else
...@@ -1259,8 +1255,8 @@ void CGUIEditBox::inputChar(wchar_t c) ...@@ -1259,8 +1255,8 @@ void CGUIEditBox::inputChar(wchar_t c)
if (MarkBegin != MarkEnd) if (MarkBegin != MarkEnd)
{ {
// replace marked text // replace marked text
s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
s = Text.subString(0, realmbgn); s = Text.subString(0, realmbgn);
s.append(c); s.append(c);
...@@ -1304,7 +1300,7 @@ void CGUIEditBox::calculateScrollPos() ...@@ -1304,7 +1300,7 @@ void CGUIEditBox::calculateScrollPos()
if (!skin) if (!skin)
return; return;
IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont(); IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont();
if (!OverrideFont) if (!font)
return; return;
core::stringw *txtLine = MultiLine ? &BrokenText[cursLine] : &Text; core::stringw *txtLine = MultiLine ? &BrokenText[cursLine] : &Text;
...@@ -1323,7 +1319,6 @@ void CGUIEditBox::calculateScrollPos() ...@@ -1323,7 +1319,6 @@ void CGUIEditBox::calculateScrollPos()
HScrollPos = 0; HScrollPos = 0;
// todo: adjust scrollbar // todo: adjust scrollbar
} }
// vertical scroll position // vertical scroll position
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment