Files
odfstudio/sd
Caolán McNamara 64b1bf3a65 sd: stop refreshing SlideTransitionPane on every shape change
SlideTransitionPane's EventMultiplexerListener default branch called
onSelectionChanged + onChangeCurrentPage on every non-Disposing event,
including ShapeChanged.

ShapeChanged fires for every text edit on any view, so with several
users editing the panel re-emitted its full notebookbar state hundreds
of times to every view, although the page-level transition properties
had not changed.

Sync SlideTransitionPane with CustomAnimationPane so SlideTransitionPane
handles only the same explicit cases. And use the same sort of setup
as that panel does, e.g. take the controller from the ViewShellBase directly like:

commit ec58f5e318
Date:   Thu Dec 16 09:12:41 2004 +0000

    2004/12/10 10:11:53 af 1.2.10.1: #i38630# Using the right controller after views have changed.

Transitions panel update sent on every shape edit since:

commit c4e0d6596d
Date:   Thu Jun 2 15:43:45 2016 +0200

    notebookbar: added slide transition tab

To reproduce: open the Slide Transition sidebar in Impress, click into
a text frame and type. updateControls() fires twice per keystroke via
the ShapeChanged -> default path. With this change it only fires on
actual slide selection changes.

Signed-off-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Change-Id: I12a44e17e982f0502fe8fbf6b61f41cb3ac26e07
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/3236
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
(cherry picked from commit 9a49d09e20b0687b30c9603d427ae2bd87d20638)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/206639
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-06-16 01:20:16 +02:00
..
2026-06-10 22:27:41 +02:00
…
…
…
…
2026-06-01 20:44:45 +02:00

LibreOffice Impress / Draw Application

The core directory for the impress/draw applications.

Think of impress as a hack on top of draw.

sd module contains impress/draw specific code, non-shared UI and part of ppt and pptx filter, few other filters too.

the slideshow UI lives here as well, the slideshow engine is in slideshow module though (including the 3D transitions engine slideshow/source/engine/opengl).

the most used filters are ODF's odp, binary ppt and OOXML's pptx. their locations are listed below:

  • odp import and export filters are in xmloff module (mostly xmloff/source/draw)

  • ppt import is in sd/source/filter/ppt (big shared chunks are also in svx)

  • ppt export is in sd/source/filter/eppt (big shared chunks are also in svx)

  • pptx import is in oox/source/ppt (and uses a lot of oox/source/drawingml and oox/source/*)

  • pptx export is in sd/source/filter/eppt (mostly in pptx-* source files) and shared part is in oox/source/export

PPTX Export / Import Filters

PPTX export filter is split into 2 parts. Impress related part is in sd/source/filter/eppt/pptx-* and the other part is in oox/source/export/ because it contains mostly code related to DrawingML, which is shared with writer and calc ooxml export.

The export filter was written in 2009 IIRC and was not much extended feature-wise lately.

Presenter Console

The main screen uses a hardware-accelerated canvas (e.g. cairo canvas), while the entire secondary screen uses a VCL-canvas that is created in sd::framework::FullScreenPane::CreateCanvas().

The secondary screen contains 3 Panes which each have 2 XWindows for the border area & the actual content, and each content Pane is backed by a sd::presenter::PresenterCanvas that wraps the FullScreenPane's canvas and does clipping.

Future Works

Add custom shapes export (see below). enhance text output, we don't write text style for indentation levels now, need to export a:lvl1pPr, a:lvl2pPr, ... elements.

PPTX import was written by Sun/Oracle and then extended in LibreOffice a lot during bug fixing. It is located in oox/source/ppt and oox/source/drawingml. The areas with most bugs (at least until today) were shape placeholders and text style inheritance.