diff options
Diffstat (limited to 'src/gui/text')
-rw-r--r-- | src/gui/text/qabstracttextdocumentlayout.cpp | 15 | ||||
-rw-r--r-- | src/gui/text/qplatformfontdatabase_qpa.cpp | 6 | ||||
-rw-r--r-- | src/gui/text/qrawfont.cpp | 2 | ||||
-rw-r--r-- | src/gui/text/qtextengine.cpp | 2 | ||||
-rw-r--r-- | src/gui/text/qtextimagehandler.cpp | 4 | ||||
-rw-r--r-- | src/gui/text/qtextlayout.cpp | 9 | ||||
-rw-r--r-- | src/gui/text/qzip.cpp | 2 |
7 files changed, 31 insertions, 9 deletions
diff --git a/src/gui/text/qabstracttextdocumentlayout.cpp b/src/gui/text/qabstracttextdocumentlayout.cpp index 589c0f701f..e14cfe0f82 100644 --- a/src/gui/text/qabstracttextdocumentlayout.cpp +++ b/src/gui/text/qabstracttextdocumentlayout.cpp @@ -577,6 +577,21 @@ QString QAbstractTextDocumentLayout::anchorAt(const QPointF& pos) const if (cursorPos == -1) return QString(); + // compensate for preedit in the hit text block + QTextBlock block = document()->firstBlock(); + while (block.isValid()) { + QRectF blockBr = blockBoundingRect(block); + if (blockBr.contains(pos)) { + QTextLayout *layout = block.layout(); + int relativeCursorPos = cursorPos - block.position(); + const int preeditLength = layout ? layout->preeditAreaText().length() : 0; + if (preeditLength > 0 && relativeCursorPos > layout->preeditAreaPosition()) + cursorPos -= qMin(cursorPos - layout->preeditAreaPosition(), preeditLength); + break; + } + block = block.next(); + } + QTextDocumentPrivate *pieceTable = qobject_cast<const QTextDocument *>(parent())->docHandle(); QTextDocumentPrivate::FragmentIterator it = pieceTable->find(cursorPos); QTextCharFormat fmt = pieceTable->formatCollection()->charFormat(it->format); diff --git a/src/gui/text/qplatformfontdatabase_qpa.cpp b/src/gui/text/qplatformfontdatabase_qpa.cpp index 6bd8284fa0..6af0398f00 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.cpp +++ b/src/gui/text/qplatformfontdatabase_qpa.cpp @@ -250,10 +250,10 @@ QPlatformFontDatabase::~QPlatformFontDatabase() void QPlatformFontDatabase::populateFontDatabase() { QString fontpath = fontDir(); - if(!QFile::exists(fontpath)) { - qFatal("QFontDatabase: Cannot find font directory %s - is Qt installed correctly?", - qPrintable(fontpath)); + qWarning("QFontDatabase: Cannot find font directory '%s' - is Qt installed correctly?", + qPrintable(QDir::toNativeSeparators(fontpath))); + return; } QDir dir(fontpath); diff --git a/src/gui/text/qrawfont.cpp b/src/gui/text/qrawfont.cpp index 9fbeef4685..5cdd563a33 100644 --- a/src/gui/text/qrawfont.cpp +++ b/src/gui/text/qrawfont.cpp @@ -672,7 +672,7 @@ QRawFont QRawFont::fromFont(const QFont &font, QFontDatabase::WritingSystem writ */ void QRawFont::setPixelSize(qreal pixelSize) { - if (d->fontEngine == 0) + if (d->fontEngine == 0 || qFuzzyCompare(d->fontEngine->fontDef.pixelSize, pixelSize)) return; d.detach(); diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 3d58d91169..7d366275a3 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -63,7 +63,7 @@ QT_BEGIN_NAMESPACE -static const float smallCapsFraction = 0.7; +static const float smallCapsFraction = 0.7f; namespace { // Helper class used in QTextEngine::itemize diff --git a/src/gui/text/qtextimagehandler.cpp b/src/gui/text/qtextimagehandler.cpp index 6804dba95c..4f699ee45f 100644 --- a/src/gui/text/qtextimagehandler.cpp +++ b/src/gui/text/qtextimagehandler.cpp @@ -79,7 +79,7 @@ static QPixmap getPixmap(QTextDocument *doc, const QTextImageFormat &format) if (img.isNull()) { // try direct loading name = format.name(); // remove qrc:/ prefix again if (name.isEmpty() || !img.load(name)) - return QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/file-16.png")); + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/file-16.png")); } pm = QPixmap::fromImage(img); doc->addResource(QTextDocument::ImageResource, url, pm); @@ -154,7 +154,7 @@ static QImage getImage(QTextDocument *doc, const QTextImageFormat &format) if (image.isNull()) { // try direct loading name = format.name(); // remove qrc:/ prefix again if (name.isEmpty() || !image.load(name)) - return QImage(QLatin1String(":/trolltech/styles/commonstyle/images/file-16.png")); + return QImage(QLatin1String(":/qt-project.org/styles/commonstyle/images/file-16.png")); } doc->addResource(QTextDocument::ImageResource, url, image); } diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 95b8f48ec5..bec574bb83 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -506,6 +506,7 @@ QString QTextLayout::preeditAreaText() const /*! Sets the additional formats supported by the text layout to \a formatList. + The formats are applied with preedit area text in place. \sa additionalFormats(), clearAdditionalFormats() */ @@ -2169,7 +2170,8 @@ static QGlyphRun glyphRunWithInfo(QFontEngine *fontEngine, const QGlyphLayout &g glyphRun.setFlags(flags); glyphRun.setRawFont(font); - glyphRun.setBoundingRect(QRectF(selectionX.toReal(), minY, selectionWidth.toReal(), height)); + glyphRun.setBoundingRect(QRectF(selectionX.toReal(), minY - font.ascent(), + selectionWidth.toReal(), height)); return glyphRun; } @@ -2586,6 +2588,10 @@ qreal QTextLine::cursorToX(int *cursorPos, Edge edge) const int pos = *cursorPos; int itm; const HB_CharAttributes *attributes = eng->attributes(); + if (!attributes) { + *cursorPos = 0; + return x.toReal(); + } while (pos < line.from + line.length && !attributes[pos].charStop) pos++; if (pos == line.from + (int)line.length) { @@ -2703,6 +2709,7 @@ qreal QTextLine::cursorToX(int *cursorPos, Edge edge) const Converts the x-coordinate \a x, to the nearest matching cursor position, depending on the cursor position type, \a cpos. + Note that result cursor position includes possible preedit area text. \sa cursorToX() */ diff --git a/src/gui/text/qzip.cpp b/src/gui/text/qzip.cpp index 337326d3d7..1491c1efbc 100644 --- a/src/gui/text/qzip.cpp +++ b/src/gui/text/qzip.cpp @@ -505,7 +505,7 @@ void QZipReaderPrivate::scanFiles() int num_dir_entries = 0; EndOfDirectory eod; while (start_of_directory == -1) { - int pos = device->size() - sizeof(EndOfDirectory) - i; + const int pos = device->size() - int(sizeof(EndOfDirectory)) - i; if (pos < 0 || i > 65535) { qWarning() << "QZip: EndOfDirectory not found"; return; |