diff options
Diffstat (limited to 'ios/source')
-rw-r--r-- | ios/source/LibreOfficeKit.c | 119 | ||||
-rw-r--r-- | ios/source/LibreOfficeKit.h | 34 |
2 files changed, 153 insertions, 0 deletions
diff --git a/ios/source/LibreOfficeKit.c b/ios/source/LibreOfficeKit.c new file mode 100644 index 000000000..a4a78e811 --- /dev/null +++ b/ios/source/LibreOfficeKit.c @@ -0,0 +1,119 @@ +// +// This file is part of the LibreOffice project. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// +#include <stdio.h> +#include <TargetConditionals.h> +#define LOK_USE_UNSTABLE_API 1 +#include "LibreOfficeKit.h" + +#include <LibreOfficeKit/LibreOfficeKitInit.h> + +#include <osl/process.h> + +// generated by solenv/bin/native-code.py: +#include <../workdir/CustomTarget/ios/native-code.h> + + +// pointers to our instance +static LibreOfficeKit* kit; +static LibreOfficeKitDocument* document; + + +// Tile variables +static int tileSizeX, tileSizeY, tileMaxY, documentParts; +static double twipsPerXtile, twipsPerYtile; + + + +// Bridge functions to LibreOfficeKit +__attribute__((visibility("default"))) +int BridgeLOkit_Init(const char *appPath, const char *userPath) +{ + + // Initialize LibreOfficeKit + if (!kit) { + kit = lok_init_2(appPath, userPath); + if (!kit) + return 1; + } + return 0; +} + + + +__attribute__((visibility("default"))) +int BridgeLOkit_Sizing(const int countXtiles, const int countYtiles, + const int pixelsXtile, const int pixelsYtile) +{ + long docWidth, docHeight; + + (void)countXtiles; + (void)countYtiles; + + // Remember for later + tileSizeX = pixelsXtile; + tileSizeY = pixelsYtile; + + // Calculate twips to pixels in X,Y direction + document->pClass->getDocumentSize(document, &docWidth, &docHeight); + twipsPerXtile = docWidth / countXtiles; + double ratio = (double)docHeight / (double)docWidth + 0.05; + int x0 = (int)((ratio - (int)ratio) * 10.0); + int x1 = x0 * countXtiles / 10; + int x2 = (int)ratio; + tileMaxY = x1 + x2; + twipsPerYtile = docHeight / tileMaxY; + documentParts = document->pClass->getParts(document); + return 0; +} + + + +__attribute__((visibility("default"))) +int BridgeLOkit_open(const char *path) +{ + document = kit->pClass->documentLoad(kit, path); + document->pClass->initializeForRendering(document, ""); + return 0; +} + + + +__attribute__((visibility("default"))) +int BridgeLOkit_ClientCommand(const char *input) +{ + (void)input; + return 0; +} + + + +__attribute__((visibility("default"))) +int BridgeLOkit_Hipernate() +{ + //FIXME + // check if document needs to be saved, to avoid data loss + // terminate all threads (basically terminate LOkit) + return 0; +} + + + +__attribute__((visibility("default"))) +int BridgeLOkit_LeaveHipernate() +{ + //FIXME + // restart LOkit + // reload document (it may have been changed by other programs, especially if iCloud + return 0; +} + +__attribute__((visibility("default"))) +LibreOfficeKit* BridgeLOkit_getLOK() +{ + return kit; +} diff --git a/ios/source/LibreOfficeKit.h b/ios/source/LibreOfficeKit.h new file mode 100644 index 000000000..abc4fe87a --- /dev/null +++ b/ios/source/LibreOfficeKit.h @@ -0,0 +1,34 @@ +// +// This file is part of the LibreOffice project. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// + +// Bridge functions between LibreOfficeKit library and swift application. +// Only functions mentioned here can be used from the application +// The swift compiler uses this header to generate a needed interface +// The functions (LibreOfficeKit.mm) calls functions directly in LibreOffice + +int BridgeLOkit_Init(const char *appPath, const char *userPath); +int BridgeLOkit_Sizing(const int countXtiles, const int countYtiles, + const int pixelsXtile, const int pixelsYtile); +int BridgeLOkit_open(const char *path); +int BridgeLOkit_ClientCommand(const char *input); +int BridgeLOkit_Hipernate(void); +int BridgeLOkit_LeaveHipernate(void); + + +// Use LOK_USE_UNSTABLE_API to get access to the low level +// LibreOfficeKit. +// REMARK: There are no guarantee these functions will work !! +// REMARK: BridgeLOkit_Init MUST be called, NOT the original init() + +#ifdef LOK_USE_UNSTABLE_API +#include <LibreOfficeKit/LibreOfficeKit.h> +#include <LibreOfficeKit/LibreOfficeKitEnums.h> + +LibreOfficeKit* BridgeLOkit_getLOK(void); +#endif + |