blob: b16bd53e8fb449cecfb8c172747d4dfa6cc67b1f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
# 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)
|