Authors Pranav Kant, Markus Mohrhard,
License CC-BY-SA-3.0
Integrating LibreOffice with Gnome
Documents
Markus Mohrhard, Pranav Kant
2015-08-09
1
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Integrating LibreOffice with Gnome
Documents
Pranav Kant
2
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
History
GSoC 2014 (Andrzej Hunt)
Document rendered as single huge tile
January 2015 (Miklos Vajna)
Render the document using 256x256px tiles but …
Would still render whole document
Still a Gtk2 widget
Blocks the main thread
Can only use from applications written in C/C++
Used GtkTable for rendered tiles, and required lot of polishing.
3
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
This summer
Mozilla
LibreOffice
GNOME
4
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
LibreOfficeKit – Re-using LO core
A very simple C/C++ API for LibreOffice
Exposes the core value of LibreOffice :
File format filters
Tiled rendering ( documents → pixels)
Exposes editing, selections etc.
A very simple header only API – no linking
Fully abstract: function pointers, opaque structs etc.
No socket opened, no plugins/simple init.
Global error message
LibreOffice online, Android, 'loconv' built on this.
5
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
LOKDocView inside LO tree
libreofficekit/
source
gtk
lokdocview.cxx
tilebuffer.cxx
tilebuffer.hxx
qa
gtktiledviewer
gtktiledviewer.cxx (test-bed)
6
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Tiled Rendering
Divide the document into smaller tiles
Render these small tiles independently based on demand
Unstable as of now.
Use #LOK_USE_UNSTABLE_API
Only bitmap-buffer rendering, with 32-bit RGBA colorspace
7
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Fast Tiled Rendering in textures
Tablet display
Large
Pre-rendered
area for fast
pan / zoom etc.
8
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
LOK client - LO core communication
A two way channel
LOK Client → LO Core
InitializeForRendering(), postMouseEvent(), postKeyEvent()
LO Core → LOK Client
Implemented using callbacks
LOK_CALLBACK_INVALIDATE_TILES: drop all given tiles
cached on client-side
LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR: set the
new position of your cursor
LOK_CALLBACK_TEXT_SELECTION: set the selection
overlay rectangle
9
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Existing clients
Gtktiledviewer – a test application inside the LO source code
tree
LibreOffice Android
LibreOffice Online
Unoconv – python frontend for LibreOffice document
conversion
10
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
LOKDocView - Architecture
LibreOffice Core
TileBuffer
LOKDocView
GThreadPool (single thread)
GtkDrawingArea
11
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
LOKDocView - APIs
lok_doc_view_new (GInitable)
lok_doc_view_open_document
lok_doc_view_set_zoom
lok_doc_view_get_zoom
lok_doc_view_post_command
lok_doc_view_set_edit
12
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
LOKDocView – Future
OpenGL for rendering ? GtkGLArea ?
Better tile buffer algorithms
Ship .gir and .typelib files
13
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Using from C
pDocView = lok_doc_view_new (instpath, cancellable, error);
lok_doc_view_open_document(pDocView, docpath,
cancellable, callback, userdata);
14
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Use from any language bindings
Using from javascript
15
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
feature/gsoc-tiled-rendering
16
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
LibreOffice 5.0
17
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Emoji and in-word replacement support
Fast insertion of common emoji and special unicode
characters
e.g.
⌨ as :keyboard:
× as :x:
� as :smile:
– as :--:
⅞ as :7/8:
Done through the correction tables
18
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Better Inteoperability
DOC, DOCX, RTF, XLSX interoperability fixes
Support for MSO 2007 OOXML vs OOXML spec
Improved Keynote import filter
Improved Freehand import filter
Many ODF, OOXML validation fixes
19
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Conditional formatting
Gradient or solid
Minimum and maximum length
Show/Hide value
20
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Spreadsheet formula improvements
Table structured references
Last huge missing formula interoperability feature
A:A / 1:1 entire column/row references
Allows to address whole columns and ranges easily
Better interoperability
New formulas
ENCODEURL, ERROR.TYPE, CEILING.MATH,
FLOOR.MATH
21
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
RenderContext
Previously direct rendering
Now double buffered rendering (for many places already)
Previously:
22
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Idle handling
Previously fixed timeouts for different tasks
Rendering (30ms)
Resizing (50ms)
Now work is done when main loop is idle
Still different priorities
Snappier
As fast as possible
23
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Code Quality
Coverity
0.00 score for some time now
More than 10k issues resolved
Crash testing
Testing import and export with 75k bugzilla documents
Unit testing
Growth in unit tests over time
count of various CPPUNIT macros
25,000
20,000 Asserts
15,000 Tests
10,000
5,000
0
3.6 4.1 4.3 5.0
3.5 4.0 4.2 4.4
24
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Compiler plugins
Many new custom clang compiler plugins
simplifybool: return bTest : false : true; to return !bTest;
de-virtualization: avoid unncessary virtual calls
staticmethods: methods that don't access member variables
Many more
Asan (Address sanitizer)
Ubsan (Undefined behavior sanitizer)
Leak sanitizer
25
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Android
tdf.io/androidviewer
Successful tender to get the
project going
Limited editing (disabled in
the official builds)
Uses tiled editing
On LibreOffice core side
same callbacks as iOS,
LibreOffice Online, Gnome
Documents
26
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Web – LibreOffice Online
First prototype based on Broadway
Learned a lot of lessons from it
New design
tdf.io/onlinerepo
Based on LibreOfficeKit
Shares the LibreOffice abstraction with Android, Gnome
Docs, iOS
LibreOffice runs on server
Tiled rendering
Javascript library to interact with server (based on Leaflet)
Developed by Collabora & IceWrap
27
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
5.1 and the future
28
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Reuse Mozilla updater for LibreOffice
Existing update experience is horrible
Get update notification
Go to website
Download new version (more than 100MB)
Install new version
Automatic updater
Only a differential package
Happens in the background
Nathan Yee (through GSoC)
29
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Improve user experience with CMIS
Szymon Kłos (through GSoC)
Gdrive, Alfresco, OneDrive, ...
Was integrated in LibreOffice's own file picker
Not available in gtk, gtk3, windows, OSX, ... file picker
Bad user experience
New menu entry: “Open Remote File...”
30
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Automated error checking in Calc
How to help user prevent
spreadsheet errors?
Spreadsheets are complex
Finding errors is difficult
Surveys shows every
complex spreadsheet
contains errors
Show results in formula
wizard
Unit feature (started by
Andrezj Hunt)
Check for common errors
31
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Other GSoC tasks
Implement Apple Numbers filter (Anurag Kanugo)
Haskell UNO Language Bindings (Jorge Mendes)
Finish integration of Firebird backend (Popa Adrian Marius)
Dynamic Text Chaining (Matteo Campanelli)
Cleanup internal Calc drawing units (Krisztian Pinter)
Review of the sidebar & its functionality (Rishabh Kumar)
More and better Tests (Varun Dhall)
32
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
33
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Contribute to LibreOffice
https://wiki.documentfoundation.org/Development/Easy_Hack
s
Also tasks related to Gnome
Improve Gtk backends
Better system integration
Libraries provided by LibreOffice to other projects
DLP
libcmis
...
LibreOffice conference
23rd to 25th September in Aarhus, Denmark
34
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents
Thank you …
… listening!
All text and image content in this document is licensed under the Creative Commons Attribution-Share Alike 3.0 License
(unless otherwise specified). "LibreOffice" and "The Document Foundation" are registered trademarks. Their respective logos
and icons are subject to international copyright laws. The use of these therefore is subject to the trademark policy.
35
GUADEC 2015 -- Integrating LibreOffice with Gnome Documents