mirror of https://github.com/buggins/dlangui.git
EnsureCaretVisible for word wrap
This commit is contained in:
parent
3463fec39d
commit
d2caa2a1a7
|
@ -1266,6 +1266,7 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
|
||||||
|
|
||||||
protected int _firstVisibleLine;
|
protected int _firstVisibleLine;
|
||||||
|
|
||||||
|
protected int caretHeightOffset;
|
||||||
/// returns cursor rectangle
|
/// returns cursor rectangle
|
||||||
protected Rect caretRect() {
|
protected Rect caretRect() {
|
||||||
Rect caretRc = textPosToClient(_caretPos);
|
Rect caretRc = textPosToClient(_caretPos);
|
||||||
|
@ -1291,6 +1292,7 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
|
||||||
xOffset = curSpan.accumulation(wrapLine, LineSpan.WrapPointInfo.Width);
|
xOffset = curSpan.accumulation(wrapLine, LineSpan.WrapPointInfo.Width);
|
||||||
}
|
}
|
||||||
auto yOffset = -1 * _lineHeight * (wrapsUpTo(_caretPos.line) + wrapLine);
|
auto yOffset = -1 * _lineHeight * (wrapsUpTo(_caretPos.line) + wrapLine);
|
||||||
|
caretHeightOffset = yOffset;
|
||||||
caretRc.offset(_clientRect.left - xOffset, _clientRect.top - yOffset);
|
caretRc.offset(_clientRect.left - xOffset, _clientRect.top - yOffset);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2743,6 +2745,22 @@ class EditBox : EditWidgetBase {
|
||||||
_firstVisibleLine = maxFirstVisibleLine;
|
_firstVisibleLine = maxFirstVisibleLine;
|
||||||
measureVisibleText();
|
measureVisibleText();
|
||||||
invalidate();
|
invalidate();
|
||||||
|
} else if(_wordWrap && !(_firstVisibleLine > maxFirstVisibleLine)) {
|
||||||
|
//For wordwrap mode, move down sooner
|
||||||
|
int offsetLines = -1 * caretHeightOffset / _lineHeight;
|
||||||
|
//Log.d("offsetLines: ", offsetLines);
|
||||||
|
if (_caretPos.line >= _firstVisibleLine + visibleLines - offsetLines)
|
||||||
|
{
|
||||||
|
_firstVisibleLine = _caretPos.line - visibleLines + 1 + offsetLines;
|
||||||
|
if (center)
|
||||||
|
_firstVisibleLine += visibleLines / 2;
|
||||||
|
if (_firstVisibleLine > maxFirstVisibleLine)
|
||||||
|
_firstVisibleLine = maxFirstVisibleLine;
|
||||||
|
if (_firstVisibleLine < 0)
|
||||||
|
_firstVisibleLine = 0;
|
||||||
|
measureVisibleText();
|
||||||
|
invalidate();
|
||||||
|
}
|
||||||
} else if (_caretPos.line >= _firstVisibleLine + visibleLines) {
|
} else if (_caretPos.line >= _firstVisibleLine + visibleLines) {
|
||||||
_firstVisibleLine = _caretPos.line - visibleLines + 1;
|
_firstVisibleLine = _caretPos.line - visibleLines + 1;
|
||||||
if (center)
|
if (center)
|
||||||
|
|
Loading…
Reference in New Issue