office-gobmx/svx/README.md
Andrea Gelmini d66974cd54 Fix typo
Change-Id: Ie249679230c38dd1eaa42d87597401d430771a2c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172710
Tested-by: Julien Nabet <serval2412@yahoo.fr>
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2024-09-01 10:59:49 +02:00

105 lines
4.8 KiB
Markdown

# 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 `SdrView`s)