Merge branch 'master' of git://scm.dev.nokia.troll.no/qt/qtbase-staging
* 'master' of git://scm.dev.nokia.troll.no/qt/qtbase-staging: Fix tst_QVariant::invalidColor Move QTextCursor::MoveStyle to Qt namespace Add some QRawFont related low level functions to avoid extra copying
This commit is contained in:
commit
1a1af689fc
@ -94,6 +94,7 @@ Qt {
|
||||
Q_ENUMS(GestureState)
|
||||
Q_ENUMS(GestureType)
|
||||
#endif
|
||||
Q_ENUMS(CursorMoveStyle)
|
||||
#endif // (defined(Q_MOC_RUN) || defined(QT_JAMBI_RUN))
|
||||
|
||||
#if defined(Q_MOC_RUN)
|
||||
@ -1784,6 +1785,11 @@ public:
|
||||
NavigationModeCursorAuto,
|
||||
NavigationModeCursorForceVisible
|
||||
};
|
||||
|
||||
enum CursorMoveStyle {
|
||||
LogicalMoveStyle,
|
||||
VisualMoveStyle
|
||||
};
|
||||
}
|
||||
#ifdef Q_MOC_RUN
|
||||
;
|
||||
|
@ -428,7 +428,7 @@ int QRawFont::weight() const
|
||||
of the text. To get the correctly shaped text, you can use QTextLayout to lay out and shape the
|
||||
text, and then call QTextLayout::glyphRuns() to get the set of glyph index list and QRawFont pairs.
|
||||
|
||||
\sa advancesForGlyphIndexes(), QGlyphRun, QTextLayout::glyphRuns(), QTextFragment::glyphRuns()
|
||||
\sa advancesForGlyphIndexes(), glyphIndexesForChars(), QGlyphRun, QTextLayout::glyphRuns(), QTextFragment::glyphRuns()
|
||||
*/
|
||||
QVector<quint32> QRawFont::glyphIndexesForString(const QString &text) const
|
||||
{
|
||||
@ -437,11 +437,9 @@ QVector<quint32> QRawFont::glyphIndexesForString(const QString &text) const
|
||||
|
||||
int nglyphs = text.size();
|
||||
QVarLengthGlyphLayoutArray glyphs(nglyphs);
|
||||
if (!d->fontEngine->stringToCMap(text.data(), text.size(), &glyphs, &nglyphs,
|
||||
QTextEngine::GlyphIndicesOnly)) {
|
||||
if (!glyphIndexesForChars(text.data(), text.size(), glyphs.glyphs, &nglyphs)) {
|
||||
glyphs.resize(nglyphs);
|
||||
if (!d->fontEngine->stringToCMap(text.data(), text.size(), &glyphs, &nglyphs,
|
||||
QTextEngine::GlyphIndicesOnly)) {
|
||||
if (!glyphIndexesForChars(text.data(), text.size(), glyphs.glyphs, &nglyphs)) {
|
||||
Q_ASSERT_X(false, Q_FUNC_INFO, "stringToCMap shouldn't fail twice");
|
||||
return QVector<quint32>();
|
||||
}
|
||||
@ -454,6 +452,26 @@ QVector<quint32> QRawFont::glyphIndexesForString(const QString &text) const
|
||||
return glyphIndexes;
|
||||
}
|
||||
|
||||
/*!
|
||||
Converts a string of unicode points to glyph indexes using the CMAP table in the
|
||||
underlying font. The function works like glyphIndexesForString() except it take
|
||||
an array (\a chars), the results will be returned though \a glyphIndexes array
|
||||
and number of glyphs will be set in \a numGlyphs. The size of \a glyphIndexes array
|
||||
must be at least \a numChars, if that's still not enough, this function will return
|
||||
false, then you can resize \a glyphIndexes from the size returned in \a numGlyphs.
|
||||
|
||||
\sa glyphIndexesForString(), advancesForGlyphIndexes(), QGlyphs, QTextLayout::glyphs(), QTextFragment::glyphs()
|
||||
*/
|
||||
bool QRawFont::glyphIndexesForChars(const QChar *chars, int numChars, quint32 *glyphIndexes, int *numGlyphs) const
|
||||
{
|
||||
if (!isValid())
|
||||
return false;
|
||||
|
||||
QGlyphLayout glyphs;
|
||||
glyphs.glyphs = glyphIndexes;
|
||||
return d->fontEngine->stringToCMap(chars, numChars, &glyphs, numGlyphs, QTextEngine::GlyphIndicesOnly);
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the QRawFont's advances for each of the \a glyphIndexes in pixel units. The advances
|
||||
give the distance from the position of a given glyph to where the next glyph should be drawn
|
||||
@ -479,6 +497,36 @@ QVector<QPointF> QRawFont::advancesForGlyphIndexes(const QVector<quint32> &glyph
|
||||
return advances;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the QRawFont's advances for each of the \a glyphIndexes in pixel units. The advances
|
||||
give the distance from the position of a given glyph to where the next glyph should be drawn
|
||||
to make it appear as if the two glyphs are unspaced. The glyph indexes are given with the
|
||||
array \a glyphIndexes while the results are returned through \a advances, both of them must
|
||||
have \a numGlyphs elements.
|
||||
|
||||
\sa QTextLine::horizontalAdvance(), QFontMetricsF::width()
|
||||
*/
|
||||
bool QRawFont::advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs) const
|
||||
{
|
||||
if (!isValid())
|
||||
return false;
|
||||
|
||||
QGlyphLayout glyphs;
|
||||
glyphs.glyphs = const_cast<HB_Glyph *>(glyphIndexes);
|
||||
glyphs.numGlyphs = numGlyphs;
|
||||
QVarLengthArray<QFixed> advances_x(numGlyphs);
|
||||
QVarLengthArray<QFixed> advances_y(numGlyphs);
|
||||
glyphs.advances_x = advances_x.data();
|
||||
glyphs.advances_y = advances_y.data();
|
||||
|
||||
d->fontEngine->recalcAdvances(&glyphs, 0);
|
||||
|
||||
for (int i=0; i<numGlyphs; ++i)
|
||||
advances[i] = QPointF(glyphs.advances_x[i].toReal(), glyphs.advances_y[i].toReal());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the hinting preference used to construct this QRawFont.
|
||||
|
||||
|
@ -90,6 +90,8 @@ public:
|
||||
|
||||
QVector<quint32> glyphIndexesForString(const QString &text) const;
|
||||
QVector<QPointF> advancesForGlyphIndexes(const QVector<quint32> &glyphIndexes) const;
|
||||
bool glyphIndexesForChars(const QChar *chars, int numChars, quint32 *glyphIndexes, int *numGlyphs) const;
|
||||
bool advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs) const;
|
||||
|
||||
QImage alphaMapForGlyph(quint32 glyphIndex,
|
||||
AntialiasingType antialiasingType = SubPixelAntialiasing,
|
||||
|
@ -362,7 +362,7 @@ bool QTextCursorPrivate::movePosition(QTextCursor::MoveOperation op, QTextCursor
|
||||
currentCharFormat = -1;
|
||||
bool adjustX = true;
|
||||
QTextBlock blockIt = block();
|
||||
bool visualMovement = priv->defaultCursorMoveStyle == QTextCursor::Visual;
|
||||
bool visualMovement = priv->defaultCursorMoveStyle == Qt::VisualMoveStyle;
|
||||
|
||||
if (!blockIt.isValid())
|
||||
return false;
|
||||
@ -2568,18 +2568,18 @@ QTextDocument *QTextCursor::document() const
|
||||
}
|
||||
|
||||
/*!
|
||||
\enum QTextCursor::MoveStyle
|
||||
\enum Qt::CursorMoveStyle
|
||||
|
||||
This enum describes the movement style available to QTextCursor. The options
|
||||
This enum describes the movement style available to text cursors. The options
|
||||
are:
|
||||
|
||||
\value Logical Within a left-to-right text block, increase cursor position
|
||||
when pressing left arrow key, decrease cursor position when pressing the
|
||||
right arrow key. If the text block is right-to-left, the opposite behavior
|
||||
\value LogicalMoveStyle Within a left-to-right text block, decrease cursor
|
||||
position when pressing left arrow key, increase cursor position when pressing
|
||||
the right arrow key. If the text block is right-to-left, the opposite behavior
|
||||
applies.
|
||||
\value Visual Pressing the left arrow key will always cause the cursor to move
|
||||
left, regardless of the text's writing direction. The same behavior applies to
|
||||
right arrow key.
|
||||
\value VisualMoveStyle Pressing the left arrow key will always cause the cursor
|
||||
to move left, regardless of the text's writing direction. Pressing the right
|
||||
arrow key will always cause the cursor to move right.
|
||||
*/
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -86,10 +86,6 @@ public:
|
||||
MoveAnchor,
|
||||
KeepAnchor
|
||||
};
|
||||
enum MoveStyle {
|
||||
Logical,
|
||||
Visual
|
||||
};
|
||||
|
||||
void setPosition(int pos, MoveMode mode = MoveAnchor);
|
||||
int position() const;
|
||||
|
@ -589,9 +589,9 @@ void QTextDocument::setDefaultTextOption(const QTextOption &option)
|
||||
\since 4.8
|
||||
|
||||
The default cursor movement style is used by all QTextCursor objects
|
||||
created from the document. The default is QTextCursor::Logical.
|
||||
created from the document. The default is Qt::LogicalMoveStyle.
|
||||
*/
|
||||
QTextCursor::MoveStyle QTextDocument::defaultCursorMoveStyle() const
|
||||
Qt::CursorMoveStyle QTextDocument::defaultCursorMoveStyle() const
|
||||
{
|
||||
Q_D(const QTextDocument);
|
||||
return d->defaultCursorMoveStyle;
|
||||
@ -602,7 +602,7 @@ QTextCursor::MoveStyle QTextDocument::defaultCursorMoveStyle() const
|
||||
|
||||
Set the default cursor movement style.
|
||||
*/
|
||||
void QTextDocument::setDefaultCursorMoveStyle(QTextCursor::MoveStyle style)
|
||||
void QTextDocument::setDefaultCursorMoveStyle(Qt::CursorMoveStyle style)
|
||||
{
|
||||
Q_D(QTextDocument);
|
||||
d->defaultCursorMoveStyle = style;
|
||||
|
@ -46,7 +46,6 @@
|
||||
#include <QtCore/qsize.h>
|
||||
#include <QtCore/qrect.h>
|
||||
#include <QtGui/qfont.h>
|
||||
#include <QtGui/qtextcursor.h>
|
||||
|
||||
QT_BEGIN_HEADER
|
||||
|
||||
@ -70,6 +69,7 @@ class QUrl;
|
||||
class QVariant;
|
||||
class QRectF;
|
||||
class QTextOption;
|
||||
class QTextCursor;
|
||||
|
||||
template<typename T> class QVector;
|
||||
|
||||
@ -269,8 +269,8 @@ public:
|
||||
QTextOption defaultTextOption() const;
|
||||
void setDefaultTextOption(const QTextOption &option);
|
||||
|
||||
QTextCursor::MoveStyle defaultCursorMoveStyle() const;
|
||||
void setDefaultCursorMoveStyle(QTextCursor::MoveStyle style);
|
||||
Qt::CursorMoveStyle defaultCursorMoveStyle() const;
|
||||
void setDefaultCursorMoveStyle(Qt::CursorMoveStyle style);
|
||||
|
||||
Q_SIGNALS:
|
||||
void contentsChange(int from, int charsRemoves, int charsAdded);
|
||||
|
@ -209,7 +209,7 @@ QTextDocumentPrivate::QTextDocumentPrivate()
|
||||
|
||||
defaultTextOption.setTabStop(80); // same as in qtextengine.cpp
|
||||
defaultTextOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
|
||||
defaultCursorMoveStyle = QTextCursor::Logical;
|
||||
defaultCursorMoveStyle = Qt::LogicalMoveStyle;
|
||||
|
||||
indentWidth = 40;
|
||||
documentMargin = 4;
|
||||
|
@ -342,7 +342,7 @@ private:
|
||||
|
||||
public:
|
||||
QTextOption defaultTextOption;
|
||||
QTextCursor::MoveStyle defaultCursorMoveStyle;
|
||||
Qt::CursorMoveStyle defaultCursorMoveStyle;
|
||||
#ifndef QT_NO_CSSPARSER
|
||||
QCss::StyleSheet parsedDefaultStyleSheet;
|
||||
#endif
|
||||
|
@ -598,7 +598,7 @@ public:
|
||||
inline bool visualCursorMovement() const
|
||||
{
|
||||
return (visualMovement ||
|
||||
(block.docHandle() ? block.docHandle()->defaultCursorMoveStyle == QTextCursor::Visual : false));
|
||||
(block.docHandle() ? block.docHandle()->defaultCursorMoveStyle == Qt::VisualMoveStyle : false));
|
||||
}
|
||||
|
||||
struct SpecialData {
|
||||
|
@ -579,27 +579,27 @@ bool QTextLayout::cacheEnabled() const
|
||||
}
|
||||
|
||||
/*!
|
||||
Set the visual cursor movement style. If the QTextLayout is backed by
|
||||
Set the cursor movement style. If the QTextLayout is backed by
|
||||
a document, you can ignore this and use the option in QTextDocument,
|
||||
this option is for widgets like QLineEdit or custom widgets without
|
||||
a QTextDocument. Default value is QTextCursor::Logical.
|
||||
a QTextDocument. Default value is Qt::LogicalMoveStyle.
|
||||
|
||||
\sa setCursorMoveStyle()
|
||||
*/
|
||||
void QTextLayout::setCursorMoveStyle(QTextCursor::MoveStyle style)
|
||||
void QTextLayout::setCursorMoveStyle(Qt::CursorMoveStyle style)
|
||||
{
|
||||
d->visualMovement = style == QTextCursor::Visual ? true : false;
|
||||
d->visualMovement = style == Qt::VisualMoveStyle ? true : false;
|
||||
}
|
||||
|
||||
/*!
|
||||
The cursor movement style of this QTextLayout. The default is
|
||||
QTextCursor::Logical.
|
||||
Qt::LogicalMoveStyle.
|
||||
|
||||
\sa setCursorMoveStyle()
|
||||
*/
|
||||
QTextCursor::MoveStyle QTextLayout::cursorMoveStyle() const
|
||||
Qt::CursorMoveStyle QTextLayout::cursorMoveStyle() const
|
||||
{
|
||||
return d->visualMovement ? QTextCursor::Visual : QTextCursor::Logical;
|
||||
return d->visualMovement ? Qt::VisualMoveStyle : Qt::LogicalMoveStyle;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -137,8 +137,8 @@ public:
|
||||
void setCacheEnabled(bool enable);
|
||||
bool cacheEnabled() const;
|
||||
|
||||
void setCursorMoveStyle(QTextCursor::MoveStyle style);
|
||||
QTextCursor::MoveStyle cursorMoveStyle() const;
|
||||
void setCursorMoveStyle(Qt::CursorMoveStyle style);
|
||||
Qt::CursorMoveStyle cursorMoveStyle() const;
|
||||
|
||||
void beginLayout();
|
||||
void endLayout();
|
||||
|
@ -1585,7 +1585,7 @@ void QLineControl::processKeyEvent(QKeyEvent* event)
|
||||
}
|
||||
|
||||
bool unknown = false;
|
||||
bool visual = cursorMoveStyle() == QTextCursor::Visual;
|
||||
bool visual = cursorMoveStyle() == Qt::VisualMoveStyle;
|
||||
|
||||
if (false) {
|
||||
}
|
||||
|
@ -160,8 +160,8 @@ public:
|
||||
int cursorWidth() const { return m_cursorWidth; }
|
||||
void setCursorWidth(int value) { m_cursorWidth = value; }
|
||||
|
||||
QTextCursor::MoveStyle cursorMoveStyle() const { return m_textLayout.cursorMoveStyle(); }
|
||||
void setCursorMoveStyle(QTextCursor::MoveStyle style) { m_textLayout.setCursorMoveStyle(style); }
|
||||
Qt::CursorMoveStyle cursorMoveStyle() const { return m_textLayout.cursorMoveStyle(); }
|
||||
void setCursorMoveStyle(Qt::CursorMoveStyle style) { m_textLayout.setCursorMoveStyle(style); }
|
||||
|
||||
void moveCursor(int pos, bool mark = false);
|
||||
void cursorForward(bool mark, int steps)
|
||||
@ -169,11 +169,11 @@ public:
|
||||
int c = m_cursor;
|
||||
if (steps > 0) {
|
||||
while (steps--)
|
||||
c = cursorMoveStyle() == QTextCursor::Visual ? m_textLayout.rightCursorPosition(c)
|
||||
c = cursorMoveStyle() == Qt::VisualMoveStyle ? m_textLayout.rightCursorPosition(c)
|
||||
: m_textLayout.nextCursorPosition(c);
|
||||
} else if (steps < 0) {
|
||||
while (steps++)
|
||||
c = cursorMoveStyle() == QTextCursor::Visual ? m_textLayout.leftCursorPosition(c)
|
||||
c = cursorMoveStyle() == Qt::VisualMoveStyle ? m_textLayout.leftCursorPosition(c)
|
||||
: m_textLayout.previousCursorPosition(c);
|
||||
}
|
||||
moveCursor(c, mark);
|
||||
|
@ -1116,24 +1116,24 @@ void QLineEdit::setDragEnabled(bool b)
|
||||
\brief the movement style of cursor in this line edit
|
||||
\since 4.8
|
||||
|
||||
When this property is set to QTextCursor::Visual, the line edit will use visual
|
||||
When this property is set to Qt::VisualMoveStyle, the line edit will use visual
|
||||
movement style. Pressing the left arrow key will always cause the cursor to move
|
||||
left, regardless of the text's writing direction. The same behavior applies to
|
||||
right arrow key.
|
||||
|
||||
When the property is QTextCursor::Logical (the default), within a LTR text block,
|
||||
When the property is Qt::LogicalMoveStyle (the default), within a LTR text block,
|
||||
increase cursor position when pressing left arrow key, decrease cursor position
|
||||
when pressing the right arrow key. If the text block is right to left, the opposite
|
||||
behavior applies.
|
||||
*/
|
||||
|
||||
QTextCursor::MoveStyle QLineEdit::cursorMoveStyle() const
|
||||
Qt::CursorMoveStyle QLineEdit::cursorMoveStyle() const
|
||||
{
|
||||
Q_D(const QLineEdit);
|
||||
return d->control->cursorMoveStyle();
|
||||
}
|
||||
|
||||
void QLineEdit::setCursorMoveStyle(QTextCursor::MoveStyle style)
|
||||
void QLineEdit::setCursorMoveStyle(Qt::CursorMoveStyle style)
|
||||
{
|
||||
Q_D(QLineEdit);
|
||||
d->control->setCursorMoveStyle(style);
|
||||
|
@ -85,6 +85,7 @@ class Q_GUI_EXPORT QLineEdit : public QWidget
|
||||
Q_PROPERTY(bool redoAvailable READ isRedoAvailable)
|
||||
Q_PROPERTY(bool acceptableInput READ hasAcceptableInput)
|
||||
Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText)
|
||||
Q_PROPERTY(Qt::CursorMoveStyle cursorMoveStyle READ cursorMoveStyle WRITE setCursorMoveStyle)
|
||||
|
||||
public:
|
||||
explicit QLineEdit(QWidget* parent=0);
|
||||
@ -159,8 +160,8 @@ public:
|
||||
void setDragEnabled(bool b);
|
||||
bool dragEnabled() const;
|
||||
|
||||
void setCursorMoveStyle(QTextCursor::MoveStyle style);
|
||||
QTextCursor::MoveStyle cursorMoveStyle() const;
|
||||
void setCursorMoveStyle(Qt::CursorMoveStyle style);
|
||||
Qt::CursorMoveStyle cursorMoveStyle() const;
|
||||
|
||||
QString inputMask() const;
|
||||
void setInputMask(const QString &inputMask);
|
||||
|
@ -214,7 +214,7 @@ void tst_QComplexText::bidiCursorMovement()
|
||||
QTextOption option = layout.textOption();
|
||||
option.setTextDirection(basicDir == QChar::DirL ? Qt::LeftToRight : Qt::RightToLeft);
|
||||
layout.setTextOption(option);
|
||||
layout.setCursorMoveStyle(QTextCursor::Visual);
|
||||
layout.setCursorMoveStyle(Qt::VisualMoveStyle);
|
||||
bool moved;
|
||||
int oldPos, newPos = 0;
|
||||
qreal x, newX;
|
||||
|
@ -3815,7 +3815,7 @@ void tst_QLineEdit::bidiVisualMovement()
|
||||
QLineEdit le;
|
||||
le.setText(logical);
|
||||
|
||||
le.setCursorMoveStyle(QTextCursor::Visual);
|
||||
le.setCursorMoveStyle(Qt::VisualMoveStyle);
|
||||
le.setCursorPosition(0);
|
||||
|
||||
bool moved;
|
||||
@ -3863,7 +3863,7 @@ void tst_QLineEdit::bidiLogicalMovement()
|
||||
QLineEdit le;
|
||||
le.setText(logical);
|
||||
|
||||
le.setCursorMoveStyle(QTextCursor::Logical);
|
||||
le.setCursorMoveStyle(Qt::LogicalMoveStyle);
|
||||
le.setCursorPosition(0);
|
||||
|
||||
bool moved;
|
||||
|
@ -2292,7 +2292,7 @@ void tst_QTextEdit::bidiVisualMovement()
|
||||
option.setTextDirection(basicDir == QChar::DirL ? Qt::LeftToRight : Qt::RightToLeft);
|
||||
ed->document()->setDefaultTextOption(option);
|
||||
|
||||
ed->document()->setDefaultCursorMoveStyle(QTextCursor::Visual);
|
||||
ed->document()->setDefaultCursorMoveStyle(Qt::VisualMoveStyle);
|
||||
ed->moveCursor(QTextCursor::Start);
|
||||
ed->show();
|
||||
|
||||
@ -2346,7 +2346,7 @@ void tst_QTextEdit::bidiLogicalMovement()
|
||||
option.setTextDirection(basicDir == QChar::DirL ? Qt::LeftToRight : Qt::RightToLeft);
|
||||
ed->document()->setDefaultTextOption(option);
|
||||
|
||||
ed->document()->setDefaultCursorMoveStyle(QTextCursor::Logical);
|
||||
ed->document()->setDefaultCursorMoveStyle(Qt::LogicalMoveStyle);
|
||||
ed->moveCursor(QTextCursor::Start);
|
||||
ed->show();
|
||||
|
||||
|
@ -2650,7 +2650,6 @@ void tst_QVariant::invalidAsByteArray()
|
||||
void tst_QVariant::invalidQColor() const
|
||||
{
|
||||
QVariant va("An invalid QColor::name() value.");
|
||||
QTest::ignoreMessage(QtWarningMsg, "QColor::setNamedColor: Unknown color name 'An invalid QColor::name() value.'");
|
||||
QVERIFY(va.canConvert(QVariant::Color));
|
||||
|
||||
QVERIFY(!va.convert(QVariant::Color));
|
||||
|
Loading…
Reference in New Issue
Block a user