summaryrefslogtreecommitdiff
path: root/drawinglayer
AgeCommit message (Collapse)AuthorFilesLines
9 hourstsan: fix data race in BufferedDecompositionFlusherNoel Grandin1-2/+2
WARNING: ThreadSanitizer: data race (pid=271122) Write of size 8 at 0x7244000becc0 by main thread (mutexes: write M0): #0 drawinglayer::primitive2d::BufferedDecompositionPrimitive2D::get2DDecomposition(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&, drawinglayer::geometry::ViewInformation2D const&) const /home/noel/libo-tsan/drawinglayer/source/primitive2d/BufferedDecompositionPrimitive2D.cxx:90 (libdrawinglayercorelo.so+0xb986) #1 drawinglayer::processor2d::BaseProcessor2D::process(drawinglayer::primitive2d::BasePrimitive2D const&) /home/noel/libo-tsan/drawinglayer/source/processor2d/baseprocessor2d.cxx:43 (libdrawinglayerlo.so+0x1284cf) #2 drawinglayer::processor2d::CairoPixelProcessor2D::processBasePrimitive2D(drawinglayer::primitive2d::BasePrimitive2D const&) /home/noel/libo-tsan/drawinglayer/source/processor2d/cairopixelprocessor2d.cxx:4230 (libdrawinglayerlo.so+0x7a370) #3 drawinglayer::processor2d::BaseProcessor2D::process(drawinglayer::primitive2d::Primitive2DContainer const&) /home/noel/libo-tsan/drawinglayer/source/processor2d/baseprocessor2d.cxx:67 (libdrawinglayerlo.so+0x1286f1) #4 drawinglayer::processor2d::CairoPixelProcessor2D::processMaskPrimitive2D(drawinglayer::primitive2d::MaskPrimitive2D const&) /home/noel/libo-tsan/drawinglayer/source/processor2d/cairopixelprocessor2d.cxx:1919 (libdrawinglayerlo.so+0x6fbd9) #5 drawinglayer::processor2d::CairoPixelProcessor2D::processBasePrimitive2D(drawinglayer::primitive2d::BasePrimitive2D const&) /home/noel/libo-tsan/drawinglayer/source/processor2d/cairopixelprocessor2d.cxx:4103 (libdrawinglayerlo.so+0x7a33c) #6 drawinglayer::processor2d::BaseProcessor2D::process(drawinglayer::primitive2d::Primitive2DContainer const&) /home/noel/libo-tsan/drawinglayer/source/processor2d/baseprocessor2d.cxx:67 (libdrawinglayerlo.so+0x1285f1) #7 drawinglayer::processor2d::BaseProcessor2D::visit(drawinglayer::primitive2d::Primitive2DContainer const&) /home/noel/libo-tsan/drawinglayer/source/processor2d/baseprocessor2d.cxx:54 (libdrawinglayerlo.so+0x1285f1) #8 drawinglayer::primitive2d::GroupPrimitive2D::getChildren(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&) const /home/noel/libo-tsan/include/drawinglayer/primitive2d/groupprimitive2d.hxx:76 (libdrawinglayercorelo.so+0x1c51b) #9 drawinglayer::primitive2d::GroupPrimitive2D::get2DDecomposition(drawinglayer::primitive2d::Primitive2DDecompositionVisitor&, drawinglayer::geometry::ViewInformation2D const&) const /home/noel/libo-tsan/drawinglayer/source/primitive2d/groupprimitive2d.cxx:53 (libdrawinglayercorelo.so+0x1c51b) #10 drawinglayer::processor2d::BaseProcessor2D::process(drawinglayer::primitive2d::BasePrimitive2D const&) /home/noel/libo-tsan/drawinglayer/source/processor2d/baseprocessor2d.cxx:43 (libdrawinglayerlo.so+0x1284cf) Previous read of size 8 at 0x7244000becc0 by thread T299 (mutexes: write M1): #0 std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l> > >::time_since_epoch() const /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/chrono.h:950 (libdrawinglayercorelo.so+0xcd6f) #1 std::common_type<std::chrono::duration<long, std::ratio<1l, 1000000000l> >, std::chrono::duration<long, std::ratio<1l, 1000000000l> > >::type std::chrono::operator-<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l> >, std::chrono::duration<long, std::ratio<1l, 1000000000l> > >(std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l> > > const&, std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l> > > const&) /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/chrono.h:1143 (libdrawinglayercorelo.so+0xcd6f) #2 drawinglayer::primitive2d::BufferedDecompositionFlusher::run() /home/noel/libo-tsan/drawinglayer/source/primitive2d/BufferedDecompositionFlusher.cxx:133 (libdrawinglayercorelo.so+0xcd6f) #3 threadFunc /home/noel/libo-tsan/include/osl/thread.hxx:189 (libdrawinglayercorelo.so+0xe0ee) #4 osl_thread_start_Impl(void*) /home/noel/libo-tsan/sal/osl/unx/thread.cxx:237 (libuno_sal.so.3+0x6b419) Change-Id: Ie7afe0501d0d562117fc4418a3fe24853397aefe Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187238 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
5 daysStripPortions: Move tooling closer to EditEngine/Outliner IIArmin Le Grand (Collabora)1-1/+1
Moved central stuff needed for decompose to Primitives closer to EditEngine/Outliner. There is now a StripPortionsHelper as abstract base class with two virtual methods replacing the lambdas used before. That is easily implementable to all needs. Adapted all usages. Also the methods for creating needed Primitives from DrawPortionInfo or DrawBulletInfo is now local/private in EditEngine. This step should still change nothing in functionality, but is more preparation to be able to directly create Primitives from Outliner/EditEngine setups for paint and (re)use. Change-Id: Ie2bcebf4030128f88be229d789944cc2842eafb6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187045 Tested-by: Jenkins Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
5 daystdf#166715 speed up transparent fill operation (II)Noel Grandin1-7/+4
second attempt at landing this, first attempt failed because I did not realise that this is an "extra" transparency on top of any transparency the image might already have. Dramatically speeds up rendering on most backends (the cairo drawinglayer renderer already has an optimised path here). Change-Id: I9da67767a9aa6418eaed478ed2de7710183d53ad Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187053 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
5 daystdf#167135 Transparency setting page style area for image backgroundNoel Grandin1-0/+7
regression from commit 1f61a2ec4e252d2eeccabd65a10650c8ee231a1b Author: Noel Grandin <noelgrandin@gmail.com> Date: Mon May 26 13:26:19 2025 +0200 tdf#166715 speed up transparent fill operation where I mistook "hasTransparency" to mean "does the bitmap have an alpha layer", instead of "there is an __additional__ alpha value applied to this bitmap" Change-Id: If89d95103fc13e7ce78e7056d0a53aa40d48cde2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187034 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Jenkins
12 daysFix typoAndrea Gelmini1-1/+1
Change-Id: Ib50cdbc97e24865baa077442e0dc53fb275bfef6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186727 Tested-by: Jenkins Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
12 daystdf#166709 better to use TransparencePrimitive2D for metafileArmin Le Grand (Collabora)1-3/+25
See comments in code & task. Change-Id: I6c34a86ab713130b427fd5efad83b7028a32bc19 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186721 Tested-by: Jenkins Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
13 daystdf#166709 special handling of transparency for metafile/PDFArmin Le Grand (Collabora)2-0/+102
For handling transparency for tiled bitmaps correctly in metafiles the newly added linear transparency is too much and leading to many single transprent bitmnaps. This is not wrong but too much data and bloating the metafile/PDF. For details and extensive explanations see text in commit. Change-Id: I255db614e0c9eb8cd5130abbdaef4eda1c398684 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186630 Tested-by: Jenkins Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
14 daysattempt to fix CppunitTest_svx_unitNoel Grandin1-1/+5
I see failures on the mac buildbots lately that look like multithreaded access to bitmap stuff. Turn off multithreading here if skia is active. Stack looks like: Fatal exception: Signal 6 Stack: #0 0 libuno_sal.dylib.3 0x000000010b431e4c _ZN3sal13backtrace_getEj + 60 #1 1 libuno_sal.dylib.3 0x000000010b455149 _ZN12_GLOBAL__N_110printStackEi + 41 #2 2 libuno_sal.dylib.3 0x000000010b46f542 _ZN12_GLOBAL__N_121signalHandlerFunctionEiP9__siginfoPv.cold.1 + 34 #3 3 libuno_sal.dylib.3 0x000000010b454ff4 _ZN12_GLOBAL__N_121signalHandlerFunctionEiP9__siginfoPv + 740 #4 4 libsystem_platform.dylib 0x00007ff807942fdd _sigtramp + 29 #5 5 ??? 0x0000000000000000 0x0 + 0 #6 6 libsystem_c.dylib 0x00007ff807839a39 abort + 126 #7 7 libsystem_c.dylib 0x00007ff807838d1c err + 0 #8 8 libvcllo.dylib 0x0000000112cc2d23 _ZN13SkiaSalBitmap13ReleaseBufferEP12BitmapBuffer16BitmapAccessModeb.cold.2 + 35 #9 9 libvcllo.dylib 0x00000001129082f7 _ZN13SkiaSalBitmap13ReleaseBufferEP12BitmapBuffer16BitmapAccessModeb + 855 #10 10 libvcllo.dylib 0x00000001126664fd _ZN16BitmapInfoAccessD2Ev + 61 #11 11 libdrawinglayerlo.dylib 0x00000001221ee37a _ZN12drawinglayer7texture17GeoTexSvxBitmapExD2Ev + 74 #12 12 libdrawinglayerlo.dylib 0x00000001221e62bf _ZN12drawinglayer11processor3d18DefaultProcessor3D33impRenderBitmapTexturePrimitive3DERKNS_11primitive3d24BitmapTexturePrimitive3DE + 543 #13 13 libdrawinglayerlo.dylib 0x00000001221e4c38 _ZN12drawinglayer11processor3d15BaseProcessor3D7processERKNS_11primitive3d20Primitive3DContainerE + 88 #14 14 libdrawinglayerlo.dylib 0x00000001221e7049 _ZN12drawinglayer11processor3d18DefaultProcessor3D22processBasePrimitive3DERKNS_11primitive3d15BasePrimitive3DE + 249 #15 15 libdrawinglayerlo.dylib 0x00000001221e4c38 _ZN12drawinglayer11processor3d15BaseProcessor3D7processERKNS_11primitive3d20Primitive3DContainerE + 88 #16 16 libdrawinglayerlo.dylib 0x000000012218d3d7 _ZZNK12drawinglayer11primitive2d16ScenePrimitive2D21create2DDecompositionERKNS_8geometry17ViewInformation2DEEN8Executor6doWorkEv + 23 #17 17 libcomphelper.dylib 0x000000010b9e39f1 _ZN10comphelper10ThreadTask4execEv + 33 #18 18 libcomphelper.dylib 0x000000010b9e5212 _ZN10comphelper10ThreadPool12ThreadWorker7executeEv + 306 #19 19 libuno_salhelpergcc3.dylib.3 0x000000010aebe3f0 _ZThn16_N9salhelper6Thread3runEv + 32 #20 20 libuno_salhelpergcc3.dylib.3 0x000000010aebeb5f threadFunc + 15 #21 21 libuno_sal.dylib.3 0x000000010b45c151 _ZL21osl_thread_start_ImplPv + 129 #22 22 libsystem_pthread.dylib 0x00007ff80791418b _pthread_start + 99 #23 23 libsystem_pthread.dylib 0x00007ff80790fae3 thread_start + 15 Change-Id: I695e3d675f996aee6ea6b889eb78c39e4dbf509c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186632 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Jenkins
2025-06-12tdf#166922 reduce memory usage in BufferedDecompositionFlusherNoel Grandin3-11/+40
which was keeping stuff alive for too long. regression from commit 8a17b7f0a679ebf21bcfb425186b205d996d129b Author: Noel Grandin <noelgrandin@gmail.com> Date: Thu Mar 13 18:37:54 2025 +0200 tdf#131595 Improve drawinglayer flushing mechanism. Change-Id: I82c3e11d027b22a969d2ce786a0945fea2deb6b9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186389 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2025-06-06null deref of empty AlphaMaskCaolán McNamara2-19/+14
(gdb) print mpReadTransparence.moAccess._M_payload._M_payload._M_value.mpBuffer $18 = (BitmapBuffer *) 0x0 #0 BitmapReadAccess::GetScanline (this=<optimized out>, nY=<optimized out>) at /opt/rh/devtoolset-12/root/usr/include/c++/12/optional:484 #1 BitmapReadAccess::GetPixel (nX=<optimized out>, nY=<optimized out>, this=<optimized out>) at include/vcl/BitmapReadAccess.hxx:83 #2 drawinglayer::texture::GeoTexSvxBitmapEx::impGetAlpha (this=this@entry=0x3a073610, rX=rX@entry=60, rY=rY@entry=420) at drawinglayer/source/texture/texture3d.cxx:111 #3 0x00007f4cc4baba0e in drawinglayer::texture::GeoTexSvxBitmapEx::impGetAlpha (rY=420, rX=<optimized out>, this=0x3a073610) at drawinglayer/source/texture/texture3d.cxx:152 #4 drawinglayer::texture::GeoTexSvxBitmapEx::modifyBColor (this=0x3a073610, rUV=..., rBColor=..., rfOpacity=@0x7f4cabbba638: 1) at drawinglayer/source/texture/texture3d.cxx:152 #5 0x00007f4cc4ba9a31 in ZBufferRasterConverter3D::decideColorAndOpacity (this=this@entry=0x39db6260, rColor=...) at drawinglayer/source/processor3d/zbufferprocessor3d.cxx:119 #6 0x00007f4cc4ba4d9c in ZBufferRasterConverter3D::processLineSpan (this=0x39db6260, rA=..., rB=..., nLine=<optimized out>, nSpanCount=<optimized out>) at drawinglayer/source/processor3d/zbufferprocessor3d.cxx:305 #7 0x00007f4cc438d5f6 in basegfx::RasterConverter3D::rasterconvertB3DArea(int, int) () at basegfx/source/raster/rasterconvert3d.cxx:129 #8 0x00007f4cc4ba0ac7 in drawinglayer::processor3d::DefaultProcessor3D::impRenderPolyPolygonMaterialPrimitive3D(drawinglayer::primitive3d::PolyPolygonMaterialPrimitive3D const&) const () at drawinglayer/source/processor3d/defaultprocessor3d.cxx:448 #9 0x00007f4cc4b9fcc9 in drawinglayer::processor3d::BaseProcessor3D::process (this=this@entry=0x39da04c0, rSource=...) at /opt/rh/devtoolset-12/root/usr/include/c++/12/bits/stl_deque.h:263 #10 0x00007f4cc4ba1ca0 in drawinglayer::processor3d::DefaultProcessor3D::impRenderBitmapTexturePrimitive3D(drawinglayer::primitive3d::BitmapTexturePrimitive3D const&) () at drawinglayer/source/processor3d/defaultprocessor3d.cxx:263 #11 0x00007f4cc4b9fcc9 in drawinglayer::processor3d::BaseProcessor3D::process (this=this@entry=0x39da04c0, rSource=...) at /opt/rh/devtoolset-12/root/usr/include/c++/12/bits/stl_deque.h:263 #12 0x00007f4cc4ba2846 in drawinglayer::processor3d::DefaultProcessor3D::processBasePrimitive3D(drawinglayer::primitive3d::BasePrimitive3D const&) () at include/drawinglayer/processor3d/baseprocessor3d.hxx:63 #13 0x00007f4cc4b9fcc9 in drawinglayer::processor3d::BaseProcessor3D::process (this=0x39da04c0, rSource=...) at /opt/rh/devtoolset-12/root/usr/include/c++/12/bits/stl_deque.h:263 #14 0x00007f4cc4b3a225 in drawinglayer::primitive2d::ScenePrimitive2D::Executor::doWork (this=0x39e13950) at /opt/rh/devtoolset-12/root/usr/include/c++/12/bits/unique_ptr.h:461 #15 0x00007f4cc4868fe7 in comphelper::ThreadTask::exec() () at comphelper/source/misc/threadpool.cxx:319 #16 0x00007f4cc4869c61 in comphelper::ThreadPool::ThreadWorker::execute (this=0x39e13aa0) at /opt/rh/devtoolset-12/root/usr/include/c++/12/bits/unique_ptr.h:461 #17 0x00007f4cc144f33f in salhelper::Thread::run() () at salhelper/source/thread.cxx:39 #18 0x00007f4cc144fe94 in osl::threadFunc (param=0x39e13ab0) at include/osl/thread.hxx:189 #19 0x00007f4cc14e0563 in osl_thread_start_Impl (pData=0x39120800) at sal/osl/unx/thread.cxx:237 #20 0x00007f4ccae5f6db in start_thread (arg=0x7f4cabbcb700) at pthread_create.c:463 #21 0x00007f4ccab8874f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95 Change-Id: Ic30b38dc1c53c9df551a282c6a057d042265419e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186222 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2025-05-28avoid vcl warningNoel Grandin1-0/+9
otherwise I see vcl/source/outdev/stack.cxx:101: OutputDevice::Pop() without OutputDevice::Push() Change-Id: I40ed55ed0cfa2ffea3afae51ef2b3a04f5c35497 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185960 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2025-05-26tdf#166715 speed up transparent fill operationNoel Grandin1-7/+0
Transparent bitmapex drawing works fine these days, so we dont need this fallback path anymore. Dramatically speeds up rendering on most backends (the cairo drawinglayer renderer already has an optimised path here). Change-Id: Ic66a4f2d76a6815d1cb3a439e416f1235be7a544 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185795 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2025-05-26CairoSDPR: Correct BackgroundColorPrimitive2D when Viewport setArmin Le Grand (Collabora)1-0/+10
If the BackgroundColorPrimitive2D has a Viewport set this means we have limitations, so render as needed/defined. This can be done additionally by creating geometry for that range, or just use the decomposition. To do so, just use recursion/decompose in this case. Change-Id: I85fe6eb78fe8d154ced99d53af40ba0d9f1049d8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185718 Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com> Tested-by: Jenkins
2025-05-25Unify on VclPtr::resetMike Kaganski1-1/+1
We used to have two duplicating sets: smart pointer-like VclPtr::reset, and Reference-style VclPtr::set / VclPtr::clear. There is no need in this duplication. Further, in ScopedVclPtr, reset is hidden / removed to avoid skipping disposeAndClear; but the twin functions are kept accessible, possibly as an overlook. This change drops Reference-style VclPtr::set / VclPtr::clear, and unifies on VclPtr::reset, which looks more consistent with the class nature (it is closer to shared_ptr, than to uno::Reference). Doing that uncovered one place, where a ScopedVclPtr was used incorrectly: clear() was used for NotebookbarPopup::m_pParent in NotebookbarPopup dtor. I assume then, that the correct class needed here is VclPtr. Change-Id: I0746075c58d793fabdce1bc357afea8ee455cd8a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185553 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Tested-by: Jenkins
2025-04-29ofz#409354664 Heap-use-after-freeCaolán McNamara2-0/+16
there is no DeInitVCL in fuzzing, so if the BufferedDecompositionFlusher thread is started nothing causes it to exit before _exit. Change-Id: I62463ce8126a0cf0c67f4218bdf66a140f3a021d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184731 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2025-04-17fix BufferedDecompositionFlusher thread namingNoel Grandin1-5/+2
otherwise we end up renaming the main thread Change-Id: I59f8274e13273321d80ab264e1d31e66b70547c4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184318 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2025-04-17Remove obsolete fw declarations from desktop/ drawinglayer/Gabor Kelemen4-8/+0
found with bin/find-unneeded-includes --fwdecl Change-Id: I61ee34a26ed75c0bbbf4dae0359bfeeea37b4296 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183883 Reviewed-by: Gabor Kelemen <gabor.kelemen.extern@allotropia.de> Tested-by: Jenkins
2025-04-03vcl: cairo: split cairo format defines into new headerAron Budea1-0/+1
Change-Id: I1d9b05c600cea860df0596d63e817b30347f563c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183651 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Reviewed-by: Aron Budea <aron.budea@collabora.com> Tested-by: Jenkins
2025-04-01remove SAL_WARN from BufferedDecompositionFlusherNoel Grandin1-1/+0
now that this has stabilised, I don't need it anymore Change-Id: Ibadd043bb11f6070ee66637e3eb0174c9bbe7a63 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183596 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Jenkins
2025-04-01take solarmutex in BufferedDecompositionFlusherNoel Grandin1-5/+10
when clearing objects, I have seen a crash on macos which happens inside skia Change-Id: I8328439917339242d56d813f518e05bbd92adc60 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183572 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2025-03-31lok: slideshow: handle text object in edit modeMarco Cecchetti2-1/+17
This patch allows to render a text object in edit mode by decomposing a TextHierarchyEditPrimitive2D instance in place of using TextEditDrawing. That avoids to have artifacts displayed while playing the slideshow such as a tiny rectangle around the edited text shape. Moreover it allows to animate a single paragraph even when the related text object is in edit mode. Change-Id: I0c27dc0953dd1b0fb7ae70f41e569587f3a623ac Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183532 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
2025-03-31Need to take over BColorModifierStack for *all* content renderingsArmin Le Grand (Collabora)1-0/+4
Change-Id: Iac558c8b653349a86966869bd96dca265a8fb223 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183419 Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com> Tested-by: Jenkins
2025-03-26add translate functions for B2D*PolygonNoel Grandin2-4/+2
Change-Id: I1f9091c47f0145d6fa0a8bc2deb4864244aad896 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183309 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Jenkins
2025-03-26fix BufferedDecompositionFlusher some moreNoel Grandin1-60/+61
if the onShot() method is processing a lot of work, and at the same time teardown happens, it might managed to restart itself after teardown. What ended up being easiest is making this its own thread, and calling shutdown() on that thread from DeInitVCL. See notes in BufferedDecompositionFlusher.cxx. Change-Id: I70fecb259c6e74d2c102065696f7ae2bed15cab6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183320 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Jenkins
2025-03-25loplugin:constparam in drawinglayerNoel Grandin2-2/+2
Change-Id: I7921dc085e348945f8f14c12a15ed6c5414f298e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183294 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2025-03-24cid#1645088 Data race conditionCaolán McNamara1-1/+1
and cid#1645104 Data race condition Change-Id: I91674b3646789cb70ddcea034f34b386c23ea95f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183257 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2025-03-24tdf#165706 additional taking care in CairoSDPRArmin Le Grand (Collabora)2-57/+107
The task is fixed with the previous commit for this tdf number, but convinced me to do also some more safe stuff in the CairoSDPR implementation. The associated OutputDevice *is* now handed over to CairoSDPR and some stuff being done in the helper to create the SDPR is now done directly in the CairoSDPR constructors. Also the FormControl rendering is now closer to what the VCLPrimitiveRenderer does, to be on the safe side. It is still just the FormControl rendering that indirectly uses the associated OutputDevice, but more convenient. The CairoSDPR now also (as VCLRenderer) resets the MapMode in the associated OutputDevice for the time using it - just in case there might be other *indirect* usages like the FormControl one. Change-Id: I5029788655ff81bf360d98312d417b7886208e1f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183204 Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com> Tested-by: Jenkins
2025-03-23cid#1645104 Data race conditionCaolán McNamara1-1/+1
and cid#1645088 Data race condition cid#1645086 Data race condition presumably the mutex is just for maBuffered2DDecomposition, otherwise setting maLastAccess with the mutex held implies all the other maLastAccess uses should be protected with that mutex Change-Id: I918b8854a2abbb8436200c98cf545e217b19bba6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183244 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2025-03-20fix BufferedDecompositionFlusher shutdown crash (2)Noel Grandin1-0/+16
stopping the timer doesn't seem to be sufficient, try deleting all of the contained data at that point in time too. regression from commit 8a17b7f0a679ebf21bcfb425186b205d996d129b Author: Noel Grandin <noelgrandin@gmail.com> Date: Thu Mar 13 18:37:54 2025 +0200 tdf#131595 Improve drawinglayer flushing mechanism. Change-Id: Ic11f287e83c482bfa81b5efb6b378113d15ecd0d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183164 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Jenkins
2025-03-19fix BufferedDecompositionFlusher shutdown crashNoel Grandin1-3/+23
releasing the reference is not enough, we have to call stop() on it. regression from commit 8a17b7f0a679ebf21bcfb425186b205d996d129b Author: Noel Grandin <noelgrandin@gmail.com> Date: Thu Mar 13 18:37:54 2025 +0200 tdf#131595 Improve drawinglayer flushing mechanism. Change-Id: I6686e1fb1d2509413597ce4fa88b23d99a7e047a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183133 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2025-03-17tdf#131595 Improve drawinglayer flushing mechanism.Noel Grandin11-199/+202
Which dramatically speeds up switching between sheets in the referenced document. The problem here is that we have a timer for each buffered primitive. And we have a lot of primitives here. And the TimerManager does not scale well to lots and lots of timer, because it uses a linked list. So this change modifies the flushing mechanism, trading off some precision for some speed. Change-Id: I66a744f06af9b08d4e9b797d11db8d22f4060789 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182876 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2025-03-14use mutex before touching maBuffered2DDecomposition (tdf#131595 related)Noel Grandin9-32/+36
Otherwise we could be reading stale data. And change it to return a bool, the call-sites only care if we have/dont-have the data, and returning a value of a field that should only be accessed under a lock is dodgy. And move the the setRemainingTime call to get2DDecomposition(), because that where we really "use" the data ie. paint with it. Change-Id: I44b5d41fee68985213ecc7d11b4ce1bdcfd119b3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182909 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2025-03-14use mutex before touching maBuffered2DDecomposition (tdf#131595 related)Noel Grandin4-19/+24
Otherwise we could be reading stale data. And change it to return a bool, the call-sites only care if we have/dont-have the data, and returning a value of a field that should only be accessed under a lock is dodgy. And move the the setRemainingTime call to get2DDecomposition(), because that where we really "use" the data ie. paint with it. Change-Id: Ie795465a1177a47f846cf9310d419079e52b8770 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182908 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2025-03-12slideshow: fix para. rendering when using SdrBlockTextPrimitive2DTomaž Vajngerl2-5/+2
If using an empty ViewInformation, it is possible that the prim. decomposition is redone, when a different ViewInformation is used. This removes all visibility flags for the paragraphs, so the whole text is rendered. This fixes the issue by using the same instance of the ViewInformation that is also used later for rendering the primitives to the VirtualDevice, so the buffered decomposition is used. Also a test is added - it checks the hash of the buffer, which should be different for all 3 layers. For this the tostring has to be moved to the common hash.hxx, so we can reuse it in out tests. Includes: Author: Marco Cecchetti <marco.cecchetti@collabora.com> AuthorDate: Wed Mar 5 23:15:33 2025 +0100 slideshow: regression: layer with paragraph has not the expected content Change-Id: I850c6922cdd358eee35074fbff04f238994b2c76 Otherwise 'make -C sd -sr CppunitTest_sd_tiledrendering CPPUNIT_TEST_NAME=testSlideshowLayeredRendering_Animation_DifferentKindOfTextBox' would fail. Change-Id: I4c951215a52e302d3b7b60a30c1b995002e53a4b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182833 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
2025-03-06tdf#161583 drawinglayer,editeng,svx,sd: add "Name" to SvxURLField ...Michael Stahl1-2/+2
... and use for PDF export, instead of the representation, which appears to be wrong. Strangely the Hyperlink dialog already allowed to insert a Name, but it was not actually set in the document. (regression from commit fa3f04bdd4f73a1b3be70dfb709c44638ef7e3d9) Change-Id: Ic21bbe8ead9f85dfbe0827b0051ecb68aeff0beb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182597 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
2025-03-04tdf#165437: regression: CairoSDPR: Exclude SDPR when mirroredArmin Le Grand (Collabora)1-25/+31
This one is similar to tdf#165061 due to not using CairoSDPR when RTL is used, but it seems that not all cases of 'mirroring' are covered with using IsRTLEnabled. It also needs to check HasMirroredGraphics, so I added that. Change-Id: Ia86add7841e69657d8f64f7001eea4a57e927043 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182481 Tested-by: Jenkins Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
2025-02-26use more concrete UNO types in some local varsNoel Grandin1-2/+1
found by a little plugin I created. Plugin parked into store/ folder because it needs hand-holding when run. Change-Id: I2b4da7378f0becbc5f020ac9e78cd765aa0119b4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181768 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Jenkins
2025-02-13tdf#165061 CairoSDPR: regression: Fix RTL usageArmin Le Grand (Collabora)1-1/+4
See comments in task, for now disable using SDPR when RTL is enabled. Change-Id: I9dabe2324fb9e6b190ebb3851dc73b2c7dacf84d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181604 Tested-by: Jenkins Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
2025-02-12tdf#145538 used range loop in textbreakuphelper.cxxasif1961-4/+2
Change-Id: I529dfdee60055cb27af2ef6ba3ae50694ac191e1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180554 Reviewed-by: Hossein <hossein@libreoffice.org> Tested-by: Jenkins
2025-01-31tdf#164476 CiaroSDPR: improve ControlPrimitive2D renderingArmin Le Grand (Collabora)3-15/+58
The task shows that for some situations the Controls do not get vbisualized. These *should* be child windows of the panel containing them, but fir some reason these seem to get incarnated by being 'painted'. Problem is that for SDPRs an OutputDevice to do so is not available - by purpose. Luckily it is possible to use a awt::XGraphics and 'paint' from there. It would also be possible to find out why the child windows do not get constructed and where this may need to be done, but for now just add 'painting' the Controls by using the path utilizing the awt::XGraphics mechanism. For that purpose, do set an awt::XGraphics at the CairoSDPR if it gets constructed using an OutputDevice. It may be that we need to think about how to solve this for SDPRs that get constructed from scratch, e.g. when using createPixelProcessor2DFromScratch. This would mean to somehow construct a awt::XGraphics from a cairo surface, probably using an OutputDevice as in-betwen step, but for now this change solves the problem. Change-Id: I3bc653deab7f0b2902081b0fdbd501dfcc78383b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180967 Tested-by: Jenkins Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
2025-01-29Fix typoAndrea Gelmini1-1/+1
Change-Id: If596f94b80ee9a7d203ccf04f74d94ff8636e069 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180891 Tested-by: Jenkins Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2025-01-29SAL_INFO the result of checkCoordinateLimitWorkaroundNeededForUsedCairoStephan Bergmann1-3/+11
Change-Id: I88a021042ccf4e69d550a15eb9555c8f36437c8c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180887 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <stephan.bergmann@allotropia.de>
2025-01-29tdf#164403 CairoSDPR: adapt hairline widthArmin Le Grand (Collabora)1-9/+20
If Cairo Coordinate Limit Workaround is Active do also adapt hairline width to 1.0 since we (have to) fallback to render in view coordinates. Change-Id: I2216c1728355b5e76ee04f699193a896f9c4fd4b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180860 Tested-by: Jenkins Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
2025-01-25tdf#164793: fix misplaced roundingMike Kaganski1-1/+1
Regression after commit bc0ab08634f59e1a1814e575fe6ad5e50bf1aee1, where I confused what neede to be rounded. Change-Id: Ib150ea1989ed7241747fe4a89bce051478a54bfc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180737 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2025-01-24Fix typo in codeAndrea Gelmini1-9/+9
"paintPolyPoylgonRGBA"->"paintPolyPolygonRGBA" Change-Id: I9969634d9bd286c25b8c1953b1b7ddf1a4bf4629 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180654 Tested-by: Jenkins Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2025-01-23Fix typoAndrea Gelmini1-1/+1
Change-Id: Id343170838639e1b3f6e762f7769a9f0b066f9be Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180653 Reviewed-by: Julien Nabet <serval2412@yahoo.fr> Tested-by: Julien Nabet <serval2412@yahoo.fr>
2025-01-23Fix typosAndrea Gelmini1-2/+2
Change-Id: I6cee3b0b283feff5b153301bed5a0cae2ef88eea Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180652 Tested-by: Julien Nabet <serval2412@yahoo.fr> Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2025-01-23Fix typoAndrea Gelmini1-2/+2
Change-Id: Ia7bf5acfdc6b30f31d29d7938c419f9e26b43ec4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180657 Reviewed-by: Julien Nabet <serval2412@yahoo.fr> Tested-by: Julien Nabet <serval2412@yahoo.fr>
2025-01-22Drop unused 'using namespace'Mike Kaganski1-3/+0
Change-Id: Ieae92ec95fee8d506fde9b21ac6551e83bd2750c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180594 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2025-01-21tdf#164403 CairoSDPR: Solve Cairo's 24.8 coordinate problemArmin Le Grand (Collabora)1-133/+327
Thus Cairo is offering a full-fledged double precision API but internally uses a 24.8 fixed-float format (see https://gitlab. freedesktop.org/cairo/cairo/-/issues/252, thanks Caolan for finding that). This seems to be the case for linux and windows implementations. Due to the API being on double precision this is an implementation detail, but it has to be taken into account when using cairo. It is not officially documented what is a shame - it should be somewhere in the readmes/ documentation at a prominent place. 24.8 means coordinates are limited to +/- 2^23 (usually minus one) and [0/256 .. 255/256] places after comma. This is unfortunately not limited to the view coordinates - that would be acceptable, discrete/pixel areas of that size should be fine, BUT used with transformations. Thus when having any coordinates beyond that limit - and with double precision and transformations we have that here - cairo just 'cuts' the coordinates to it's min/max 24.8 format. This is not acceptable for e.g. a cad system, and even leads to problems in something like an office suite as we see. It implies that using cairo in a safe way means to basically use linear algebra yourself in your app and use cairo only without transformations and with discrete view coordinates (pixels). AND to know about that limitation in the 1st place ... Well, cairo works well and that problem happens until now in one place in writer below page 490. Let's be pragmatic. Key is to *detect* the situation. Always doing own transformations is possible, but not nice: I *could* always transform the polygon to screen coordinates, but that will kill the PolyPolygon buffering mechanism (in chart we have PolyPolygons with 80.000 entries :-); These are held in cairo_path_t form at the original PolyPolygon to not need to transform them every time, but let Cairo do that. The idea is that when Cairo impl may use HW on the system to do that (HW can do that nowadays) while rendering the PolyPolygon from the object model would have to be converted just once to Cairo form and used multiple times... Cairo *should* be fair, document this and allow you to test/ ask if this limit exists in the version you are using, but it does not. Thus I suppose to detect that situation as 'cheap' as possible and react to it - e.g. in writer when below page 490. But not only - it might be possibe to construct draw/impress pages (free definable) that also reach that limit. With detecting as cheap as possible I mean: Naturally you would start to test your geometry to be painted if it is overlapping or outside that range defined by 24.8, but that would already involve transforming all geometry by world and view transformations. I think it should be okay to just take the target area (starting at 0,0 and having a size in pixels) and transforming that back to logical world coordinates. Then this needs to be checked only if view transformation changes, not object transformation. Usually view transformation is setup and all/many objects are painted to it using object transformations. Detection should then only be needed when view transform changes. Thus I added a test (see checkCoordinateLimitWorkaroundNeededForUsedCairo()). This is esecuted once per office runtime. If it detects that the problem is there it sets a flag. Depending on this the view coordinates are then transformed to logic coordinates and checked if these are completely inside the coordinate area that ciaro *can* correctly handle. This has to be done once per CariroSDPR since (currently) ViewTransformation is not changed (has to be adapted if this should happen one day). Based on that the single helpers on the renderer have to be adapted: Simplest is just to render using ViewCoordinates - and do transform object geometry using basegfx/our own stuff that does that correctly (with ease :-). Done that, checked, works AFAICT. What a bad surprise, but I can work around it... Change-Id: Ic33d6ccfe9854af396d0ac9f14c76eb25bb9e4e2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180529 Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com> Tested-by: Jenkins