office-gobmx/svx
Caolán McNamara 8c1dbd3188 cid#1607542 COPY_INSTEAD_OF_MOVE
and

cid#1606986 COPY_INSTEAD_OF_MOVE
cid#1557969 COPY_INSTEAD_OF_MOVE
cid#1557837 COPY_INSTEAD_OF_MOVE
cid#1557772 COPY_INSTEAD_OF_MOVE
cid#1557735 COPY_INSTEAD_OF_MOVE
cid#1557672 COPY_INSTEAD_OF_MOVE
cid#1557664 COPY_INSTEAD_OF_MOVE
cid#1557650 COPY_INSTEAD_OF_MOVE
cid#1557642 COPY_INSTEAD_OF_MOVE
cid#1557639 COPY_INSTEAD_OF_MOVE
cid#1557628 COPY_INSTEAD_OF_MOVE
cid#1557623 COPY_INSTEAD_OF_MOVE
cid#1557581 COPY_INSTEAD_OF_MOVE
cid#1557489 COPY_INSTEAD_OF_MOVE
cid#1557473 COPY_INSTEAD_OF_MOVE
cid#1557317 COPY_INSTEAD_OF_MOVE
cid#1557261 COPY_INSTEAD_OF_MOVE
cid#1557146 COPY_INSTEAD_OF_MOVE
cid#1557135 COPY_INSTEAD_OF_MOVE
cid#1557134 COPY_INSTEAD_OF_MOVE
cid#1557079 COPY_INSTEAD_OF_MOVE
cid#1557063 COPY_INSTEAD_OF_MOVE
cid#1557052 COPY_INSTEAD_OF_MOVE
cid#1556982 COPY_INSTEAD_OF_MOVE
cid#1556977 COPY_INSTEAD_OF_MOVE
cid#1556950 COPY_INSTEAD_OF_MOVE
cid#1556943 COPY_INSTEAD_OF_MOVE
cid#1556804 COPY_INSTEAD_OF_MOVE
cid#1556736 COPY_INSTEAD_OF_MOVE
cid#1556658 COPY_INSTEAD_OF_MOVE
cid#1556621 COPY_INSTEAD_OF_MOVE
cid#1556590 COPY_INSTEAD_OF_MOVE
cid#1556579 COPY_INSTEAD_OF_MOVE
cid#1556534 COPY_INSTEAD_OF_MOVE
cid#1556524 COPY_INSTEAD_OF_MOVE
cid#1556478 COPY_INSTEAD_OF_MOVE
cid#1556467 COPY_INSTEAD_OF_MOVE
cid#1556422 COPY_INSTEAD_OF_MOVE
cid#1556314 COPY_INSTEAD_OF_MOVE
cid#1556309 COPY_INSTEAD_OF_MOVE
cid#1556258 COPY_INSTEAD_OF_MOVE
cid#1556143 COPY_INSTEAD_OF_MOVE
cid#1556119 COPY_INSTEAD_OF_MOVE
cid#1556101 COPY_INSTEAD_OF_MOVE
cid#1556097 COPY_INSTEAD_OF_MOVE
cid#1556039 COPY_INSTEAD_OF_MOVE
cid#1555966 COPY_INSTEAD_OF_MOVE
cid#1555948 COPY_INSTEAD_OF_MOVE
cid#1555915 COPY_INSTEAD_OF_MOVE
cid#1555836 COPY_INSTEAD_OF_MOVE
cid#1555748 COPY_INSTEAD_OF_MOVE
cid#1555644 COPY_INSTEAD_OF_MOVE
cid#1555582 COPY_INSTEAD_OF_MOVE
cid#1555478 COPY_INSTEAD_OF_MOVE
cid#1555475 COPY_INSTEAD_OF_MOVE
cid#1555409 COPY_INSTEAD_OF_MOVE
cid#1555372 COPY_INSTEAD_OF_MOVE
cid#1555334 COPY_INSTEAD_OF_MOVE
cid#1555330 COPY_INSTEAD_OF_MOVE
cid#1555310 COPY_INSTEAD_OF_MOVE
cid#1555257 COPY_INSTEAD_OF_MOVE
cid#1555247 COPY_INSTEAD_OF_MOVE
cid#1555147 COPY_INSTEAD_OF_MOVE
cid#1555120 COPY_INSTEAD_OF_MOVE
cid#1555059 COPY_INSTEAD_OF_MOVE
cid#1555016 COPY_INSTEAD_OF_MOVE
cid#1554880 COPY_INSTEAD_OF_MOVE
cid#1554824 COPY_INSTEAD_OF_MOVE
cid#1554808 COPY_INSTEAD_OF_MOVE
cid#1546189 COPY_INSTEAD_OF_MOVE

