desktop/Library_sofficeapp.mk | 1 desktop/source/lib/init.cxx | 64 ++++++++++++++------------------------ include/vcl/ITiledRenderable.hxx | 48 ++++++++++++++++++++++++++++ sw/inc/unotxdoc.hxx | 14 +++++++- sw/source/uibase/uno/unotxdoc.cxx | 18 ++++++++++ 5 files changed, 103 insertions(+), 42 deletions(-)
New commits: commit 9b28bfce4a49cc23cea91e4e14b0ecb99cda272c Author: Andrzej Hunt <andrzej.h...@collabora.com> Date: Fri Jun 13 17:32:44 2014 +0100 Use ITiledRenderable for LIBLOK. Means that no changes should be required here once calc/impress/draw support tiled rendering. Change-Id: I0987d94303f39ba37e29b9ae7b2276e82dc0ccbf diff --git a/desktop/Library_sofficeapp.mk b/desktop/Library_sofficeapp.mk index 671ff12..8a592cc 100644 --- a/desktop/Library_sofficeapp.mk +++ b/desktop/Library_sofficeapp.mk @@ -14,7 +14,6 @@ $(eval $(call gb_Library_set_include,sofficeapp,\ -I$(SRCDIR)/desktop/inc \ -I$(SRCDIR)/desktop/source/inc \ -I$(SRCDIR)/desktop/source/deployment/inc \ - -I$(SRCDIR)/sw/inc \ -I$(SRCDIR)/vcl/inc \ )) diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 1c23bb8..d43f61c 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -39,16 +39,10 @@ #include <vcl/graphicfilter.hxx> #include <vcl/sysdata.hxx> #include <vcl/virdev.hxx> +#include <vcl/ITiledRenderable.hxx> #include <unotools/syslocaleoptions.hxx> #include <unotools/mediadescriptor.hxx> -// Dirty hack -- we go directly into sw -- ideally we need some sort of -// layer to get the writer shell for tiled rendering -#include <doc.hxx> -#include <docsh.hxx> -#include <unotxdoc.hxx> -#include <viewsh.hxx> - #include <salinst.hxx> // And let's also grab the SvpSalInstance and SvpSalVirtualDevice @@ -428,38 +422,32 @@ void doc_paintTile (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; + } Application::AcquireSolarMutex(1); - switch (doc_getDocumentType(pThis)) { - case LOK_DOCTYPE_TEXT: - { - SwXTextDocument* pTxtDoc = dynamic_cast< SwXTextDocument* >( pDocument->mxComponent.get() ); - SwDocShell* pDocShell = pTxtDoc->GetDocShell(); - SwDoc* pDoc = pDocShell->GetDoc(); - SwViewShell* pViewShell = pDoc->GetCurrentViewShell(); - - ImplSVData* pSVData = ImplGetSVData(); - SvpSalInstance* pSalInstance = static_cast< SvpSalInstance* >(pSVData->mpDefInst); - pSalInstance->setBitCountFormatMapping( 32, ::basebmp::FORMAT_THIRTYTWO_BIT_TC_MASK_RGBA ); + ImplSVData* pSVData = ImplGetSVData(); + SvpSalInstance* pSalInstance = static_cast< SvpSalInstance* >(pSVData->mpDefInst); + pSalInstance->setBitCountFormatMapping( 32, ::basebmp::FORMAT_THIRTYTWO_BIT_TC_MASK_RGBA ); - VirtualDevice aDevice(0, (sal_uInt16)32); - boost::shared_array< sal_uInt8 > aBuffer( pBuffer, NoDelete< sal_uInt8 >() ); - aDevice.SetOutputSizePixelScaleOffsetAndBuffer( - Size(nCanvasWidth, nCanvasHeight), Fraction(1.0), Point(), - aBuffer, true ); + VirtualDevice aDevice(0, (sal_uInt16)32); + boost::shared_array< sal_uInt8 > aBuffer( pBuffer, NoDelete< sal_uInt8 >() ); + aDevice.SetOutputSizePixelScaleOffsetAndBuffer( + Size(nCanvasWidth, nCanvasHeight), Fraction(1.0), Point(), + aBuffer, true ); - pViewShell->PaintTile(aDevice, nCanvasWidth, nCanvasHeight, - nTilePosX, nTilePosY, nTileWidth, nTileHeight); + pDoc->paintTile(aDevice, nCanvasWidth, nCanvasHeight, + nTilePosX, nTilePosY, nTileWidth, nTileHeight); - SvpSalVirtualDevice* pSalDev = static_cast< SvpSalVirtualDevice* >(aDevice.getSalVirtualDevice()); - basebmp::BitmapDeviceSharedPtr pBmpDev = pSalDev->getBitmapDevice(); + SvpSalVirtualDevice* pSalDev = static_cast< SvpSalVirtualDevice* >(aDevice.getSalVirtualDevice()); + basebmp::BitmapDeviceSharedPtr pBmpDev = pSalDev->getBitmapDevice(); - *pRowStride = pBmpDev->getScanlineStride(); - } - break; - default: - break; + *pRowStride = pBmpDev->getScanlineStride(); } Application::ReleaseSolarMutex(); } @@ -470,20 +458,16 @@ static void doc_getDocumentSize(LibreOfficeKitDocument* pThis, { LibLODocument_Impl* pDocument = static_cast<LibLODocument_Impl*>(pThis); - if (doc_getDocumentType(pThis) == LOK_DOCTYPE_TEXT) + ::vcl::ITiledRenderable* pDoc = dynamic_cast< ::vcl::ITiledRenderable* >( pDocument->mxComponent.get() ); + if (pDoc) { - SwXTextDocument* pTxtDoc = dynamic_cast< SwXTextDocument* >( pDocument->mxComponent.get() ); - SwDocShell* pDocShell = pTxtDoc->GetDocShell(); - SwDoc* pDoc = pDocShell->GetDoc(); - SwViewShell* pViewShell = pDoc->GetCurrentViewShell(); - Size aDocumentSize = pViewShell->GetDocSize(); + Size aDocumentSize = pDoc->getDocumentSize(); *pWidth = aDocumentSize.Width(); *pHeight = aDocumentSize.Height(); } else { - pWidth = 0; - pHeight = 0; + gImpl->maLastExceptionMsg = "Document doesn't support tiled rendering"; } } commit dfef2b8aa3867a8d27a044b07e203686d8507b26 Author: Andrzej Hunt <andrzej.h...@collabora.com> Date: Fri Jun 13 17:31:42 2014 +0100 Add ITiledRenderable. We want to have a simple interface that allows access to tiled rendering without digging into the internals of writer (and in the future calc/impress/draw). Change-Id: Ia9c278a48c919333186e5361ff25bb1ab603b846 diff --git a/include/vcl/ITiledRenderable.hxx b/include/vcl/ITiledRenderable.hxx new file mode 100644 index 0000000..fecfd6c --- /dev/null +++ b/include/vcl/ITiledRenderable.hxx @@ -0,0 +1,48 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * 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/. + * + */ + +#ifndef INCLUDED_VCL_ITILEDRENDERABLE_HXX +#define INCLUDED_VCL_ITILEDRENDERABLE_HXX + +#include <tools/gen.hxx> +#include <vcl/virdev.hxx> + +namespace vcl +{ + +class VCL_DLLPUBLIC ITiledRenderable +{ +public: + virtual ~ITiledRenderable() {}; + + /** + * Paint a tile to a given VirtualDevice. + * + * Output parameters are measured in pixels, tile parameters are in + * twips. + */ + virtual void paintTile( VirtualDevice &rDevice, + int nOutputWidth, + int nOutputHeight, + int nTilePosX, + int nTilePosY, + long nTileWidth, + long nTileHeight ) = 0; + + /** + * Get the document size in twips. + */ + virtual Size getDocumentSize() = 0; + +}; + +} // namespace vcl + +#endif // INCLUDED_VCL_ITILEDRENDERABLE_HXX diff --git a/sw/inc/unotxdoc.hxx b/sw/inc/unotxdoc.hxx index e43ea2b..a48a8f3 100644 --- a/sw/inc/unotxdoc.hxx +++ b/sw/inc/unotxdoc.hxx @@ -67,6 +67,7 @@ #include <cppuhelper/weak.hxx> #include <cppuhelper/implbase2.hxx> #include <cppuhelper/implbase4.hxx> +#include <vcl/ITiledRenderable.hxx> #include <unobaseclass.hxx> #include <viewopt.hxx> @@ -161,7 +162,8 @@ SwXTextDocumentBaseClass; class SW_DLLPUBLIC SwXTextDocument : public SwXTextDocumentBaseClass, public SvxFmMSFactory, - public SfxBaseModel + public SfxBaseModel, + public ::vcl::ITiledRenderable { private: class Impl; @@ -428,6 +430,16 @@ public: // ::com::sun::star::util::XCloneable virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone( ) throw (::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; + void Invalidate(); void Reactivate(SwDocShell* pNewDocShell); SwXDocumentPropertyHelper * GetPropertyHelper (); diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx index 73d687a..9caffe9 100644 --- a/sw/source/uibase/uno/unotxdoc.cxx +++ b/sw/source/uibase/uno/unotxdoc.cxx @@ -3120,6 +3120,24 @@ uno::Reference< util::XCloneable > SwXTextDocument::createClone( ) throw (uno:: return uno::Reference< util::XCloneable >( xNewModel, UNO_QUERY ); } +void SwXTextDocument::paintTile( VirtualDevice &rDevice, + int nOutputWidth, int nOutputHeight, + int nTilePosX, int nTilePosY, + long nTileWidth, long nTileHeight ) +{ + SwDoc* pDoc = pDocShell->GetDoc(); + SwViewShell* pViewShell = pDoc->GetCurrentViewShell(); + pViewShell->PaintTile(rDevice, nOutputWidth, nOutputHeight, + nTilePosX, nTilePosY, nTileWidth, nTileHeight); +} + +Size SwXTextDocument::getDocumentSize() +{ + SwDoc* pDoc = pDocShell->GetDoc(); + SwViewShell* pViewShell = pDoc->GetCurrentViewShell(); + return pViewShell->GetDocSize(); +} + 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