summaryrefslogtreecommitdiff
path: root/forms/source/component/imgprod.cxx
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2012-01-28 20:52:45 +0100
committerMichael Stahl <mstahl@redhat.com>2012-01-28 20:52:45 +0100
commit2e626373db2412ac22e8c5c27a60d11cd29e875b (patch)
tree9e9f67205cd5b72f1031721273e1534a3a1e5b0f /forms/source/component/imgprod.cxx
parentf7ee7bbd5174b084f018c2ec94d8c70c98ee04da (diff)
replace obsolete "master" branch with README that points at new repoHEADmaster-deletedmaster
Diffstat (limited to 'forms/source/component/imgprod.cxx')
-rw-r--r--forms/source/component/imgprod.cxx582
1 files changed, 0 insertions, 582 deletions
diff --git a/forms/source/component/imgprod.cxx b/forms/source/component/imgprod.cxx
deleted file mode 100644
index 518a20568..000000000
--- a/forms/source/component/imgprod.cxx
+++ /dev/null
@@ -1,582 +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_forms.hxx"
-
-#include "imgprod.hxx"
-
-#include <vcl/bmpacc.hxx>
-#include <vcl/cvtgrf.hxx>
-#include <vcl/svapp.hxx>
-#include <unotools/ucbstreamhelper.hxx>
-#include <svtools/filter.hxx>
-#include <com/sun/star/io/XInputStream.hpp>
-
-#include "svtools/imageresourceaccess.hxx"
-#include <comphelper/processfactory.hxx>
-
-// --------------------
-// - ImgProdLockBytes -
-// --------------------
-
-class ImgProdLockBytes : public SvLockBytes
-{
- ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > xStmRef;
- ::com::sun::star::uno::Sequence<sal_Int8> maSeq;
-
- ImgProdLockBytes() {};
-
-public:
-
- ImgProdLockBytes( SvStream* pStm, sal_Bool bOwner );
- ImgProdLockBytes( ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > & rStreamRef );
- virtual ~ImgProdLockBytes();
-
- virtual ErrCode ReadAt( sal_Size nPos, void* pBuffer, sal_Size nCount, sal_Size* pRead ) const;
- virtual ErrCode WriteAt( sal_Size nPos, const void* pBuffer, sal_Size nCount, sal_Size* pWritten );
- virtual ErrCode Flush() const;
- virtual ErrCode SetSize( sal_Size nSize );
- virtual ErrCode Stat( SvLockBytesStat*, SvLockBytesStatFlag ) const;
-};
-
-// ------------------------------------------------------------------------
-
-ImgProdLockBytes::ImgProdLockBytes( SvStream* pStm, sal_Bool bOwner ) :
- SvLockBytes( pStm, bOwner )
-{
-}
-
-// ------------------------------------------------------------------------
-
-ImgProdLockBytes::ImgProdLockBytes( ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > & rStmRef ) :
- xStmRef( rStmRef )
-{
- if( xStmRef.is() )
- {
- const sal_uInt32 nBytesToRead = 65535;
- sal_uInt32 nRead;
-
- do
- {
- ::com::sun::star::uno::Sequence< sal_Int8 > aReadSeq;
-
- nRead = xStmRef->readSomeBytes( aReadSeq, nBytesToRead );
-
- if( nRead )
- {
- const sal_uInt32 nOldLength = maSeq.getLength();
- maSeq.realloc( nOldLength + nRead );
- rtl_copyMemory( maSeq.getArray() + nOldLength, aReadSeq.getConstArray(), aReadSeq.getLength() );
- }
- }
- while( nBytesToRead == nRead );
- }
-}
-
-// ------------------------------------------------------------------------
-
-ImgProdLockBytes::~ImgProdLockBytes()
-{
-}
-
-// ------------------------------------------------------------------------
-
-ErrCode ImgProdLockBytes::ReadAt( sal_Size nPos, void* pBuffer, sal_Size nCount, sal_Size* pRead ) const
-{
- if( GetStream() )
- {
- ( (SvStream*) GetStream() )->ResetError();
- const ErrCode nErr = SvLockBytes::ReadAt( nPos, pBuffer, nCount, pRead );
- ( (SvStream*) GetStream() )->ResetError();
- return nErr;
- }
- else
- {
- const sal_Size nSeqLen = maSeq.getLength();
- ErrCode nErr = ERRCODE_NONE;
-
- if( nPos < nSeqLen )
- {
- if( ( nPos + nCount ) > nSeqLen )
- nCount = nSeqLen - nPos;
-
- memcpy( pBuffer, maSeq.getConstArray() + nPos, nCount );
- *pRead = nCount;
- }
- else
- *pRead = 0UL;
-
- return nErr;
- }
-}
-
-// ------------------------------------------------------------------------
-
-ErrCode ImgProdLockBytes::WriteAt( sal_Size nPos, const void* pBuffer, sal_Size nCount, sal_Size* pWritten )
-{
- if( GetStream() )
- return SvLockBytes::WriteAt( nPos, pBuffer, nCount, pWritten );
- else
- {
- DBG_ASSERT( xStmRef.is(), "ImgProdLockBytes::WriteAt: xInputStream has no reference..." );
- return ERRCODE_IO_CANTWRITE;
- }
-}
-
-// ------------------------------------------------------------------------
-
-ErrCode ImgProdLockBytes::Flush() const
-{
- return ERRCODE_NONE;
-}
-
-// ------------------------------------------------------------------------
-
-ErrCode ImgProdLockBytes::SetSize( sal_Size nSize )
-{
- if( GetStream() )
- return SvLockBytes::SetSize( nSize );
- else
- {
- OSL_FAIL( "ImgProdLockBytes::SetSize not supported for xInputStream..." );
- return ERRCODE_IO_CANTWRITE;
- }
-}
-
-// ------------------------------------------------------------------------
-
-ErrCode ImgProdLockBytes::Stat( SvLockBytesStat* pStat, SvLockBytesStatFlag eFlag ) const
-{
- if( GetStream() )
- return SvLockBytes::Stat( pStat, eFlag );
- else
- {
- DBG_ASSERT( xStmRef.is(), "ImgProdLockBytes::Stat: xInputStream has no reference..." );
- pStat->nSize = maSeq.getLength();
- return ERRCODE_NONE;
- }
-}
-
-// -----------------
-// - ImageProducer -
-// -----------------
-
-ImageProducer::ImageProducer() :
- mpStm ( NULL ),
- mbConsInit ( sal_False )
-{
- mpGraphic = new Graphic;
- DBG_ASSERT( Application::GetFilterHdl().IsSet(), "ImageProducer::ImageProducer(): No filter handler set" );
-}
-
-// ------------------------------------------------------------
-
-ImageProducer::~ImageProducer()
-{
- delete mpGraphic;
- mpGraphic = NULL;
-
- delete mpStm;
- mpStm = NULL;
-}
-
-// ------------------------------------------------------------
-
-// ::com::sun::star::uno::XInterface
-::com::sun::star::uno::Any ImageProducer::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
-{
- ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
- SAL_STATIC_CAST( ::com::sun::star::lang::XInitialization*, this ),
- SAL_STATIC_CAST( ::com::sun::star::awt::XImageProducer*, this ) );
- return (aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType ));
-}
-
-// ------------------------------------------------------------
-
-void ImageProducer::addConsumer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer >& rxConsumer ) throw(::com::sun::star::uno::RuntimeException)
-{
- DBG_ASSERT( rxConsumer.is(), "::AddConsumer(...): No consumer referenced!" );
- if( rxConsumer.is() )
- maConsList.push_back( new ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer > ( rxConsumer ));
-}
-
-// ------------------------------------------------------------
-
-void ImageProducer::removeConsumer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer >& rxConsumer ) throw(::com::sun::star::uno::RuntimeException)
-{
- ConsumerList_t::reverse_iterator riter = std::find(maConsList.rbegin(),maConsList.rend(),rxConsumer);
-
- if (riter != maConsList.rend())
- maConsList.erase(riter.base()-1);
-}
-
-// ------------------------------------------------------------
-
-void ImageProducer::SetImage( const ::rtl::OUString& rPath )
-{
- maURL = rPath;
- mpGraphic->Clear();
- mbConsInit = sal_False;
- delete mpStm;
-
- if ( ::svt::GraphicAccess::isSupportedURL( maURL ) )
- {
- mpStm = ::svt::GraphicAccess::getImageStream( ::comphelper::getProcessServiceFactory(), maURL );
- }
- else if( maURL.getLength() )
- {
- SvStream* pIStm = ::utl::UcbStreamHelper::CreateStream( maURL, STREAM_STD_READ );
- mpStm = pIStm ? new SvStream( new ImgProdLockBytes( pIStm, sal_True ) ) : NULL;
- }
- else
- mpStm = NULL;
-}
-
-// ------------------------------------------------------------
-
-void ImageProducer::SetImage( SvStream& rStm )
-{
- maURL = ::rtl::OUString();
- mpGraphic->Clear();
- mbConsInit = sal_False;
-
- delete mpStm;
- mpStm = new SvStream( new ImgProdLockBytes( &rStm, sal_False ) );
-}
-
-// ------------------------------------------------------------
-
-void ImageProducer::setImage( ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > & rInputStmRef )
-{
- maURL = ::rtl::OUString();
- mpGraphic->Clear();
- mbConsInit = sal_False;
- delete mpStm;
-
- if( rInputStmRef.is() )
- mpStm = new SvStream( new ImgProdLockBytes( rInputStmRef ) );
- else
- mpStm = NULL;
-}
-
-// ------------------------------------------------------------
-
-void ImageProducer::NewDataAvailable()
-{
- if( ( GRAPHIC_NONE == mpGraphic->GetType() ) || mpGraphic->GetContext() )
- startProduction();
-}
-
-// ------------------------------------------------------------
-
-void ImageProducer::startProduction() throw(::com::sun::star::uno::RuntimeException)
-{
- if( !maConsList.empty() || maDoneHdl.IsSet() )
- {
- bool bNotifyEmptyGraphics = false;
-
- // valid stream or filled graphic? => update consumers
- if( mpStm || ( mpGraphic->GetType() != GRAPHIC_NONE ) )
- {
- // if we already have a graphic, we don't have to import again;
- // graphic is cleared if a new Stream is set
- if( ( mpGraphic->GetType() == GRAPHIC_NONE ) || mpGraphic->GetContext() )
- {
- if ( ImplImportGraphic( *mpGraphic ) && maDoneHdl.IsSet() )
- maDoneHdl.Call( mpGraphic );
- }
-
- if( mpGraphic->GetType() != GRAPHIC_NONE )
- ImplUpdateData( *mpGraphic );
- else
- bNotifyEmptyGraphics = true;
- }
- else
- bNotifyEmptyGraphics = true;
-
- if ( bNotifyEmptyGraphics )
- {
- // reset image
- // create temporary list to hold interfaces
- ConsumerList_t aTmp = maConsList;
-
- // iterate through interfaces
- for( ConsumerList_t::iterator iter = aTmp.begin(); iter != aTmp.end(); ++iter )
- {
- (*iter)->init( 0, 0 );
- (*iter)->complete( ::com::sun::star::awt::ImageStatus::IMAGESTATUS_STATICIMAGEDONE, this );
- }
-
- if ( maDoneHdl.IsSet() )
- maDoneHdl.Call( NULL );
- }
- }
-}
-
-// ------------------------------------------------------------
-
-sal_Bool ImageProducer::ImplImportGraphic( Graphic& rGraphic )
-{
- if( ERRCODE_IO_PENDING == mpStm->GetError() )
- mpStm->ResetError();
-
- mpStm->Seek( 0UL );
-
- sal_Bool bRet = GraphicConverter::Import( *mpStm, rGraphic ) == ERRCODE_NONE;
-
- if( ERRCODE_IO_PENDING == mpStm->GetError() )
- mpStm->ResetError();
-
- return bRet;
-}
-
-// ------------------------------------------------------------
-
-void ImageProducer::ImplUpdateData( const Graphic& rGraphic )
-{
- ImplInitConsumer( rGraphic );
-
- if( mbConsInit && !maConsList.empty() )
- {
- // create temporary list to hold interfaces
- ConsumerList_t aTmp = maConsList;
-
- ImplUpdateConsumer( rGraphic );
- mbConsInit = sal_False;
-
- // iterate through interfaces
- for( ConsumerList_t::iterator iter = aTmp.begin(); iter != aTmp.end(); ++iter )
- (*iter)->complete( ::com::sun::star::awt::ImageStatus::IMAGESTATUS_STATICIMAGEDONE, this );
- }
-}
-
-// ------------------------------------------------------------
-
-void ImageProducer::ImplInitConsumer( const Graphic& rGraphic )
-{
- Bitmap aBmp( rGraphic.GetBitmapEx().GetBitmap() );
- BitmapReadAccess* pBmpAcc = aBmp.AcquireReadAccess();
-
- if( pBmpAcc )
- {
- sal_uInt16 nPalCount = 0;
- sal_uInt32 nRMask = 0;
- sal_uInt32 nGMask = 0;
- sal_uInt32 nBMask = 0;
- sal_uInt32 nAMask = 0;
- ::com::sun::star::uno::Sequence< sal_Int32 > aRGBPal;
-
- if( pBmpAcc->HasPalette() )
- {
- nPalCount = pBmpAcc->GetPaletteEntryCount();
-
- if( nPalCount )
- {
- aRGBPal = ::com::sun::star::uno::Sequence< sal_Int32 >( nPalCount + 1 );
-
- sal_Int32* pTmp = aRGBPal.getArray();
-
- for( sal_uInt32 i = 0; i < nPalCount; i++, pTmp++ )
- {
- const BitmapColor& rCol = pBmpAcc->GetPaletteColor( (sal_uInt16) i );
-
- *pTmp = ( (sal_Int32) rCol.GetRed() ) << (sal_Int32)(24L);
- *pTmp |= ( (sal_Int32) rCol.GetGreen() ) << (sal_Int32)(16L);
- *pTmp |= ( (sal_Int32) rCol.GetBlue() ) << (sal_Int32)(8L);
- *pTmp |= (sal_Int32)(0x000000ffL);
- }
-
- if( rGraphic.IsTransparent() )
- {
- // append transparent entry
- *pTmp = (sal_Int32)(0xffffff00L);
- mnTransIndex = nPalCount;
- nPalCount++;
- }
- else
- mnTransIndex = 0;
-
- }
- }
- else
- {
- nRMask = 0xff000000UL;
- nGMask = 0x00ff0000UL;
- nBMask = 0x0000ff00UL;
- nAMask = 0x000000ffUL;
- }
-
- // create temporary list to hold interfaces
- ConsumerList_t aTmp = maConsList;
-
- // iterate through interfaces
- for( ConsumerList_t::iterator iter = aTmp.begin(); iter != aTmp.end(); ++iter)
- {
- (*iter)->init( pBmpAcc->Width(), pBmpAcc->Height() );
- (*iter)->setColorModel( pBmpAcc->GetBitCount(),aRGBPal, nRMask, nGMask, nBMask, nAMask );
- }
-
- aBmp.ReleaseAccess( pBmpAcc );
- mbConsInit = sal_True;
- }
-}
-
-// ------------------------------------------------------------
-
-void ImageProducer::ImplUpdateConsumer( const Graphic& rGraphic )
-{
- BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
- Bitmap aBmp( aBmpEx.GetBitmap() );
- BitmapReadAccess* pBmpAcc = aBmp.AcquireReadAccess();
-
- if( pBmpAcc )
- {
- Bitmap aMask( aBmpEx.GetMask() );
- BitmapReadAccess* pMskAcc = !!aMask ? aMask.AcquireReadAccess() : NULL;
- const long nWidth = pBmpAcc->Width();
- const long nHeight = pBmpAcc->Height();
- const long nStartX = 0L;
- const long nEndX = nWidth - 1L;
- const long nStartY = 0L;
- const long nEndY = nHeight - 1L;
- const long nPartWidth = nEndX - nStartX + 1;
- const long nPartHeight = nEndY - nStartY + 1;
-
- if( !pMskAcc )
- {
- aMask = Bitmap( aBmp.GetSizePixel(), 1 );
- aMask.Erase( COL_BLACK );
- pMskAcc = aMask.AcquireReadAccess();
- }
-
- // create temporary list to hold interfaces
- ConsumerList_t aTmp = maConsList;
-
- if( pBmpAcc->HasPalette() )
- {
- const BitmapColor aWhite( pMskAcc->GetBestMatchingColor( Color( COL_WHITE ) ) );
-
- if( mnTransIndex < 256 )
- {
- ::com::sun::star::uno::Sequence<sal_Int8> aData( nPartWidth * nPartHeight );
- sal_Int8* pTmp = aData.getArray();
-
- for( long nY = nStartY; nY <= nEndY; nY++ )
- {
- for( long nX = nStartX; nX <= nEndX; nX++ )
- {
- if( pMskAcc->GetPixel( nY, nX ) == aWhite )
- *pTmp++ = sal::static_int_cast< sal_Int8 >(
- mnTransIndex );
- else
- *pTmp++ = pBmpAcc->GetPixel( nY, nX ).GetIndex();
- }
- }
-
- // iterate through interfaces
- for (ConsumerList_t::iterator iter = aTmp.begin(); iter != aTmp.end(); ++iter)
- (*iter)->setPixelsByBytes( nStartX, nStartY, nPartWidth, nPartHeight, aData, 0UL, nPartWidth );
- }
- else
- {
- ::com::sun::star::uno::Sequence<sal_Int32> aData( nPartWidth * nPartHeight );
- sal_Int32* pTmp = aData.getArray();
-
- for( long nY = nStartY; nY <= nEndY; nY++ )
- {
- for( long nX = nStartX; nX <= nEndX; nX++ )
- {
- if( pMskAcc->GetPixel( nY, nX ) == aWhite )
- *pTmp++ = mnTransIndex;
- else
- *pTmp++ = pBmpAcc->GetPixel( nY, nX ).GetIndex();
- }
- }
-
- // iterate through interfaces
- for (ConsumerList_t::iterator iter = aTmp.begin(); iter != aTmp.end(); ++iter)
- (*iter)->setPixelsByLongs( nStartX, nStartY, nPartWidth, nPartHeight, aData, 0UL, nPartWidth );
- }
- }
- else
- {
- ::com::sun::star::uno::Sequence<sal_Int32> aData( nPartWidth * nPartHeight );
- const BitmapColor aWhite( pMskAcc->GetBestMatchingColor( Color( COL_WHITE ) ) );
- sal_Int32* pTmp = aData.getArray();
-
- for( long nY = nStartY; nY <= nEndY; nY++ )
- {
- for( long nX = nStartX; nX <= nEndX; nX++, pTmp++ )
- {
- const BitmapColor aCol( pBmpAcc->GetPixel( nY, nX ) );
-
- *pTmp = ( (sal_Int32) aCol.GetRed() ) << (sal_Int32)(24L);
- *pTmp |= ( (sal_Int32) aCol.GetGreen() ) << (sal_Int32)(16L);
- *pTmp |= ( (sal_Int32) aCol.GetBlue() ) << (sal_Int32)(8L);
-
- if( pMskAcc->GetPixel( nY, nX ) != aWhite )
- *pTmp |= 0x000000ffUL;
- }
- }
-
- // iterate through interfaces
- for (ConsumerList_t::iterator iter = aTmp.begin(); iter != aTmp.end(); ++iter)
- (*iter)->setPixelsByLongs( nStartX, nStartY, nPartWidth, nPartHeight, aData, 0UL, nPartWidth );
- }
-
- aBmp.ReleaseAccess( pBmpAcc );
- aMask.ReleaseAccess( pMskAcc );
- }
-}
-
-void ImageProducer::initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
-{
- if ( aArguments.getLength() == 1 )
- {
- ::com::sun::star::uno::Any aArg = aArguments.getConstArray()[0];
- rtl::OUString aURL;
- if ( aArg >>= aURL )
- {
- SetImage( aURL );
- }
- }
-}
-
-namespace frm
-{
-::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
-SAL_CALL ImageProducer_CreateInstance(
- const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& )
-{
- return ::com::sun::star::uno::Reference < ::com::sun::star::uno::XInterface >(
- ( ::cppu::OWeakObject* ) new ImageProducer );
-}
-} // namespace frm
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */