diff options
author | Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com> | 2016-04-11 14:23:22 +0200 |
---|---|---|
committer | Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com> | 2016-04-13 09:31:32 +0000 |
commit | 5391f3c72f884fdea0861ceca814d247ef552397 (patch) | |
tree | 529add8f66b61ee9d6cce8492b43137928f4ab98 /src/widgets/widgets | |
parent | ab67a5b7b631709aae779c767a903b8982fa7f8e (diff) |
QLineEdit: add support for Qt::ImAnchorRectangle
Change-Id: I52e15aa40af5ff77306c43209af87a3e727d2bdb
Reviewed-by: Jan Arve Sæther <jan-arve.saether@theqtcompany.com>
Diffstat (limited to 'src/widgets/widgets')
-rw-r--r-- | src/widgets/widgets/qlineedit.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qwidgetlinecontrol.cpp | 33 | ||||
-rw-r--r-- | src/widgets/widgets/qwidgetlinecontrol_p.h | 2 |
3 files changed, 31 insertions, 6 deletions
diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp index 5e88c2034a..499710d18e 100644 --- a/src/widgets/widgets/qlineedit.cpp +++ b/src/widgets/widgets/qlineedit.cpp @@ -1758,6 +1758,8 @@ QVariant QLineEdit::inputMethodQuery(Qt::InputMethodQuery property, QVariant arg switch(property) { case Qt::ImCursorRectangle: return d->cursorRect(); + case Qt::ImAnchorRectangle: + return d->adjustedControlRect(d->control->anchorRect()); case Qt::ImFont: return font(); case Qt::ImCursorPosition: { diff --git a/src/widgets/widgets/qwidgetlinecontrol.cpp b/src/widgets/widgets/qwidgetlinecontrol.cpp index af8e5a8b42..24edca172b 100644 --- a/src/widgets/widgets/qwidgetlinecontrol.cpp +++ b/src/widgets/widgets/qwidgetlinecontrol.cpp @@ -407,16 +407,14 @@ int QWidgetLineControl::xToPos(int x, QTextLine::CursorPosition betweenOrOn) con /*! \internal - Returns the bounds of the current cursor, as defined as a - between characters cursor. + Returns the bounds of the given text position. */ -QRect QWidgetLineControl::cursorRect() const +QRect QWidgetLineControl::rectForPos(int pos) const { QTextLine l = textLayout()->lineAt(0); - int c = m_cursor; if (m_preeditCursor != -1) - c += m_preeditCursor; - int cix = qRound(l.cursorToX(c)); + pos += m_preeditCursor; + int cix = qRound(l.cursorToX(pos)); int w = m_cursorWidth; int ch = l.height() + 1; @@ -426,6 +424,29 @@ QRect QWidgetLineControl::cursorRect() const /*! \internal + Returns the bounds of the current cursor, as defined as a + between characters cursor. +*/ +QRect QWidgetLineControl::cursorRect() const +{ + return rectForPos(m_cursor); +} + +/*! + \internal + + Returns the bounds of the current anchor +*/ +QRect QWidgetLineControl::anchorRect() const +{ + if (!hasSelectedText()) + return cursorRect(); + return rectForPos(m_selstart < m_selend ? m_selstart : m_selend); +} + +/*! + \internal + Fixes the current text so that it is valid given any set validators. Returns \c true if the text was changed. Otherwise returns \c false. diff --git a/src/widgets/widgets/qwidgetlinecontrol_p.h b/src/widgets/widgets/qwidgetlinecontrol_p.h index 6fadb64e0c..8b723b0224 100644 --- a/src/widgets/widgets/qwidgetlinecontrol_p.h +++ b/src/widgets/widgets/qwidgetlinecontrol_p.h @@ -212,7 +212,9 @@ public: void end(bool mark) { moveCursor(text().length(), mark); } int xToPos(int x, QTextLine::CursorPosition = QTextLine::CursorBetweenCharacters) const; + QRect rectForPos(int pos) const; QRect cursorRect() const; + QRect anchorRect() const; qreal cursorToX(int cursor) const { return m_textLayout.lineAt(0).cursorToX(cursor); } qreal cursorToX() const |