summaryrefslogtreecommitdiffstats
path: root/src/gui/painting/qpaintengine_blitter.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2014-08-13 16:33:27 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2014-08-15 18:28:37 +0200
commit258d35ceb3142d654d02799516c433ccf7094313 (patch)
treeb8e87dc4fc1591759988d61cea015716c7ccb60a /src/gui/painting/qpaintengine_blitter.cpp
parentc8e7fe7f3583f03cc0af680aea2b25c25249ee6e (diff)
Add support for accelerated glyph rendering in the directfb plugin
Change-Id: I44ae087c900e5cffdada45845cb7f34aab89b8ab Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/gui/painting/qpaintengine_blitter.cpp')
-rw-r--r--src/gui/painting/qpaintengine_blitter.cpp35
1 files changed, 35 insertions, 0 deletions
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