diff options
Diffstat (limited to 'sd/source/ui/presenter/PresenterCanvasFactory.cxx')
-rw-r--r-- | sd/source/ui/presenter/PresenterCanvasFactory.cxx | 310 |
1 files changed, 0 insertions, 310 deletions
diff --git a/sd/source/ui/presenter/PresenterCanvasFactory.cxx b/sd/source/ui/presenter/PresenterCanvasFactory.cxx deleted file mode 100644 index 4d17967cc..000000000 --- a/sd/source/ui/presenter/PresenterCanvasFactory.cxx +++ /dev/null @@ -1,310 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#include "precompiled_sd.hxx" - -#include "presenter/PresenterCanvasFactory.hxx" -#include "PresenterCanvas.hxx" - -#include <com/sun/star/awt/Point.hpp> -#include <com/sun/star/awt/WindowAttribute.hpp> -#include <com/sun/star/awt/WindowClass.hpp> -#include <com/sun/star/awt/WindowDescriptor.hpp> -#include <com/sun/star/lang/XInitialization.hpp> -#include <com/sun/star/rendering/CompositeOperation.hpp> -#include <com/sun/star/drawing/CanvasFeature.hpp> -#include <com/sun/star/uno/XComponentContext.hpp> -#include <comphelper/processfactory.hxx> -#include <cppcanvas/vclfactory.hxx> -#include <cppuhelper/basemutex.hxx> -#include <cppuhelper/compbase3.hxx> -#include <cppuhelper/compbase2.hxx> -#include <rtl/ref.hxx> -#include <toolkit/helper/vclunohelper.hxx> -#include <vcl/svapp.hxx> -#include <vcl/window.hxx> -#include <vcl/wrkwin.hxx> - -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; -using ::rtl::OUString; - -namespace sd { namespace presenter { - -//===== PresenterCanvasFactory::SharedWindowContainer ========================= - -namespace { - class SharedWindowDescriptor - { - public: - Reference<awt::XWindow> mxSharedWindow; - Reference<rendering::XCanvas> mxSharedCanvas; - }; -} - -class PresenterCanvasFactory::SharedWindowContainer - : public ::std::vector<SharedWindowDescriptor> -{ -public: - iterator FindDescriptor (const Reference<awt::XWindow>& rxWindow) - { - for (iterator iDescriptor=begin(); iDescriptor!=end(); ++iDescriptor) - if (iDescriptor->mxSharedWindow == rxWindow) - return iDescriptor; - return end(); - } -}; - - - - -//===== PresenterCanvasFactory ================================================ - -class PresenterCanvasFactory::Deleter -{ -public: - void operator() (const PresenterCanvasFactory* pObject) { delete pObject; } -}; - - -::boost::shared_ptr<PresenterCanvasFactory> PresenterCanvasFactory::mpInstance; - - -::boost::shared_ptr<PresenterCanvasFactory> PresenterCanvasFactory::Instance (void) -{ - ::osl::MutexGuard aGuard (::osl::Mutex::getGlobalMutex()); - if (mpInstance.get() == NULL) - { - mpInstance.reset(new PresenterCanvasFactory(), PresenterCanvasFactory::Deleter()); - } - - return mpInstance; -} - - - - -void PresenterCanvasFactory::AddSharedWindow ( - const Reference<awt::XWindow>& rxWindow, - const Reference<rendering::XCanvas>& rxCanvas) -{ - SharedWindowDescriptor aDescriptor; - - if (mpSharedWindows->FindDescriptor(rxWindow) != mpSharedWindows->end()) - return; - - aDescriptor.mxSharedWindow = rxWindow; - aDescriptor.mxSharedCanvas = rxCanvas; - - // Store the new shared window only when both the window and the canvas - // are present. - if (aDescriptor.mxSharedCanvas.is() && aDescriptor.mxSharedCanvas.is()) - mpSharedWindows->push_back(aDescriptor); -} - - - - -void PresenterCanvasFactory::RemoveSharedWindow (const Reference<awt::XWindow>& rxWindow) -{ - SharedWindowContainer::iterator iDescriptor = mpSharedWindows->FindDescriptor(rxWindow); - if (iDescriptor != mpSharedWindows->end()) - { - mpSharedWindows->erase(iDescriptor); - } -} - - - - -Reference<rendering::XCanvas> PresenterCanvasFactory::GetCanvas ( - const css::uno::Reference<css::awt::XWindow>& rxSharedWindow, - const css::uno::Reference<css::awt::XWindow>& rxWindow, - const sal_Int16 nRequestedCanvasFeatures, - const rtl::OUString& rsCanvasServiceName) -{ - (void)nRequestedCanvasFeatures; - - Reference<rendering::XCanvas> xCanvas; - - if (rxSharedWindow.is() && rsCanvasServiceName.getLength()==0) - { - OSL_ASSERT(rxSharedWindow.is()); - xCanvas = CreateSharedCanvas(rxSharedWindow, rxWindow); - } - else - { - xCanvas = CreateCanvas(rxWindow, rsCanvasServiceName); - } - - return xCanvas; -} - - - - -Reference<rendering::XCanvas> PresenterCanvasFactory::CreateSharedCanvas ( - const css::uno::Reference<css::awt::XWindow>& rxSharedWindow, - const css::uno::Reference<css::awt::XWindow>& rxWindow) const -{ - // A shared window is given. Look it up and determine which canvas - // to return. - SharedWindowContainer::iterator iDescriptor ( - mpSharedWindows->FindDescriptor(rxSharedWindow)); - if (iDescriptor != mpSharedWindows->end()) - { - if (rxWindow == iDescriptor->mxSharedWindow || ! rxWindow.is()) - { - // A shared window itself is given. Return the previously - // created canvas. - return Reference<rendering::XCanvas>(iDescriptor->mxSharedCanvas, UNO_QUERY); - } - else - { - // A true child window is given. Create a canvas wrapper. - return new PresenterCanvas( - Reference<rendering::XCanvas>(iDescriptor->mxSharedCanvas, UNO_QUERY), - iDescriptor->mxSharedWindow, - rxWindow); - } - } - - return NULL; -} - - - - -Reference<rendering::XCanvas> PresenterCanvasFactory::CreateCanvasForSprite ( - const css::uno::Reference<css::awt::XWindow>& rxSharedWindow, - const css::uno::Reference<css::awt::XWindow>& rxWindow) const -{ - OSL_ASSERT(rxSharedWindow.is()); - (void)rxWindow.is(); - - SharedWindowContainer::iterator iDescriptor ( - mpSharedWindows->FindDescriptor(rxSharedWindow)); - if (iDescriptor != mpSharedWindows->end()) - { - OSL_ASSERT(iDescriptor->mxSharedCanvas.is()); - Reference<rendering::XSpriteCanvas> xSpriteCanvas(iDescriptor->mxSharedCanvas, UNO_QUERY); - if (xSpriteCanvas.is()) - { - Reference<rendering::XCustomSprite> xSprite ( - xSpriteCanvas->createCustomSprite(geometry::RealSize2D(10,10))); - if (xSprite.is()) - { - return xSprite->getContentCanvas(); - } - } - } - return NULL; -} - - - - -Reference<rendering::XCanvas> PresenterCanvasFactory::CreateCanvas ( - const css::uno::Reference<css::awt::XWindow>& rxWindow, - const rtl::OUString& rsCanvasServiceName) const -{ - // No shared window is given or an explicit canvas service name is - // specified. Create a new canvas. - ::Window* pWindow = VCLUnoHelper::GetWindow(rxWindow); - if (pWindow != NULL) - { - Sequence<Any> aArg (5); - - // common: first any is VCL pointer to window (for VCL canvas) - aArg[0] = makeAny(reinterpret_cast<sal_Int64>(pWindow)); - aArg[1] = Any(); - aArg[2] = makeAny(::com::sun::star::awt::Rectangle()); - aArg[3] = makeAny(sal_False); - aArg[4] = makeAny(rxWindow); - - Reference<lang::XMultiServiceFactory> xFactory (::comphelper::getProcessServiceFactory()); - return Reference<rendering::XCanvas>( - xFactory->createInstanceWithArguments( - rsCanvasServiceName.getLength()>0 - ? rsCanvasServiceName - : OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.rendering.VCLCanvas")), - aArg), - UNO_QUERY); - } - - return NULL; -} - - - - -Reference<rendering::XCanvas> PresenterCanvasFactory::GetSharedCanvas ( - const Reference<awt::XWindow>& rxSharedWindow) -{ - SharedWindowContainer::iterator iDescriptor = mpSharedWindows->FindDescriptor(rxSharedWindow); - if (iDescriptor != mpSharedWindows->end()) - return Reference<rendering::XCanvas>(iDescriptor->mxSharedCanvas, UNO_QUERY); - else - return NULL; -} - - - - -Reference<rendering::XCanvas> PresenterCanvasFactory::GetSharedCanvas ( - const Reference<rendering::XCanvas>& rxCanvas) -{ - PresenterCanvas* pCanvas = dynamic_cast<PresenterCanvas*>(rxCanvas.get()); - if (pCanvas != NULL) - return pCanvas->GetSharedCanvas(); - else - return NULL; -} - - - - -PresenterCanvasFactory::PresenterCanvasFactory (void) - : mpSharedWindows(new SharedWindowContainer()) -{ -} - - - - -PresenterCanvasFactory::~PresenterCanvasFactory (void) -{ - mpSharedWindows.reset(); -} - - - - -} } // end of namespace ::sd::presenter - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |