summaryrefslogtreecommitdiffstats
path: root/src/openvg/qpaintengine_vg.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Update contact information in license headers.Sergio Ahumada2012-08-011-2/+2
| | | | | | | | | | | | | - Replace Nokia contact email address with Qt Project website. - Remove "All rights reserved" line from license headers. As in the past, to avoid rewriting various autotests that contain line-number information, an extra blank line has been inserted at the end of the license text to ensure that this commit does not change the total number of lines in the license header. Change-Id: Ie7ba62011752fcb149b99b26317c54f2a0cfa931 Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com>
* Off-by-one-line error in QVGPaintEngine::drawImageMurray Read2012-04-251-1/+1
| | | | | | | | | | | | | | | | | | | | | | QVGPaintEngine::drawImage(const QPointF &pos, const QImage &image) uses vgWritePixels if possible, and when the QImage is loaded from some file types, its lines are inverted, stored from bottom to top in memory. For inverted images, the image data pointer passed to vgWritePixels should be pointing at the start of the last line. However drawImage was actually passing a pointer to after the last line. This has undefined results, but in practice you either get the image contents drawn one line too high with the top line missing and and extra garbage bottom line, or you can also get a crash if beyond the last line is not readable memory. Fixed by correcting the pointer passed to vgWritePixels to point to the start of the last line for inverted images. Task-number: ou1cimx1#996894 Change-Id: I1cf5b976acc18adceec1e14633f8779441faa056 Reviewed-by: Jani Hautakangas <jani.hautakangas@nokia.com> Reviewed-by: Pasi Pentikäinen <ext-pasi.a.pentikainen@nokia.com>
* Recovering from draw failures after EGL surface creation failuremread2012-01-131-14/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The Qt drawing system is not designed to handle failures in beginPaint and endPaint. But the Symbian port is creating EGL contexts and surfaces on demand in these functions. These can fail, eg in the defect reported the app gets a visibile=true event for such a short period that it fails to create the surface before it is invisible again. These failures have to be coped with. Brush image drawing is failing if the app is asked to draw while in the background, because the EGL surface cannot be created. After this, if the app comes to the foreground at the wrong time, the failed drawing is shown on the screen as a flat colored area. A failedToAlloc variable in the openvg paint engine was locking in this failed drawing, so that it would never redraw. This is fixed by removing all use of that variable. Failed surface creation during a draw in response to a visibility change event was also leaving the window backing store with bad content. This is now cleared on a surface creation failure so that drawing is retried when the next visibility change event arrives. The retry mechanism for creating a surface on failure also makes the problem circumstances more likely to occur and can block the app unnecessarily. Now, instead of blocking for 1 second every time on failed surface creation, it only blocks on the first failure in a sequence thereby allowing other parts of the app to run freely while it is in the background. Task-number: ou1cimx1#951921 Change-Id: I1e27746957ff624b0d9a1cdc9b319d0a3477135d Reviewed-by: Gareth Stockwell <gareth.stockwell@accenture.com> Reviewed-by: Shane Kearns <ext-shane.2.kearns@nokia.com>
* Update year in Nokia copyright messages.Jason McDonald2012-01-111-1/+1
| | | | | | | | | Simple search and replace. This commit doesn't touch 3rd-party files, nor translations (where the change is not so simple and will be handled in a separate commit). Change-Id: I4e48513b8078a44a8cd272326685b25338890148 Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* Merge remote-tracking branch 'origin/4.7' into qt-4.8-from-4.7Liang Qi2011-06-241-1/+8
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/gui/image/qpixmap_raster_symbian.cpp src/gui/image/qpixmapdatafactory.cpp src/gui/painting/qgraphicssystem.cpp src/gui/styles/qs60style.cpp src/network/bearer/qnetworkconfigmanager_p.h src/s60installs/bwins/QtGuiu.def src/s60installs/bwins/QtOpenGLu.def src/s60installs/bwins/QtOpenVGu.def src/s60installs/eabi/QtGuiu.def src/s60installs/eabi/QtOpenVGu.def tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp
| * Disable antialiasing for tiled image drawing.Laszlo Agocs2011-06-201-1/+8
| | | | | | | | | | Task-number: QTBUG-19821 Reviewed-by: Jani Hautakangas
| * Update licenseheader text in source filesJyri Tahtela2011-05-131-17/+17
| | | | | | | | | | | | | | Updated version of LGPL and FDL licenseheaders. Apply release phase licenseheaders for all source files. Reviewed-by: Trust Me
* | Update licenseheader text in source files for qt4.8Jyri Tahtela2011-05-131-17/+17
| | | | | | | | | | | | | | Updated version of LGPL and FDL licenseheaders. Apply release phase licenseheaders for all source files. Reviewed-by: Trust Me
* | Symbian build failure for Armv5Sami Merila2011-05-121-2/+2
| | | | | | | | | | | | | | 1. Changed externs to Q_GUI_EXPORTs 2. ABSENTed missing exports from openGL's DEF-file Reviewed-by: Tomi Vihria
* | Merge remote-tracking branch 'origin/4.7' into qt-4.8-from-4.7Olivier Goffart2011-05-021-0/+5
|\ \ | |/ | | | | | | | | | | Conflicts: src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp src/s60installs/bwins/QtGuiu.def src/s60installs/eabi/QtGuiu.def
| * Make translucent windows working properly with OpenVG.Laszlo Agocs2011-04-271-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The OpenVG engine correctly uses vgClear() to fill the surface with transparent pixels whenever the window has the WA_TranslucentBackground attribute enabled. However both scissoring and masking affects the operation of vgClear(). Drawing artifacts were previously visible due this, simply because scissoring was left enabled by the VG paint engine, and the filling with transparent pixels happens in the window surface's beginPaint() that is called between the paint engine's end() (for the previous paint) and begin() (for the next paint). Task-number: QT-4907 Reviewed-by: Jani Hautakangas
* | Merge branch 'master' of scm.dev.nokia.troll.no:qt/qt-fire-staging into ↵Qt Continuous Integration System2011-04-281-0/+111
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | master-integration * 'master' of scm.dev.nokia.troll.no:qt/qt-fire-staging: (31 commits) Make QtQuick2 compile on QPA Use maximum ascent/descent/leading from fallback fonts in shaping Another ugly hack to make bidi cursor work with Core Text Make sure layoutData exist before checking for string direction Removed warning from QPixmap::handle(). Take leading space width into account for painting and selection doc: Simplify language in QGlyphs docs doc: Minor cleanup in QGlyphs docs Remove extra comma at the end of enum list Fix compilation with Qt3Support Don't transform glyph positions for Core Graphics paint engine Skip linearGradientSymmetry test on QWS. Turn on HarfBuzz support for Mac/Cocoa Support visual cursor movement for BIDI text Disable tst_QPixmap::onlyNullPixmapsOutsideGuiThread on Mac Revert "Switch the default graphics system to raster on Mac." Fix an race condition in the auto test. Made linearGradientSymmetry test pass on qreal=float platforms. Make sure #ifdef'd tests still have main() function Long live QRawFont! ...
| * | Added support for six-parameter radial gradients.Samuel Rødal2011-04-131-0/+111
| | | | | | | | | | | | | | | | | | | | | | | | The extended radial gradients conform to the radial gradient specification in HTML 5 canvas. Task-number: QTBUG-14075 Reviewed-by: Andreas Kling
* | | Merge remote-tracking branch 'origin/4.7' into qt-master-from-4.7Olivier Goffart2011-04-181-0/+15
|\ \ \ | |/ / |/| / | |/ | | | | | | | | | | Conflicts: qmake/generators/makefile.cpp qmake/generators/win32/msbuild_objectmodel.cpp qmake/generators/win32/msvc_vcxproj.cpp src/corelib/global/qnamespace.h src/gui/text/qtextcontrol.cpp
| * Fix to 'QImage convertToFormat doesn't work correctly'Jani Hautakangas2011-04-131-0/+15
| | | | | | | | | | | | | | | | | | | | OpenVG paint engine tries to use vgWritePixels shortcut whenever possible to optimize rendering performance. The check 'canVgWritePixels' failed to map formats correctly and resulted to incorrect return value. Task-number: QTBUG-18682 Reviewed-by: Jason Barron
* | Put all the declarations of qt_defaultDpi{,X,Y}() in one placeJiang Jiang2011-04-051-3/+0
|/ | | | Reviewed-by: Samuel Rødal
* Implement tiled image and pixmap drawing in VG paint engine.Laszlo Agocs2011-03-221-3/+98
| | | | | | | | | | | | The vgWritePixel-based "fallback" in drawImage can only be used when the transformation is simple and no opacity is set. The tiled drawing introduced here will serve as an additional fallback for the more complex cases and will allow drawing large (12 Mpix or more) pixmaps and images with transformation and semi-transparency even when the complete image data would not fit into the GPU memory. Task-number: QTBUG-18251 Reviewed-by: Jani Hautakangas
* Fixed drawImage() not to attempt drawing null images on openvg.Laszlo Agocs2011-03-221-0/+4
| | | | | | | | | QVGPaintEngine did not have proper checks for null QImage in the drawImage functions so it went on trying to create a VGImage of size 0x0 which is bound to fail always. This resulted in confusing warnings about not being able to reclaim space for 0x0 images. Reviewed-by: Jani Hautakangas
* Fix for major regression in OpenVG clippingJani Hautakangas2011-03-101-0/+1
| | | | | | | | | OpenVG paint engine didn't reset it's mask fallback state correctly when engine was resetted. Task-number: QTBUG-17966 Reviewed-by: Jason Barron
* Avoid image conversion in fromSymbianCFbsBitmap for certain formats.Laszlo Agocs2011-03-101-1/+4
| | | | | | | | | | | | | | | | From now on the image data coming from CFbsBitmap will not be forced to RGB32 or ARGB32_Premultiplied in openvg. This allows copy-less creation and drawing of pixmaps not just from bitmaps with display mode EColor16MAP and EColor16MU, but also a few other modes, like EColor64K. Painting into such pixmaps or drawing them via the raster engine is potentially slower in such cases, which is now reflected in the fromSymbianCFbsBitmap documentation. Note that this patch has no effect on extended bitmaps (e.g. skin graphics), those must always be rasterized first regardless of the display mode. Task-number: QTBUG-18027 Reviewed-by: Jani Hautakangas
* Changed QPixmap VG backend to use CFbsBitmap on Symbian.Laszlo Agocs2011-02-281-4/+12
| | | | | | | | | | | | | | Similarly to QS60PixmapData, that is used on raster, QVGPixmapData is also backed by a CFbsBitmap from now on (at least when it makes sense to do so). This allows copy-less bitmap handle duplication in from- and toSymbianCFbsBitmap() in case of certain image formats, reduces local heap usage and improves performance with the s60 style due to a reduced number of pixel data copies. Task-number: QT-2505 Reviewed-by: Jason Barron Reviewed-by: Jani Hautakangas
* Fix for clipping failure in OpenVG paint engine.Jani Hautakangas2011-02-151-2/+33
| | | | | | | | | | OpenVG implementation for Broadcom chip has limited scissor rect count to 32. Because of that Qt OpenVG paint engine fails to clip correctly if clip rect count exceeds 32. This patch makes Qt OpenVG paint engine to use mask instead of scissors in such cases. Task-number: QTBUG-16932 Reviewed-by: Jason Barron
* Fix to pen state handling in OpenVG paint engine.Jani Hautakangas2011-01-211-1/+1
| | | | | | | | | Shape should not be filled using pen if pen brush type is NoBrush. OpenVG paint engine didn't check NoBrush case when applying pen. Task-number: QTBUG-15870 Reviewed-by: Gunnar
* Fix static build on Windows with MinGW.Mark Brand2011-01-171-4/+4
| | | | | | | | | | | | | | | | | Q_DECL_IMPORT is still __declspec(dllimport), which is unsuitable for static code. Commit edbc656b changed Q_DECL_IMPORT_IMPORT to Q_CORE_EXPORT when declaring QtCore functions in svg. Now we change Q_DECL_IMPORT to Q_GUI_EXPORT when declaring QtGui functions into opengl and openvg. Also removed the redundant keyword "extern" from the function declarations. Merge-request: 2540 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Reviewed-by: mariusSO
* OpenVG paint engine doesn't draw glyphs well to non-integer offsets.Jani Hautakangas2011-01-111-2/+2
| | | | | | | | Solution is to round adjustment offsets to integer values to prevent blurry text. Task-number: QTBUG-16240 Reviewed-by: Alessandro Portale
* Update copyright year to 2011.Jason McDonald2011-01-101-1/+1
| | | | Reviewed-by: Trust Me
* QT::Window palette brush fails to render correctly.Jani Hautakangas2010-12-091-2/+1
| | | | | | | | | | QWidget uses QPainter::drawTiledPixmap to draw textured background brush but OpenVG paint engine fails to render pixmaps correctly because of incorrect offset calculation. Task-number: QTBUG-15737 Reviewed-by: Gunnar Sletta
* Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public into ↵Qt Continuous Integration System2010-11-241-0/+3
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4.7-integration * '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public: (27 commits) Use parent class function to generate Makefile headers in Symbian Fix spaces Fix QPixmap::fromImage() in the OpenVG pixmap backend. Native color dialog on symbian Fix non-stroked filled paths in OpenVG paint engine. Fix symbian-mmp.conf include path Fix a build break when namespace is defined Fixed namespace issues related to epocroot.cpp Corrected ASCII comparison and removed extra braces Add symbian scope for qfiledialog_symbian.cpp Resolve EPOCROOT in qt.conf using same logic as in .pro Make epocroot resolving compatible with more build environments Fix for QtOpenGL RVCT4 compilation error Removed extra cpp and done changes based on comments Correct flags for Symbian file dialogs Fix for WServ 64 crash on Symbian. Use include(original mkspec) instead of copying of mkspec to default Fixed code style of d92cbfc5, reported by git push. Switched qdesktopservices to use SchemeHandler for Symbian^3 and later. Removed unnecessary Q_OS_SYMBIAN flags from qdesktopservices_s60.cpp. ...
| * Fix non-stroked filled paths in OpenVG paint engine.Jason Barron2010-11-231-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The QPainter::fillRect() functions are optimizations to avoid state changes in the paint engines. Since these functions should be completely independant of state, ideally they should only call functions that are also stateless. QVGPaintEngine::fillRect() has two different code paths for this. The vgClearRect() path of this function is stateless however in the case of non-opaque or complex fills, this code path cannot be used and instead we use the normal path fill function which is not entirely stateless because ensureTransform() will apply the aliased coordinate transform if the current state includes a stroked pen. To avoid this happening for a pure fill (no stroke) we temporary set the pen state to be Qt::NoPen such that the state used by ensureTransform() is correct. Task-number: QTBUG-14717 Reviewed-by: Jani Hautakangas
* | Round origin of text in OpenVG engineEskil Abrahamsen Blomfeldt2010-11-221-2/+2
|/ | | | | | | | | | The origin of text needs to be rounded, just like the translation in the transform because text drawn at subpixel positions is unsupported on some devices. Since the font is integer-based, the advance-array does not need to be rounded. Task-number: QTBUG-15263 Reviewed-by: Jason Barron
* Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into ↵Qt Continuous Integration System2010-11-011-1/+1
|\ | | | | | | | | | | | | | | | | | | | | | | | | 4.7-integration * '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2: Doc: Fixing typo Fix QTBUG-14640:oci performance problem with qlonglong 32bit => 16bit conversion has 4byte-aligned output. Fix gcc bug in qReallocAligned Prevented threading related crash in OpenGL module. Fix possible crash in QStaticText and QDeclarativeTextLayout Fix QTBUG-14132 oracle (xe) stored procedures with bind variables get errors
| * Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into ↵Qt Continuous Integration System2010-10-291-1/+1
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4.7-integration * '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2: 32bit => 16bit conversion has 4byte-aligned output. Fix gcc bug in qReallocAligned Prevented threading related crash in OpenGL module. Fix possible crash in QStaticText and QDeclarativeTextLayout Fix QTBUG-14132 oracle (xe) stored procedures with bind variables get errors
| | * Fix possible crash in QStaticText and QDeclarativeTextLayoutEskil Abrahamsen Blomfeldt2010-10-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The QStaticTextItem held an uncounted reference to QFontEngine. The pointer would dangle in some cases where there was no font object referencing the engine and the cache was cleaned out (e.g. when a new application font is added.) Properly count the reference, and also add reference counting to userData to make it harder to shoot yourself in the foot, since the QStaticTextItem class is now being used in different places, Task-number: QTBUG-14446 Reviewed-by: Martin Jones
* | | Fix OpenVG painting artifacts after restoreState().Jason Barron2010-11-011-0/+1
|/ / | | | | | | | | | | | | | | | | | | When the state is restored and the 'dirty' flag indicates that the clip state has changed, the paint engine needs to set 'scissorDirty' flag to true so that updateScissor() applies the restored clip region to the scissor rects. Task-number: QTBUG-14907 Reviewed-by: Jani Hautakangas
* | Fallback to vgWritePixels in drawPixmap.Jani Hautakangas2010-10-281-9/+77
|/ | | | | | | | | | Use vgWritePixels, if possible, in case where VGImage for QPixmap can't be allocated due to low GPU memory situation. This patch also renames some VG paint engine internal functions to clarify their purpose. Task-number: QT-3589 Reviewed-by: Jason Barron
* Compile fix for OpenVG without VGFont.Samuel Rødal2010-10-111-7/+2
| | | | | | ShivaVG doesn't have VGFont support for example. Reviewed-by: Jason Barron
* Revert "When using complex transformations rendering goes easily off by one ↵Jani Hautakangas2010-10-041-92/+66
| | | | | | | | | | | | | pixel." This reverts commit 2acdc634ee895af4a9738c0f6c2496e388afba38. Originally this fixed QT-3791 but it caused lots of problems in other sites. So reverting this will fix QT-4001 but reopens QT-3791. QT-4001 blocks Qt 4.7.1 but QT-3791 doesn't. Task-number: QT-4001 Reviewed-by: Jason Barron
* Avoid OpenVG rendering errors when stroking an aliased path.Jason Barron2010-09-231-1/+6
| | | | | | | | | | | | | | Stroking a path can sometimes result in inconsistent rendering especially when combined with a clip. For example, if the logical edge of a clip rect coincides with the logical edge of a path then it can happen that the edge is not painted correctly because the stroke lies outside the bounds of the clip rect. To workaround this problem, we add the 'aliasedCoordinateDelta' such that the rounding will err on the side of caution. This improves the correctness when using the raster engine as a reference. Task-number: QTBUG-13165 Reviewed-by: Samuel
* Fix top-left corner of rounded rects in QPaintEngineExGunnar Sletta2010-09-141-1/+1
| | | | Reviewed-by: Rhys Weatherley
* When using complex transformations rendering goes easily off by one pixel.Jani Hautakangas2010-09-131-66/+92
| | | | | | | | | | This happens because of differences in OpenVG and Qt pixel center point handling. Currently there is no easy generic way to adjust Qt pixels to match OpenVG. This patch adjusts pixels for simple affine transformations by rounding them. Task-number: QT-3791 Reviewed-by: Jason Barron
* Merge remote branch 'origin/4.6' into qt-4.7-from-4.6Thiago Macieira2010-08-111-6/+20
|\ | | | | | | | | | | | | | | Conflicts: src/gui/kernel/qt_s60_p.h src/opengl/qglextensions.cpp src/opengl/qglshaderprogram.cpp tests/auto/mediaobject/tst_mediaobject.cpp
| * Improving text coordinate rounding in the OpenVG paint engineAlessandro Portale2010-08-041-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit b0bbabe728fedb8531fc2837403856bd5ed44e1b fixed text blurriness in the OpenVG paint engine by forcing the coordinates of the text items to integer coordinates (for unrotated, unscaled text). That was not yet enough. In addition to the coordinates, also the d->pathTransform in QVGPaintEngine can have a non-integer translation. This patch makes sure that the text item coordinate combined with the translation result in final integer coordinates. Since it is not possible to set an absolute translation of a QTransform (only relative is possible), first dx() is added to p.x(), then after rounding, it is again substracted. Sam for y, but with opposite prefix, since the y-axis in Qt and in transformation matrices are in opposite directions. The ceil stunt (which I cerated by trial and error) was replaced by floor(x + aliasedCoordinateDelta), which *exactly* what other paint engines do. Task-number: QTBUG-12330 Reviewed-by: Jason Barron
| * Fix proxy widgets with the OpenVG paint engine.Jason Barron2010-07-301-3/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Proxy widgets use the shared painter functionality and this implies that the paint engine's begin function does not get called for each new widget that gets painted. This causes a problem because the system clip gets modified by QPainter, but the paint engine does not realize that this happened and fails to use the new clip. The result is that you can end up painting outside the intended clip area. The fix is to reimplement the virtual systemStateChanged() function in QVGPaintEnginePrivate and make it call updateScissor() to re-evaluate the clipping flags and update the current clip accordingly. A similar fix was done to the OpenGL paint engine way back in 307c2954. Task-number: QTBUG-12486 Reviewed-by: Rhys Weatherley
* | Merge remote branch 'origin/4.6' into qt-4.7-from-4.6Thiago Macieira2010-07-151-2/+12
|\ \ | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: bin/syncqt src/3rdparty/webkit/VERSION src/3rdparty/webkit/WebCore/ChangeLog src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.h src/3rdparty/webkit/WebCore/page/FrameView.cpp src/3rdparty/webkit/WebCore/page/FrameView.h src/3rdparty/webkit/WebCore/platform/ScrollView.cpp src/3rdparty/webkit/WebCore/platform/ScrollView.h src/corelib/plugin/quuid.cpp src/gui/dialogs/qfontdialog.cpp src/multimedia/audio/qaudiodevicefactory.cpp src/opengl/qgl.cpp src/openvg/qpaintengine_vg.cpp tests/auto/qxmlquery/tst_qxmlquery.cpp
| * Avoid a crash in the OpenVG paint engine when clipping to an empty pathJason Barron2010-07-151-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The convertToPainterPath() function assumes that the QVectorPath contains at least one path element when creating the QPainterPath. This is not necessarily the case here though because if QVG_SCISSOR_CLIP is defined and setClipPath() is called with an empty QPainterPath, this is then converted to an empty QVectorPath in QPaintEngineEx::clip() which then calls QVGPaintEngine::clip(). This function then goes on to convert the QVectorPath back into a QPainterPath using the aforementioned function which crashes when attempting to access the first element of the path. In case you are wondering why this seemingly redundant conversion happens at all, it happens because when QVG_SCISSOR_CLIP is defined, we attempt to convert the path to a series of rects for scissor clipping and this conversion function operates on QPainterPath instead of QVectorPath which is what this clip() function was designed to deal with. The fix is to skip over the path conversion for empty paths and go directly to an empty QRegion. Reviewed-by: Alessandro Portale
| * Include qmath.h to get the definition of ceil()Rhys Weatherley2010-07-051-0/+1
| | | | | | | | Reviewed-by: Julian de Bhal
| * Avoid blurry text with OpenVG on SymbianAlessandro Portale2010-06-301-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Qt's graphics system uses qreal as measurement unit. The established paint engines (such as "raster") implicitly round textitem coordinates for technical reasons, e.g. for optimized blitting. Some Qt based Ui libraries (such as QWidgets) can in some cases cause textitems to be drawn on non-integer coordinates. In particular, this happens when centering text. Since these libraries have been developed against the established paint engines with implicit rounding, these non-integer coordinates were never an issue. The new OpenVG paintengine took these coordinates seriously without rounding them. On some OpenVG implementations (e.g. that of some Symbian phones), this led to blurry text rendering. This patch adds coordinate rounding for unscaled, unrotated textitems to the OpenVG paintengine. So that it does the same as the raster paint engine. Task-number: QT-3071 Reviewed-By: Jason Barron
* | Ensure glyphs are upright instead of upside-down.Jason Barron2010-07-121-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The OpenVG paint engine traditionally takes glyph images from the alphaMapForGlyph() function which returns the glyph image in the upright projection. When it constructs a VGImage from this image, it passes a positive data stride which will read the top scanline of the source image into the bottom scanline of the VGImage due to the VG coordinate system. It then uses the path transform where the 'sy' value of the matrix is set to -1 and this re-inverts everything when drawing. With the Symbian based glyph cache, the VGImage is constructed from a RSgImage which is a hardware resource and compensates for the coordinate system used by VG and GL at the time it is created. In the case of the hardware glyph cache, the glyph image is read into the RSgImage using a negative data stride so it does not need to be inverted when drawn. To allow for this, introduce a flag which indicates that the 'sy' entry of the matrix should be flipped such that the glyph is drawn normally. Also in this patch is a change to the glyph origin which now uses the bottom of the glyph metric bounding rect instead of the top due to orientation of the glyph inside the VGImage. Reviewed-by: Alessandro Portale
* | Enable cross-process glyph cache for OpenVG graphics system on Symbian.Jason Barron2010-07-121-0/+4
| | | | | | | | | | | | | | | | | | | | | | This introduces a specialized OpenVG font cache for the Symbian platform. By using RGlyphDataIterator we can create a VGImage to store inside a VGFont without having to upload our own glyph image. This works by utilizing RSgImage which can be used to share handles to graphics memory across processes thus allowing glyph images to be shared by multiple processes and reducing graphics memory usage. Reviewed-by: Alessandro Portale
* | Move QVGFontGlyphCache from source file into a separate headerJason Barron2010-07-121-18/+1
| | | | | | | | | | | | | | Needed in order to subclass and override in the Symbian specific implementation. Reviewed-by: Rhys Weatherley