d66974cd54
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>
105 lines
4.8 KiB
Markdown
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)
|