summaryrefslogtreecommitdiffstats
path: root/svx/README.md
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
commited5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch)
tree7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /svx/README.md
parentInitial commit. (diff)
downloadlibreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.tar.xz
libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.zip
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'svx/README.md')
-rw-r--r--svx/README.md105
1 files changed, 105 insertions, 0 deletions
diff --git a/svx/README.md b/svx/README.md
new file mode 100644
index 000000000..dc4345ad6
--- /dev/null
+++ b/svx/README.md
@@ -0,0 +1,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 wht 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)