summaryrefslogtreecommitdiffstats
path: root/ios/source
diff options
context:
space:
mode:
Diffstat (limited to 'ios/source')
-rw-r--r--ios/source/LibreOfficeKit.c119
-rw-r--r--ios/source/LibreOfficeKit.h34
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
+