Change-Id: I2d2f33c603f1596228c9ecb169472ba6751e7826
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177593
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-11-30 22:39:23 +01:00
..
doc
inc Support FixedCellHeight in SdrAutoFitTextPrimitive2D 2024-10-21 11:42:40 +02:00
qa improve loplugin passparamsbyref 2024-11-19 07:46:25 +01:00
sdi support setting writer comment contents from simple-html 2024-10-04 15:28:21 +02:00
source cid#1607542 COPY_INSTEAD_OF_MOVE 2024-11-30 22:39:23 +01:00
uiconfig/ui tdf#164048 sw a11y: improve error/warning levels with 2024-11-29 12:08:48 +01:00
util
AllLangMoTarget_svx.mk
CppunitTest_svx_core.mk
CppunitTest_svx_dialogs_test.mk
CppunitTest_svx_gallery_test.mk
CppunitTest_svx_removewhichrange.mk
CppunitTest_svx_unit.mk
Executable_gengal.mk
IwyuFilter_svx.yaml tdf#146619 Recheck svx/ with IWYU 2023-12-30 22:42:05 +01:00
JunitTest_svx_unoapi.mk
Library_svx.mk Improve loplugin:dyncastvisibility to check for non-inline key functions 2024-11-14 12:49:22 +01:00
Library_svxcore.mk Improve loplugin:dyncastvisibility to check for non-inline key functions 2024-11-14 12:49:22 +01:00
Library_textconversiondlgs.mk
Makefile
Module_svx.mk
Package_gengal.mk
README.md Fix typo 2024-09-01 10:59:49 +02:00
UIConfig_svx.mk tdf#164048 sw a11y: improve error/warning levels with 2024-11-29 12:08:48 +01:00
UITest_svx_table.mk uitest: Clean up redundant usage of gb_UITest_use_oneprocess 2023-11-06 09:26:43 +01:00

Graphics Related Helper Code

Contains graphics related helper code. Lots of the draw and impress code is in this shared library.

  • xoutdev

    this is where a lot of the work would happen to move to the canvas. (what does that mean?)

  • svdraw

    transparent gradient stuff. [seriously? surely much more, too]

SdrObject

The shapes you can see in LibreOffice (like rectangle, etc.) are SdrObjects. They are declared as a hierarchy:

SdrObject <- SdrAttrObj <- E3dObject <- E3dCompoundObject <- E3dCubeObj
    ^ ^ ^             ^            ^              | | ^ ^
    | | |             |            |              | | | +--- E3dExtrudeObj
    | | |             |            |              | | +----- E3dLatheObj
    | | |             |            |              | +------- E3dPolygonObj
    | | |             |            |              +--------- E3dSphereObj
    | | |             |            +--- E3dScene...
    | | |             |
    | | |             +--- SdrTextObj <- SdrObjCustomShape...
    | | |                   ^ ^ ^ ^ ^
    | | |                   | | | | +--- SdrEdgeObj...
    | | |                   | | | +----- SdrMeasureObj...
    | | |                   | | +------- SdrPathObj...
    | | |                   | +--------- SdrRectObj...
    | | |                   +----------- SdrTableObj...
    | | +--- SdrObjGroup...
    | + ---- SdrPageObj...
    +------- SdrVirtObj...

The above is incomplete of course.

SdrModel / SdrView

Copied from svdview.hxx:

First of all the app creates a SdrModel. Then it opens a Win and creates a SdrView. ShowSdrPage() announces a page at SdrView. It's possible to show SdrView in any Wins at once.

SdrView can show as many Wins as it wants at once. Pages are announced or checked out with the help of ShowSdrPage()/HideSdrPage(). For every announced page there is a SdrPageView instance in container aPages. If more than one page is showed, you have to pay attention that the offset parameter of ShowSdrPage() is conformed to the size of the page (to prevent overlapping of two pages).

SdrView itself is inherited from many objects in a chain of inheritance (all that starts with SdrPaintView - that is itself inherited from few classes too):

SdrPaintView <- SdrSnapView <- SdrMarkView <- SdrEditView <- SdrPolyEditView
                                                                 ^
+----------------------------------------------------------------+
|
SdrGlueEditView <- SdrObjEditView <- SdrExchangeView <- SdrDragView
                                                                 ^
+----------------------------------------------------------------+
|
SdrCreateView <- SdrView

From SdrView on, it is not flat, but a real hierarchy again.

Drawing Layer / SdrObject(s)

See drawinglayer/README.md for general information about drawinglayer.

Below is the class diagram that comes from https://web.archive.org/web/20160827020830if_/http://www.openoffice.org:80/marketing/ooocon2006/presentations/wednesday_g11.odp slide number 6.

.------- Model --------------.      .------- View -----------------------------------------.
| SdrObject - ViewContact    | 1..* | ViewObjectContact                                    |
|              getChild()    |------|    getPrimitiveList()  -----> Object(s) ---> SdrView |
|              getVOC()      |      |    getRecPrimitiveList()      Contact                |
|              getViewInd... |      |________|_____________________________________________|
| ...ependentPrimitiveList() |               |
|____________________________|            generates
                                             |           ______
                                             V          /      |
                                   .----------------------.    |
                                   | basePrimitive        |    |
                                   |   getRange()         |<---'
                                   |   getDecomposition() |
                                   |______________________|

For SdrObjects, there are own DrawingLayer primitives in svx/source/sdr/primitive2d

The ViewContact / ViewObject / ViewObjectContact are in svx/source/sdr/contact Decomposes the SdrObjects, and does all sort of operations on them.

If the number of visualizable objects (e.g. SdrObjects) is X, and the number of SdrViews is Y, then:

  • there are X ViewContact instances (1:1 relation with a visualizable object)
  • there are Y ObjectContact instances (1:1 relation with an SdrView)
  • there are X*Y ViewObjectContact instances (1:N relation to both visualizable objects and SdrViews)