LibreOfficeKit ************** LibreOfficeKit can be used for accessing LibreOffice functionality through C/C++, without any need to use UNO. For now it only offers document conversion (in addition to an experimental tiled rendering API). Integrating LOK into other software ----------------------------------- LOK functionality can be accessed by including LibreOfficeKit.h[xx] in your program. LOK initialisation (lok_init) requires the inclusion of LibreOfficeKitInit.h in your program. If you use the C++ LibreOfficeKit.hxx header, it already includes LibreOfficeKitInit.h for you. (LibreOfficeKit.hxx is a simple and fully inlined C++ wrapper for the same functionality as in LibreOfficeKit.h.) An example program can be seen on: https://github.com/ojwb/lloconv Tiled Rendering --------------- To use LOK Tiled Rendering you will need the following before the LOK includes: #define LOK_USE_UNSTABLE_API (This must be define before ANY LOK header, i.e. including the Init header.) Currently only bitmap-buffer rendering is supported, with a 32-bit BGRA colorspace (further alternatives could feasibly be implemented as needed). Scanlines are ordered top-down (whereas LibreOffice will internally default to bottom-up). Tiled Editing ------------- On top of the tiled rendering API, a set of new methods have been added to the lok::Document class to allow basic editing, too. Communication between the LOK client and LibreOffice is a two-way channel. The client can initiate an action by calling the above mentioned methods. The most important methods for the client -> LibreOffice communication are: - initializeForRendering(), expected to be called right after lok::Office::documentLoad() returned a lok::Document*. - postKeyEvent(), expected to be called when the user provides input on the (soft-)keyboard. - postMouseEvent(), expected to be called when the user generated a touch or mouse event. In general, all coordinates are always in absolute twips (20th of a point, or: 1" = 1440 twips). See lok::Document in LibreOfficeKit.hxx for a full list of methods and their documentation. The other way around (LibreOffice -> LOK client) is implemented using a callback. A LOK client can register a callback using the registerCallback() method. Whenever editing requires some action on the client side, a callback event is emitted. The callback types are described using the LibreOfficeKitCallbackType enumeration in LibreOfficeKitEnums.h, the callback function signature itself is provided by the LibreOfficeKitCallback typedef in LibreOfficeKitTypes.h. The most important callback types: - LOK_CALLBACK_INVALIDATE_TILES: drop all tiles cached on client-side that intersect with the provided rectangle - LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR: need to set the position and/or the size of the cursor - LOK_CALLBACK_TEXT_SELECTION: need to adjust the selection overlay provided by the client as the set of rectangles describing the selection overlay changed There are currently two known LOK clients supporting tiled editing: - gtktiledviewer (see below), which allows testing the LOK core implementation on (desktop) Linux - (LibreOffice on) Android Core has next to no idea what is the LOK client, so for effective development, it's recommended that the core part is developed against gtktiledviewer, and once a feature works there, then implement the Android part, with its slower development iteration (slow uploading to the device, the need to link all object files into a single .so, etc). * Debugging with gdb and gtktiledviewer To run gtktiledviewer: bin/run gtktiledviewer --lo-path=$PWD/instdir/program path/to/test.odt To receive all incoming events from core use G_MESSAGES_DEBUG=all G_MESSAGES_DEBUG=all bin/run gtktiledviewer --lo-path=$PWD/instdir/program ../test.odt To debug with gdb: export LO_TRACE='gdb --tui --args' before bin/run, this will run gtktiledviewer in the debugger instead. LibreOfficeKitGtk ***************** Currently consists of only a very basic GTK+ document viewer widget. The widget uses g_info() instead of SAL_INFO(), use the 'G_MESSAGES_DEBUG=all' environment variable to display those messages. backports'>distro/collabora/libreoffice-7-5+backports LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
path: root/cppuhelper
AgeCommit message (Expand)Author
2016-09-20[API CHANGE] Remove HAVE_GCC_VISIBILITY_FEATURE, always trueStephan Bergmann
2016-09-19cid#1371142: Move semantics for css::uno::WeakReferenceHelperStephan Bergmann
2016-09-13loplugin:override: No more need for the "MSVC dtor override" workaroundStephan Bergmann
2016-09-09cppuhelper: fix loplugin:cppunitassertequals warningsMiklos Vajna
2016-07-11getFactory only called with nullptr "key" argumentStephan Bergmann
2016-07-04Fix some spelling errors in comments and stringsOtto Kekäläinen
2016-06-17cppuhelper: fix use-after-free race in OWeakConnectionPointMichael Stahl
2016-06-17cppuhelper: WeakReference isn't thread-safeMichael Stahl
2016-06-08remove "object is disposed" warning in OBroadcastHelperVar::removeListenerNoel Grandin
2016-05-25Convert XmlReader::Result to scoped enumNoel Grandin
2016-05-24optimise references list handling in OWeakConnectionPoint some moreNoel Grandin
2016-05-24Convert XmlReader::Text to scoped enumNoel Grandin
2016-05-18add some spaces to make it easier to readMarkus Mohrhard
2016-05-16optimise references list handling in OWeakConnectionPointNoel Grandin
2016-05-12loplugin:passstuffbyrefStephan Bergmann
2016-05-10Replace fallthrough comments with new SAL_FALLTHROUGH macroStephan Bergmann
2016-04-27Remove ancient, dead CONTEXT_DIAG codeStephan Bergmann
2016-04-27Remove ancient OSL_DEBUG_LEVEL printfStephan Bergmann
2016-04-21clang-tidy modernize-loop-convert in c*Noel Grandin
2016-04-20loplugin:salbool: Automatic rewrite of sal_False/TrueStephan Bergmann
2016-04-18clean-up: unused using declarations and includesJochen Nitschke
2016-04-13tdf#94306 remove unused boost dependenciesJochen Nitschke
2016-04-11Fix indentationStephan Bergmann
2016-04-10Typo: multible->multipleJulien Nabet
2016-04-10Typo: rubust->robustJulien Nabet
2016-04-08tdf#94306 replace boost::noncopyable in cppuhelperJochen Nitschke
2016-04-05tdf#91794 remove OSL_DEBUG_LEVEL > 1 conditionalsRohan Kumar
2016-04-02cleanup: remove unused Reference.h(xx) includesJochen Nitschke
2016-03-12Let's use the iterator return by erase method (final)Julien Nabet
2016-03-11tdf#97966 redundant static keywords removed 6Wastack
2016-03-10Avoid reserved identifiersStephan Bergmann
2016-03-10Avoid reserved identifiers (use unnamed namespace, just in case)Stephan Bergmann
2016-03-07improve defaultparams lopluginNoel Grandin
2016-02-26Use an XInitialization-based channel to request service mgr pre-initStephan Bergmann
2016-02-17use consistent #define checks for the Windows platformNoel Grandin
2016-02-16use consistent #define checks for the Windows platformNoel Grandin
2016-02-15Re-work cppu::preInitBootstrap()Henry Castro
2016-02-15In loadAllImplementations(), also invoke component factoryHenry Castro
2016-02-15Just abort() in the DISABLE_DYNLOADING case for nowTor Lillqvist
2016-02-15Introduce lok_preinit() to preload all registered UNO implementationsHenry Castro
2016-02-09Remove excess newlinesChris Sherlock
2016-01-31unnecessary use of OUString constructorNoel Grandin
2016-01-04tdf#82775: Don't prematurely dispose single-instance servicesStephan Bergmann