From 258d35ceb3142d654d02799516c433ccf7094313 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Wed, 13 Aug 2014 16:33:27 +0200 Subject: Add support for accelerated glyph rendering in the directfb plugin Change-Id: I44ae087c900e5cffdada45845cb7f34aab89b8ab Reviewed-by: Lars Knoll --- src/gui/painting/qpaintengine_blitter.cpp | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'src/gui/painting/qpaintengine_blitter.cpp') diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 67a692e2db..9a3b8f421b 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -132,6 +132,19 @@ public: return checkStateAgainstMask(capabillitiesState, opacityPixmapMask); } + bool canBlitterDrawCachedGlyphs(const QTransform &transform, QFontEngine::GlyphFormat requestedGlyphFormat, bool complexClip) const + { + if (transform.type() > QTransform::TxScale) + return false; + if (!(m_capabilities & QBlittable::DrawScaledCachedGlyphsCapability)) + return false; + if (requestedGlyphFormat == QFontEngine::Format_ARGB && !(m_capabilities & QBlittable::SubPixelGlyphsCapability)) + return false; + if (complexClip && !(m_capabilities & QBlittable::ComplexClipCapability)) + return false; + return true; + } + inline void updateState(uint mask, bool on) { updateStateBits(&capabillitiesState, mask, on); } @@ -798,6 +811,28 @@ void QBlitterPaintEngine::drawStaticTextItem(QStaticTextItem *sti) #endif } +bool QBlitterPaintEngine::drawCachedGlyphs(int numGlyphs, const glyph_t *glyphs, const QFixedPoint *positions, QFontEngine *fontEngine) +{ + Q_D(QBlitterPaintEngine); + QFontEngine::GlyphFormat glyphFormat = d->glyphCacheFormat; + if (fontEngine->glyphFormat != QFontEngine::Format_None) + glyphFormat = fontEngine->glyphFormat; + + const QClipData *clipData = d->clip(); + const bool complexClip = clipData && !clipData->hasRectClip; + + const QPainterState *s = state(); + if (d->caps.canBlitterDrawCachedGlyphs(s->transform(), glyphFormat, complexClip)) { + d->unlock(); + const bool result = d->pmData->blittable()->drawCachedGlyphs(s, glyphFormat, numGlyphs, glyphs, positions, fontEngine); + // Lock again as the raster paint engine might draw decorations now. + d->lock(); + return result; + } else { + return QRasterPaintEngine::drawCachedGlyphs(numGlyphs, glyphs, positions, fontEngine); + } +} + QT_END_NAMESPACE #endif //QT_NO_BLITTABLE -- cgit v1.2.3