summaryrefslogtreecommitdiffstats
path: root/src/gui/painting
Commit message (Collapse)AuthorAgeFilesLines
* Another fix of cosmetic QPainter::drawPolyline()Eirik Aavitsland2015-09-011-1/+2
| | | | | | | | | | At the edge of the view, a line segment could end up as not producing any pixels even if not clipped by the floating-point clip routine. Make sure the starting point for the next line is still updated correctly for any significant segment lengths. Change-Id: I381a4efb81ce6006f3da4c67abf279aea79e4663 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
* QRasterPaintEngine: Don't detach QImageSérgio Martins2015-08-251-3/+3
| | | | | | | | | Caught being detached a few thousand times per second. Change-Id: I6dd5fd69d7d4f32048cdb7e4ac707f24df6c15f8 (cherry picked from commit 2a81516835c680c29f3de9241a8c28027624ce4f) Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
* Fix potential SIGFPEs in QRasterizer::rasterizeLine()Joni Poikelin2015-08-181-14/+14
| | | | | | Task-number: QTBUG-46985 Change-Id: If9897a6d4014dbcbc1f6cac1c6dd5dc648694b96 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Fix out-of-buffer read on image upscaleAllan Sandfeld Jensen2015-08-101-1/+4
| | | | | | | | | | | Avoid reading from the next pixel when the sample is fully based on the current pixel. This is particular important for the last pixel in an image when the next pixel might be outside the image buffer. Change-Id: I3607f9c6c332d11ff944ca35d216d417368f9fd5 Task-number: QTBUG-47228 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* fix build with no built-in image handlersOswald Buddenhagen2015-08-031-1/+1
| | | | | | | | | | the handlers' .pri files added $$PWD to INCLUDEPATH to make the files self-contained when used externally, but this polluted the include path of the gui module itself, thus hiding incorrect use of QPA includes. Task-number: QTBUG-47400 Change-Id: I576469a71e8ded0b409d62687999c0fa884613f9 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* QPdfEnginePrivate - fix for '-qreal float' build.Timur Pocheptsov2015-07-221-4/+4
| | | | | | | | | | Literals 1. or 0. have type double, but QGradientStop.first is qreal and thus can be float depending on platform/configuration, making qBound call invalid (qBound(0., qreal_value, 1.) for example). Change-Id: Idab668d417a148bffe2495009ae700de980b73cc Task-number: QTBUG-47319 Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* Doc:added doc to undocumented functionsNico Vertriest2015-07-222-0/+18
| | | | | | Task-number: QTBUG-36985 Change-Id: Ic358682b276d67ef804f727bcf14191718613469 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* Fix simple semi-transparent blending of RGB32 on RGB30Allan Sandfeld Jensen2015-07-011-2/+2
| | | | | | | | | We can not rely on the alpha being preserved as part of the source when the source is converted to a2rgb30 which has much less alpha accuracy instead we need to apply the alpha on the result. Change-Id: Iac3104666980825e44ed3490370cdbe21dc68008 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Replace MAC OS X with OS XNico Vertriest2015-06-303-5/+5
| | | | | | Task-number: QTBUG-46374 Change-Id: I7bc633ab551740bd328a24b0ccae1d534af47138 Reviewed-by: Martin Smith <martin.smith@digia.com>
* Doc: rearrange tables with overflowNico Vertriest2015-06-261-1/+1
| | | | | | Task-number: QTBUG-46475 Change-Id: Id599b2eb0dee0c003475c094ad61700150e37e65 Reviewed-by: Venugopal Shivashankar <venugopal.shivashankar@digia.com>
* Further tune curveThreshold setting based on strokeWidthEirik Aavitsland2015-06-221-1/+1
| | | | | | | | | | ad9698713f91a2e706fcd391f9806057649632ff reduced the curvethreshold for wide lines, to fix QTBUG-46151. But as a side effect, the threshold was increased for lines of widths >=0 and <4. This commit fixes that, and also adds a lance test for the issue in QTBUG-46151. Change-Id: I52507db622435fe1d2646640cb0bd9cd8222e453 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Clarify QPainter::drawText() documentation.Mitch Curtis2015-06-031-7/+36
| | | | | | | | | | The difference between rectangle and boundingRect was not quite clear. This patch adds a snippet with a corresponding image, in order to illustrate the difference. Change-Id: Icb1fe737788cc93f1c5baa16bc0e04b8ec728f3a Reviewed-by: Topi Reiniö <topi.reinio@digia.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
* Fix premul conversion from ARGB32 to A2RGB30 formats.Allan Sandfeld Jensen2015-06-034-2/+79
| | | | | | | | | When a premultiplied alpha changes value because it is rounded to fewer bits the premultiplied colors may need to be recalculated with the new value. Otherwise the color will both be wrong and potentially invalid. Change-Id: I9ec74a22aac73cd7ffab04e180cf2bf35bb4c315 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Syntax clean up in qimagescaleAllan Sandfeld Jensen2015-06-021-27/+26
| | | | | | | | | | | | | Corrects a few white-spaces, return statements and else statements to fit Qt coding style. Comment updated to indicate how far the code is getting from its original roots. No semantic changes. Change-Id: Ia2288c501788a291bfc4e8b70e8eb1efb7a90128 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* Fix wrong method name in QColor documentationAllan Sandfeld Jensen2015-06-011-4/+4
| | | | | | | | The methods are called hslHue and hslSaturation. This was leading to dead links. Change-Id: I0997c415958aae9a66fb037d98f8ad3d43b38231 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* Avoid QWidget dependency in QtGuiLaszlo Agocs2015-06-012-7/+7
| | | | | | | | It's not a real dependency as all we need is to store a pointer, but better not to use the name QWidget at all. Change-Id: I30ef1dd44ac7e42c1b9c84675f94088b8c516076 Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
* Clip QOpenGLWidget and QQuickWidget correctlyLaszlo Agocs2015-06-012-16/+47
| | | | | | | | | | | | | Introduce support for the widgets' clipRect(). Right now render-to-texture widgets in scroll areas placed close to each other result in broken (non-existent) clipping. Similarly, stack-on-top widgets fail to clip when placed inside a scroll area. This is now corrected and the qopenglwidget example is enhanced to utilize a scroll area. Task-number: QTBUG-45860 Change-Id: I859a63d61a50d64ba9e87244f83c5969dce12337 Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
* Combine x and y oriented sample helpersAllan Sandfeld Jensen2015-05-302-120/+58
| | | | | | | | The range sampling operates the same in both directions just with different step-sizes, so the code can be unduplicated, Change-Id: I47805a7e925d4058f62c558ef08e79485915e937 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Remove unused call indirectionAllan Sandfeld Jensen2015-05-301-20/+4
| | | | | | | | | | The global variable is a left over from when there was an MMX assembler implementation, and is now just making the compiler's job harder. Change-Id: I686704b64a2f8c68ec8ca83f2ac3e465ded773e0 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Gunnar Sletta <gunnar@sletta.org> Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* Adjust curveThreshold based on strokeWidthAllan Sandfeld Jensen2015-05-221-1/+1
| | | | | | | | | | | | Currently curveThreshold is relative to pen width, this allows wide pen to be increasingly off target. This patch adjust the curveThreshold relative to stroke width, thereby ensuring wide pens stays on the curve. Task-number: QTBUG-46151 Change-Id: Ifd4371aa2853331d02e3c6f6565c243eb1b7ed2e Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* MSVC: Silence compiler warning about INFINITYKai Koehne2015-05-111-9/+8
| | | | | | | | | | | | Contrary to the comment, MSVC does support INFINITY, but always prints a warning when it's used: qpainterpath.cpp(3066) : warning C4756: overflow in constant arithmetic Avoid this by using numeric_limits<T>::infinity. Change-Id: Ie925b036b807378da5298a275fa108347c24519e Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
* Add flip support to QPlatformBackingStore::toTexture()Laszlo Agocs2015-05-062-25/+48
| | | | | | | | | Necessary for iOS. In addition to swizzle we also need to communicate the need for flipping, so switch to flags instead of bools. Task-number: QTBUG-40034 Change-Id: I055e591afd838878503be6f5f69aa7347965d9cf Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
* Make data tables const.Volker Krause2015-05-056-12/+12
| | | | | | | | | | Moves some of them to the .rodata section, the rest at least to .data.rel.ro[.local]. Change-Id: I85676ddf22b0c0097f3f0dce4c3dc018dc29d045 Reviewed-by: Marc Mutz <marc.mutz@kdab.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* Add Q_REQUIRED_RESULT in several placesSérgio Martins2015-05-042-12/+12
| | | | | | Change-Id: Icda3000f1d9f0d41612a50a816aa5de5e32028d4 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* Add noexcept to move constructors and assignment operatorsAllan Sandfeld Jensen2015-05-046-10/+11
| | | | | | | | | Add the noexcept attribute to all move constructors and assignment operators in QtGui that didn't already have it. Change-Id: Idcdf79ae8349b8793e7394b5ae7c08e6111fbc9a Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Short-cut SSE4 unpremultiplyAllan Sandfeld Jensen2015-04-251-2/+4
| | | | | | | | Even with SSE4 optimized unpremultiply it is still significantly faster to skip the calculation on alpha values 0 and 255. Change-Id: Iafe658fea8eacf35a857f292952b0c1ee056139c Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Revert "Remove separate SSE4 unpremultiply function"Allan Sandfeld Jensen2015-04-234-41/+34
| | | | | | | | | | | Could causedSSE4 instructions to be used on non SSE4 machines in cases when qUnpremultiplywas not inlined. This reverts commit 964ccc58534aac436529007000d1c38d76c88834. Change-Id: Ic676ade8f75129e8d37c4d96cbfb2bdb5b794919 Task-number: QTBUG-45741 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Remove separate SSE4 unpremultiply functionAllan Sandfeld Jensen2015-04-164-34/+41
| | | | | | | | | | | Merges the SSE4 specific unpremultiply with the normal version, and adds a SSE2 fallback. There was no reason to split the two since compile time options will ensure the right version is inlined. Also adds short-cut for 0 and 255 values. Change-Id: Ie5aa262f6964219fd3062d4a498f697cf79a4595 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Optimize non-native bilinear transformsAllan Sandfeld Jensen2015-04-161-12/+33
| | | | | | | | Reading directly from an array instead of calling a function pointer is much faster. Change-Id: I833b33448bad064d6f38d2f9ff44138d90206822 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Cleanup and optimization of qimage smoothscaleAllan Sandfeld Jensen2015-04-156-726/+762
| | | | | | | | | Cleaning up smoothscale code. Upscaling is improved using existing optimized interpolation methods, and downscale is given SSE4.1 optimized versions. Change-Id: I7cdc256c26850948aef7dae26fda1622be6b8179 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Support gradients natively in the PDF generatorLars Knoll2015-04-092-233/+270
| | | | | | | | | | | Add native support for linear and radial gradients to our PDF generator. This fixes a couple of issues with both the quality of the generated PDFs as well as sizes of the files. Task-number: QTBUG-42758 Change-Id: Ib905457e11e4dc52443c76b3761bca8d1fbe9bfc Reviewed-by: Stephen Chu <stephen@ju-ju.com> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
* Remove table of mostly null pointersAllan Sandfeld Jensen2015-04-081-2066/+70
| | | | | | | | | The patch moves the initialization of the format to format blend tables to runtime, so we only have to explicitly set the values that are not null. This removes most of the lines in qblendfunctions.cpp. Change-Id: Ie017f380ff11cfb764a631cfea7626786731b5fb Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* [QFontEngineFT] Guarantee correct metrics for alphamap and its bounding boxKonstantin Ritt2015-04-071-11/+0
| | | | | | | | ...for both cached and non-cached modes, by disabling hinting for transformed glyphs in loadGlyphFor(). Change-Id: I13766a653ebd72cbed0f5c38ca3536d042aed762 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Optimize fetching pixel values for SSE2 bilinear samplingAllan Sandfeld Jensen2015-04-041-72/+59
| | | | | | | | | | | Most of the CPU time was spending in fetching pixel values instead of calculating the bilinear sample. The access to vectors unions turns out to be very slow, and should be avoided. This patch removes the uses of vector,int array union in the bilinear sampling for SSE2. Change-Id: Ie765a80963c4899db59a583ea9a59d15e05f2b13 Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Merge remote-tracking branch 'origin/5.4' into 5.5Liang Qi2015-03-311-12/+8
|\ | | | | | | | | | | | | | | | | Conflicts: mkspecs/android-g++/qmake.conf qmake/generators/unix/unixmake2.cpp src/gui/image/qimage_conversions.cpp Change-Id: Ib76264b8c2d29a0228438ec02bd97d4b97545be0
| * Fix rasterization errors in aliased cosmetic drawPolyLineEirik Aavitsland2015-03-191-12/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a cosmetic polyline contained a 1-pixel segment, the next segment would be drawn with wrong starting point. The original fix for QTBUG-26156 had some unwanted side effects (QTBUG-31579 and now QTBUG-42398). It tried to skip start-point update if stroke() did not actually draw anything (because the segment was too small). However, to determine that, it tested for a change in lastPixel. But that was not failsafe; in some cases (1-pixel segment), lastPixel could be unchanged even though the segment had been drawn. With this change, we instead test directly whether stroke() skipped the segment or not. Task-number: QTBUG-42398 Change-Id: Id751db69a18cd1af4f45070db9d5698aa532d22a Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
* | Use QDebugStateSaver to restore space setting in stream operators.Friedemann Kleint2015-03-308-9/+18
| | | | | | | | | | | | | | | | Returning dbg.space() breaks formatting on streams that already have nospace() set. Change-Id: I55e38b018679a67eb40be6b4664505483a3a7d8e Reviewed-by: David Faure <david.faure@kdab.com>
* | Don't remove mnemonics and parentheses under non-Mac system.Debao Zhang2015-03-261-0/+2
| | | | | | | | | | | | | | | | | | SHA: 8e3aacf61bcfe036acdba8fac4d07d68ff0f5ab3 is a mac only patch, but some code introduced by which is not wrapped with Q_OS_MAC. So add the missing Q_OS_MAC here. Change-Id: I748d46b977740e6116dab5659ad1e47d23262a0f Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
* | Improve rounding in QCosmeticStrokerAllan Sandfeld Jensen2015-03-121-4/+8
| | | | | | | | | | | | | | | | | | | | | | Fixes the drawn position of end points in drawLine. Based on a patch by Jørgen Lind, and modified so that it caused no test regressions. Task-number: QTBUG-38144 Change-Id: I24aa28480cc6ae09abf91d80378970565a29b254 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* | QtGui: Fix const correctness in old style castsThiago Macieira2015-03-1212-72/+74
| | | | | | | | | | | | | | Found with GCC's -Wcast-qual. Change-Id: Ia0aac2f09e9245339951ffff13c946844bc31eb8 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
* | Micro optimization to QPainterPrivate::drawGlyphsKonstantin Ritt2015-03-112-7/+4
| | | | | | | | | | | | | | | | Re-use font engine obtained in the first place Change-Id: Icdc2ad404ba9b2aadf2732e95c43a47aa957a6fb Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Add AVX2 autovectorized versions of premultiplyAllan Sandfeld Jensen2015-03-105-65/+171
| | | | | | | | | | | | | | | | | | | | | | | | Following up on using GCC's autovectorizing for faster SSE4.1 premultiply, this patch adds specialized autovectorized versions of premultiply for AVX2, giving another almost doubling in speed. To make the speed up for AVX2 and also SSE4_1 available to non-GCC compilers, the target-specific methods have been moved to separate files. Change-Id: I97ce05be67f4adeeb9a096eef80fd5fb662099f3 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* | Remove non-templated pixellayout methodsAllan Sandfeld Jensen2015-03-041-182/+38
| | | | | | | | | | | | | | | | | | | | | | Removes the non-templated pixellayout methods that were used for non-c++11 builds, and instead initialize with the templated ones verbatim. These versions are faster, and using only those removes duplicate code. Change-Id: I91a7d9122d2601ad282287a2f5ed6b88877d52fb Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* | Merge remote-tracking branch 'origin/5.4' into 5.5Oswald Buddenhagen2015-03-041-2/+2
|\| | | | | | | Change-Id: I556be99cc7ad3fc6f7177542b7444269616a7478
| * Painting: Avoid endless loop for certain bezier curvesEirik Aavitsland2015-03-041-2/+2
| | | | | | | | | | | | | | | | | | | | If the coordinates were too close (at the limit of the number accuracy), the splitting algorithm in QBezier::shifted() would never finish. Ref. testcase in bugreport. Task-number: QTBUG-44674 Change-Id: I2a575cdc6284504ef5e3eb2b749857576fe433c3 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* | Remove some uses of the private Q_PI constantAllan Sandfeld Jensen2015-02-265-10/+8
| | | | | | | | | | | | | | | | | | The patch removes several uses of the private Q_PI constant and removes the qmath_p.h from the includes. A few places are optimized to multiply with reciprocals instead of dividing by Q_PI. Change-Id: I097af6a929e0609d6935563064e81c856005f4bc Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* | Remove unused private definitions and functionAllan Sandfeld Jensen2015-02-261-7/+0
| | | | | | | | | | | | | | | | Remove two definitions and one function not used anywhere in the Qt source code. Change-Id: I275e7c7a2d52dd4ac90cc9e6c782cbdfc14791f3 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* | Minor optimization in SSE4 unpremultiplyAllan Sandfeld Jensen2015-02-261-2/+1
| | | | | | | | | | | | | | Use a more direct conversion to desired unpacked format. Change-Id: I47e4a31c580f294c4e717850c4a420e16214e0a9 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | Remove PREMUL and INV_PREMUL macrosAllan Sandfeld Jensen2015-02-251-5/+0
| | | | | | | | | | | | | | | | These macros have been deprecated since 5.3 and have always been private. Change-Id: I8c80b059a4c026c037f55279a3dfc0dca58c5d5c Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* | Fix underline for centered textEskil Abrahamsen Blomfeldt2015-02-251-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The position of the text itself is always floored, since the glyph contains the subpixel antialiasing. Since no antialiasing is applied to the underline, its position also has to be floored, otherwise it will sometimes appear one pixel to the right of the text it's underlining. [ChangeLog][Text] Fixed position of underline on centered text when the text layout's width is an even number. Task-number: QTBUG-39286 Change-Id: Ib1704ac5b09289f5b3f5a6580443f234d6d868fc Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>