// // 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 #include #define LOK_USE_UNSTABLE_API 1 #include "LibreOfficeKit.h" #include #include // 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; }