include/vcl/sysdata.hxx | 2 offapi/UnoApi_offapi.mk | 3 offapi/com/sun/star/text/GenericTextDocument.idl | 3 offapi/com/sun/star/tiledrendering/XTiledRenderable.idl | 79 ++++++++++++++++ sw/inc/unotxdoc.hxx | 7 + sw/source/uibase/uno/unotxdoc.cxx | 27 +++++ vcl/win/source/gdi/salvd.cxx | 4 7 files changed, 120 insertions(+), 5 deletions(-)
New commits: commit a1bfad005cfb0b54744746da20a81f9bb8908ae0 Author: László Németh <laszlo.nem...@collabora.com> Date: Mon Apr 27 16:22:11 2015 +0200 XTiledRenderable: use HWND instead of HDC Cherry-picked from e1fb63bb8ed7a9bd4dbe19be0d0da7245c4a2fb2 Change-Id: I2959ea8b1213d6dade1c2567365f177bf542e075 diff --git a/include/vcl/sysdata.hxx b/include/vcl/sysdata.hxx index a4fad69..a525f77 100644 --- a/include/vcl/sysdata.hxx +++ b/include/vcl/sysdata.hxx @@ -137,6 +137,7 @@ struct SystemGraphicsData unsigned long nSize; // size in bytes of this structure #if defined( WNT ) HDC hDC; // handle to a device context + HWND hWnd; // optional handle to a window #elif defined( MACOSX ) CGContextRef rCGContext; // CoreGraphics graphic context #elif defined( ANDROID ) @@ -156,6 +157,7 @@ struct SystemGraphicsData : nSize( sizeof( SystemGraphicsData ) ) #if defined( WNT ) , hDC( 0 ) + , hWnd( 0 ) #elif defined( MACOSX ) , rCGContext( NULL ) #elif defined( ANDROID ) diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx index 01d78fe..86689a0 100644 --- a/sw/source/uibase/uno/unotxdoc.cxx +++ b/sw/source/uibase/uno/unotxdoc.cxx @@ -3289,7 +3289,7 @@ void SAL_CALL SwXTextDocument::paintTile( const ::css::uno::Any& Parent, ::sal_I #if defined WNT sal_Int64 nWindowHandle; Parent >>= nWindowHandle; - aData.hDC = (HDC) nWindowHandle; + aData.hWnd = (HWND) nWindowHandle; VirtualDevice aDevice(&aData, Size(1, 1), (sal_uInt16)32); paintTile( aDevice, nOutputWidth, nOutputHeight, nTilePosX, nTilePosY, nTileWidth, nTileHeight ); #else diff --git a/vcl/win/source/gdi/salvd.cxx b/vcl/win/source/gdi/salvd.cxx index c76432d..340e160 100644 --- a/vcl/win/source/gdi/salvd.cxx +++ b/vcl/win/source/gdi/salvd.cxx @@ -79,7 +79,7 @@ SalVirtualDevice* WinSalInstance::CreateVirtualDevice( SalGraphics* pSGraphics, if( pData ) { - hDC = pData->hDC; + hDC = (pData->hDC) ? pData->hDC : GetDC(pData->hWnd); hBmp = NULL; bOk = (hDC != NULL); if (bOk) @@ -137,7 +137,7 @@ SalVirtualDevice* WinSalInstance::CreateVirtualDevice( SalGraphics* pSGraphics, pVDev->mpGraphics = pVirGraphics; pVDev->mnBitCount = nBitCount; pVDev->mbGraphics = FALSE; - pVDev->mbForeignDC = (pData != NULL); + pVDev->mbForeignDC = (pData != NULL && pData->hDC != NULL ); // insert VirDev in VirDevList pVDev->mpNext = pSalData->mpFirstVD; commit 96a6128b9259e62ae0b2872a3157bb1bb32d2a6d Author: László Németh <laszlo.nem...@collabora.com> Date: Fri Apr 24 13:58:04 2015 +0200 Initial XTiledRenderable API Cherry-picked from e2ad83e25aa86bc377b664d6d07a0b86abf487c0 Change-Id: I6dc337ec958c1e116fc9763877f331b751b64e6e diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk index df73e01..97f4f3e 100644 --- a/offapi/UnoApi_offapi.mk +++ b/offapi/UnoApi_offapi.mk @@ -1484,6 +1484,9 @@ $(eval $(call gb_UnoApi_add_idlfiles_noheader,offapi,com/sun/star/text/textfield Subject \ Title \ )) +$(eval $(call gb_UnoApi_add_idlfiles,offapi,com/sun/star/tiledrendering,\ + XTiledRenderable \ +)) $(eval $(call gb_UnoApi_add_idlfiles_noheader,offapi,com/sun/star/ucb,\ CachedContentResultSet \ CachedContentResultSetStub \ diff --git a/offapi/com/sun/star/text/GenericTextDocument.idl b/offapi/com/sun/star/text/GenericTextDocument.idl index 9956b80..ad4e3d4 100644 --- a/offapi/com/sun/star/text/GenericTextDocument.idl +++ b/offapi/com/sun/star/text/GenericTextDocument.idl @@ -23,6 +23,7 @@ #include <com/sun/star/text/XTextDocument.idl> #include <com/sun/star/util/XSearchable.idl> #include <com/sun/star/util/XRefreshable.idl> +#include <com/sun/star/tiledrendering/XTiledRenderable.idl> #include <com/sun/star/text/XFootnotesSupplier.idl> #include <com/sun/star/text/XEndnotesSupplier.idl> #include <com/sun/star/util/XReplaceable.idl> @@ -76,6 +77,8 @@ published service GenericTextDocument interface com::sun::star::util::XRefreshable; + [optional] interface com::sun::star::tiledrendering::XTiledRenderable; + [optional] interface com::sun::star::text::XFootnotesSupplier; [optional] interface com::sun::star::text::XEndnotesSupplier; diff --git a/offapi/com/sun/star/tiledrendering/XTiledRenderable.idl b/offapi/com/sun/star/tiledrendering/XTiledRenderable.idl new file mode 100644 index 0000000..2755e74 --- /dev/null +++ b/offapi/com/sun/star/tiledrendering/XTiledRenderable.idl @@ -0,0 +1,79 @@ +/* -*- 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/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef __com_sun_star_awt_XTiledRenderable_idl__ +#define __com_sun_star_awt_XTiledRenderable_idl__ + +#include <com/sun/star/uno/XInterface.idl> + +module com { module sun { module star { module tiledrendering { + +/** tiled rendering using a system-specific handle to a window + */ +published interface XTiledRenderable : com::sun::star::uno::XInterface +{ + + /** paint a tile to a system-specific window + * + + @param Parent + a system-specific handle to a window. + + <p>You must check the machine ID and the process ID.<BR> + WIN32: HWND.<BR> + WIN16: HWND.<BR> + + JAVA: global reference to a java.awt.Component + object provided from the JNI-API.<BR> + + MAC: (NSView*) pointer.<BR></p> + + @param nOutputWidth + horizontal output parameter measured in pixels. + + @param nOutputHeight + vertical output parameter measured in pixels. + + @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. + */ + void paintTile( [in] any Parent, + [in] long nOutputWidth, + [in] long nOutputHeight, + [in] long nTilePosX, + [in] long nTilePosY, + [in] long nTileWidth, + [in] long nTileHeight ); +}; + + +}; }; }; }; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/inc/unotxdoc.hxx b/sw/inc/unotxdoc.hxx index 8a12ff0..7d80339 100644 --- a/sw/inc/unotxdoc.hxx +++ b/sw/inc/unotxdoc.hxx @@ -67,6 +67,7 @@ #include <cppuhelper/weak.hxx> #include <cppuhelper/implbase.hxx> #include <vcl/ITiledRenderable.hxx> +#include <com/sun/star/tiledrendering/XTiledRenderable.hpp> #include <unobaseclass.hxx> #include <viewopt.hxx> @@ -128,7 +129,8 @@ SwXTextDocumentBaseClass; class SW_DLLPUBLIC SwXTextDocument : public SwXTextDocumentBaseClass, public SvxFmMSFactory, public SfxBaseModel, - public vcl::ITiledRenderable + public vcl::ITiledRenderable, + public ::com::sun::star::tiledrendering::XTiledRenderable { private: class Impl; @@ -420,6 +422,9 @@ public: /// @see vcl::ITiledRenderable::resetSelection(). virtual void resetSelection() SAL_OVERRIDE; + // ::com::sun::star::tiledrendering::XTiledRenderable + virtual void SAL_CALL paintTile( const ::css::uno::Any& Parent, ::sal_Int32 nOutputWidth, ::sal_Int32 nOutputHeight, ::sal_Int32 nTilePosX, ::sal_Int32 nTilePosY, ::sal_Int32 nTileWidth, ::sal_Int32 nTileHeight ) throw (::css::uno::RuntimeException, ::std::exception) 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 a83bbfc..01d78fe 100644 --- a/sw/source/uibase/uno/unotxdoc.cxx +++ b/sw/source/uibase/uno/unotxdoc.cxx @@ -20,6 +20,7 @@ #include <osl/mutex.hxx> #include <vcl/image.hxx> #include <vcl/virdev.hxx> +#include <vcl/sysdata.hxx> #include <vcl/svapp.hxx> #include <vcl/print.hxx> #include <sfx2/viewfrm.hxx> @@ -289,6 +290,12 @@ Any SAL_CALL SwXTextDocument::queryInterface( const uno::Type& rType ) throw(Run Reference<lang::XMultiServiceFactory> xTmp = this; aRet <<= xTmp; } + if ( !aRet.hasValue() && + rType == cppu::UnoType<tiledrendering::XTiledRenderable>::get()) + { + Reference<tiledrendering::XTiledRenderable> xTmp = this; + aRet <<= xTmp; + } if ( !aRet.hasValue() && rType != cppu::UnoType<com::sun::star::document::XDocumentEventBroadcaster>::get() @@ -338,8 +345,8 @@ Sequence< uno::Type > SAL_CALL SwXTextDocument::getTypes() throw(RuntimeExceptio } } long nIndex = aBaseTypes.getLength(); - // don't forget the lang::XMultiServiceFactory - aBaseTypes.realloc(aBaseTypes.getLength() + aTextTypes.getLength() + aNumTypes.getLength() + 1); + // don't forget the lang::XMultiServiceFactory and the XTiledRenderable + aBaseTypes.realloc(aBaseTypes.getLength() + aTextTypes.getLength() + aNumTypes.getLength() + 2); uno::Type* pBaseTypes = aBaseTypes.getArray(); const uno::Type* pTextTypes = aTextTypes.getConstArray(); long nPos; @@ -353,6 +360,7 @@ Sequence< uno::Type > SAL_CALL SwXTextDocument::getTypes() throw(RuntimeExceptio pBaseTypes[nIndex++] = pNumTypes[nPos]; } pBaseTypes[nIndex++] = cppu::UnoType<lang::XMultiServiceFactory>::get(); + pBaseTypes[nIndex++] = cppu::UnoType<tiledrendering::XTiledRenderable>::get(); return aBaseTypes; } @@ -3274,6 +3282,21 @@ void SwXTextDocument::resetSelection() pWrtShell->ResetSelect(0, false); } +void SAL_CALL SwXTextDocument::paintTile( const ::css::uno::Any& Parent, ::sal_Int32 nOutputWidth, ::sal_Int32 nOutputHeight, ::sal_Int32 nTilePosX, ::sal_Int32 nTilePosY, ::sal_Int32 nTileWidth, ::sal_Int32 nTileHeight ) throw (::css::uno::RuntimeException, ::std::exception) +{ + SystemGraphicsData aData; + aData.nSize = sizeof(SystemGraphicsData); + #if defined WNT + sal_Int64 nWindowHandle; + Parent >>= nWindowHandle; + aData.hDC = (HDC) nWindowHandle; + VirtualDevice aDevice(&aData, Size(1, 1), (sal_uInt16)32); + paintTile( aDevice, nOutputWidth, nOutputHeight, nTilePosX, nTilePosY, nTileWidth, nTileHeight ); + #else + // TODO: support other platforms + #endif +} + 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