OSDN Git Service

remove redundant QTextLayout cursor positioning methods
authorIvailo Monev <xakepa10@gmail.com>
Tue, 11 Jan 2022 04:25:46 +0000 (06:25 +0200)
committerIvailo Monev <xakepa10@gmail.com>
Tue, 11 Jan 2022 04:39:21 +0000 (06:39 +0200)
bad API.. bad API! only the initial cursor position and alignment should
be different for RTL layout, left is left either way

https://ibb.co/9vrrqhW

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/gui/text/qtextdocument_p.cpp
src/gui/text/qtextengine.cpp
src/gui/text/qtextengine_p.h
src/gui/text/qtextlayout.cpp
src/gui/text/qtextlayout.h
src/gui/widgets/qlinecontrol_p.h

index e1c23ba..b9690fb 100644 (file)
@@ -1358,14 +1358,14 @@ int QTextDocumentPrivate::leftCursorPosition(int position) const
 {
     QTextBlock it = blocksFind(position);
     int start = it.position();
-    return it.layout()->leftCursorPosition(position-start) + start;
+    return it.layout()->previousCursorPosition(position-start) + start;
 }
 
 int QTextDocumentPrivate::rightCursorPosition(int position) const
 {
     QTextBlock it = blocksFind(position);
     int start = it.position();
-    return it.layout()->rightCursorPosition(position-start) + start;
+    return it.layout()->nextCursorPosition(position-start) + start;
 }
 
 void QTextDocumentPrivate::changeObjectFormat(QTextObject *obj, int format)
index 0408e3e..30e8362 100644 (file)
@@ -1364,35 +1364,6 @@ int QTextEngine::positionInLigature(const QScriptItem *si, int end,
     return si->position + end;
 }
 
-int QTextEngine::previousLogicalPosition(int oldPos) const
-{
-    const HB_CharAttributes *attrs = attributes();
-    if (!attrs || oldPos < 0)
-        return oldPos;
-
-    if (oldPos <= 0)
-        return 0;
-    oldPos--;
-    while (oldPos && !attrs[oldPos].charStop)
-        oldPos--;
-    return oldPos;
-}
-
-int QTextEngine::nextLogicalPosition(int oldPos) const
-{
-    const HB_CharAttributes *attrs = attributes();
-    int len = block.isValid() ? block.length() - 1
-                              : layoutData->string.length();
-    Q_ASSERT(len <= layoutData->string.length());
-    if (!attrs || oldPos < 0 || oldPos >= len)
-        return oldPos;
-
-    oldPos++;
-    while (oldPos < len && !attrs[oldPos].charStop)
-        oldPos++;
-    return oldPos;
-}
-
 int QTextEngine::lineNumberForTextPosition(int pos)
 {
     if (!layoutData)
@@ -1407,16 +1378,6 @@ int QTextEngine::lineNumberForTextPosition(int pos)
     return -1;
 }
 
-int QTextEngine::positionAfterVisualMovement(int pos, QTextCursor::MoveOperation op)
-{
-    if (!layoutData)
-        itemize();
-
-    bool moveRight = (op == QTextCursor::Right);
-
-    return (moveRight ? nextLogicalPosition(pos) : previousLogicalPosition(pos));
-}
-
 QTextItemInt::QTextItemInt(const QScriptItem &si, QFont *font, const QTextCharFormat &format)
     : justified(false), underlineStyle(QTextCharFormat::NoUnderline), charFormat(format),
       num_chars(0), chars(0), logClusters(0), f(0), fontEngine(0)
index 4b962a9..f7264da 100644 (file)
@@ -497,10 +497,7 @@ public:
 
     QFixed offsetInLigature(const QScriptItem *si, int pos, int max, int glyph_pos);
     int positionInLigature(const QScriptItem *si, int end, QFixed x, QFixed edge, int glyph_pos, bool cursorOnCharacter);
-    int previousLogicalPosition(int oldPos) const;
-    int nextLogicalPosition(int oldPos) const;
     int lineNumberForTextPosition(int pos);
-    int positionAfterVisualMovement(int oldPos, QTextCursor::MoveOperation op);
 
 private:
     void setBoundary(int strPos) const;
index fbce678..9f2338a 100644 (file)
@@ -698,38 +698,6 @@ int QTextLayout::previousCursorPosition(int oldPos, CursorMode mode) const
     return oldPos;
 }
 
-/*!
-    \since 4.8
-
-    Returns the cursor position to the right of \a oldPos, next to it.
-    The position is dependent on the visual position of characters, after
-    bi-directional reordering.
-
-    \sa leftCursorPosition(), nextCursorPosition()
-*/
-int QTextLayout::rightCursorPosition(int oldPos) const
-{
-    int newPos = d->positionAfterVisualMovement(oldPos, QTextCursor::Right);
-//    qDebug("%d -> %d", oldPos, newPos);
-    return newPos;
-}
-
-/*!
-    \since 4.8
-
-    Returns the cursor position to the left of \a oldPos, next to it.
-    The position is dependent on the visual position of characters, after
-    bi-directional reordering.
-
-    \sa rightCursorPosition(), previousCursorPosition()
-*/
-int QTextLayout::leftCursorPosition(int oldPos) const
-{
-    int newPos = d->positionAfterVisualMovement(oldPos, QTextCursor::Left);
-//    qDebug("%d -> %d", oldPos, newPos);
-    return newPos;
-}
-
 /*!/
     Returns true if position \a pos is a valid cursor position.
 
index 429239d..648f623 100644 (file)
@@ -128,8 +128,6 @@ public:
     bool isValidCursorPosition(int pos) const;
     int nextCursorPosition(int oldPos, CursorMode mode = SkipCharacters) const;
     int previousCursorPosition(int oldPos, CursorMode mode = SkipCharacters) const;
-    int leftCursorPosition(int oldPos) const;
-    int rightCursorPosition(int oldPos) const;
 
     void draw(QPainter *p, const QPointF &pos, const QVector<FormatRange> &selections = QVector<FormatRange>(),
               const QRectF &clip = QRectF()) const;
index 6689bd4..2198e0e 100644 (file)
@@ -152,12 +152,10 @@ public:
         int c = m_cursor;
         if (steps > 0) {
             while (steps--)
-                c = cursorMoveStyle() == Qt::VisualMoveStyle ? m_textLayout.rightCursorPosition(c)
-                                                             : m_textLayout.nextCursorPosition(c);
+                c = m_textLayout.nextCursorPosition(c);
         } else if (steps < 0) {
             while (steps++)
-                c = cursorMoveStyle() == Qt::VisualMoveStyle ? m_textLayout.leftCursorPosition(c)
-                                                             : m_textLayout.previousCursorPosition(c);
+                c = m_textLayout.previousCursorPosition(c);
         }
         moveCursor(c, mark);
     }