include/LibreOfficeKit/LibreOfficeKit.h | 24 ++------ include/LibreOfficeKit/LibreOfficeKit.hxx | 60 +++++++++++++++++++++ libreofficekit/source/gtk/lokdocview.cxx | 82 +++++++++++++++--------------- 3 files changed, 110 insertions(+), 56 deletions(-)
New commits: commit 6ba44684e79440f58cbacd0768f3a0638ac36885 Author: Miklos Vajna <[email protected]> Date: Mon Mar 30 12:08:25 2015 +0200 LOK: document remaining Document member functions Change-Id: Idc5836317c01780bb5078d39d8c31775886027d0 diff --git a/include/LibreOfficeKit/LibreOfficeKit.h b/include/LibreOfficeKit/LibreOfficeKit.h index 98aa24d..f108048 100644 --- a/include/LibreOfficeKit/LibreOfficeKit.h +++ b/include/LibreOfficeKit/LibreOfficeKit.h @@ -65,24 +65,19 @@ struct _LibreOfficeKitDocumentClass const char* pFormat, const char* pFilterOptions); #ifdef LOK_USE_UNSTABLE_API - /** Get document type. - * - * @returns an element of the LibreOfficeKitDocumentType enum. - */ + /// @see lok::Document::getDocumentType(). int (*getDocumentType) (LibreOfficeKitDocument* pThis); - /** Get number of part that the document contains. - * Part refers to either indivual sheets in a Spreadsheet, - * or slides in a Slideshow, and has no relevance for - * writer documents. - */ + /// @see lok::Document::getParts(). int (*getParts) (LibreOfficeKitDocument* pThis); - /** Get current part of the document */ + /// @see lok::Document::getPart(). int (*getPart) (LibreOfficeKitDocument* pThis); + /// @see lok::Document::setPart(). void (*setPart) (LibreOfficeKitDocument* pThis, int nPart); + /// @see lok::Document::getPartName(). char* (*getPartName) (LibreOfficeKitDocument* pThis, int nPart); @@ -93,6 +88,7 @@ struct _LibreOfficeKitDocumentClass void (*setPartMode) (LibreOfficeKitDocument* pThis, int nMode); + /// @see lok::Document::paintTile(). void (*paintTile) (LibreOfficeKitDocument* pThis, unsigned char* pBuffer, const int nCanvasWidth, @@ -102,16 +98,12 @@ struct _LibreOfficeKitDocumentClass const int nTileWidth, const int nTileHeight); - /** Get the document sizes in twips. */ + /// @see lok::Document::getDocumentSize(). void (*getDocumentSize) (LibreOfficeKitDocument* pThis, long* pWidth, long* pHeight); - /** Initialize document for rendering. - * Sets the rendering and document parameters to default values - * that are needed to render the document correctly using - * tiled rendering. - */ + /// @see lok::Document::initializeForRendering(). void (*initializeForRendering) (LibreOfficeKitDocument* pThis); void (*registerCallback) (LibreOfficeKitDocument* pThis, diff --git a/include/LibreOfficeKit/LibreOfficeKit.hxx b/include/LibreOfficeKit/LibreOfficeKit.hxx index 25d8980..4f0a77a 100644 --- a/include/LibreOfficeKit/LibreOfficeKit.hxx +++ b/include/LibreOfficeKit/LibreOfficeKit.hxx @@ -21,12 +21,14 @@ namespace lok { +/// The lok::Document class represents one loaded document instance. class Document { private: LibreOfficeKitDocument* mpDoc; public: + /// A lok::Document is typically created by the lok::Office::documentLoad() method. inline Document(LibreOfficeKitDocument* pDoc) : mpDoc(pDoc) {} @@ -36,39 +38,77 @@ public: mpDoc->pClass->destroy(mpDoc); } + /** + * Stores the document's persistent data to a URL and + * continues to be a representation of the old URL. + * + * @param pUrl the location where to store the document + * @param pFormat the format to use while exporting, when omitted, then deducted from pURL's extension + * @param pFilterOptions options for the export filter, e.g. SkipImages. + */ inline bool saveAs(const char* pUrl, const char* pFormat = NULL, const char* pFilterOptions = NULL) { return mpDoc->pClass->saveAs(mpDoc, pUrl, pFormat, pFilterOptions) != 0; } + /// Gives access to the underlying C pointer. inline LibreOfficeKitDocument *get() { return mpDoc; } #ifdef LOK_USE_UNSTABLE_API + /** + * Get document type. + * + * @return an element of the LibreOfficeKitDocumentType enum. + */ inline int getDocumentType() { return mpDoc->pClass->getDocumentType(mpDoc); } + /** + * Get number of part that the document contains. + * + * Part refers to either indivual sheets in a Calc, or slides in Impress, + * and has no relevance for Writer. + */ inline int getParts() { return mpDoc->pClass->getParts(mpDoc); } + /// Get the current part of the document. inline int getPart() { return mpDoc->pClass->getPart(mpDoc); } + /// Set the current part of the document. inline void setPart(int nPart) { mpDoc->pClass->setPart(mpDoc, nPart); } + /// Get the current part's name. inline char* getPartName(int nPart) { return mpDoc->pClass->getPartName(mpDoc, nPart); } + /** + * Renders a subset of the document to a pre-allocated buffer. + * + * Note that the buffer size and the tile size implicitly supports + * rendering at different zoom levels, as the number of rendered pixels and + * the rendered rectangle of the document are independent. + * + * @param pBuffer pointer to the buffer, its size is determined by nCanvasWidth and nCanvasHeight. + * @param nCanvasWidth number of pixels in a row of pBuffer. + * @param nCanvasHeight number of pixels in a column of pBuffer. + * @param nTilePosX logical X position of the top left corner of the rendered rectangle, in TWIPs. + * @param nTilePosY logical Y position of the top left corner of the rendered rectangle, in TWIPs. + * @param nTileWidth logical width of the rendered rectangle, in TWIPs. + * @param nTileHeight logical height of the rendered rectangle, in TWIPs. + */ inline void paintTile( unsigned char* pBuffer, const int nCanvasWidth, @@ -82,11 +122,20 @@ public: nTilePosX, nTilePosY, nTileWidth, nTileHeight); } + /// Get the document sizes in TWIPs. inline void getDocumentSize(long* pWidth, long* pHeight) { mpDoc->pClass->getDocumentSize(mpDoc, pWidth, pHeight); } + /** + * Initialize document for rendering. + * + * Sets the rendering and document parameters to default values that are + * needed to render the document correctly using tiled rendering. This + * method has to be called right after documentLoad() in case any of the + * tiled rendering methods are to be used later. + */ inline void initializeForRendering() { mpDoc->pClass->initializeForRendering(mpDoc); @@ -173,12 +222,14 @@ public: #endif // LOK_USE_UNSTABLE_API }; +/// The lok::Office class represents one started LibreOfficeKit instance. class Office { private: LibreOfficeKit* mpThis; public: + /// A lok::Office is typically created by the lok_cpp_init() function. inline Office(LibreOfficeKit* pThis) : mpThis(pThis) {} @@ -188,6 +239,12 @@ public: mpThis->pClass->destroy(mpThis); } + /** + * Loads a document from an URL. + * + * @param pUrl the URL of the document to load + * @param pFilterOptions options for the import filter, e.g. SkipImages. + */ inline Document* documentLoad(const char* pUrl, const char* pFilterOptions = NULL) { LibreOfficeKitDocument* pDoc = NULL; @@ -203,13 +260,14 @@ public: return new Document(pDoc); } - // return the last error as a string, free me. + /// Returns the last error as a string, the returned pointer has to be freed by the caller. inline char* getError() { return mpThis->pClass->getError(mpThis); } }; +/// Factory method to create a lok::Office instance. inline Office* lok_cpp_init(const char* pInstallPath) { LibreOfficeKit* pThis = lok_init(pInstallPath); commit 75acd49df81e07378982ef0cf18c9e93a75b6739 Author: Miklos Vajna <[email protected]> Date: Mon Mar 30 09:09:01 2015 +0200 lokdocview: move timeout handling to LOKDocView_Impl Change-Id: Id1e14f259af68acbd29784436bb2c5062a0d6563 diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx index f73b0d7..0c6401c 100644 --- a/libreofficekit/source/gtk/lokdocview.cxx +++ b/libreofficekit/source/gtk/lokdocview.cxx @@ -141,6 +141,10 @@ struct LOKDocView_Impl void renderHandle(cairo_t* pCairo, const GdkRectangle& rCursor, cairo_surface_t* pHandle, GdkRectangle& rRectangle); /// Renders pHandle around an rSelection rectangle on pCairo. void renderGraphicHandle(cairo_t* pCairo, const GdkRectangle& rSelection, cairo_surface_t* pHandle); + /// Takes care of the blinking cursor. + static gboolean handleTimeout(gpointer pData); + /// Implementation of the timeout handler, invoked by handleTimeout(). + gboolean handleTimeoutImpl(); }; LOKDocView_Impl::LOKDocView_Impl(LOKDocView* pDocView) @@ -632,31 +636,24 @@ void LOKDocView_Impl::renderGraphicHandle(cairo_t* pCairo, const GdkRectangle& r } } -static void lok_docview_class_init( gpointer ); -static void lok_docview_init( GTypeInstance *, gpointer ); - -SAL_DLLPUBLIC_EXPORT guint lok_docview_get_type() +gboolean LOKDocView_Impl::handleTimeout(gpointer pData) { - static guint lok_docview_type = 0; + LOKDocView* pDocView = static_cast<LOKDocView*>(pData); + return pDocView->m_pImpl->handleTimeoutImpl(); +} - if (!lok_docview_type) +gboolean LOKDocView_Impl::handleTimeoutImpl() +{ + if (m_bEdit) { - char pName[] = "LokDocView"; - GtkTypeInfo lok_docview_info = - { - pName, - sizeof( LOKDocView ), - sizeof( LOKDocViewClass ), - lok_docview_class_init, - lok_docview_init, - NULL, - NULL, - (GtkClassInitFunc) NULL - }; - - lok_docview_type = gtk_type_unique( gtk_scrolled_window_get_type(), &lok_docview_info ); + if (m_bCursorOverlayVisible) + m_bCursorOverlayVisible = false; + else + m_bCursorOverlayVisible = true; + gtk_widget_queue_draw(GTK_WIDGET(m_pEventBox)); } - return lok_docview_type; + + return G_SOURCE_CONTINUE; } enum @@ -707,28 +704,35 @@ static void lok_docview_init( GTypeInstance* pInstance, gpointer ) g_signal_connect_after(pDocView->m_pImpl->m_pEventBox, "expose-event", G_CALLBACK(LOKDocView_Impl::renderOverlay), pDocView); } -SAL_DLLPUBLIC_EXPORT GtkWidget* lok_docview_new( LibreOfficeKit* pOffice ) -{ - LOKDocView* pDocView = LOK_DOCVIEW(gtk_type_new(lok_docview_get_type())); - pDocView->m_pImpl->m_pOffice = pOffice; - return GTK_WIDGET( pDocView ); -} - -/// Takes care of the blinking cursor. -static gboolean lcl_handleTimeout(gpointer pData) +SAL_DLLPUBLIC_EXPORT guint lok_docview_get_type() { - LOKDocView* pDocView = LOK_DOCVIEW(pData); + static guint lok_docview_type = 0; - if (pDocView->m_pImpl->m_bEdit) + if (!lok_docview_type) { - if (pDocView->m_pImpl->m_bCursorOverlayVisible) - pDocView->m_pImpl->m_bCursorOverlayVisible = false; - else - pDocView->m_pImpl->m_bCursorOverlayVisible = true; - gtk_widget_queue_draw(GTK_WIDGET(pDocView->m_pImpl->m_pEventBox)); + char pName[] = "LokDocView"; + GtkTypeInfo lok_docview_info = + { + pName, + sizeof( LOKDocView ), + sizeof( LOKDocViewClass ), + lok_docview_class_init, + lok_docview_init, + NULL, + NULL, + (GtkClassInitFunc) NULL + }; + + lok_docview_type = gtk_type_unique( gtk_scrolled_window_get_type(), &lok_docview_info ); } + return lok_docview_type; +} - return G_SOURCE_CONTINUE; +SAL_DLLPUBLIC_EXPORT GtkWidget* lok_docview_new( LibreOfficeKit* pOffice ) +{ + LOKDocView* pDocView = LOK_DOCVIEW(gtk_type_new(lok_docview_get_type())); + pDocView->m_pImpl->m_pOffice = pOffice; + return GTK_WIDGET( pDocView ); } void renderDocument(LOKDocView* pDocView, GdkRectangle* pPartial) @@ -1035,7 +1039,7 @@ SAL_DLLPUBLIC_EXPORT gboolean lok_docview_open_document( LOKDocView* pDocView, c { pDocView->m_pImpl->m_pDocument->pClass->initializeForRendering(pDocView->m_pImpl->m_pDocument); pDocView->m_pImpl->m_pDocument->pClass->registerCallback(pDocView->m_pImpl->m_pDocument, &lok_docview_callback_worker, pDocView); - g_timeout_add(600, &lcl_handleTimeout, pDocView); + g_timeout_add(600, &LOKDocView_Impl::handleTimeout, pDocView); renderDocument(pDocView, NULL); } _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
