/* -*- 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 . */ #include #include #include #include #include #include #include #include "dx_config.hxx" using namespace com::sun::star; namespace dxcanvas { DXCanvasItem::DXCanvasItem() : ConfigItem( "Office.Canvas/DXCanvas", ConfigItemMode::ImmediateUpdate ), maValues(), maMaxTextureSize(), mbBlacklistCurrentDevice(false), mbValuesDirty(false) { try { uno::Sequence< OUString > aName { "DeviceBlacklist" }; uno::Sequence< uno::Any > aProps( GetProperties( aName )); uno::Sequence< sal_Int32 > aValues; if( aProps.getLength() > 0 && (aProps[0] >>= aValues) ) { const sal_Int32* pValues = aValues.getConstArray(); const sal_Int32 nNumEntries( aValues.getLength()*sizeof(sal_Int32)/sizeof(DeviceInfo) ); for( sal_Int32 i=0; i 0 ) aProps[0] >>= mbBlacklistCurrentDevice; aName[0] = "MaxTextureSize"; aProps = GetProperties( aName ); if( aProps.getLength() > 0 ) maMaxTextureSize.reset( aProps[0].get() ); else maMaxTextureSize.reset(); } catch( const uno::Exception& ) { SAL_WARN( "canvas", comphelper::anyToString( cppu::getCaughtException() ) ); } } DXCanvasItem::~DXCanvasItem() { if( !mbValuesDirty ) return; try { uno::Sequence< sal_Int32 > aValues( sizeof(DeviceInfo)/sizeof(sal_Int32)*maValues.size() ); sal_Int32* pValues = aValues.getArray(); for( const auto& rValueSet : maValues ) { const DeviceInfo& rInfo( rValueSet ); *pValues++ = rInfo.nVendorId; *pValues++ = rInfo.nDeviceId; *pValues++ = rInfo.nDeviceSubSysId; *pValues++ = rInfo.nDeviceRevision; *pValues++ = rInfo.nDriverId; *pValues++ = rInfo.nDriverVersion; *pValues++ = rInfo.nDriverSubVersion; *pValues++ = rInfo.nDriverBuildId; } PutProperties({"DeviceBlacklist"}, {css::uno::Any(aValues)}); } catch( const uno::Exception& ) { SAL_WARN( "canvas", comphelper::anyToString( cppu::getCaughtException() ) ); } } void DXCanvasItem::Notify( const css::uno::Sequence& ) {} void DXCanvasItem::ImplCommit() {} bool DXCanvasItem::isDeviceUsable( const DeviceInfo& rDeviceInfo ) const { return maValues.find(rDeviceInfo) == maValues.end(); } bool DXCanvasItem::isBlacklistCurrentDevice() const { return mbBlacklistCurrentDevice; } void DXCanvasItem::blacklistDevice( const DeviceInfo& rDeviceInfo ) { mbValuesDirty = true; maValues.insert(rDeviceInfo); } void DXCanvasItem::adaptMaxTextureSize( basegfx::B2IVector& io_maxTextureSize ) const { if( maMaxTextureSize ) { io_maxTextureSize.setX( std::min( *maMaxTextureSize, io_maxTextureSize.getX() )); io_maxTextureSize.setY( std::min( *maMaxTextureSize, io_maxTextureSize.getY() )); } } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */