diff options
Diffstat (limited to 'ios/source')
-rw-r--r-- | ios/source/LibreOfficeKit.c | 116 | ||||
-rw-r--r-- | ios/source/LibreOfficeKit.h | 20 |
2 files changed, 136 insertions, 0 deletions
diff --git a/ios/source/LibreOfficeKit.c b/ios/source/LibreOfficeKit.c new file mode 100644 index 000000000000..6240f802cf4d --- /dev/null +++ b/ios/source/LibreOfficeKit.c @@ -0,0 +1,116 @@ +// +// 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 +#include <LibreOfficeKit/LibreOfficeKitInit.h> + +#include <osl/process.h> + +//#include <unicode/udata.h> +//#include <unicode/ucnv.h> + +// generated by solenv/bin/native-code.py: +#include "native-code.h" + + +// Force reference to libreofficekit_hook +extern __attribute__((used)) void *libreofficekit_hook(const char *); +static __attribute__((used)) void *(*foop)(const char *) = libreofficekit_hook; + +// 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 +int BridgeLOkit_Init(const char *path) +{ + char bufUserPath[200]; + strcpy(bufUserPath, path); + strcpy(bufUserPath + strlen(path), "/user"); + + // Initialize LibreOfficeKit + if (!kit) { + kit = lok_init_2(path, bufUserPath); + if (!kit) + return 1; + } + return 0; +} + + + +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; +} + + + +int BridgeLOkit_open(const char *path) +{ + document = kit->pClass->documentLoad(kit, path); + document->pClass->initializeForRendering(document, ""); + return 0; +} + + + +int BridgeLOkit_ClientCommand(const char *input) +{ + (void)input; + return 0; +} + + + +int BridgeLOkit_Hipernate() +{ + //FIXME + // check if document needs to be saved, to avoid data loss + // terminate all threads (basically terminate LOkit) + return 0; +} + + + +int BridgeLOkit_LeaveHipernate() +{ + //FIXME + // restart LOkit + // reload document (it may have been changed by other programs, especially if iCloud + return 0; +} + diff --git a/ios/source/LibreOfficeKit.h b/ios/source/LibreOfficeKit.h new file mode 100644 index 000000000000..3c6498c06854 --- /dev/null +++ b/ios/source/LibreOfficeKit.h @@ -0,0 +1,20 @@ +// +// 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 *path); +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); |