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
|
Visual Components Library is responsible for the widgets (windowing, buttons, controls, file-pickers etc.) operating system abstraction, including basic rendering (e.g. the output device).
VCL provides a graphical toolkit similar to gtk+, Qt, SWING etc.
source/
+ the main cross-platform chunk of source
inc/
+ cross-platform abstraction headers
vcl/
+ public headers ("public" to the rest of LibreOffice, that is)
generic/
+ shared helper code for *some* of the backends, actually built into vcl.
headless/
+ a backend renderer that draws to bitmaps
android/
+ Android backend (work in progress, does work to some extent)
aqua/
+ OS X backend
ios/
+ iOS backend (work in progres, does not work, needs re-think
and re-write)
win/
+ Windows backend
unx/
+ X11 backend and its sub-platforms
plugadapt/
+ pluggable framework to select correct unx backend
gtk/
+ GTK2 support
gtk3/
+ GTK3.2+ support
kde/
+ KDE3 support
kde4/
+ KDE4 support
generic/
+ raw X11 support
How the platform abstraction works
+ InitVCL calls 'CreateSalInstance'
+ ths is implemented by the compiled-in platform backend
+ it stores various bits of global state in the
'SalData' (inc/saldatabasic.hxx) structure but:
+ the SalInstance vtable is the primary outward facing gateway
API for platform backends
+ It is a factory for:
SalFrames, SalVirtualDevices, SalPrinters,
Timers, the SolarMutexe, Drag&Drop and other
objects, as well as the primary event loop wrapper.
Note: references to "SV" in the code mean StarView, which was a
portable C++ class library for GUIs, with very old roots, that was
developed by StarDivision. Nowadays it is not used by anything except
LibreOffice (and OpenOffice).
|