summaryrefslogtreecommitdiff
path: root/canvas/source/factory
diff options
context:
space:
mode:
Diffstat (limited to 'canvas/source/factory')
-rw-r--r--canvas/source/factory/canvasfactory.component34
-rw-r--r--canvas/source/factory/cf_service.cxx541
2 files changed, 0 insertions, 575 deletions
diff --git a/canvas/source/factory/canvasfactory.component b/canvas/source/factory/canvasfactory.component
deleted file mode 100644
index 3896f4197d..0000000000
--- a/canvas/source/factory/canvasfactory.component
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--**********************************************************************
-*
-* 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.
-*
-**********************************************************************-->
-
-<component loader="com.sun.star.loader.SharedLibrary"
- xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.rendering.CanvasFactory">
- <service name="com.sun.star.rendering.CanvasFactory"/>
- </implementation>
-</component>
diff --git a/canvas/source/factory/cf_service.cxx b/canvas/source/factory/cf_service.cxx
deleted file mode 100644
index 7a050332aa..0000000000
--- a/canvas/source/factory/cf_service.cxx
+++ /dev/null
@@ -1,541 +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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_canvas.hxx"
-
-#include <osl/mutex.hxx>
-#include <osl/process.h>
-#include <cppuhelper/implementationentry.hxx>
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/implbase3.hxx>
-#include <vcl/configsettings.hxx>
-
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XSingleComponentFactory.hpp>
-#include <com/sun/star/container/XContentEnumerationAccess.hpp>
-#include <com/sun/star/container/XNameAccess.hpp>
-#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
-#include <com/sun/star/beans/PropertyValue.hpp>
-
-#include <boost/bind.hpp>
-#include <vector>
-#include <utility>
-#include <o3tl/compat_functional.hxx>
-#include <algorithm>
-
-#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
-#define ARLEN(x) (sizeof (x) / sizeof *(x))
-
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using ::rtl::OUString;
-
-namespace
-{
-
-OUString SAL_CALL getImplName()
-{
- return OUSTR("com.sun.star.comp.rendering.CanvasFactory");
-}
-
-Sequence<OUString> SAL_CALL getSuppServices()
-{
- OUString name = OUSTR("com.sun.star.rendering.CanvasFactory");
- return Sequence<OUString>(&name, 1);
-}
-
-//==============================================================================
-class CanvasFactory
- : public ::cppu::WeakImplHelper3< lang::XServiceInfo,
- lang::XMultiComponentFactory,
- lang::XMultiServiceFactory >
-{
- typedef std::pair<OUString,Sequence<OUString> > AvailPair;
- typedef std::pair<OUString,OUString> CachePair;
- typedef std::vector< AvailPair > AvailVector;
- typedef std::vector< CachePair > CacheVector;
-
-
- mutable ::osl::Mutex m_mutex;
- Reference<XComponentContext> m_xContext;
- Reference<container::XNameAccess> m_xCanvasConfigNameAccess;
- AvailVector m_aAvailableImplementations;
- AvailVector m_aAcceleratedImplementations;
- AvailVector m_aAAImplementations;
- mutable CacheVector m_aCachedImplementations;
- mutable bool m_bCacheHasForcedLastImpl;
- mutable bool m_bCacheHasUseAcceleratedEntry;
- mutable bool m_bCacheHasUseAAEntry;
-
- void checkConfigFlag( bool& r_bFlag,
- bool& r_CacheFlag,
- const OUString& nodeName ) const;
- Reference<XInterface> use(
- OUString const & serviceName,
- Sequence<Any> const & args,
- Reference<XComponentContext> const & xContext ) const;
- Reference<XInterface> lookupAndUse(
- OUString const & serviceName, Sequence<Any> const & args,
- Reference<XComponentContext> const & xContext ) const;
-
-public:
- virtual ~CanvasFactory();
- CanvasFactory( Reference<XComponentContext> const & xContext );
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName() throw (RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( OUString const & serviceName )
- throw (RuntimeException);
- virtual Sequence<OUString> SAL_CALL getSupportedServiceNames()
- throw (RuntimeException);
-
- // XMultiComponentFactory
- virtual Sequence<OUString> SAL_CALL getAvailableServiceNames()
- throw (RuntimeException);
- virtual Reference<XInterface> SAL_CALL createInstanceWithContext(
- OUString const & name,
- Reference<XComponentContext> const & xContext ) throw (Exception);
- virtual Reference<XInterface> SAL_CALL
- createInstanceWithArgumentsAndContext(
- OUString const & name,
- Sequence<Any> const & args,
- Reference<XComponentContext> const & xContext ) throw (Exception);
-
- // XMultiServiceFactory
- virtual Reference<XInterface> SAL_CALL createInstance(
- OUString const & name )
- throw (Exception);
- virtual Reference<XInterface> SAL_CALL createInstanceWithArguments(
- OUString const & name, Sequence<Any> const & args )
- throw (Exception);
-};
-
-CanvasFactory::CanvasFactory( Reference<XComponentContext> const & xContext ) :
- m_mutex(),
- m_xContext(xContext),
- m_xCanvasConfigNameAccess(),
- m_aAvailableImplementations(),
- m_aAcceleratedImplementations(),
- m_aAAImplementations(),
- m_aCachedImplementations(),
- m_bCacheHasForcedLastImpl(),
- m_bCacheHasUseAcceleratedEntry(),
- m_bCacheHasUseAAEntry()
-{
- try
- {
- // read out configuration for preferred services:
- Reference<lang::XMultiServiceFactory> xConfigProvider(
- m_xContext->getServiceManager()->createInstanceWithContext(
- OUSTR("com.sun.star.configuration.ConfigurationProvider"),
- m_xContext ), UNO_QUERY_THROW );
-
- Any propValue(
- makeAny( beans::PropertyValue(
- OUSTR("nodepath"), -1,
- makeAny( OUSTR("/org.openoffice.Office.Canvas") ),
- beans::PropertyState_DIRECT_VALUE ) ) );
-
- m_xCanvasConfigNameAccess.set(
- xConfigProvider->createInstanceWithArguments(
- OUSTR("com.sun.star.configuration.ConfigurationAccess"),
- Sequence<Any>( &propValue, 1 ) ),
- UNO_QUERY_THROW );
-
- propValue = makeAny(
- beans::PropertyValue(
- OUSTR("nodepath"), -1,
- makeAny( OUSTR("/org.openoffice.Office.Canvas/CanvasServiceList") ),
- beans::PropertyState_DIRECT_VALUE ) );
-
- Reference<container::XNameAccess> xNameAccess(
- xConfigProvider->createInstanceWithArguments(
- OUSTR("com.sun.star.configuration.ConfigurationAccess"),
- Sequence<Any>( &propValue, 1 ) ), UNO_QUERY_THROW );
- Reference<container::XHierarchicalNameAccess> xHierarchicalNameAccess(
- xNameAccess, UNO_QUERY_THROW);
-
- Sequence<OUString> serviceNames = xNameAccess->getElementNames();
- const OUString* pCurr = serviceNames.getConstArray();
- const OUString* const pEnd = pCurr + serviceNames.getLength();
- while( pCurr != pEnd )
- {
- Reference<container::XNameAccess> xEntryNameAccess(
- xHierarchicalNameAccess->getByHierarchicalName(*pCurr),
- UNO_QUERY );
-
- if( xEntryNameAccess.is() )
- {
- Sequence<OUString> implementationList;
- if( (xEntryNameAccess->getByName( OUSTR("PreferredImplementations") ) >>= implementationList) )
- m_aAvailableImplementations.push_back( std::make_pair(*pCurr,implementationList) );
- if( (xEntryNameAccess->getByName( OUSTR("AcceleratedImplementations") ) >>= implementationList) )
- m_aAcceleratedImplementations.push_back( std::make_pair(*pCurr,implementationList) );
- if( (xEntryNameAccess->getByName( OUSTR("AntialiasingImplementations") ) >>= implementationList) )
- m_aAAImplementations.push_back( std::make_pair(*pCurr,implementationList) );
- }
-
- ++pCurr;
- }
- }
- catch (RuntimeException &)
- {
- throw;
- }
- catch (Exception&)
- {
- }
-
- if( m_aAvailableImplementations.empty() )
- {
- // Ugh. Looks like configuration is borked. Fake minimal
- // setup.
- Sequence<OUString> aServices(1);
- aServices[0] = OUSTR("com.sun.star.comp.rendering.Canvas.VCL");
- m_aAvailableImplementations.push_back( std::make_pair(OUSTR("com.sun.star.rendering.Canvas"),
- aServices) );
-
- aServices[0] = OUSTR("com.sun.star.comp.rendering.SpriteCanvas.VCL");
- m_aAvailableImplementations.push_back( std::make_pair(OUSTR("com.sun.star.rendering.SpriteCanvas"),
- aServices) );
- }
-}
-
-CanvasFactory::~CanvasFactory()
-{
-}
-
-//------------------------------------------------------------------------------
-Reference<XInterface> create( Reference<XComponentContext> const & xContext )
-{
- return static_cast< ::cppu::OWeakObject * >(
- new CanvasFactory( xContext ) );
-}
-
-// XServiceInfo
-//______________________________________________________________________________
-OUString CanvasFactory::getImplementationName() throw (RuntimeException)
-{
- return getImplName();
-}
-
-//______________________________________________________________________________
-sal_Bool CanvasFactory::supportsService( OUString const & serviceName )
- throw (RuntimeException)
-{
- return serviceName.equals(getSuppServices()[0]);
-}
-
-//______________________________________________________________________________
-Sequence<OUString> CanvasFactory::getSupportedServiceNames()
- throw (RuntimeException)
-{
- return getSuppServices();
-}
-
-// XMultiComponentFactory
-//______________________________________________________________________________
-Sequence<OUString> CanvasFactory::getAvailableServiceNames()
- throw (RuntimeException)
-{
- Sequence<OUString> aServiceNames(m_aAvailableImplementations.size());
- std::transform(m_aAvailableImplementations.begin(),
- m_aAvailableImplementations.end(),
- aServiceNames.getArray(),
- o3tl::select1st<AvailPair>());
- return aServiceNames;
-}
-
-//______________________________________________________________________________
-Reference<XInterface> CanvasFactory::createInstanceWithContext(
- OUString const & name, Reference<XComponentContext> const & xContext )
- throw (Exception)
-{
- return createInstanceWithArgumentsAndContext(
- name, Sequence<Any>(), xContext );
-}
-
-//______________________________________________________________________________
-Reference<XInterface> CanvasFactory::use(
- OUString const & serviceName,
- Sequence<Any> const & args,
- Reference<XComponentContext> const & xContext ) const
-{
- try {
- return m_xContext->getServiceManager()->createInstanceWithArgumentsAndContext(
- serviceName, args, xContext);
- }
- catch (RuntimeException &)
- {
- throw;
- }
- catch (Exception &)
- {
- return Reference<XInterface>();
- }
-}
-
-//______________________________________________________________________________
-void CanvasFactory::checkConfigFlag( bool& r_bFlag,
- bool& r_CacheFlag,
- const OUString& nodeName ) const
-{
- if( m_xCanvasConfigNameAccess.is() )
- {
- m_xCanvasConfigNameAccess->getByName( nodeName ) >>= r_bFlag;
-
- if( r_CacheFlag != r_bFlag )
- {
- // cache is invalid, because of different order of
- // elements
- r_CacheFlag = r_bFlag;
- m_aCachedImplementations.clear();
- }
- }
-}
-
-//______________________________________________________________________________
-Reference<XInterface> CanvasFactory::lookupAndUse(
- OUString const & serviceName, Sequence<Any> const & args,
- Reference<XComponentContext> const & xContext ) const
-{
- ::osl::MutexGuard guard(m_mutex);
-
- // forcing last entry from impl list, if config flag set
- bool bForceLastEntry(false);
- checkConfigFlag( bForceLastEntry,
- m_bCacheHasForcedLastImpl,
- OUSTR("ForceSafeServiceImpl") );
-
- // use anti-aliasing canvas, if config flag set (or not existing)
- bool bUseAAEntry(true);
- checkConfigFlag( bUseAAEntry,
- m_bCacheHasUseAAEntry,
- OUSTR("UseAntialiasingCanvas") );
-
- // use accelerated canvas, if config flag set (or not existing)
- bool bUseAcceleratedEntry(true);
- checkConfigFlag( bUseAcceleratedEntry,
- m_bCacheHasUseAcceleratedEntry,
- OUSTR("UseAcceleratedCanvas") );
-
- // try to reuse last working implementation for given service name
- const CacheVector::iterator aEnd(m_aCachedImplementations.end());
- CacheVector::iterator aMatch;
- if( (aMatch=std::find_if(m_aCachedImplementations.begin(),
- aEnd,
- boost::bind(&OUString::equals,
- boost::cref(serviceName),
- boost::bind(
- o3tl::select1st<CachePair>(),
- _1)))) != aEnd )
- {
- Reference<XInterface> xCanvas( use( aMatch->second, args, xContext ) );
- if(xCanvas.is())
- return xCanvas;
- }
-
- // lookup in available service list
- const AvailVector::const_iterator aAvailEnd(m_aAvailableImplementations.end());
- AvailVector::const_iterator aAvailImplsMatch;
- if( (aAvailImplsMatch=std::find_if(m_aAvailableImplementations.begin(),
- aAvailEnd,
- boost::bind(&OUString::equals,
- boost::cref(serviceName),
- boost::bind(
- o3tl::select1st<AvailPair>(),
- _1)))) == aAvailEnd )
- {
- return Reference<XInterface>();
- }
-
- const AvailVector::const_iterator aAAEnd(m_aAAImplementations.end());
- AvailVector::const_iterator aAAImplsMatch;
- if( (aAAImplsMatch=std::find_if(m_aAAImplementations.begin(),
- aAAEnd,
- boost::bind(&OUString::equals,
- boost::cref(serviceName),
- boost::bind(
- o3tl::select1st<AvailPair>(),
- _1)))) == aAAEnd )
- {
- return Reference<XInterface>();
- }
-
- const AvailVector::const_iterator aAccelEnd(m_aAcceleratedImplementations.end());
- AvailVector::const_iterator aAccelImplsMatch;
- if( (aAccelImplsMatch=std::find_if(m_aAcceleratedImplementations.begin(),
- aAccelEnd,
- boost::bind(&OUString::equals,
- boost::cref(serviceName),
- boost::bind(
- o3tl::select1st<AvailPair>(),
- _1)))) == aAccelEnd )
- {
- return Reference<XInterface>();
- }
-
- const Sequence<OUString> aPreferredImpls( aAvailImplsMatch->second );
- const OUString* pCurrImpl = aPreferredImpls.getConstArray();
- const OUString* const pEndImpl = pCurrImpl + aPreferredImpls.getLength();
-
- const Sequence<OUString> aAAImpls( aAAImplsMatch->second );
- const OUString* const pFirstAAImpl = aAAImpls.getConstArray();
- const OUString* const pEndAAImpl = pFirstAAImpl + aAAImpls.getLength();
-
- const Sequence<OUString> aAccelImpls( aAccelImplsMatch->second );
- const OUString* const pFirstAccelImpl = aAccelImpls.getConstArray();
- const OUString* const pEndAccelImpl = pFirstAccelImpl + aAccelImpls.getLength();
-
- // force last entry from impl list, if config flag set
- if( bForceLastEntry )
- pCurrImpl = pEndImpl-1;
-
- while( pCurrImpl != pEndImpl )
- {
- const OUString aCurrName(pCurrImpl->trim());
-
- // check whether given canvas service is listed in the
- // sequence of "accelerated canvas implementations"
- const bool bIsAcceleratedImpl(
- std::find_if(pFirstAccelImpl,
- pEndAccelImpl,
- boost::bind(&OUString::equals,
- boost::cref(aCurrName),
- boost::bind(
- &OUString::trim,
- _1))) != pEndAccelImpl );
-
- // check whether given canvas service is listed in the
- // sequence of "antialiasing canvas implementations"
- const bool bIsAAImpl(
- std::find_if(pFirstAAImpl,
- pEndAAImpl,
- boost::bind(&OUString::equals,
- boost::cref(aCurrName),
- boost::bind(
- &OUString::trim,
- _1))) != pEndAAImpl );
-
- // try to instantiate canvas *only* if either accel and AA
- // property match preference, *or*, if there's a mismatch, only
- // go for a less capable canvas (that effectively let those
- // pour canvas impls still work as fallbacks, should an
- // accelerated/AA one fail). Property implies configuration:
- // http://en.wikipedia.org/wiki/Truth_table#Logical_implication
- if( (!bIsAAImpl || bUseAAEntry) && (!bIsAcceleratedImpl || bUseAcceleratedEntry) )
- {
- Reference<XInterface> xCanvas(
- use( pCurrImpl->trim(), args, xContext ) );
-
- if(xCanvas.is())
- {
- if( aMatch != aEnd )
- {
- // cache entry exists, replace dysfunctional
- // implementation name
- aMatch->second = pCurrImpl->trim();
- }
- else
- {
- // new service name, add new cache entry
- m_aCachedImplementations.push_back(std::make_pair(serviceName,
- pCurrImpl->trim()));
- }
-
- return xCanvas;
- }
- }
-
- ++pCurrImpl;
- }
-
- return Reference<XInterface>();
-}
-
-//______________________________________________________________________________
-Reference<XInterface> CanvasFactory::createInstanceWithArgumentsAndContext(
- OUString const & preferredOne, Sequence<Any> const & args,
- Reference<XComponentContext> const & xContext ) throw (Exception)
-{
- Reference<XInterface> xCanvas(
- lookupAndUse( preferredOne, args, xContext ) );
- if(xCanvas.is())
- return xCanvas;
-
- // last resort: try service name directly
- return use( preferredOne, args, xContext );
-}
-
-// XMultiServiceFactory
-//______________________________________________________________________________
-Reference<XInterface> CanvasFactory::createInstance( OUString const & name )
- throw (Exception)
-{
- return createInstanceWithArgumentsAndContext(
- name, Sequence<Any>(), m_xContext );
-}
-
-//______________________________________________________________________________
-Reference<XInterface> CanvasFactory::createInstanceWithArguments(
- OUString const & name, Sequence<Any> const & args ) throw (Exception)
-{
- return createInstanceWithArgumentsAndContext(
- name, args, m_xContext );
-}
-
-const ::cppu::ImplementationEntry s_entries [] = {
- {
- create,
- getImplName,
- getSuppServices,
- ::cppu::createSingleComponentFactory,
- 0, 0
- },
- { 0, 0, 0, 0, 0, 0 }
-};
-
-} // anon namespace
-
-extern "C" {
-
-SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
- sal_Char const * pImplName,
- lang::XMultiServiceFactory * pServiceManager,
- registry::XRegistryKey * pRegistryKey )
-{
- return ::cppu::component_getFactoryHelper(
- pImplName, pServiceManager, pRegistryKey, s_entries );
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */