rendering individual elements of drawings ...

Marco Cecchetti marco.cecchetti at collabora.com
Wed Jul 10 10:01:42 UTC 2024


Hi Armin,


Il 09/07/24 22:26, Michael Meeks ha scritto:
> Hi Armin,
> 
>      Currently we're in a bit of a rush; but we have some code that can 
> render individual elements of a slide; and I believe we're currently 
> doing this by rendering via to a GDI meta-file and then re-rendering to 
> pixels.
> 
>      I would expect that we could do this rather better in future by 
> rendering with primitives directly to an outputdevice of some kind.
> 
>      Would appreciate a quick poke at Marco's code to see how easy that 
> is to do - at least if it doesn't slow us down coding time-wise =)
> 
>      Marco - do you have some pointers ?

I'm trying to subdivide a slide in layers and render them separately: 
background, master page objects, static shapes, animated shapes, etc.
In order to do so I adapted the rendering code in the slideshow module 
which uses GDI meta-file.
For instance in 
https://git.libreoffice.org/core/+/refs/heads/distro/collabora/co-24.04/slideshow/source/engine/slide/slideimpl.cxx, 
you can see LOKSlideRenderer::createLayerBitmap and 
LOKSlideRenderer::renderLayerBitmapImpl methods. In the latter the call 
to pBitmap->draw(pDevicePixelCanvas) resolves in executing meta actions 
belonging to a gdi meta-file. In the end it is the same done for 
rendering the bitmap when the slideshow is running in Impress: 
https://git.libreoffice.org/core/+/refs/heads/distro/collabora/co-24.04/slideshow/source/engine/slide/slideimpl.cxx#942.
I'm not sure at which stage this GDI meta-file is generated and if it's 
possible to render an XShape instance in another way. In fact the 
slideshow module is very isolated wrt the other LibreOffice modules.

Thanks,
   Marco




More information about the LibreOffice mailing list