summaryrefslogtreecommitdiff
path: root/ios/source
diff options
context:
space:
mode:
Diffstat (limited to 'ios/source')
-rw-r--r--ios/source/LibreOfficeKit.c116
-rw-r--r--ios/source/LibreOfficeKit.h20
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);