desktop/source/lib/init.cxx | 47 ++++++++++++++++---- include/LibreOfficeKit/LibreOfficeKit.h | 3 - include/LibreOfficeKit/LibreOfficeKit.hxx | 9 ++- include/LibreOfficeKit/LibreOfficeKitGtk.h | 7 ++ include/vcl/ITiledRenderable.hxx | 16 ++++++ libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx | 34 ++++++++++++++ libreofficekit/source/gtk/lokdocview.c | 17 +++++++ sc/inc/docuno.hxx | 3 + sc/source/ui/unoobj/docuno.cxx | 18 +++++++ sd/source/ui/inc/unomodel.hxx | 18 +++++++ sd/source/ui/unoidl/unomodel.cxx | 35 ++++++++++++++ sw/inc/unotxdoc.hxx | 3 + sw/source/uibase/uno/unotxdoc.cxx | 15 ++++++ 13 files changed, 212 insertions(+), 13 deletions(-)
New commits: commit 9403558ae247b1783d9149edc4e89772a8883658 Author: Andrzej Hunt <andrzej.h...@collabora.com> Date: Tue Jul 8 16:41:56 2014 +0200 Add Tiled Rendering outline to sd. Change-Id: I810d827f330690f8071b662b9ddd05cc41655a71 diff --git a/sd/source/ui/inc/unomodel.hxx b/sd/source/ui/inc/unomodel.hxx index f9fafdd..6887663 100644 --- a/sd/source/ui/inc/unomodel.hxx +++ b/sd/source/ui/inc/unomodel.hxx @@ -45,6 +45,8 @@ #include <sfx2/sfxbasemodel.hxx> #include <svx/fmdmod.hxx> +#include <vcl/ITiledRenderable.hxx> + #include <editeng/unoipset.hxx> #include <comphelper/servicehelper.hxx> @@ -76,7 +78,8 @@ class SdXImpressDocument : public SfxBaseModel, // implements SfxListener, OWEAK public ::com::sun::star::lang::XServiceInfo, public ::com::sun::star::ucb::XAnyCompareFactory, public ::com::sun::star::presentation::XHandoutMasterSupplier, - public ::com::sun::star::view::XRenderable + public ::com::sun::star::view::XRenderable, + public ::vcl::ITiledRenderable { friend class SdDrawPagesAccess; friend class SdMasterPagesAccess; @@ -218,6 +221,19 @@ public: virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL getRenderer( sal_Int32 nRenderer, const ::com::sun::star::uno::Any& aSelection, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& xOptions ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL render( sal_Int32 nRenderer, const ::com::sun::star::uno::Any& aSelection, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& xOptions ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; + // ITiledRenderable + virtual void paintTile( VirtualDevice& rDevice, + int nOutputWidth, + int nOutputHeight, + int nTilePosX, + int nTilePosY, + long nTileWidth, + long nTileHeight ) SAL_OVERRIDE; + virtual Size getDocumentSize() SAL_OVERRIDE; + virtual void setPart( int nPart ) SAL_OVERRIDE; + virtual int getPart() SAL_OVERRIDE; + virtual int getParts() SAL_OVERRIDE; + // XComponent /** This dispose implementation releases the resources held by the diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx index bc970e9..3320236 100644 --- a/sd/source/ui/unoidl/unomodel.cxx +++ b/sd/source/ui/unoidl/unomodel.cxx @@ -2185,6 +2185,41 @@ void SAL_CALL SdXImpressDocument::render( sal_Int32 nRenderer, const uno::Any& r } } +void SdXImpressDocument::paintTile( VirtualDevice& rDevice, + int nOutputWidth, int nOutputHeight, + int nTilePosX, int nTilePosY, + long nTileWidth, long nTileHeight ) +{ + (void) rDevice; + (void) nOutputWidth; + (void) nOutputHeight; + (void) nTilePosX; + (void) nTilePosY; + (void) nTileWidth; + (void) nTileHeight; +} + +void SdXImpressDocument::setPart( int nPart ) +{ + (void) nPart; +} + +int SdXImpressDocument::getParts() +{ + return 1; +} + +int SdXImpressDocument::getPart() +{ + return 0; +} + +Size SdXImpressDocument::getDocumentSize() +{ + return Size( 100, 100 ); +} + + uno::Reference< i18n::XForbiddenCharacters > SdXImpressDocument::getForbiddenCharsTable() { uno::Reference< i18n::XForbiddenCharacters > xForb(mxForbidenCharacters); commit 1f574485de6d685ffa59e6cf6d09b4533e764f4b Author: Andrzej Hunt <andrzej.h...@collabora.com> Date: Tue Jul 8 15:32:46 2014 +0200 Add part selector to gtktiledviewer. Change-Id: I569c8f0ebf4476c0a247cde15a263d1db956a14b diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx index 3a232e8..194c5fa 100644 --- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx @@ -117,6 +117,30 @@ void changeQuadView( GtkWidget* /*pButton*/, gpointer /* pItem */ ) } } +void populatePartSelector( GtkComboBoxText* pSelector, LOKDocView* pView ) +{ + char sText[10]; + for ( int i = 0; i < lok_docview_get_parts(pView); i++ ) + { + sprintf( sText, "%i", i+1 ); + gtk_combo_box_text_append_text( pSelector, sText ); + } + gtk_combo_box_set_active( GTK_COMBO_BOX(pSelector), 0 ); +} + +void changePart( GtkWidget* pSelector, gpointer /* pItem */ ) +{ + int nPart = gtk_combo_box_get_active( GTK_COMBO_BOX(pSelector) ); + + fprintf( stderr, "we have part %i\n", nPart ); + // We don't really care about the quad view for now -- it's only purpose + // is to check that the edges of tiles aren't messed up, and no real + // reason to maintain it to be able to show other document parts etc. + if ( pDocView ) + { + lok_docview_set_part( LOK_DOCVIEW(pDocView), nPart ); + } +} int main( int argc, char* argv[] ) { @@ -165,6 +189,15 @@ int main( int argc, char* argv[] ) GtkToolItem* pSeparator1 = gtk_separator_tool_item_new(); gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), pSeparator1, -1); + GtkToolItem* pPartSelectorToolItem = gtk_tool_item_new(); + GtkWidget* pComboBox = gtk_combo_box_text_new(); + gtk_container_add( GTK_CONTAINER(pPartSelectorToolItem), pComboBox ); + gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), pPartSelectorToolItem, -1 ); + g_signal_connect( G_OBJECT(pComboBox), "changed", G_CALLBACK(changePart), NULL ); + + GtkToolItem* pSeparator2 = gtk_separator_tool_item_new(); + gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), pSeparator2, -1); + GtkToolItem* pEnableQuadView = gtk_toggle_tool_button_new(); gtk_tool_button_set_label( GTK_TOOL_BUTTON(pEnableQuadView), "Use Quad View" ); gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), pEnableQuadView, -1 ); @@ -181,6 +214,7 @@ int main( int argc, char* argv[] ) pFileName = argv[2]; lok_docview_open_document( LOK_DOCVIEW(pDocView), argv[2] ); + populatePartSelector( GTK_COMBO_BOX_TEXT(pComboBox), LOK_DOCVIEW(pDocView) ); gtk_main(); commit 0e249618295b7ddb314165fe5c83fae2fdbcc46a Author: Andrzej Hunt <andrzej.h...@collabora.com> Date: Tue Jul 8 15:32:20 2014 +0200 LOK DocView: implement part selection. Change-Id: I2e16ca9d2d5fcd25b0435f1b9b0fbcb52b92e012 diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h b/include/LibreOfficeKit/LibreOfficeKitGtk.h index f160925..37d21f0 100644 --- a/include/LibreOfficeKit/LibreOfficeKitGtk.h +++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h @@ -58,8 +58,13 @@ void lok_docview_set_zoom (LOKDocView* pDocView, float fZoom); float lok_docview_get_zoom (LOKDocView* pDocView); +int lok_docview_get_parts (LOKDocView* pDocView); +int lok_docview_get_part (LOKDocView* pDocView); +void lok_docview_set_part (LOKDocView* pDocView, + int nPart); + #ifdef __cplusplus } #endif -#endif \ No newline at end of file +#endif diff --git a/libreofficekit/source/gtk/lokdocview.c b/libreofficekit/source/gtk/lokdocview.c index 12b004e08..4c12777 100644 --- a/libreofficekit/source/gtk/lokdocview.c +++ b/libreofficekit/source/gtk/lokdocview.c @@ -174,4 +174,21 @@ SAL_DLLPUBLIC_EXPORT float lok_docview_get_zoom ( LOKDocView* pDocView ) return pDocView->fZoom; } +SAL_DLLPUBLIC_EXPORT int lok_docview_get_parts( LOKDocView* pDocView ) +{ + return pDocView->pDocument->pClass->getNumberOfParts( pDocView->pDocument ); +} + +SAL_DLLPUBLIC_EXPORT int lok_docview_get_part( LOKDocView* pDocView ) +{ + return pDocView->pClass->getPart( pDocView->pDocument ); +} + +SAL_DLLPUBLIC_EXPORT void lok_docview_set_part( LOKDocView* pDocView, int nPart) +{ + pDocView->pDocument->pClass->setPart( pDocView->pDocument, nPart ); + renderDocument( pDocView ); +} + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 624ce90f86ea9a3aec0ec87a998c6ce75ab59327 Author: Andrzej Hunt <andrzej.h...@collabora.com> Date: Tue Jul 8 15:23:06 2014 +0200 Add get/setPart to ITiledRenderable, and implement for sw/sc. Change-Id: Iec3d6374f029149cadf8fb9c9b16fec90146c31e diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 0f72bd6..e1931b5 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -181,7 +181,8 @@ extern "C" static void doc_destroy(LibreOfficeKitDocument* pThis); static int doc_saveAs(LibreOfficeKitDocument* pThis, const char* pUrl, const char* pFormat, const char* pFilterOptions); static LibreOfficeKitDocumentType doc_getDocumentType(LibreOfficeKitDocument* pThis); -static int doc_getNumberOfParts(LibreOfficeKitDocument* pThis); +static int doc_getParts(LibreOfficeKitDocument* pThis); +static int doc_getPart(LibreOfficeKitDocument* pThis); static void doc_setPart(LibreOfficeKitDocument* pThis, int nPart); void doc_paintTile(LibreOfficeKitDocument* pThis, unsigned char* pBuffer, @@ -210,7 +211,8 @@ struct LibLODocument_Impl : public _LibreOfficeKitDocument m_pDocumentClass->destroy = doc_destroy; m_pDocumentClass->saveAs = doc_saveAs; m_pDocumentClass->getDocumentType = doc_getDocumentType; - m_pDocumentClass->getNumberOfParts = doc_getNumberOfParts; + m_pDocumentClass->getParts = doc_getParts; + m_pDocumentClass->getPart = doc_getPart; m_pDocumentClass->setPart = doc_setPart; m_pDocumentClass->paintTile = doc_paintTile; m_pDocumentClass->getDocumentSize = doc_getDocumentSize; @@ -420,17 +422,46 @@ static LibreOfficeKitDocumentType doc_getDocumentType (LibreOfficeKitDocument* p return LOK_DOCTYPE_OTHER; } -static int doc_getNumberOfParts (LibreOfficeKitDocument* pThis) +static int doc_getParts (LibreOfficeKitDocument* pThis) { - (void) pThis; - // Assume writer document for now. - return 1; + LibLODocument_Impl* pDocument = static_cast<LibLODocument_Impl*>(pThis); + + ::vcl::ITiledRenderable* pDoc = dynamic_cast< ::vcl::ITiledRenderable* >( pDocument->mxComponent.get() ); + if (!pDoc) + { + gImpl->maLastExceptionMsg = "Document doesn't support tiled rendering"; + return 0; + } + + return pDoc->getParts(); +} + +static int doc_getPart (LibreOfficeKitDocument* pThis) +{ + LibLODocument_Impl* pDocument = static_cast<LibLODocument_Impl*>(pThis); + + ::vcl::ITiledRenderable* pDoc = dynamic_cast< ::vcl::ITiledRenderable* >( pDocument->mxComponent.get() ); + if (!pDoc) + { + gImpl->maLastExceptionMsg = "Document doesn't support tiled rendering"; + return 0; + } + + return pDoc->getPart(); } static void doc_setPart(LibreOfficeKitDocument* pThis, int nPart) { - (void) pThis; - (void) nPart; + LibLODocument_Impl* pDocument = static_cast<LibLODocument_Impl*>(pThis); + + ::vcl::ITiledRenderable* pDoc = dynamic_cast< ::vcl::ITiledRenderable* >( pDocument->mxComponent.get() ); + if (!pDoc) + { + gImpl->maLastExceptionMsg = "Document doesn't support tiled rendering"; + return; + } + + pDoc->setPart( nPart ); } void doc_paintTile (LibreOfficeKitDocument* pThis, diff --git a/include/LibreOfficeKit/LibreOfficeKit.h b/include/LibreOfficeKit/LibreOfficeKit.h index ba4319f..675eabc 100644 --- a/include/LibreOfficeKit/LibreOfficeKit.h +++ b/include/LibreOfficeKit/LibreOfficeKit.h @@ -77,8 +77,9 @@ struct _LibreOfficeKitDocumentClass // Part refers to either indivual sheets in a Spreadsheet, or slides // in a Slideshow, and has no relevance for wrtier documents. - int (*getNumberOfParts) (LibreOfficeKitDocument* pThis); + int (*getParts) (LibreOfficeKitDocument* pThis); + int (*getPart) (LibreOfficeKitDocument* pThis); void (*setPart) (LibreOfficeKitDocument* pThis, int nPart); diff --git a/include/LibreOfficeKit/LibreOfficeKit.hxx b/include/LibreOfficeKit/LibreOfficeKit.hxx index 427ea83..8ec9674 100644 --- a/include/LibreOfficeKit/LibreOfficeKit.hxx +++ b/include/LibreOfficeKit/LibreOfficeKit.hxx @@ -49,9 +49,14 @@ public: return mpDoc->pClass->getDocumentType(mpDoc); } - inline int getNumberOfParts() + inline int getParts() { - return mpDoc->pClass->getNumberOfParts(mpDoc); + return mpDoc->pClass->getParts(mpDoc); + } + + inline int getPart() + { + return mpDoc->pClass->getPart(mpDoc); } inline void setPart(int nPart) diff --git a/include/vcl/ITiledRenderable.hxx b/include/vcl/ITiledRenderable.hxx index fecfd6c..f5ce44a 100644 --- a/include/vcl/ITiledRenderable.hxx +++ b/include/vcl/ITiledRenderable.hxx @@ -41,6 +41,22 @@ public: */ virtual Size getDocumentSize() = 0; + /** + * Set the document "part", i.e. slide for a slideshow, and + * tab for a spreadsheet. + */ + virtual void setPart( int nPart ) = 0; + + /** + * Get the number of parts -- see setPart for further details. + */ + virtual int getParts() = 0; + + /** + * Get the currently displayed/selected part -- see setPart for further + * details. + */ + virtual int getPart() = 0; }; } // namespace vcl diff --git a/sc/inc/docuno.hxx b/sc/inc/docuno.hxx index 27575fe..932017d 100644 --- a/sc/inc/docuno.hxx +++ b/sc/inc/docuno.hxx @@ -363,6 +363,9 @@ public: long nTileWidth, long nTileHeight ) SAL_OVERRIDE; virtual Size getDocumentSize() SAL_OVERRIDE; + virtual void setPart( int nPart ) SAL_OVERRIDE; + virtual int getPart() SAL_OVERRIDE; + virtual int getParts() SAL_OVERRIDE; }; class ScDrawPagesObj : public cppu::WeakImplHelper2< diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx index ca18caa..d4c14cf 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -461,6 +461,24 @@ void ScModelObj::paintTile( VirtualDevice& rDevice, nTilePosX, nTilePosY, nTileWidth, nTileHeight ); } +void ScModelObj::setPart( int nPart ) +{ + ScViewData* pViewData = ScDocShell::GetViewData(); + pViewData->SetTabNo( nPart ); +} + +int ScModelObj::getParts() +{ + ScDocument& rDoc = pDocShell->GetDocument(); + return rDoc.GetTableCount(); +} + +int ScModelObj::getPart() +{ + ScViewData* pViewData = ScDocShell::GetViewData(); + return pViewData->GetTabNo(); +} + Size ScModelObj::getDocumentSize() { // There seems to be no clear way of getting the grid window for this diff --git a/sw/inc/unotxdoc.hxx b/sw/inc/unotxdoc.hxx index a48a8f3..1318071 100644 --- a/sw/inc/unotxdoc.hxx +++ b/sw/inc/unotxdoc.hxx @@ -439,6 +439,9 @@ public: long nTileWidth, long nTileHeight ) SAL_OVERRIDE; virtual Size getDocumentSize() SAL_OVERRIDE; + virtual void setPart( int nPart ) SAL_OVERRIDE; + virtual int getPart() SAL_OVERRIDE; + virtual int getParts() SAL_OVERRIDE; void Invalidate(); void Reactivate(SwDocShell* pNewDocShell); diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx index b61eb77..e6c2fc1 100644 --- a/sw/source/uibase/uno/unotxdoc.cxx +++ b/sw/source/uibase/uno/unotxdoc.cxx @@ -3137,6 +3137,21 @@ Size SwXTextDocument::getDocumentSize() return pViewShell->GetDocSize(); } +void SwXTextDocument::setPart( int /*nPart*/ ) +{ +} + +void SwXTextDocument::getPart() +{ + return 0; +} + +int SwXTextDocument::getParts() +{ + // For now we treat the document as one large piece. + return 1; +} + void * SAL_CALL SwXTextDocument::operator new( size_t t) throw() { return SwXTextDocumentBaseClass::operator new(t); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits