diff options
author | Jan-Marek Glogowski <glogow@fbihome.de> | 2017-10-30 18:45:46 +0100 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2017-11-06 12:05:32 +0100 |
commit | 2ffb83daa4358aaad0cba7ddb67847282ac6fcce (patch) | |
tree | 2bf819492eb68134e8678e8138c983c57845e7e8 /vcl/qt5/Qt5Bitmap.cxx | |
parent | bc00fcc0a05ce2fa9f0e01a291a6917c3630cfab (diff) |
QT5 rename from KF5
Move out of unx, as this will eventually compile on other
OS platforms. At least currently it doesn't contain platform
dependant code.
Change-Id: Iea0bebf574201881ea158381fe7ba8af2a9a6488
Diffstat (limited to 'vcl/qt5/Qt5Bitmap.cxx')
-rw-r--r-- | vcl/qt5/Qt5Bitmap.cxx | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/vcl/qt5/Qt5Bitmap.cxx b/vcl/qt5/Qt5Bitmap.cxx new file mode 100644 index 000000000000..524eaf6048c2 --- /dev/null +++ b/vcl/qt5/Qt5Bitmap.cxx @@ -0,0 +1,265 @@ +/* -*- 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 "Qt5Bitmap.hxx" +#include "Qt5Tools.hxx" +#include "Qt5Graphics.hxx" + +#include <QtGui/QImage> +#include <QtCore/QVector> +#include <QtGui/QColor> + +Qt5Bitmap::Qt5Bitmap() +{ +} + +Qt5Bitmap::Qt5Bitmap( const QImage &rImage ) +{ + m_pImage.reset( new QImage( rImage ) ); +} + +Qt5Bitmap::~Qt5Bitmap() +{ +} + +bool Qt5Bitmap::Create( const Size& rSize, sal_uInt16 nBitCount, + const BitmapPalette& rPal ) +{ + assert( + (nBitCount == 1 + || nBitCount == 4 + || nBitCount == 8 + || nBitCount == 16 + || nBitCount == 24 + || nBitCount == 32) + && "Unsupported BitCount!"); + + if ( nBitCount == 1 ) + assert( 2 == rPal.GetEntryCount() ); + if ( nBitCount == 4 ) + assert( 16 == rPal.GetEntryCount() ); + if ( nBitCount == 8 ) + assert( 256 == rPal.GetEntryCount() ); + + if ( nBitCount == 4 ) + { + m_pImage.reset(); + m_aSize = rSize; + m_nScanline = rSize.Width() / 2 + (rSize.Width() % 2) ? 0 : 1; + m_pBuffer.reset( new sal_uInt8[ m_nScanline * rSize.Height() ] ); + } + else + { + m_pImage.reset( new QImage( toQSize( rSize ), getBitFormat( nBitCount ) ) ); + m_pBuffer.reset(); + } + m_aPalette = rPal; + + auto count = rPal.GetEntryCount(); + if( nBitCount != 4 && count ) + { + QVector<QRgb> aColorTable( count ); + for ( unsigned i = 0; i < count; ++i ) + aColorTable[ i ] = qRgb( rPal[ i ].GetRed(), + rPal[ i ].GetGreen(), rPal[ i ].GetBlue() ); + m_pImage->setColorTable( aColorTable ); + } + return true; +} + +bool Qt5Bitmap::Create( const SalBitmap& rSalBmp ) +{ + const Qt5Bitmap *pBitmap = static_cast< const Qt5Bitmap*>( &rSalBmp ); + if ( pBitmap->m_pImage.get() ) + { + m_pImage.reset( new QImage( *pBitmap->m_pImage.get() ) ); + m_pBuffer.reset(); + } + else + { + m_aSize = pBitmap->m_aSize; + m_nScanline = pBitmap->m_nScanline; + m_pBuffer.reset( new sal_uInt8[ m_nScanline * m_aSize.Height() ] ); + memcpy( m_pBuffer.get(), pBitmap->m_pBuffer.get(), m_nScanline ); + m_pImage.reset(); + } + m_aPalette = pBitmap->m_aPalette; + return true; +} + +bool Qt5Bitmap::Create( const SalBitmap& rSalBmp, + SalGraphics* pSalGraphics ) +{ + const Qt5Bitmap *pBitmap = static_cast< const Qt5Bitmap *>( &rSalBmp ); + Qt5Graphics *pGraphics = static_cast< Qt5Graphics* >( pSalGraphics ); + QImage *pImage = pGraphics->m_pQImage; + m_pImage.reset( new QImage( pBitmap->m_pImage->convertToFormat( pImage->format() ) ) ); + m_pBuffer.reset(); + return true; +} + +bool Qt5Bitmap::Create( const SalBitmap& rSalBmp, + sal_uInt16 nNewBitCount ) +{ + assert( + (nNewBitCount == 1 + || nNewBitCount == 4 + || nNewBitCount == 8 + || nNewBitCount == 16 + || nNewBitCount == 24 + || nNewBitCount == 32) + && "Unsupported BitCount!"); + + const Qt5Bitmap *pBitmap = static_cast< const Qt5Bitmap *>( &rSalBmp ); + if ( pBitmap->m_pBuffer.get() ) + return false; + + m_pImage.reset( new QImage( pBitmap->m_pImage->convertToFormat( getBitFormat( nNewBitCount ) ) ) ); + return true; +} + +bool Qt5Bitmap::Create( const css::uno::Reference< css::rendering::XBitmapCanvas >& rBitmapCanvas, + Size& rSize, bool bMask ) +{ + return false; +} + +void Qt5Bitmap::Destroy() +{ + m_pImage.reset(); + m_pBuffer.reset(); +} + +Size Qt5Bitmap::GetSize() const +{ + if ( m_pBuffer.get() ) + return m_aSize; + else if ( m_pImage.get() ) + return toSize( m_pImage->size() ); + return Size(); +} + +sal_uInt16 Qt5Bitmap::GetBitCount() const +{ + if ( m_pBuffer.get() ) + return 4; + else if ( m_pImage.get() ) + return getFormatBits( m_pImage->format() ); + return 0; +} + +BitmapBuffer* Qt5Bitmap::AcquireBuffer( BitmapAccessMode nMode ) +{ + static const BitmapPalette aEmptyPalette; + + if ( !(m_pImage.get() || m_pBuffer.get()) ) + return nullptr; + + BitmapBuffer* pBuffer = new BitmapBuffer; + + if ( m_pBuffer.get() ) + { + pBuffer->mnWidth = m_aSize.Width(); + pBuffer->mnHeight = m_aSize.Height(); + pBuffer->mnBitCount = 4; + pBuffer->mpBits = m_pBuffer.get(); + pBuffer->mnScanlineSize = m_nScanline; + } + else + { + pBuffer->mnWidth = m_pImage->width(); + pBuffer->mnHeight = m_pImage->height(); + pBuffer->mnBitCount = getFormatBits( m_pImage->format() ); + pBuffer->mpBits = m_pImage->bits(); + pBuffer->mnScanlineSize = m_pImage->bytesPerLine(); + } + + switch( pBuffer->mnBitCount ) + { + case 1: + pBuffer->mnFormat = ScanlineFormat::N1BitLsbPal; + pBuffer->maPalette = m_aPalette; + break; + case 4: + pBuffer->mnFormat = ScanlineFormat::N4BitMsnPal; + pBuffer->maPalette = m_aPalette; + break; + case 8: + pBuffer->mnFormat = ScanlineFormat::N8BitPal; + pBuffer->maPalette = m_aPalette; + break; + case 16: + { +#ifdef OSL_BIGENDIAN + pBuffer->mnFormat= ScanlineFormat::N16BitTcMsbMask; +#else + pBuffer->mnFormat= ScanlineFormat::N16BitTcLsbMask; +#endif + ColorMaskElement aRedMask(0xf800); // 5 + aRedMask.CalcMaskShift(); + ColorMaskElement aGreenMask(0x07e0); // 6 + aGreenMask.CalcMaskShift(); + ColorMaskElement aBlueMask(0x001f); // 5 + aBlueMask.CalcMaskShift(); + pBuffer->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask); + pBuffer->maPalette = aEmptyPalette; + break; + } + case 24: + pBuffer->mnFormat = ScanlineFormat::N24BitTcRgb; + pBuffer->maPalette = aEmptyPalette; + break; + case 32: + { + pBuffer->mnFormat = ScanlineFormat::N32BitTcArgb; + pBuffer->maPalette = aEmptyPalette; + break; + } + } + + return pBuffer; +} + +void Qt5Bitmap::ReleaseBuffer( BitmapBuffer* pBuffer, BitmapAccessMode nMode ) +{ + m_aPalette = pBuffer->maPalette; + delete pBuffer; +} + +bool Qt5Bitmap::GetSystemData( BitmapSystemData& rData ) +{ + return false; +} + +bool Qt5Bitmap::ScalingSupported() const +{ + return false; +} + +bool Qt5Bitmap::Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag nScaleFlag ) +{ + return false; +} + +bool Qt5Bitmap::Replace( const Color& rSearchColor, const Color& rReplaceColor, sal_uLong nTol ) +{ + return false; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |