summaryrefslogtreecommitdiffstats
path: root/src/gui/painting
Commit message (Collapse)AuthorAgeFilesLines
...
* Fix backing store compositor transform with VulkanLaszlo Agocs2023-09-061-3/+4
| | | | | | | | | | | | The problem does not become apparent until a QQuickWidget or QRhiWidget using Vulkan is put into a QScrollArea and then attempted to be scrolled vertically. Fixes: QTBUG-116338 Pick-to: 6.6 6.5 Change-Id: I55367b51aaf2bb8d039bf5e313a0d8c3d7908327 Reviewed-by: Andy Nichols <andy.nichols@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Mark freetype as GPL-2.0-onlyKai Köhne2023-09-061-1/+1
| | | | | | | | | | GPL-2.0 SPDX identifier is deprecated. Use the more explicit GPL-2.0-only instead. Also, in SPDX expressions AND and OR need to be all uppercase. Pick-to: 6.2 6.5 6.6 Change-Id: I0875cf3b9b2020f69e3318d5ff314988a3992409 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Use linear filtering again when QT_WIDGETS_HIGHDPI_DOWNSCALELaszlo Agocs2023-09-042-29/+63
| | | | | | | | | | | | | | | | | | | | | | | | | In ec27b99c2a16994127f77d76eb1fb466c390aee9 the filtering mode is changed from Linear to Nearest since users encountered obscure cases, in particular when multisampling with large sample counts got enabled, where the different filtering mode becomes noticeable. (Qt 5 and Qt 6 up until 6.4 uses Nearest, whereas the OpenGL -> QRhi migration introduced using Linear in 6.4) Meanwhile, the as of now undocumented high DPI downscaling feature got introduced, and that prefers linear filtering. (since that's definitely not a 1:1 mapping when it comes to texture size and the on-screen quad) To reconcile the differences, add support for both kind of samplers, and choose based on the sizes. This should have no effect when not running with the env.var. QT_WIDGETS_RHI=1 QT_WIDGETS_HIGHDPI_DOWNSCALE=1 set, but should restore the pre-6.5.2 look when they are set. Pick-to: 6.6 6.5 Fixes: QTBUG-115461 Change-Id: I42eb8526cb7f74236b5550e26c4570771d2fbfb4 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* Reduce swapchain dependencies in QBackingStoreDefaultCompositorLaszlo Agocs2023-08-282-8/+8
| | | | | | | | | | Instead of passing around the QRhiSwapChain, pass the objects queried from it. There is no point in tying the helper code to a swapchain when all that can function with other (texture-based) render targets as well. Change-Id: I0b14853f537c2d641eb67815c10edfe72e958fdf Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Deprecate Q_ASSUME()Thiago Macieira2023-08-142-3/+3
| | | | | | | | | | | | | | | | | | | | We've known for a long time that this is producing worse code with GCC because of how we implemented in Q_ASSUME_IMPL(). So bite the bullet and actually deprecate the macro, replacing all extant Q_ASSUME() with Q_ASSERT(). The replacement is in C++23. Backporting the support onto Q_ASSUME_IMPL was previously rejected by reviewers. [ChangeLog][Deprecation Notice] The Q_ASSUME() macro is deprecated. This macro has different side-effects depending on the compiler used (GCC compared to Clang and MSVC), and there are certain conditions under which GCC is known to produce worse code than if the macro was absent. To give a hint to the compiler for optimizations, use the C++23 [[assume]] attribute. Change-Id: I80612a7d275c41f1baf0fffd177a3a4ad819fb2d Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Revert "Add QBezier methods for computing a quadratic curves approximation"Eirik Aavitsland2023-08-142-106/+0
| | | | | | | | | | | Were added for 6.6, but turns out they were not quite ready, and also live better together with the quadpath class in the curve renderer. This reverts commit aaccd50224f9a5b22b717ac743634be77c5bc678. Pick-to: 6.6 Change-Id: I58399f8e280d5353cb9c3102e8a8e15dcfa4484a Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Avoid compiler warningEirik Aavitsland2023-08-141-1/+2
| | | | | | | | | | Under some configure options, gcc13 emits an intractable warning on this line. This patch works around it. Fixes: QTBUG-115809 Pick-to: 6.6 6.5 6.2 Change-Id: Ib63f2ad81ebdb1f609a7f42c25119c5ae29f08bb Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Add QRhiWidgetLaszlo Agocs2023-08-142-2/+6
| | | | | | Task-number: QTBUG-113331 Change-Id: I8baa697b4997b05f52acdee0e08d3c368fde5bc2 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Handle Null rhi backend in backingstoreLaszlo Agocs2023-07-311-0/+5
| | | | | | | | Was missing for some reason when this got added in 6.4. Pick-to: 6.6 6.5 Change-Id: I4f8b780c7119649688d8d8a197e8ef59730b0b61 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Handle rhi init failures better in rhi backingstore flushLaszlo Agocs2023-07-311-0/+3
| | | | | | | | | | One may very well force a 3D API not functional. In this case there will be no QRhi. A bunch of warnings will be printed (which is good), but then flush() should not do anything, and that was not handled before. Pick-to: 6.6 6.5 Change-Id: I82139070311152c959d39a553842f4462d8e7811 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Make while iterations over height saferAllan Sandfeld Jensen2023-07-056-18/+18
| | | | | | | | | | Changing the repeating pattern to one that can survive negative numbers, even if most places it isn't possible. Pick-to: 6.6 6.5 Fixes: QTBUG-115003 Change-Id: I636e246b00a9dda65c147dff3e1f1d1a748d1879 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
* Doc: Mark QRasterPaintEngine as \internalVenugopal Shivashankar2023-06-141-2/+1
| | | | | | | | | | | Most of the QWS (Qt Windowing System) classes from the Qt 4 times are cleaned up in Qt 6. Any existing QWS API documentation should be marked \internal. Pick-to: 6.2 6.5 6.6 Task-number: QTBUG-35605 Change-Id: I24201406114feaf8af21403b09375a2ee9a4709e Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* QMacCGContext::initialize: Handle QPixmap without platform pixmapTim Jenssen2023-06-121-5/+8
| | | | | | | | Regression after 585150e3d947d0ee30489f275e7fc39bce4fe059. Pick-to: 6.5 6.6 Change-Id: Ie728904736dd41fb8dfa6ecc9f843beea95b4604 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* rhi widget compositor: Use Nearest filteringLaszlo Agocs2023-06-071-1/+1
| | | | | | | | | To stay compatible what the OpenGL-based code did before Qt 6.4. Pick-to: 6.6 6.5 Fixes: QTBUG-113811 Change-Id: I80d89b21dcace9b5c361b964d56f29e996940c24 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
* rhi: Make it a QPA-style private but semi-public APILaszlo Agocs2023-05-213-13/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | qrhi.h, qshader.h, qshaderdescription.h (and qshaderbaker.h from shadertools; done separately) become "RHI APIs", following the concept of QPA APIs. Mirror completely what is done for QPA headers, but using the "rhi" prefix for the headers. This involves updating syncqt to handle the new category of headers. (a note on the regex: matching everything starting with "qrhi" is not acceptable due to incorrectly matching existing and future headers, hence specifying the four header names explicitly) There is going to be one difference to QPA: the documentation for everything RHI is going to be public and part of the regular docs, not hidden with \internal. In addition to the header renaming and adding the comments and documentation notes and warnings, there is one significant change here: there is no longer a need to do API-specific includes, such as qrhid3d11[_p].h, qrhivulkan[_p].h, etc. These are simply merged into a single header that is then included from qrhi.h. This means that users within Qt, and any future applications can just do #include <rhi/qrhi.h> (or rhi/qshader.h if the QRhi stuff is not relevant), no other headers are needed. There are no changes to functionality in this patch. Only the documentation is expanded, quite a lot, to eliminate all qdoc warnings and make the generated API docs complete. An example, with a quite extensive doc page is added as well. Task-number: QTBUG-113331 Change-Id: I91c749826348f14320cb335b1c83e9d1ea2b1d8b Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Add QBezier methods for computing a quadratic curves approximationEirik Aavitsland2023-05-112-0/+106
| | | | | | | | Useful for operating on QPainterPaths with algorithms designed for quadratic, and not cubic, curves. Change-Id: I1af2d6e4f2b66ce675cde863f67d65fbf9db7d39 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
* QDataBuffer: decrease size on shrink()Mårten Nordheim2023-05-101-0/+3
| | | | | | | | | Having the size potentially be larger than the capacity can't be considered anything other than a bug. Pick-to: 6.5 Change-Id: Id059c0f2c7320f992d897011d7aa944c5cb86058 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Fix specific overflow in qtextlayoutAllan Sandfeld Jensen2023-05-081-0/+17
| | | | | | | | | | Adds qAddOverflow and qMulOverflow definitions to QFixed Fixes: QTBUG-113337 Pick-to: 6.5 6.5.1 6.2 5.15 Change-Id: I13579306defceaccdc0fbb1ec0e9b77c6f8d1af9 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Match deadcode elimination with cpu feature checkAllan Sandfeld Jensen2023-05-043-8/+8
| | | | | | | | | | We check for Haswell, so don't just check for AVX2 when removing possible dead-code. Pick-to: 6.5 6.2 5.15 Fixes: QTBUG-113315 Change-Id: Id341aebcef99065f4b6a96ad0f60b9de40ed55ab Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix compilation warningsYuhang Zhao2023-05-011-5/+5
| | | | | | | | | When compiling with clang-cl 16.0.2, it gives me some warning like: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical] Change-Id: I2a1e80fa94b617c0f8fc6561c326c8ae98cada45 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* Fix QT_WIDGETS_HIGHDPI_DOWNSCALEMorten Sørvig2023-03-281-4/+6
| | | | | | | | | | | | | | | | | The source rect scaling implemented in 79bead6c was incorrect for child windows with an offset, and was reverted in commit d59b2fde, after causing QTBUG-107814. Scale the window rect by the source device pixel ratio to get the source rect. This source DPR can be different from the (target) DPR when HIGHDPI_DOWNSCALE is enabled and will then be a rounded DPR value. Pick-to: 6.5 Fixes: QTBUG-111102 Task-number: QTBUG-107814 Change-Id: I59801bc22c47fc83d63ae4d96e509ab7fffeb760 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
* rhi: widgets: Try sw adapter if D3D11 init failsLaszlo Agocs2023-03-211-0/+6
| | | | | | | | | | | | | | | | | create() for D3D11 performs a smoke test with creating a vertex shader to ensure the created graphics device is actually usable for Qt's purposes. When this fails, create() returns false. Qt Quick automatically retries with the PreferSoftwareRenderer flag which causes picking up the WARP device ("Microsoft Basic Render Driver"). Synchronize this behavior to the QRhi-based backing store so that widget apps using QQuickWidget (or anything running QT_WIDGETS_RHI=1) get this same behavior out of the box. Pick-to: 6.5 6.4 Change-Id: Idff795401dbed8ba465102d075808010d421d34e Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Handle device loss for texture widgetsDavid Redondo2023-03-172-0/+2
| | | | | | | | | | | | Previously the widget stayed black and we printed "QBackingStoreDefaultCompositor: the QRhi has changed unexpectedly, this should not happen". To make it work the compositor is recreated in addition to the rhi and the widgets are informed with the internal events. Change-Id: I982d08bd3530478fe0f827080154c008a92a812e Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* QRegion: upgrade Q_ASSUME to Q_ASSERTThiago Macieira2023-03-021-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | This is to fix the warning qregion.cpp:3582:12: error: ‘ET.EdgeTable::ymax’ may be used uninitialized [-Werror=maybe-uninitialized] Because the previous code in PolygonRegion() was: Q_ASSUME(Count > 1); But Q_ASSUME is becoming a no-op with GCC 12, so when this disappears, compiler rightly considered Count < 2 as a valid input. Therefore, when CreateETandAET() was called and had if (count < 2) return; The compiler again rightly concluded that it was a valid condition (after all, you're checking it!), leading to ET.ymax being used uninitialized. Since that Q_ASSUME really meant the condition of Count < 2 was not permitted, we may as well upgrade to Q_ASSERT in both places. Change-Id: I7f354474adce419ca6c2fffd1748119ef0092fa4 Reviewed-by: Marc Mutz <marc.mutz@qt.io>
* Add special thread pool for Qt GuiAllan Sandfeld Jensen2023-02-254-11/+15
| | | | | | | | | To avoid gui slowdowns due to global pool being blocked. Fixes: QTBUG-109511 Pick-to: 6.5 6.4 6.2 Change-Id: I4e8d91e8fb0bd2e395072a082e992a3c5d3464ad Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
* Fix Qt 6 performance regression when painting outside deviceEirik Aavitsland2023-02-103-17/+24
| | | | | | | | | | | | | | | | | | | | | | | | Painting wide lines and filling would be clipped to cliprect (by default, the device rect) only if the bounding rect coordinates exceeded QT_RASTER_COORD_LIMIT. In Qt 6, that limit was raised from 2^15 to 2^23, so a lot of time could be spent on rasterizing elements that would anyway be outside the rendering area. Fix by instead clipping whenever the path to be painted overshoots the cliprect by a significant margin. At this point, the path is already flattened to straight lines, so clipping is quick and precise. Testing indicates that this solution improves performance a lot when large portions of the elements to be painted fall outside the cliprect, while not causing significant performance hits otherwise. As a side effect, it is then no longer necessary to test the bounding rect explicitly against QT_RASTER_COORD_LIMIT, since we already make sure that the clip rect we check against is within that limit. Fixes: QTBUG-110595 Pick-to: 6.5 6.4 6.2 Change-Id: Iaf1afbb481c2d7059405f334278796ad46f5bcb6 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* QtGui: Fix some macro clashesAmir Masoud Abdol2023-02-072-0/+4
| | | | | | | | | | Macro Q_FIXED_POINT_SCALE in qpathssimplifier.cpp clashes with the macro with similar name in qtriangulator Pick-to: 6.5 Task-number: QTBUG-109394 Change-Id: I02732ae62238e8b7fae0630764fdd33b6203afe3 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Avoid multiple transformation of the clip pathSanthosh Kumar2023-02-071-1/+0
| | | | | | | | | | | | | | | | | | The painter saves existing paint engine state in the stack and restore back to the previous state after performing required paint operation. The clip path stored as part of paint engine state is getting translated more than once during save and restore operation. This multiple transformation of the same clip path causes incorrect translation within the plane. To fix this issue, during restore, remove translation of clip path with redirection matrix. Fixes: QTBUG-109518 Pick-to: 6.5 6.4 6.2 Change-Id: I1509bc7fa4965f2802bce62c1ed27cdb90da617a Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
* rhi: Add D3D12 supportLaszlo Agocs2023-02-072-4/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - The optional nice-to-haves DebugMarkers, Timestamps, PipelineCache are not yet implemented (features reported as false, to be implemented later, although buffer/texture resource name setting already works as-is, regardless of DebugMarkers). - Mipmap generation for 3D textures is missing. Won't matter much given that 3D textures are not used in Qt for anything atm. For generating mipmaps for 2D (or 2D array) textures, the MiniEngine compute shader and approach is used. 3D support for the mipmap generator may be added later. 1D textures / arrays are supported except for mipmap generation, and so the OneDimensionalTextureMipmaps feature is reported as false. - Qt Quick and Qt Quick 3D are expected to be fully functional. (unforeseen issues are not impossible, of course) - Uses minimum feature level 11.0 when requesting the device. It is expected to be functional on resource binding tier 1 hardware even, although this has not been verified in practice. - 2 frames in flight with the usual resource buffering (QRhiBuffer::Dynamic is host visible (UPLOAD) and always mapped and slotted, other buffers and textures are device local (DEFAULT). Requests 3 swapchain buffers. Swapchains are mostly like with D3D11 (e.g. FLIP_DISCARD and SCALING_NONE). - The root signature generation is somewhat limited by the SPIR-V binding model and that we need to map every binding point using the nativeResourceBindingMap from the QShader. Thus the root signature is laid out so each stage has its own set of resources, with shader register clashes being prevented by setting the visibility to a given stage. Sampler handling is somewhat suboptimal but we are tied by the binding model and existing API design. It is in a fairly special situation due to the 2048 limit on a shader visible sampler heap, as opposed to 1000000 for SRVs and UAVS, so the approach we use for textures (just stage the CPU SRVs on the (per-frame slot) shader visible heap as they are encountered, effectively treating the heap as a ring buffer) would quickly lead to having to switch heaps many times with scenes with many draw calls and sampledTexture/sampler bindings in the srb. Whereas static samplers, which would be beautiful, are impossible to utilize safely since we do not have that concept (i.e. samplers specified upfront, tied to the graphics/compute pipeline) in the QRhi API, and an srb used at pipeline creation may change its associated resources, such as the QRhiSampler reference, by the time the shader resources are set for the draw call (or another, compatible srb may get used altogether), so specifying the samplers at root signature creation time is impossible. Rather, the current approach is to treat each sampler as a separate root parameter (per stage) having a descriptor table with a single entry. The shader visible sampler heap has exactly one instance of each unique sampler encountered during the lifetime of the QRhi. - Shader-wise no different from D3D11, works with HLSL/DXBC 5.0 (i.e. existing .qsb files with DXBC in them work as-is). But unlike D3D11, this one will try to pick 6.7, 6.6, ..., down to 5.0 from the QShader, in that order. - Uses D3D12MA for suballocating. As a result it can report vmem allocation statistics like the Vulkan backend, and it does more since the DXGI memory usage (incl. implicit resources) is also reported. This is optional technically, so we also have the option of going straight with the heavyweight CreateCommittedResource() instead. That is what we do if the adapter chosen reports it's software-based or when QT_D3D_NO_SUBALLOC=1 is set. - PreferSoftwareRenderer (picking the WARP device) and the env.var. QT_D3D_ADAPTER_INDEX work as with the D3D11 backend. - It is not unexpected that with large scenes that generate lots of draw calls with multiple textures/samplers per call the performance may be slightly below D3D11 (probably mostly due to descriptor management). Similarly, the reported memory usage will be higher, which is partly natural due to creating heaps, descriptor pools, staging areas, etc. upfront. Will need to be evaluated later how these can be tuned. Change-Id: I5a42580bb65f391ebceaf81adc6ae673cceacb74 Reviewed-by: Andy Nichols <andy.nichols@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* QPaintEngineRaster: port from QSharedPointer to std::shared_ptrMarc Mutz2023-02-022-12/+8
| | | | | | | | | | | | | | Compared to std::shared_ptr, QSharedPointer requires 2x the atomic operations per copy, and does not support QSharedPointer<void>. Port to std::shared_ptr, and drop the Pinnable kludge. Add an optimistic std::move() when we insert into QMultiHash. Pick-to: 6.5 Change-Id: I2ab004b7e8fa36d9e777cd787ffded4076d2880f Reviewed-by: Ahmad Samir <a.samirh78@gmail.com> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Remove redundant qsharedpointer.h #includesAhmad Samir2023-01-311-1/+1
| | | | | | | In some cases added #include <QtCore/qshareddata.h>. Change-Id: Idc84c4ad6b0bd58e1a67af335dfcff67fdf80b2a Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QtGui: Remove superfluous macro qreal_to_fixed_26_6()Friedemann Kleint2023-01-311-1/+0
| | | | | | | | | | | | It appears to be unused in qpaintengine_raster.cpp and causes clashes in CMake Unity (Jumbo) builds. Pick-to: 6.5 Task-number: QTBUG-109394 Initial-patch-by: Amir Masoud Abdol <amir.abdol@qt.io> Change-Id: I51585153ff99812b6539b6268e337e410f2ecc76 Reviewed-by: Amir Masoud Abdol <amir.abdol@qt.io> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
* Gui: Always declare qt_memfill{32|64} as function pointers on x86Ulf Hermann2023-01-122-8/+10
| | | | | | | | | | | | | | Having the declaration of a function depend on compiler flags is a fundamentally bad idea since you can compile different compilation units that all include the header with different flags. This leads to undefined symbols. Pick-to: 6.5 Fixes: QTBUG-109159 Change-Id: I0aede280988e4f10c42d5b1824ad9c96a1e10854 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Liang Qi <liang.qi@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QRgbaFloat: add support for multiplying & comparing as FP16Thiago Macieira2023-01-111-16/+28
| | | | | | | | | | AVX512FP16 expanded FP16 support on x86 to all operations (addition, multiplication, comparison, etc.), so make use of them. Each operation takes just as many cycles as an FP32 operation, but we avoid converting between FP16 and PF32 for those operations. Change-Id: Ide4dbd0777a44ed0870efffd17391370e1638c7a Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* QtGui: fix build with GCC 13's support for FP16Thiago Macieira2023-01-114-26/+28
| | | | | | | | | | | Conversion must be explicit from float, but doesn't need to be from int. qimage.cpp:1915:33: error: converting to ‘qfloat16::NativeType’ {aka ‘_Float16’} from ‘float’ with greater conversion rank [-Werror] Pick-to: 6.5 Change-Id: Ide4dbd0777a44ed0870efffd17390a0e86f1fd7e Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* Doc: Fix qt_attribution.json files using Path for filesKai Köhne2023-01-101-1/+1
| | | | | | | | | | Since qttools commit 39fdcb8e7a, qtattributionsscanner fails if 'Path' is not a directory. Use the 'Files' attribute instead. Pick-to: 6.4 6.5 Fixes: QTBUG-110002 Change-Id: I65fecdcb852ce9abea55f168cd939804bae9ae80 Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* Fix wrong to linear conversionAllan Sandfeld Jensen2022-12-092-1/+2
| | | | | | | | | | | Causing bad rendering of gamma corrected text on non-standard image format paint devices. Pick-to: 6.4 6.2 5.15 Fixes: QTBUG-109169 Change-Id: I6d95e9a42b9ccac609071123dd4535d25e225a29 Reviewed-by: Fabian Vogt <fabian@ritter-vogt.de> Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
* Add support for stereoscopic content in QOpenGLWidgetKristoffer Skau2022-11-284-41/+125
| | | | | | | | | | | | | | | | | Need to add the plumbing necessary to support two textures in QOpenGLWidget and use these in the backing store. The changes required on the RHI level is already done in an earlier patch. Then paintGL() needs to be called twice, once for each buffer. Also add overloads for the other functions of QOopenGLWidget where it makes sense to query for left or right buffer. Then finally create an example. [ChangeLog][Widgets][QOpenGLWidget] Added support for stereoscopic rendering. Fixes: QTBUG-64587 Change-Id: I5a5c53506dcf8a56442097290dceb7eb730d50ce Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Introduce QT_NO_AS_CONST and mark QtBase free of itMarc Mutz2022-11-271-2/+2
| | | | | Change-Id: I680086e767fe6d5c69eb7103b26150293c69b175 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Check if fontEngine is valid in QStaticTextInho Lee2022-11-261-0/+2
| | | | | | | | | | | | When QuickWindow is set as setPersistentGraphics(false) and setPersistentSceneGraph(false), texItems' fontEngines can become invalid with hiding and showing. In this case, a new font engine is created but not used. Pick-to: 6.4 6.2 Fixes: QTBUG-108300 Change-Id: I2bd759724d78cecd62666beb6fb4a01f6063cae1 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
* Finish the undeprecation of the QColor(string) constructorsEirik Aavitsland2022-11-251-2/+0
| | | | | | | Fixes: QTBUG-108743 Pick-to: 6.4 Change-Id: I826ae98a542516a5cf9a4e556d5e8830f9c47a86 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* PDF writer: implement support for document internal linksEirik Aavitsland2022-11-132-41/+109
| | | | | | | | | | | | | | | | | | | | | | | QPdfEngine already supported links to external URIs, but not internal links for navigation in a document. For internal links, PDF supports "named destinations" instead of direct coordinates. That way, we avoid the need for a two-pass implementation. Instead, we just store the name and position of all anchors as we enounter them. At document finishing time, we export the list of named destinations in a PDF "name tree" structure. The PDF named destinations feature uses the same main catalog item ("Names") as the attached files feature. Hence, this commit must slightly change the implementation of file attachment support also, so that the structure supports both. Now, we always add a reference to a Names object in the catalog when we start the document. When we finish, we write that object, making it reference the attached files-structure and/or the named destinations-structure, as needed. Fixes: QTBUG-83458 Change-Id: I9c43e7b423062d3f21965ab8a0d81a53c4dd72cb Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Remove QSpan typedefMarc Mutz2022-11-111-7/+0
| | | | | | | | | | It's in the way of the planned QtCore std::span reimplementation of the same name. Task-number: QTBUG-108124 Change-Id: I55d9391d72644c02e4e4143f4ad2f6756404dcc7 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* Expand QSpan typedef to underlying type QT_FT_SpanMarc Mutz2022-11-114-66/+66
| | | | | | | | | | | | | This frees up the QSpan name for the planned QtCore std::span reimplementation, also called QSpan. This is binary compatible because QSpan was just a typedef and because it's all private API. Task-number: QTBUG-108124 Change-Id: I3b5c1ea82673934e2d1eb490fddeae3f8e6a6ea3 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* [doc] QRasterPaintEngine: remove docs for QSpanMarc Mutz2022-11-111-9/+0
| | | | | | | | | | | | Nothing in this class uses it, so there's no reason to document the typedef. It will just confuse both the compiler and the user when we add QSpan (a std::span implementation). Pick-to: 6.4 6.2 Task-number: QTBUG-108124 Change-Id: Iff0249d2e12a05fca15998a046a0b1bf607b60be Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* Remove unused internal rhi backingstore parametersLaszlo Agocs2022-11-102-17/+1
| | | | | | | | | | | | | There is no user for these at this point: QOpenGLWidget does not need any of these by nature, whereas QQuickWidget is also currently in the works-as-is category, it has no need to communicate the need for additional Vulkan device extensions for example. Pick-to: 6.4 Task-number: QTBUG-108277 Change-Id: Idc09552027377a21a0e904fbb9bfbd95c3d0e0a1 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* QPdf: code tidiesGiuseppe D'Angelo2022-11-081-9/+7
| | | | | | | | | | Refactor an if/else chain over an enumerator into a switch. This unveils that the last else is actually dead code, as there is no Qt::UniteClip any more (removed 11 years ago in 01b72952c38b9193138eabdab6bdab632cd75ebd). Change-Id: Ib702e3f5bfdc39e580a4d872e54a5239d62204f7 Reviewed-by: Lars Knoll <lars@knoll.priv.no>
* Fix spelling of converterVolker Hilsheimer2022-11-041-1/+1
| | | | | | | Primarily in the Cocoa clipboard code. Change-Id: I39fede6144be5a0007a94e2ac2464892c958732f Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* Port from container::count() and length() to size() - V5Marc Mutz2022-11-035-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a semantic patch using ClangTidyTransformator as in qtbase/df9d882d41b741fef7c5beeddb0abe9d904443d8, but extended to handle typedefs and accesses through pointers, too: const std::string o = "object"; auto hasTypeIgnoringPointer = [](auto type) { return anyOf(hasType(type), hasType(pointsTo(type))); }; auto derivedFromAnyOfClasses = [&](ArrayRef<StringRef> classes) { auto exprOfDeclaredType = [&](auto decl) { return expr(hasTypeIgnoringPointer(hasUnqualifiedDesugaredType(recordType(hasDeclaration(decl))))).bind(o); }; return exprOfDeclaredType(cxxRecordDecl(isSameOrDerivedFrom(hasAnyName(classes)))); }; auto renameMethod = [&] (ArrayRef<StringRef> classes, StringRef from, StringRef to) { return makeRule(cxxMemberCallExpr(on(derivedFromAnyOfClasses(classes)), callee(cxxMethodDecl(hasName(from), parameterCountIs(0)))), changeTo(cat(access(o, cat(to)), "()")), cat("use '", to, "' instead of '", from, "'")); }; renameMethod(<classes>, "count", "size"); renameMethod(<classes>, "length", "size"); except that the on() matcher has been replaced by one that doesn't ignoreParens(). a.k.a qt-port-to-std-compatible-api V5 with config Scope: 'Container'. Added two NOLINTNEXTLINEs in tst_qbitarray and tst_qcontiguouscache, to avoid porting calls that explicitly test count(). Change-Id: Icfb8808c2ff4a30187e9935a51cad26987451c22 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Initialize flag memory in raster paint engine to avoid valgrind warningEirik Aavitsland2022-10-241-0/+1
| | | | | | | | | | | | After a new flag bit was added in 6.4, so that the flags no longer exactly fills a byte, valgrind will sometimes give a "... depends on uninitialised value" warning. Fixes: QTBUG-107649 Pick-to: 6.4 Change-Id: Iaaf5ae7bba3ce2476be5b2277839cad1d18aa55f Reviewed-by: Christoph Cullmann <cullmann@kde.org> Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>