[Libreoffice-commits] core.git: 11 commits - basebmp/inc basebmp/source basebmp/test include/basebmp vcl/headless vcl/unx

Caolán McNamara caolanm at redhat.com
Tue Jan 19 05:24:55 PST 2016


 basebmp/inc/colorblendaccessoradapter.hxx |  123 -------
 basebmp/inc/fillimage.hxx                 |   63 ---
 basebmp/inc/scaleimage.hxx                |  189 ----------
 basebmp/source/bitmapdevice.cxx           |  526 ++++--------------------------
 basebmp/source/intconversion.hxx          |   88 -----
 basebmp/test/basictest.cxx                |    4 
 include/basebmp/bitmapdevice.hxx          |   54 ---
 vcl/headless/svpbmp.cxx                   |    5 
 vcl/headless/svpgdi.cxx                   |    3 
 vcl/unx/gtk3/gtk3gtkframe.cxx             |    7 
 10 files changed, 92 insertions(+), 970 deletions(-)

New commits:
commit 011ce226e89ecabaf621603d692547c88061eaba
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jan 19 13:22:10 2016 +0000

    Resolves: tdf#99604 ungrab modal dialogs
    
    Change-Id: I6735913c371968745da3ad6bf61e6ae3287c19a6

diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
index 6012f58..803542d 100644
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
@@ -2367,6 +2367,13 @@ void GtkSalFrame::SetModal(bool bModal)
     if (!m_pWindow)
         return;
     gtk_window_set_modal(GTK_WINDOW(m_pWindow), bModal);
+    if (bModal)
+    {
+        //gtk_window_set_modal bTrue adds a grab, so ungrab here. Quite
+        //possibly we should alternatively call grab_add grab_ungrab on
+        //show/hide of menus ?
+        gtk_grab_remove(m_pWindow);
+    }
 }
 
 gboolean GtkSalFrame::signalTooltipQuery(GtkWidget*, gint /*x*/, gint /*y*/,
commit e187217222ba3be497f45a7d1e72a1a25b2fb9d6
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jan 19 12:49:11 2016 +0000

    drop some more unused pieces now
    
    Change-Id: Icd2497f0befad0a3221230fe82cb100cddbd7764

diff --git a/basebmp/source/bitmapdevice.cxx b/basebmp/source/bitmapdevice.cxx
index 211f16b..1e1c14e 100644
--- a/basebmp/source/bitmapdevice.cxx
+++ b/basebmp/source/bitmapdevice.cxx
@@ -117,31 +117,21 @@ namespace
         typedef typename AccessorSelector::template wrap_accessor<
             raw_accessor_type >::type                                      dest_accessor_type;
 
-        typedef AccessorTraits< dest_accessor_type >                       accessor_traits;
-
-        typedef AccessorTraits< raw_accessor_type >                        raw_accessor_traits;
-
         dest_iterator_type                      maBegin;
         dest_accessor_type                      maAccessor;
-        raw_accessor_type                       maRawAccessor;
-
-
-
 
         BitmapRenderer( const basegfx::B2IBox&                     rBounds,
                         Format                                     nScanlineFormat,
                         sal_Int32                                  nScanlineStride,
                         sal_uInt8*                                 pFirstScanline,
                         dest_iterator_type                         begin,
-                        raw_accessor_type                          rawAccessor,
                         dest_accessor_type                         accessor,
                         const RawMemorySharedArray&                rMem,
                         const PaletteMemorySharedVector&           rPalette ) :
             BitmapDevice( rBounds, nScanlineFormat,
                           nScanlineStride, pFirstScanline, rMem, rPalette ),
             maBegin( begin ),
-            maAccessor( accessor ),
-            maRawAccessor( rawAccessor )
+            maAccessor( accessor )
         {}
 
     private:
@@ -275,7 +265,6 @@ BitmapDeviceSharedPtr createRenderer(
     Format                                                       nScanlineFormat,
     sal_Int32                                                    nScanlineStride,
     sal_uInt8*                                                   pFirstScanline,
-    typename FormatTraits::raw_accessor_type const&              rRawAccessor,
     typename FormatTraits::accessor_selector::template wrap_accessor<
           typename FormatTraits::raw_accessor_type>::type const& rAccessor,
     boost::shared_array< sal_uInt8 >                             pMem,
@@ -296,7 +285,6 @@ BitmapDeviceSharedPtr createRenderer(
                           reinterpret_cast<typename Iterator::value_type*>(
                               pFirstScanline),
                           nScanlineStride),
-                      rRawAccessor,
                       rAccessor,
                       pMem,
                       pPal ));
@@ -336,7 +324,6 @@ BitmapDeviceSharedPtr createRenderer(
                                       nScanlineFormat,
                                       nScanlineStride,
                                       pFirstScanline,
-                                      typename FormatTraits::raw_accessor_type(),
                                       typename FormatTraits::accessor_selector::template
                                       wrap_accessor<
                                           typename FormatTraits::raw_accessor_type>::type(),
@@ -362,7 +349,6 @@ BitmapDeviceSharedPtr createRenderer(
                                       nScanlineFormat,
                                       nScanlineStride,
                                       pFirstScanline,
-                                      typename FormatTraits::raw_accessor_type(),
                                       typename FormatTraits::accessor_selector::template
                                           wrap_accessor<
                                       typename FormatTraits::raw_accessor_type>::type(
commit dd16d34a6ebfbe60cee1d01752f167069ddb2848
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jan 19 12:42:58 2016 +0000

    either copy the whole thing exactly, or convert between types
    
    Change-Id: Ied1b4f81e2e851b639cc9a514659160b8571e92f

diff --git a/basebmp/source/bitmapdevice.cxx b/basebmp/source/bitmapdevice.cxx
index 3ca3bdf..211f16b 100644
--- a/basebmp/source/bitmapdevice.cxx
+++ b/basebmp/source/bitmapdevice.cxx
@@ -146,18 +146,6 @@ namespace
 
     private:
 
-        static std::shared_ptr<BitmapRenderer> getCompatibleBitmap( const BitmapDeviceSharedPtr& bmp )
-        {
-            return std::dynamic_pointer_cast< BitmapRenderer >( bmp );
-        }
-
-        virtual bool isCompatibleBitmap( const BitmapDeviceSharedPtr& bmp ) const override
-        {
-            // TODO(P1): dynamic_cast usually called twice for
-            // compatible formats
-            return getCompatibleBitmap(bmp).get() != nullptr;
-        }
-
         virtual Color getPixel_i(const basegfx::B2IPoint& rPt ) override
         {
             const DestIterator pixel( maBegin +
@@ -166,21 +154,6 @@ namespace
             return maAccessor(pixel);
         }
 
-        template< typename Iterator, typename RawAcc >
-        void implDrawBitmap(const BitmapDeviceSharedPtr& rSrcBitmap,
-                            const Iterator&              begin,
-                            const RawAcc&                acc)
-        {
-            const basegfx::B2IVector& rSrcSize( rSrcBitmap->getSize() );
-            const basegfx::B2IBox     aRect(0, 0, rSrcSize.getX(),rSrcSize.getY());
-
-            std::shared_ptr<BitmapRenderer> pSrcBmp( getCompatibleBitmap(rSrcBitmap) );
-            OSL_ASSERT( pSrcBmp );
-
-            vigra::copyImage( pSrcBmp->maBegin, pSrcBmp->maBegin + bottomRight(aRect), pSrcBmp->maRawAccessor,
-                              begin, acc );
-        }
-
         template< typename Iterator, typename Acc > static
         void implDrawBitmapGeneric(const BitmapDeviceSharedPtr& rSrcBitmap,
                                    const Iterator&              begin,
@@ -195,49 +168,9 @@ namespace
                               begin, acc );
         }
 
-        void implDrawBitmapDirect(const BitmapDeviceSharedPtr& rSrcBitmap)
-        {
-            const basegfx::B2IVector& rSrcSize(rSrcBitmap->getSize());
-
-            sal_Int32 nSrcWidth = rSrcSize.getX();
-            sal_Int32 nSrcHeight = rSrcSize.getY();
-
-            char* dstBuf =  reinterpret_cast<char*>(getBuffer().get());
-            char* srcBuf =  reinterpret_cast<char*>(rSrcBitmap->getBuffer().get());
-            sal_Int32 dstStride =  getScanlineStride();
-            sal_Int32 srcStride =  rSrcBitmap->getScanlineStride();
-            sal_Int32 bytesPerPixel = (bitsPerPixel[getScanlineFormat()] + 7) >> 3; // round up to bytes
-
-            char* dstline = dstBuf;
-            char* srcline = srcBuf;
-            sal_Int32 lineBytes = nSrcWidth * bytesPerPixel;
-
-            for(; 0 < nSrcHeight; nSrcHeight--)
-            {
-                memmove(dstline, srcline, lineBytes);
-                dstline += dstStride;
-                srcline += srcStride;
-            }
-        }
-
-        virtual void copyBitmap_i(const BitmapDeviceSharedPtr& rSrcBitmap) override
+        virtual void convertBitmap_i(const BitmapDeviceSharedPtr& rSrcBitmap) override
         {
-            if( isCompatibleBitmap( rSrcBitmap ) )
-            {
-                if (bitsPerPixel[getScanlineFormat()] >= 8
-                         && rSrcBitmap->getScanlineFormat() == getScanlineFormat())
-                    implDrawBitmapDirect(rSrcBitmap);
-                else
-                    implDrawBitmap(rSrcBitmap,
-                                   maBegin,
-                                   maRawAccessor);
-            }
-            else
-            {
-                implDrawBitmapGeneric(rSrcBitmap,
-                                      maBegin,
-                                      maAccessor);
-            }
+            implDrawBitmapGeneric(rSrcBitmap, maBegin, maAccessor);
         }
     };
 } // namespace
@@ -330,12 +263,11 @@ Color BitmapDevice::getPixel( const basegfx::B2IPoint& rPt )
     return Color();
 }
 
-void BitmapDevice::copyBitmap( const BitmapDeviceSharedPtr& rSrcBitmap )
+void BitmapDevice::convertBitmap( const BitmapDeviceSharedPtr& rSrcBitmap )
 {
-    copyBitmap_i( rSrcBitmap );
+    convertBitmap_i(rSrcBitmap);
 }
 
-
 /// Produces a specialized renderer for the given pixel format
 template< class FormatTraits >
 BitmapDeviceSharedPtr createRenderer(
@@ -670,11 +602,19 @@ BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector&        rSize
 
 BitmapDeviceSharedPtr cloneBitmapDevice(const BitmapDeviceSharedPtr& rProto)
 {
-    BitmapDeviceSharedPtr aCopy = createBitmapDeviceImpl(rProto->getSize(),
+    const basegfx::B2IVector& rSrcSize(rProto->getSize());
+
+    BitmapDeviceSharedPtr aCopy = createBitmapDeviceImpl(rSrcSize,
                                    rProto->getScanlineFormat(),
                                    boost::shared_array< sal_uInt8 >(),
                                    rProto->getPalette() );
-    aCopy->copyBitmap(rProto);
+
+    const sal_Int32 nSrcHeight = rSrcSize.getY();
+    char* dstBuf =  reinterpret_cast<char*>(aCopy->getBuffer().get());
+    char* srcBuf =  reinterpret_cast<char*>(rProto->getBuffer().get());
+    const sal_Int32 nStride = rProto->getScanlineStride();
+    memcpy(dstBuf, srcBuf, nStride * nSrcHeight);
+
     return aCopy;
 }
 
diff --git a/include/basebmp/bitmapdevice.hxx b/include/basebmp/bitmapdevice.hxx
index 1ad089d..aa1cc6a 100644
--- a/include/basebmp/bitmapdevice.hxx
+++ b/include/basebmp/bitmapdevice.hxx
@@ -102,7 +102,7 @@ public:
         @param rSrcBitmap
         Bitmap to render into this one.
      */
-    void copyBitmap( const BitmapDeviceSharedPtr& rSrcBitmap );
+    void convertBitmap( const BitmapDeviceSharedPtr& rSrcBitmap );
 
 protected:
     BASEBMP_DLLPRIVATE BitmapDevice( const basegfx::B2IBox&           rBounds,
@@ -116,13 +116,10 @@ protected:
     BitmapDevice& operator=( const BitmapDevice& ) = delete;
 
 private:
-    BASEBMP_DLLPRIVATE virtual bool isCompatibleBitmap( const BitmapDeviceSharedPtr& bmp ) const = 0;
 
     BASEBMP_DLLPRIVATE virtual Color getPixel_i( const basegfx::B2IPoint& rPt ) = 0;
 
-    BASEBMP_DLLPRIVATE virtual void copyBitmap_i( const BitmapDeviceSharedPtr& rSrcBitmap ) = 0;
-
-    BitmapDeviceSharedPtr getGenericRenderer() const;
+    BASEBMP_DLLPRIVATE virtual void convertBitmap_i( const BitmapDeviceSharedPtr& rSrcBitmap ) = 0;
 
     std::unique_ptr< ImplBitmapDevice > mpImpl;
 };
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index eb96693..59e8947 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -131,7 +131,7 @@ namespace
                 aTmpBmp.Create(aSize, 0, BitmapPalette());
                 assert(aTmpBmp.GetBitCount() == 32);
                 const basebmp::BitmapDeviceSharedPtr& rTmpSrc = aTmpBmp.getBitmap();
-                rTmpSrc->copyBitmap(rSrcBmp);
+                rTmpSrc->convertBitmap(rSrcBmp);
                 source = SvpSalGraphics::createCairoSurface(rTmpSrc);
             }
             else
commit f73e72fb33f111c2eda12aa359b96dad680e6848
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jan 19 11:40:32 2016 +0000

    only use of clone is to copy, so do that
    
    Change-Id: I75cfb96e4afd69fd0f6a6716ce4be282aa8d3b14

diff --git a/basebmp/source/bitmapdevice.cxx b/basebmp/source/bitmapdevice.cxx
index 6c84860..3ca3bdf 100644
--- a/basebmp/source/bitmapdevice.cxx
+++ b/basebmp/source/bitmapdevice.cxx
@@ -668,13 +668,14 @@ BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector&        rSize
                                    rPalette );
 }
 
-BitmapDeviceSharedPtr cloneBitmapDevice( const basegfx::B2IVector&    rSize,
-                                         const BitmapDeviceSharedPtr& rProto )
+BitmapDeviceSharedPtr cloneBitmapDevice(const BitmapDeviceSharedPtr& rProto)
 {
-    return createBitmapDeviceImpl( rSize,
+    BitmapDeviceSharedPtr aCopy = createBitmapDeviceImpl(rProto->getSize(),
                                    rProto->getScanlineFormat(),
                                    boost::shared_array< sal_uInt8 >(),
                                    rProto->getPalette() );
+    aCopy->copyBitmap(rProto);
+    return aCopy;
 }
 
 } // namespace basebmp
diff --git a/basebmp/test/basictest.cxx b/basebmp/test/basictest.cxx
index 05da4f5..763e85a 100644
--- a/basebmp/test/basictest.cxx
+++ b/basebmp/test/basictest.cxx
@@ -131,15 +131,13 @@ public:
     void testClone()
     {
         const basegfx::B2ISize aSize(101,101);
-        basegfx::B2ISize       aSize2(3,3);
         BitmapDeviceSharedPtr  pDevice( createBitmapDevice( aSize,
                                                             Format::OneBitMsbPal ) );
 
         BitmapDeviceSharedPtr  pClone( cloneBitmapDevice(
-                                           aSize2,
                                            pDevice ));
         CPPUNIT_ASSERT_EQUAL_MESSAGE("right size",
-                               aSize2, pClone->getSize() );
+                               aSize, pClone->getSize() );
     }
 
     // Change the following lines only, if you add, remove or rename
diff --git a/include/basebmp/bitmapdevice.hxx b/include/basebmp/bitmapdevice.hxx
index a3b4bb0..1ad089d 100644
--- a/include/basebmp/bitmapdevice.hxx
+++ b/include/basebmp/bitmapdevice.hxx
@@ -161,13 +161,8 @@ BitmapDeviceSharedPtr BASEBMP_DLLPUBLIC createBitmapDevice( const basegfx::B2IVe
 
 
 /** Function to clone a BitmapDevice from a given prototype.
-
-    All attributes (like scanline format and top-down state) are
-    copied, only the size can be varied. Note that the prototype's
-    bitmap content is <em>not</em> copied, only a palette (if any).
  */
-BitmapDeviceSharedPtr BASEBMP_DLLPUBLIC cloneBitmapDevice(const basegfx::B2IVector& rSize,
-                                                          const BitmapDeviceSharedPtr& rProto);
+BitmapDeviceSharedPtr BASEBMP_DLLPUBLIC cloneBitmapDevice(const BitmapDeviceSharedPtr& rProto);
 
 }
 
diff --git a/vcl/headless/svpbmp.cxx b/vcl/headless/svpbmp.cxx
index e0b1afb..05545b6 100644
--- a/vcl/headless/svpbmp.cxx
+++ b/vcl/headless/svpbmp.cxx
@@ -77,9 +77,7 @@ bool SvpSalBitmap::Create( const SalBitmap& rSalBmp )
     const BitmapDeviceSharedPtr& rSrcBmp = rSrc.getBitmap();
     if( rSrcBmp.get() )
     {
-        B2IVector aSize = rSrcBmp->getSize();
-        m_aBitmap = cloneBitmapDevice( aSize, rSrcBmp );
-        m_aBitmap->copyBitmap(rSrcBmp);
+        m_aBitmap = cloneBitmapDevice(rSrcBmp);
     }
     else
         m_aBitmap.reset();
commit 8b5e8dfed7c7c3c6669062a3db04961fe5eb1855
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jan 19 10:44:23 2016 +0000

    drop some more stuff
    
    Change-Id: I92eb6d136fc117f4694aa2cf88d93d4486855618

diff --git a/basebmp/inc/colorblendaccessoradapter.hxx b/basebmp/inc/colorblendaccessoradapter.hxx
deleted file mode 100644
index 767d55e..0000000
--- a/basebmp/inc/colorblendaccessoradapter.hxx
+++ /dev/null
@@ -1,123 +0,0 @@
-/* -*- 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 .
- */
-
-#ifndef INCLUDED_BASEBMP_INC_COLORBLENDACCESSORADAPTER_HXX
-#define INCLUDED_BASEBMP_INC_COLORBLENDACCESSORADAPTER_HXX
-
-#include <colortraits.hxx>
-
-namespace basebmp
-{
-
-/** Accessor adapter that blends input value against fixed color value
-
-    Used to blend an alpha mask 'through' a fixed color value into the
-    destination.
-
-    The getter functors return a constant value (usually the zero of
-    the value type, this preserves the original destination content
-    when blitting through a mask) - there really isn't no other
-    sensible default behaviour for these methods.
- */
-template< class    WrappedAccessor,
-          typename AlphaType,
-          bool     polarity > class ConstantColorBlendSetterAccessorAdapter
-{
-public:
-    typedef AlphaType                            alpha_type;
-    typedef AlphaType                            value_type;
-    typedef typename WrappedAccessor::value_type color_type;
-
-private:
-    typename ColorTraits< color_type >::
-             template blend_functor<alpha_type,polarity>::type   maFunctor;
-    WrappedAccessor                                              maWrappee;
-    color_type                                                   maBlendColor;
-    value_type                                                   maGetterValue;
-
-public:
-    ConstantColorBlendSetterAccessorAdapter() :
-        maFunctor(),
-        maWrappee(),
-        maBlendColor(),
-        maGetterValue()
-    {}
-
-    template< class T > explicit ConstantColorBlendSetterAccessorAdapter( T acc ) :
-        maFunctor(),
-        maWrappee(acc),
-        maBlendColor(),
-        maGetterValue()
-    {}
-
-    template< class T > ConstantColorBlendSetterAccessorAdapter( T          acc,
-                                                                 color_type col ) :
-        maFunctor(),
-        maWrappee(acc),
-        maBlendColor(col),
-        maGetterValue()
-    {}
-
-    template< class T > ConstantColorBlendSetterAccessorAdapter( T          acc,
-                                                                 color_type col,
-                                                                 value_type val ) :
-        maFunctor(),
-        maWrappee(acc),
-        maBlendColor(col),
-        maGetterValue(val)
-    {}
-
-
-
-    void        setColor( color_type col ) { maBlendColor=col; }
-
-
-
-    /// @return constant value, regardless of iterator content
-    template< typename IteratorType > value_type operator()(SAL_UNUSED_PARAMETER IteratorType const& ) const
-    {
-        return maGetterValue;
-    }
-    /// @return constant value, regardless of iterator content
-    template< typename IteratorType, class Difference >
-    value_type operator()(SAL_UNUSED_PARAMETER IteratorType const& , SAL_UNUSED_PARAMETER Difference const& ) const
-    {
-        return maGetterValue;
-    }
-
-
-
-    template< typename V, typename IteratorType >
-    void set(V const& value, IteratorType const& i) const
-    {
-        maWrappee.set(
-            maFunctor(
-                vigra::detail::RequiresExplicitCast<alpha_type>::cast(value),
-                maWrappee(i),
-                maBlendColor),
-            i );
-    }
-
-};
-
-} // namespace basebmp
-
-#endif /* INCLUDED_BASEBMP_INC_COLORBLENDACCESSORADAPTER_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basebmp/source/bitmapdevice.cxx b/basebmp/source/bitmapdevice.cxx
index 32abb05..6c84860 100644
--- a/basebmp/source/bitmapdevice.cxx
+++ b/basebmp/source/bitmapdevice.cxx
@@ -30,11 +30,9 @@
 #include <accessor.hxx>
 #include <accessortraits.hxx>
 #include <accessoradapters.hxx>
-#include <colorblendaccessoradapter.hxx>
 
 #include <basebmp/color.hxx>
 #include <colormisc.hxx>
-#include <colortraits.hxx>
 
 #include <greylevelformats.hxx>
 #include <paletteformats.hxx>
@@ -46,7 +44,6 @@
 #include <genericcolorimageaccessor.hxx>
 
 #include <tools.hxx>
-#include "intconversion.hxx"
 
 #include <rtl/alloc.h>
 #include <sal/log.hxx>
@@ -64,11 +61,6 @@
 #include <basegfx/point/b2ipoint.hxx>
 #include <basegfx/vector/b2ivector.hxx>
 
-#include <vigra/iteratortraits.hxx>
-#include <vigra/rgbvalue.hxx>
-#include <vigra/copyimage.hxx>
-#include <vigra/tuple.hxx>
-
 namespace basebmp
 {
 
@@ -96,38 +88,6 @@ static const o3tl::enumarray<Format,sal_uInt8> bitsPerPixel =
 
 namespace
 {
-    /** Create the type for an accessor that takes the (mask,bitmap)
-        input value generated from a JoinImageAccessorAdapter, and
-        pipe that through a mask functor.
-
-        @tpl DestAccessor
-        Destination bitmap accessor
-
-        @tpl JoinedAccessor
-        Input accessor, is expected to generate a std::pair as the
-        value type
-
-        @tpl MaskFunctorMode
-        Either FastMask or NoFastMask, depending on whether the mask
-        is guaranteed to contain only 0s and 1s.
-     */
-    template< class    DestAccessor,
-              class    JoinedAccessor,
-              bool     polarity,
-              typename MaskFunctorMode > struct masked_input_splitting_accessor
-    {
-        typedef BinarySetterFunctionAccessorAdapter<
-            DestAccessor,
-            BinaryFunctorSplittingWrapper<
-                typename outputMaskFunctorSelector<
-                         typename JoinedAccessor::value_type::first_type,
-                         typename JoinedAccessor::value_type::second_type,
-                         polarity,
-                         MaskFunctorMode >::type > > type;
-    };
-
-
-
     // Actual BitmapDevice implementation (templatized by accessor and iterator)
 
     /** Implementation of the BitmapDevice interface
@@ -160,13 +120,8 @@ namespace
         typedef AccessorTraits< dest_accessor_type >                       accessor_traits;
 
         typedef AccessorTraits< raw_accessor_type >                        raw_accessor_traits;
-        typedef typename uInt32Converter<
-            typename raw_accessor_type::value_type>::to                    to_uint32_functor;
-
 
         dest_iterator_type                      maBegin;
-        typename accessor_traits::color_lookup  maColorLookup;
-        to_uint32_functor                       maToUInt32Converter;
         dest_accessor_type                      maAccessor;
         raw_accessor_type                       maRawAccessor;
 
@@ -185,8 +140,6 @@ namespace
             BitmapDevice( rBounds, nScanlineFormat,
                           nScanlineStride, pFirstScanline, rMem, rPalette ),
             maBegin( begin ),
-            maColorLookup(),
-            maToUInt32Converter(),
             maAccessor( accessor ),
             maRawAccessor( rawAccessor )
         {}
@@ -213,14 +166,6 @@ namespace
             return maAccessor(pixel);
         }
 
-        virtual sal_uInt32 getPixelData_i( const basegfx::B2IPoint& rPt ) override
-        {
-            const DestIterator pixel( maBegin +
-                                      vigra::Diff2D(rPt.getX(),
-                                                    rPt.getY()) );
-            return maToUInt32Converter(maRawAccessor(pixel));
-        }
-
         template< typename Iterator, typename RawAcc >
         void implDrawBitmap(const BitmapDeviceSharedPtr& rSrcBitmap,
                             const Iterator&              begin,
@@ -325,22 +270,6 @@ struct ImplBitmapDevice
 
     /// raw ptr to 0th scanline. used for cloning a generic renderer
     sal_uInt8*                mpFirstScanline;
-
-    /** (Optional) device sharing the same memory, and used for input
-        clip masks/alpha masks/bitmaps that don't match our exact
-        bitmap format.
-
-        This is to avoid the combinatorial explosion when dealing
-        with n bitmap formats, which could be combined with n clip
-        masks, alpha masks and bitmap masks (yielding a total of n^4
-        combinations). Since each BitmapRenderer is specialized for
-        one specific combination of said formats, a lot of duplicate
-        code would be generated, most of which probably never
-        used. Therefore, only the most common combinations are
-        specialized templates, the remainder gets handled by this
-        generic renderer (via runtime polymorphism).
-     */
-    BitmapDeviceSharedPtr     mpGenericRenderer;
 };
 
 
@@ -401,14 +330,6 @@ Color BitmapDevice::getPixel( const basegfx::B2IPoint& rPt )
     return Color();
 }
 
-sal_uInt32 BitmapDevice::getPixelData( const basegfx::B2IPoint& rPt )
-{
-    if( mpImpl->maBounds.isInside(rPt) )
-        return getPixelData_i(rPt);
-
-    return 0;
-}
-
 void BitmapDevice::copyBitmap( const BitmapDeviceSharedPtr& rSrcBitmap )
 {
     copyBitmap_i( rSrcBitmap );
@@ -756,13 +677,6 @@ BitmapDeviceSharedPtr cloneBitmapDevice( const basegfx::B2IVector&    rSize,
                                    rProto->getPalette() );
 }
 
-
-/// Clone our device, with GenericImageAccessor to handle all formats
-BitmapDeviceSharedPtr BitmapDevice::getGenericRenderer() const
-{
-    return mpImpl->mpGenericRenderer;
-}
-
 } // namespace basebmp
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basebmp/source/intconversion.hxx b/basebmp/source/intconversion.hxx
deleted file mode 100644
index a536041..0000000
--- a/basebmp/source/intconversion.hxx
+++ /dev/null
@@ -1,88 +0,0 @@
-/* -*- 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 .
- */
-
-#ifndef INCLUDED_BASEBMP_SOURCE_INTCONVERSION_HXX
-#define INCLUDED_BASEBMP_SOURCE_INTCONVERSION_HXX
-
-#include <vigra/rgbvalue.hxx>
-#include <functional>
-
-namespace basebmp
-{
-    // metafunctions to retrieve correct POD from/to basebmp::Color
-
-    /// type-safe conversion from RgbValue to packed int32
-    template< class RgbVal > struct UInt32FromRgbValue
-    {
-        sal_uInt32 operator()( RgbVal const& c ) const
-        {
-            return (c[0] << 16) | (c[1] << 8) | c[2];
-        }
-    };
-
-    /// type-safe conversion from packed int32 to RgbValue
-    template< class RgbVal > struct RgbValueFromUInt32
-    {
-        RgbVal operator()( sal_uInt32 c ) const
-        {
-            return RgbVal((c >> 16) & 0xFF,
-                          (c >> 8) & 0xFF,
-                          c & 0xFF);
-        }
-    };
-
-    //Current c++0x draft (apparently) has std::identity, but not operator()
-    template<typename T> struct SGI_identity : public std::unary_function<T,T>
-    {
-        T& operator()(T& x) const { return x; }
-        const T& operator()(const T& x) const { return x; }
-    };
-
-    /// Get converter from given data type to sal_uInt32
-    template< typename DataType > struct uInt32Converter
-    {
-        typedef SGI_identity<DataType> to;
-        typedef SGI_identity<DataType> from;
-    };
-    template< unsigned int RedIndex,
-              unsigned int GreenIndex,
-              unsigned int BlueIndex > struct uInt32Converter<
-                  vigra::RGBValue< sal_uInt8,
-                                   RedIndex,
-                                   GreenIndex,
-                                   BlueIndex > >
-    {
-        typedef UInt32FromRgbValue<
-            vigra::RGBValue< sal_uInt8,
-                             RedIndex,
-                             GreenIndex,
-                             BlueIndex > >
-            to;
-        typedef RgbValueFromUInt32<
-            vigra::RGBValue< sal_uInt8,
-                             RedIndex,
-                             GreenIndex,
-                             BlueIndex > >
-            from;
-    };
-}
-
-#endif // INCLUDED_BASEBMP_SOURCE_INTCONVERSION_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/basebmp/bitmapdevice.hxx b/include/basebmp/bitmapdevice.hxx
index 8087adf..a3b4bb0 100644
--- a/include/basebmp/bitmapdevice.hxx
+++ b/include/basebmp/bitmapdevice.hxx
@@ -97,14 +97,6 @@ public:
      */
     Color getPixel( const basegfx::B2IPoint& rPt );
 
-    /** Get underlying pixel data value at given position
-
-        This method returns the raw pixel data. In the case of
-        paletted bitmaps, this is the palette index, not the final
-        color value.
-     */
-    sal_uInt32 getPixelData( const basegfx::B2IPoint& rPt );
-
     /** Draw another bitmap into this device
 
         @param rSrcBitmap
@@ -128,8 +120,6 @@ private:
 
     BASEBMP_DLLPRIVATE virtual Color getPixel_i( const basegfx::B2IPoint& rPt ) = 0;
 
-    BASEBMP_DLLPRIVATE virtual sal_uInt32 getPixelData_i( const basegfx::B2IPoint& rPt ) = 0;
-
     BASEBMP_DLLPRIVATE virtual void copyBitmap_i( const BitmapDeviceSharedPtr& rSrcBitmap ) = 0;
 
     BitmapDeviceSharedPtr getGenericRenderer() const;
commit 29ce905f8e8642d87780282184f9cf7991c82c36
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jan 19 10:27:32 2016 +0000

    scanline is always positive now and drop unused args
    
    Change-Id: I39276ccea5c4b3ecdc89c77f35722883221b560f

diff --git a/basebmp/source/bitmapdevice.cxx b/basebmp/source/bitmapdevice.cxx
index 0eb5f47..32abb05 100644
--- a/basebmp/source/bitmapdevice.cxx
+++ b/basebmp/source/bitmapdevice.cxx
@@ -380,8 +380,7 @@ Format BitmapDevice::getScanlineFormat() const
 
 sal_Int32 BitmapDevice::getScanlineStride() const
 {
-    return mpImpl->mnScanlineStride < 0 ?
-        -mpImpl->mnScanlineStride : mpImpl->mnScanlineStride;
+    return mpImpl->mnScanlineStride;
 }
 
 RawMemorySharedArray BitmapDevice::getBuffer() const
@@ -525,9 +524,7 @@ namespace
 BitmapDeviceSharedPtr createBitmapDeviceImplInner( const basegfx::B2IVector&                  rSize,
                                                    Format                                     nScanlineFormat,
                                                    boost::shared_array< sal_uInt8 >           pMem,
-                                                   PaletteMemorySharedVector                  pPal,
-                                                   const basegfx::B2IBox*                     pSubset,
-                                                   bool bBlack = true)
+                                                   PaletteMemorySharedVector                  pPal )
 {
     OSL_ASSERT(rSize.getX() > 0 && rSize.getY() > 0);
 
@@ -543,18 +540,17 @@ BitmapDeviceSharedPtr createBitmapDeviceImplInner( const basegfx::B2IVector&
         return BitmapDeviceSharedPtr();
     }
 
-    sal_Int32 nScanlineStride = getBitmapDeviceStrideForWidth(nScanlineFormat, rSize.getX());
+    const sal_uInt32 nScanlineStride = getBitmapDeviceStrideForWidth(nScanlineFormat, rSize.getX());
 
-    const sal_uInt32 nWidth(nScanlineStride < 0 ? -nScanlineStride : nScanlineStride);
     const sal_uInt32 nHeight(rSize.getY());
 
-    if (nHeight && nWidth && nWidth > SAL_MAX_INT32 / nHeight)
+    if (nHeight && nScanlineStride && nScanlineStride > SAL_MAX_INT32 / nHeight)
     {
-        SAL_WARN( "basebmp", "suspicious massive alloc " << nWidth << " * " << nHeight);
+        SAL_WARN( "basebmp", "suspicious massive alloc " << nScanlineStride << " * " << nHeight);
         return BitmapDeviceSharedPtr();
     }
 
-    const std::size_t nMemSize(nWidth * nHeight);
+    const std::size_t nMemSize(nScanlineStride * nHeight);
 
     if( !pMem )
     {
@@ -563,19 +559,12 @@ BitmapDeviceSharedPtr createBitmapDeviceImplInner( const basegfx::B2IVector&
             &rtl_freeMemory );
         if (pMem.get() == nullptr && nMemSize != 0)
             return BitmapDeviceSharedPtr();
-        if (bBlack)
-            memset(pMem.get(), 0, nMemSize);
-        else
-            memset(pMem.get(), 0xFF, nMemSize);
+        memset(pMem.get(), 0, nMemSize);
     }
 
-    sal_uInt8* pFirstScanline = nScanlineStride < 0 ?
-        pMem.get() + nMemSize + nScanlineStride : pMem.get();
+    sal_uInt8* pFirstScanline = pMem.get();
 
-    // shrink render area to given subset, if given
     basegfx::B2IBox aBounds(0,0,rSize.getX(),rSize.getY());
-    if( pSubset )
-        aBounds.intersect( *pSubset );
 
     switch( nScanlineFormat )
     {
@@ -698,18 +687,13 @@ BitmapDeviceSharedPtr createBitmapDeviceImplInner( const basegfx::B2IVector&
 BitmapDeviceSharedPtr createBitmapDeviceImpl( const basegfx::B2IVector&                  rSize,
                                               Format                                     nScanlineFormat,
                                               boost::shared_array< sal_uInt8 >           pMem,
-                                              PaletteMemorySharedVector                  pPal,
-                                              const basegfx::B2IBox*                     pSubset,
-                                              bool bBlack = true)
+                                              PaletteMemorySharedVector                  pPal )
 {
-    BitmapDeviceSharedPtr result( createBitmapDeviceImplInner( rSize, nScanlineFormat, pMem, pPal, pSubset, bBlack ) );
+    BitmapDeviceSharedPtr result( createBitmapDeviceImplInner( rSize, nScanlineFormat, pMem, pPal ) );
 
 #ifdef SAL_LOG_INFO
     std::ostringstream subset;
 
-    if (pSubset)
-        subset << " subset=" << pSubset->getWidth() << "x" << pSubset->getHeight() << "@(" << pSubset->getMinX() << "," << pSubset->getMinY() << ")";
-
     SAL_INFO( "basebmp.bitmapdevice",
               "createBitmapDevice: "
               << rSize.getX() << "x" << rSize.getY()
@@ -739,8 +723,7 @@ BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector& rSize,
     return createBitmapDeviceImpl( rSize,
                                    nScanlineFormat,
                                    boost::shared_array< sal_uInt8 >(),
-                                   PaletteMemorySharedVector(),
-                                   nullptr );
+                                   PaletteMemorySharedVector() );
 }
 
 BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector&        rSize,
@@ -750,8 +733,7 @@ BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector&        rSize
     return createBitmapDeviceImpl( rSize,
                                    nScanlineFormat,
                                    boost::shared_array< sal_uInt8 >(),
-                                   rPalette,
-                                   nullptr );
+                                   rPalette );
 }
 
 BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector&        rSize,
@@ -762,8 +744,7 @@ BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector&        rSize
     return createBitmapDeviceImpl( rSize,
                                    nScanlineFormat,
                                    rMem,
-                                   rPalette,
-                                   nullptr );
+                                   rPalette );
 }
 
 BitmapDeviceSharedPtr cloneBitmapDevice( const basegfx::B2IVector&    rSize,
@@ -772,8 +753,7 @@ BitmapDeviceSharedPtr cloneBitmapDevice( const basegfx::B2IVector&    rSize,
     return createBitmapDeviceImpl( rSize,
                                    rProto->getScanlineFormat(),
                                    boost::shared_array< sal_uInt8 >(),
-                                   rProto->getPalette(),
-                                   nullptr );
+                                   rProto->getPalette() );
 }
 
 
commit c686f29e1e2e1ebf19ad711028135bf557702fd0
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jan 19 10:22:28 2016 +0000

    drop unused argument
    
    Change-Id: I0333f65f67cdd93f9773e6d738289e36353ef359

diff --git a/basebmp/source/bitmapdevice.cxx b/basebmp/source/bitmapdevice.cxx
index 5fc7386..0eb5f47 100644
--- a/basebmp/source/bitmapdevice.cxx
+++ b/basebmp/source/bitmapdevice.cxx
@@ -174,7 +174,6 @@ namespace
 
 
         BitmapRenderer( const basegfx::B2IBox&                     rBounds,
-                        const basegfx::B2IVector&                  rBufferSize,
                         Format                                     nScanlineFormat,
                         sal_Int32                                  nScanlineStride,
                         sal_uInt8*                                 pFirstScanline,
@@ -183,7 +182,7 @@ namespace
                         dest_accessor_type                         accessor,
                         const RawMemorySharedArray&                rMem,
                         const PaletteMemorySharedVector&           rPalette ) :
-            BitmapDevice( rBounds, rBufferSize, nScanlineFormat,
+            BitmapDevice( rBounds, nScanlineFormat,
                           nScanlineStride, pFirstScanline, rMem, rPalette ),
             maBegin( begin ),
             maColorLookup(),
@@ -318,9 +317,6 @@ struct ImplBitmapDevice
      */
     basegfx::B2IBox           maBounds;
 
-    //// Size of the actual frame buffer
-    basegfx::B2IVector        maBufferSize;
-
     /// Scanline format, as provided at the constructor
     Format                    mnScanlineFormat;
 
@@ -349,7 +345,6 @@ struct ImplBitmapDevice
 
 
 BitmapDevice::BitmapDevice( const basegfx::B2IBox&           rBounds,
-                            const basegfx::B2IVector&        rBufferSize,
                             Format                           nScanlineFormat,
                             sal_Int32                        nScanlineStride,
                             sal_uInt8*                       pFirstScanline,
@@ -360,7 +355,6 @@ BitmapDevice::BitmapDevice( const basegfx::B2IBox&           rBounds,
     mpImpl->mpMem = rMem;
     mpImpl->mpPalette = rPalette;
     mpImpl->maBounds = rBounds;
-    mpImpl->maBufferSize = rBufferSize;
     mpImpl->mnScanlineFormat = nScanlineFormat;
     mpImpl->mnScanlineStride = nScanlineStride;
     mpImpl->mpFirstScanline  = pFirstScanline;
@@ -379,11 +373,6 @@ basegfx::B2IVector BitmapDevice::getSize() const
         mpImpl->maBounds.getMaxY() - mpImpl->maBounds.getMinY() );
 }
 
-basegfx::B2IVector BitmapDevice::getBufferSize() const
-{
-    return mpImpl->maBufferSize;
-}
-
 Format BitmapDevice::getScanlineFormat() const
 {
     return mpImpl->mnScanlineFormat;
@@ -431,7 +420,6 @@ void BitmapDevice::copyBitmap( const BitmapDeviceSharedPtr& rSrcBitmap )
 template< class FormatTraits >
 BitmapDeviceSharedPtr createRenderer(
     const basegfx::B2IBox&                                       rBounds,
-    const basegfx::B2IVector&                                    rBufferSize,
     Format                                                       nScanlineFormat,
     sal_Int32                                                    nScanlineStride,
     sal_uInt8*                                                   pFirstScanline,
@@ -449,7 +437,6 @@ BitmapDeviceSharedPtr createRenderer(
 
     return BitmapDeviceSharedPtr(
         new Renderer( rBounds,
-                      rBufferSize,
                       nScanlineFormat,
                       nScanlineStride,
                       pFirstScanline,
@@ -487,7 +474,6 @@ PaletteMemorySharedVector createStandardPalette(
 template< class FormatTraits >
 BitmapDeviceSharedPtr createRenderer(
     const basegfx::B2IBox&                     rBounds,
-    const basegfx::B2IVector&                  rBufferSize,
     Format                                     nScanlineFormat,
     sal_Int32                                  nScanlineStride,
     sal_uInt8*                                 pFirstScanline,
@@ -495,7 +481,6 @@ BitmapDeviceSharedPtr createRenderer(
     const PaletteMemorySharedVector&           pPal )
 {
     return createRenderer<FormatTraits>(rBounds,
-                                      rBufferSize,
                                       nScanlineFormat,
                                       nScanlineStride,
                                       pFirstScanline,
@@ -510,7 +495,6 @@ BitmapDeviceSharedPtr createRenderer(
 template< class FormatTraits >
 BitmapDeviceSharedPtr createRenderer(
     const basegfx::B2IBox&                     rBounds,
-    const basegfx::B2IVector&                  rBufferSize,
     Format                                     nScanlineFormat,
     sal_Int32                                  nScanlineStride,
     sal_uInt8*                                 pFirstScanline,
@@ -523,7 +507,6 @@ BitmapDeviceSharedPtr createRenderer(
 
     OSL_ASSERT(pPal);
     return createRenderer<FormatTraits>(rBounds,
-                                      rBufferSize,
                                       nScanlineFormat,
                                       nScanlineStride,
                                       pFirstScanline,
@@ -601,23 +584,23 @@ BitmapDeviceSharedPtr createBitmapDeviceImplInner( const basegfx::B2IVector&
 
         case Format::OneBitMsbGrey:
             return createRenderer<PixelFormatTraits_GREY1_MSB>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::OneBitLsbGrey:
             return createRenderer<PixelFormatTraits_GREY1_LSB>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::OneBitMsbPal:
             return createRenderer<PixelFormatTraits_PAL1_MSB>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal,
                 bitsPerPixel[nScanlineFormat] );
 
         case Format::OneBitLsbPal:
             return createRenderer<PixelFormatTraits_PAL1_LSB>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal,
                 bitsPerPixel[nScanlineFormat] );
 
@@ -627,23 +610,23 @@ BitmapDeviceSharedPtr createBitmapDeviceImplInner( const basegfx::B2IVector&
 
         case Format::FourBitMsbGrey:
             return createRenderer<PixelFormatTraits_GREY4_MSB>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::FourBitLsbGrey:
             return createRenderer<PixelFormatTraits_GREY4_LSB>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::FourBitMsbPal:
             return createRenderer<PixelFormatTraits_PAL4_MSB>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal,
                 bitsPerPixel[nScanlineFormat] );
 
         case Format::FourBitLsbPal:
             return createRenderer<PixelFormatTraits_PAL4_LSB>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal,
                 bitsPerPixel[nScanlineFormat] );
 
@@ -653,12 +636,12 @@ BitmapDeviceSharedPtr createBitmapDeviceImplInner( const basegfx::B2IVector&
 
         case Format::EightBitGrey:
             return createRenderer<PixelFormatTraits_GREY8>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::EightBitPal:
             return createRenderer<PixelFormatTraits_PAL8>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal,
                 bitsPerPixel[nScanlineFormat] );
 
@@ -668,40 +651,40 @@ BitmapDeviceSharedPtr createBitmapDeviceImplInner( const basegfx::B2IVector&
 
         case Format::SixteenBitLsbTcMask:
             return createRenderer<PixelFormatTraits_RGB16_565_LSB>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::SixteenBitMsbTcMask:
             return createRenderer<PixelFormatTraits_RGB16_565_MSB>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         // twentyfour bit formats
         case Format::TwentyFourBitTcMask:
             return createRenderer<PixelFormatTraits_BGR24>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         // thirtytwo bit formats
 
         case Format::ThirtyTwoBitTcMaskBGRA:
             return createRenderer<PixelFormatTraits_BGRA32_8888>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::ThirtyTwoBitTcMaskARGB:
             return createRenderer<PixelFormatTraits_ARGB32_8888>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::ThirtyTwoBitTcMaskABGR:
             return createRenderer<PixelFormatTraits_ABGR32_8888>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::ThirtyTwoBitTcMaskRGBA:
             return createRenderer<PixelFormatTraits_RGBA32_8888>(
-                aBounds, rSize, nScanlineFormat, nScanlineStride,
+                aBounds, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         default:
diff --git a/include/basebmp/bitmapdevice.hxx b/include/basebmp/bitmapdevice.hxx
index 85dc153..8087adf 100644
--- a/include/basebmp/bitmapdevice.hxx
+++ b/include/basebmp/bitmapdevice.hxx
@@ -64,13 +64,6 @@ public:
      */
     basegfx::B2IVector getSize() const;
 
-    /** Query the size of the whole frame buffer
-
-        @ return the size of the whole frame buffer, the same as
-        getSize() unless this is a "subset" device.
-    */
-    basegfx::B2IVector getBufferSize() const;
-
     /** Query type of scanline memory format
      */
     Format getScanlineFormat() const;
@@ -121,7 +114,6 @@ public:
 
 protected:
     BASEBMP_DLLPRIVATE BitmapDevice( const basegfx::B2IBox&           rBounds,
-                                     const basegfx::B2IVector&        rBufferSize,
                                      Format                           nScanlineFormat,
                                      sal_Int32                        nScanlineStride,
                                      sal_uInt8*                       pFirstScanline,
commit 3dc114108fda780f2bc46c35c2ef01c941caaca8
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jan 19 10:01:42 2016 +0000

    MaskTraits unused now
    
    Change-Id: I1e3bd12a8b264ca15e733ff15d8522fc2c156483

diff --git a/basebmp/source/bitmapdevice.cxx b/basebmp/source/bitmapdevice.cxx
index ce7b35a..5fc7386 100644
--- a/basebmp/source/bitmapdevice.cxx
+++ b/basebmp/source/bitmapdevice.cxx
@@ -143,18 +143,10 @@ namespace
         template metafunction wrap_accessor to one of the raw bitmap
         accessors, yields a member type named 'type', which is a
         wrapped accessor that map color values.
-
-        @tpl Masks
-        Traits template, containing nested traits
-        clipmask_format_traits and alphamask_format_traits, which
-        determine what specialized formats are to be used for clip and
-        alpha masks. With those mask formats, clipping and alpha
-        blending is handled natively.
      */
     template< class DestIterator,
               class RawAccessor,
-              class AccessorSelector,
-              class Masks > class BitmapRenderer :
+              class AccessorSelector > class BitmapRenderer :
                   public BitmapDevice
     {
     public:
@@ -434,23 +426,9 @@ void BitmapDevice::copyBitmap( const BitmapDeviceSharedPtr& rSrcBitmap )
     copyBitmap_i( rSrcBitmap );
 }
 
-/** Standard clip and alpha masks
- */
-struct StdMasks
-{
-    typedef PixelFormatTraits_GREY1_MSB   clipmask_format_traits;
-    typedef PixelFormatTraits_GREY8       alphamask_format_traits;
-
-    /// Clipmask: 0 means opaque
-    static const bool clipmask_polarity  = false;
-
-    /// Alpha mask: 0 means fully transparent
-    static const bool alphamask_polarity = true;
-};
-
 
 /// Produces a specialized renderer for the given pixel format
-template< class FormatTraits, class MaskTraits >
+template< class FormatTraits >
 BitmapDeviceSharedPtr createRenderer(
     const basegfx::B2IBox&                                       rBounds,
     const basegfx::B2IVector&                                    rBufferSize,
@@ -466,8 +444,8 @@ BitmapDeviceSharedPtr createRenderer(
     typedef typename FormatTraits::iterator_type                Iterator;
     typedef BitmapRenderer< Iterator,
                             typename FormatTraits::raw_accessor_type,
-                            typename FormatTraits::accessor_selector,
-                            MaskTraits >                        Renderer;
+                            typename FormatTraits::accessor_selector
+                            >                        Renderer;
 
     return BitmapDeviceSharedPtr(
         new Renderer( rBounds,
@@ -506,7 +484,7 @@ PaletteMemorySharedVector createStandardPalette(
     return pLocalPal;
 }
 
-template< class FormatTraits, class MaskTraits >
+template< class FormatTraits >
 BitmapDeviceSharedPtr createRenderer(
     const basegfx::B2IBox&                     rBounds,
     const basegfx::B2IVector&                  rBufferSize,
@@ -516,8 +494,7 @@ BitmapDeviceSharedPtr createRenderer(
     boost::shared_array< sal_uInt8 >           pMem,
     const PaletteMemorySharedVector&           pPal )
 {
-    return createRenderer<FormatTraits,
-                          MaskTraits>(rBounds,
+    return createRenderer<FormatTraits>(rBounds,
                                       rBufferSize,
                                       nScanlineFormat,
                                       nScanlineStride,
@@ -530,7 +507,7 @@ BitmapDeviceSharedPtr createRenderer(
                                       pPal );
 }
 
-template< class FormatTraits, class MaskTraits >
+template< class FormatTraits >
 BitmapDeviceSharedPtr createRenderer(
     const basegfx::B2IBox&                     rBounds,
     const basegfx::B2IVector&                  rBufferSize,
@@ -545,8 +522,7 @@ BitmapDeviceSharedPtr createRenderer(
                                  1UL << nBitsPerPixel);
 
     OSL_ASSERT(pPal);
-    return createRenderer<FormatTraits,
-                          MaskTraits>(rBounds,
+    return createRenderer<FormatTraits>(rBounds,
                                       rBufferSize,
                                       nScanlineFormat,
                                       nScanlineStride,
@@ -624,23 +600,23 @@ BitmapDeviceSharedPtr createBitmapDeviceImplInner( const basegfx::B2IVector&
         // one bit formats
 
         case Format::OneBitMsbGrey:
-            return createRenderer<PixelFormatTraits_GREY1_MSB,StdMasks>(
+            return createRenderer<PixelFormatTraits_GREY1_MSB>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::OneBitLsbGrey:
-            return createRenderer<PixelFormatTraits_GREY1_LSB,StdMasks>(
+            return createRenderer<PixelFormatTraits_GREY1_LSB>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::OneBitMsbPal:
-            return createRenderer<PixelFormatTraits_PAL1_MSB,StdMasks>(
+            return createRenderer<PixelFormatTraits_PAL1_MSB>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal,
                 bitsPerPixel[nScanlineFormat] );
 
         case Format::OneBitLsbPal:
-            return createRenderer<PixelFormatTraits_PAL1_LSB,StdMasks>(
+            return createRenderer<PixelFormatTraits_PAL1_LSB>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal,
                 bitsPerPixel[nScanlineFormat] );
@@ -650,23 +626,23 @@ BitmapDeviceSharedPtr createBitmapDeviceImplInner( const basegfx::B2IVector&
         // four bit formats
 
         case Format::FourBitMsbGrey:
-            return createRenderer<PixelFormatTraits_GREY4_MSB,StdMasks>(
+            return createRenderer<PixelFormatTraits_GREY4_MSB>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::FourBitLsbGrey:
-            return createRenderer<PixelFormatTraits_GREY4_LSB,StdMasks>(
+            return createRenderer<PixelFormatTraits_GREY4_LSB>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::FourBitMsbPal:
-            return createRenderer<PixelFormatTraits_PAL4_MSB,StdMasks>(
+            return createRenderer<PixelFormatTraits_PAL4_MSB>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal,
                 bitsPerPixel[nScanlineFormat] );
 
         case Format::FourBitLsbPal:
-            return createRenderer<PixelFormatTraits_PAL4_LSB,StdMasks>(
+            return createRenderer<PixelFormatTraits_PAL4_LSB>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal,
                 bitsPerPixel[nScanlineFormat] );
@@ -676,12 +652,12 @@ BitmapDeviceSharedPtr createBitmapDeviceImplInner( const basegfx::B2IVector&
         // eight bit formats
 
         case Format::EightBitGrey:
-            return createRenderer<PixelFormatTraits_GREY8,StdMasks>(
+            return createRenderer<PixelFormatTraits_GREY8>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::EightBitPal:
-            return createRenderer<PixelFormatTraits_PAL8,StdMasks>(
+            return createRenderer<PixelFormatTraits_PAL8>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal,
                 bitsPerPixel[nScanlineFormat] );
@@ -691,40 +667,40 @@ BitmapDeviceSharedPtr createBitmapDeviceImplInner( const basegfx::B2IVector&
         // sixteen bit formats
 
         case Format::SixteenBitLsbTcMask:
-            return createRenderer<PixelFormatTraits_RGB16_565_LSB,StdMasks>(
+            return createRenderer<PixelFormatTraits_RGB16_565_LSB>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::SixteenBitMsbTcMask:
-            return createRenderer<PixelFormatTraits_RGB16_565_MSB,StdMasks>(
+            return createRenderer<PixelFormatTraits_RGB16_565_MSB>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         // twentyfour bit formats
         case Format::TwentyFourBitTcMask:
-            return createRenderer<PixelFormatTraits_BGR24,StdMasks>(
+            return createRenderer<PixelFormatTraits_BGR24>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         // thirtytwo bit formats
 
         case Format::ThirtyTwoBitTcMaskBGRA:
-            return createRenderer<PixelFormatTraits_BGRA32_8888,StdMasks>(
+            return createRenderer<PixelFormatTraits_BGRA32_8888>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::ThirtyTwoBitTcMaskARGB:
-            return createRenderer<PixelFormatTraits_ARGB32_8888,StdMasks>(
+            return createRenderer<PixelFormatTraits_ARGB32_8888>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::ThirtyTwoBitTcMaskABGR:
-            return createRenderer<PixelFormatTraits_ABGR32_8888,StdMasks>(
+            return createRenderer<PixelFormatTraits_ABGR32_8888>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
         case Format::ThirtyTwoBitTcMaskRGBA:
-            return createRenderer<PixelFormatTraits_RGBA32_8888,StdMasks>(
+            return createRenderer<PixelFormatTraits_RGBA32_8888>(
                 aBounds, rSize, nScanlineFormat, nScanlineStride,
                 pFirstScanline, pMem, pPal );
 
commit 22a9f5c90e3060a835bb56079bf71093d898196f
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jan 19 09:55:18 2016 +0000

    never scaling now
    
    Change-Id: Iaa8afb2c642c9108eb1b3be4737b74285d064cf3

diff --git a/basebmp/inc/fillimage.hxx b/basebmp/inc/fillimage.hxx
deleted file mode 100644
index 7acd901..0000000
--- a/basebmp/inc/fillimage.hxx
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- 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 .
- */
-
-#ifndef INCLUDED_BASEBMP_INC_FILLIMAGE_HXX
-#define INCLUDED_BASEBMP_INC_FILLIMAGE_HXX
-
-#include <vigra/tuple.hxx>
-#include <vigra/iteratortraits.hxx>
-
-namespace basebmp
-{
-
-template< class DestIterator, class DestAccessor, typename T >
-void fillImage( DestIterator begin,
-                const DestIterator& end,
-                DestAccessor ad,
-                const T&     fillVal )
-{
-    const int width ( end.x - begin.x );
-    const int height( end.y - begin.y );
-
-    for( int y=0; y<height; ++y, ++begin.y )
-    {
-        typename vigra::IteratorTraits<DestIterator>::row_iterator
-            rowIter( begin.rowIterator() );
-        const typename vigra::IteratorTraits<DestIterator>::row_iterator
-            rowEnd( rowIter + width );
-
-        // TODO(P2): Provide specialized span fill methods on the
-        // iterator/accessor
-        while( rowIter != rowEnd )
-            ad.set(fillVal, rowIter++);
-    }
-}
-
-template< class DestIterator, class DestAccessor, typename T >
-inline void fillImage( vigra::triple<DestIterator,DestIterator,DestAccessor> const& src,
-                       const T& fillVal )
-{
-    fillImage(src.first,src.second,src.third,fillVal);
-}
-
-} // namespace basebmp
-
-#endif /* INCLUDED_BASEBMP_INC_FILLIMAGE_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basebmp/inc/scaleimage.hxx b/basebmp/inc/scaleimage.hxx
deleted file mode 100644
index f3975e9..0000000
--- a/basebmp/inc/scaleimage.hxx
+++ /dev/null
@@ -1,177 +0,0 @@
-/* -*- 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 .
- */
-
-#ifndef INCLUDED_BASEBMP_INC_SCALEIMAGE_HXX
-#define INCLUDED_BASEBMP_INC_SCALEIMAGE_HXX
-
-#include <osl/diagnose.h>
-
-#include <vigra/tuple.hxx>
-#include <vigra/copyimage.hxx>
-#include <vigra/basicimage.hxx>
-#include <vigra/iteratortraits.hxx>
-
-namespace basebmp
-{
-
-template< class SourceIter, class SourceAcc,
-          class DestIter, class DestAcc >
-void scaleLine( SourceIter      s_begin,
-                SourceIter      s_end,
-                SourceAcc       s_acc,
-                DestIter        d_begin,
-                DestIter        d_end,
-                DestAcc         d_acc )
-{
-    const int src_width  = s_end - s_begin;
-    const int dest_width = d_end - d_begin;
-
-    OSL_ASSERT( src_width > 0 && dest_width > 0 );
-
-    if( src_width >= dest_width )
-    {
-        // shrink
-        int rem = 0;
-        while( s_begin != s_end )
-        {
-            if( rem >= 0 )
-            {
-                d_acc.set( s_acc(s_begin), d_begin );
-
-                rem -= src_width;
-                ++d_begin;
-            }
-
-            rem += dest_width;
-            ++s_begin;
-        }
-    }
-    else
-    {
-        // enlarge
-        int rem = -dest_width;
-        while( d_begin != d_end )
-        {
-            if( rem >= 0 )
-            {
-                rem -= dest_width;
-                ++s_begin;
-            }
-
-            d_acc.set( s_acc(s_begin), d_begin );
-
-            rem += src_width;
-            ++d_begin;
-        }
-    }
-}
-
-/** Scale an image using zero order interpolation (pixel replication)
-
-    Source and destination range must be at least one pixel wide and
-    high.
-
-    @param s_begin
-    Start iterator for source image
-
-    @param s_end
-    End iterator for source image
-
-    @param s_acc
-    Source accessor
-
-    @param d_begin
-    Start iterator for destination image
-
-    @param d_end
-    End iterator for destination image
-
-    @param d_acc
-    Destination accessor
- */
-template< class SourceIter, class SourceAcc,
-          class DestIter, class DestAcc >
-void scaleImage( SourceIter      s_begin,
-                 SourceIter      s_end,
-                 SourceAcc       s_acc,
-                 DestIter        d_begin,
-                 DestIter        d_end,
-                 DestAcc         d_acc )
-{
-    const int src_width ( s_end.x - s_begin.x );
-    const int src_height( s_end.y - s_begin.y );
-
-    const int dest_width ( d_end.x - d_begin.x );
-    const int dest_height( d_end.y - d_begin.y );
-
-    if ( src_width == dest_width &&
-         src_height == dest_height )
-    {
-        // no scaling involved, can simply copy
-        vigra::copyImage( s_begin, s_end, s_acc,
-                          d_begin, d_acc );
-        return;
-    }
-
-    typedef vigra::BasicImage<typename SourceAcc::value_type> TmpImage;
-    typedef typename TmpImage::traverser TmpImageIter;
-
-    TmpImage     tmp_image(src_width,
-                           dest_height);
-    TmpImageIter t_begin = tmp_image.upperLeft();
-
-    // scale in y direction
-    for( int x=0; x<src_width; ++x, ++s_begin.x, ++t_begin.x )
-    {
-        typename SourceIter::column_iterator   s_cbegin = s_begin.columnIterator();
-        typename TmpImageIter::column_iterator t_cbegin = t_begin.columnIterator();
-
-        scaleLine(s_cbegin, s_cbegin+src_height, s_acc,
-                  t_cbegin, t_cbegin+dest_height, tmp_image.accessor());
-    }
-
-    t_begin = tmp_image.upperLeft();
-
-    // scale in x direction
-    for( int y=0; y<dest_height; ++y, ++d_begin.y, ++t_begin.y )
-    {
-        typename DestIter::row_iterator     d_rbegin = d_begin.rowIterator();
-        typename TmpImageIter::row_iterator t_rbegin = t_begin.rowIterator();
-
-        scaleLine(t_rbegin, t_rbegin+src_width, tmp_image.accessor(),
-                  d_rbegin, d_rbegin+dest_width, d_acc);
-    }
-}
-
-/** Scale an image, range tuple version
- */
-template< class SourceIter, class SourceAcc,
-          class DestIter, class DestAcc >
-inline void scaleImage( vigra::triple<SourceIter,SourceIter,SourceAcc> const& src,
-                        vigra::triple<DestIter,DestIter,DestAcc> const&       dst )
-{
-    scaleImage(src.first,src.second,src.third,
-               dst.first,dst.second,dst.third);
-}
-
-}
-
-#endif /* INCLUDED_BASEBMP_INC_SCALEIMAGE_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basebmp/source/bitmapdevice.cxx b/basebmp/source/bitmapdevice.cxx
index c0afe86..ce7b35a 100644
--- a/basebmp/source/bitmapdevice.cxx
+++ b/basebmp/source/bitmapdevice.cxx
@@ -42,8 +42,7 @@
 #include <rgb24pixelformats.hxx>
 
 #include <basebmp/scanlineformats.hxx>
-#include <fillimage.hxx>
-#include <scaleimage.hxx>
+#include <vigra/copyimage.hxx>
 #include <genericcolorimageaccessor.hxx>
 
 #include <tools.hxx>
@@ -242,13 +241,8 @@ namespace
             std::shared_ptr<BitmapRenderer> pSrcBmp( getCompatibleBitmap(rSrcBitmap) );
             OSL_ASSERT( pSrcBmp );
 
-            scaleImage(
-                srcIterRange(pSrcBmp->maBegin,
-                             pSrcBmp->maRawAccessor,
-                             aRect),
-                destIterRange(begin,
-                              acc,
-                              aRect));
+            vigra::copyImage( pSrcBmp->maBegin, pSrcBmp->maBegin + bottomRight(aRect), pSrcBmp->maRawAccessor,
+                              begin, acc );
         }
 
         template< typename Iterator, typename Acc > static
@@ -261,13 +255,8 @@ namespace
 
             GenericColorImageAccessor aSrcAcc( rSrcBitmap );
 
-            scaleImage(
-                srcIterRange(vigra::Diff2D(),
-                             aSrcAcc,
-                             aRect),
-                destIterRange(begin,
-                              acc,
-                              aRect));
+            vigra::copyImage( vigra::Diff2D(), vigra::Diff2D() + bottomRight(aRect), aSrcAcc,
+                              begin, acc );
         }
 
         void implDrawBitmapDirect(const BitmapDeviceSharedPtr& rSrcBitmap)
commit d3b0f6bcd464c84052ca2af36ea2649aeef57b74
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jan 19 09:40:49 2016 +0000

    always copying to a different bitmap
    
    Change-Id: I90b205bef1b01e6c4c43788fc5c95391b7842e83

diff --git a/basebmp/inc/scaleimage.hxx b/basebmp/inc/scaleimage.hxx
index 69beaf6..f3975e9 100644
--- a/basebmp/inc/scaleimage.hxx
+++ b/basebmp/inc/scaleimage.hxx
@@ -104,10 +104,6 @@ void scaleLine( SourceIter      s_begin,
 
     @param d_acc
     Destination accessor
-
-    @param bMustCopy
-    When true, scaleImage always copies source, even when doing 1:1
-    copy
  */
 template< class SourceIter, class SourceAcc,
           class DestIter, class DestAcc >
@@ -116,8 +112,7 @@ void scaleImage( SourceIter      s_begin,
                  SourceAcc       s_acc,
                  DestIter        d_begin,
                  DestIter        d_end,
-                 DestAcc         d_acc,
-                 bool            bMustCopy=false )
+                 DestAcc         d_acc )
 {
     const int src_width ( s_end.x - s_begin.x );
     const int src_height( s_end.y - s_begin.y );
@@ -125,9 +120,8 @@ void scaleImage( SourceIter      s_begin,
     const int dest_width ( d_end.x - d_begin.x );
     const int dest_height( d_end.y - d_begin.y );
 
-    if( !bMustCopy &&
-        src_width == dest_width &&
-        src_height == dest_height )
+    if ( src_width == dest_width &&
+         src_height == dest_height )
     {
         // no scaling involved, can simply copy
         vigra::copyImage( s_begin, s_end, s_acc,
@@ -166,20 +160,14 @@ void scaleImage( SourceIter      s_begin,
 }
 
 /** Scale an image, range tuple version
-
-    @param bMustCopy
-    When true, scaleImage always copies source, even when doing 1:1
-    copy
  */
 template< class SourceIter, class SourceAcc,
           class DestIter, class DestAcc >
 inline void scaleImage( vigra::triple<SourceIter,SourceIter,SourceAcc> const& src,
-                        vigra::triple<DestIter,DestIter,DestAcc> const&       dst,
-                        bool                                                  bMustCopy=false )
+                        vigra::triple<DestIter,DestIter,DestAcc> const&       dst )
 {
     scaleImage(src.first,src.second,src.third,
-               dst.first,dst.second,dst.third,
-               bMustCopy);
+               dst.first,dst.second,dst.third);
 }
 
 }
diff --git a/basebmp/source/bitmapdevice.cxx b/basebmp/source/bitmapdevice.cxx
index 1e582e7..c0afe86 100644
--- a/basebmp/source/bitmapdevice.cxx
+++ b/basebmp/source/bitmapdevice.cxx
@@ -248,8 +248,7 @@ namespace
                              aRect),
                 destIterRange(begin,
                               acc,
-                              aRect),
-                isSharedBuffer(rSrcBitmap) );
+                              aRect));
         }
 
         template< typename Iterator, typename Acc > static
@@ -425,11 +424,6 @@ PaletteMemorySharedVector BitmapDevice::getPalette() const
     return mpImpl->mpPalette;
 }
 
-bool BitmapDevice::isSharedBuffer( const BitmapDeviceSharedPtr& rOther ) const
-{
-    return rOther.get()->getBuffer().get() == getBuffer().get();
-}
-
 Color BitmapDevice::getPixel( const basegfx::B2IPoint& rPt )
 {
     if( mpImpl->maBounds.isInside(rPt) )
diff --git a/include/basebmp/bitmapdevice.hxx b/include/basebmp/bitmapdevice.hxx
index 5f2756c..85dc153 100644
--- a/include/basebmp/bitmapdevice.hxx
+++ b/include/basebmp/bitmapdevice.hxx
@@ -100,9 +100,6 @@ public:
      */
     PaletteMemorySharedVector getPalette() const;
 
-    /// Check if this and the other BitmapDevice share a buffer
-    bool isSharedBuffer( const BitmapDeviceSharedPtr& rOther ) const;
-
     /** Get color value at given pixel
      */
     Color getPixel( const basegfx::B2IPoint& rPt );
commit 1c217968b609de4484388719427366e7ddbc48d0
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jan 19 09:33:56 2016 +0000

    always copying the full bitmap, not just a portion of it
    
    Change-Id: Ib3e10d188c3f0d1bde40653d783f98ebfaed423c

diff --git a/basebmp/source/bitmapdevice.cxx b/basebmp/source/bitmapdevice.cxx
index f40d931..1e582e7 100644
--- a/basebmp/source/bitmapdevice.cxx
+++ b/basebmp/source/bitmapdevice.cxx
@@ -233,83 +233,59 @@ namespace
 
         template< typename Iterator, typename RawAcc >
         void implDrawBitmap(const BitmapDeviceSharedPtr& rSrcBitmap,
-                            const basegfx::B2IBox&       rSrcRect,
-                            const basegfx::B2IBox&       rDstRect,
                             const Iterator&              begin,
                             const RawAcc&                acc)
         {
+            const basegfx::B2IVector& rSrcSize( rSrcBitmap->getSize() );
+            const basegfx::B2IBox     aRect(0, 0, rSrcSize.getX(),rSrcSize.getY());
+
             std::shared_ptr<BitmapRenderer> pSrcBmp( getCompatibleBitmap(rSrcBitmap) );
             OSL_ASSERT( pSrcBmp );
 
             scaleImage(
                 srcIterRange(pSrcBmp->maBegin,
                              pSrcBmp->maRawAccessor,
-                             rSrcRect),
+                             aRect),
                 destIterRange(begin,
                               acc,
-                              rDstRect),
+                              aRect),
                 isSharedBuffer(rSrcBitmap) );
         }
 
         template< typename Iterator, typename Acc > static
         void implDrawBitmapGeneric(const BitmapDeviceSharedPtr& rSrcBitmap,
-                                   const basegfx::B2IBox&       rSrcRect,
-                                   const basegfx::B2IBox&       rDstRect,
                                    const Iterator&              begin,
                                    const Acc&                   acc)
         {
+            const basegfx::B2IVector& rSrcSize( rSrcBitmap->getSize() );
+            const basegfx::B2IBox     aRect(0, 0, rSrcSize.getX(),rSrcSize.getY());
+
             GenericColorImageAccessor aSrcAcc( rSrcBitmap );
 
             scaleImage(
                 srcIterRange(vigra::Diff2D(),
                              aSrcAcc,
-                             rSrcRect),
+                             aRect),
                 destIterRange(begin,
                               acc,
-                              rDstRect));
+                              aRect));
         }
 
-        void implDrawBitmapDirect(const BitmapDeviceSharedPtr& rSrcBitmap,
-                                  const basegfx::B2IBox&       rSrcRect,
-                                  const basegfx::B2IBox&       rDstRect)
+        void implDrawBitmapDirect(const BitmapDeviceSharedPtr& rSrcBitmap)
         {
-            sal_Int32 nSrcX = rSrcRect.getMinX();
-            sal_Int32 nSrcY = rSrcRect.getMinY();
-            sal_Int32 nSrcWidth = rSrcRect.getWidth();
-            sal_Int32 nSrcHeight = rSrcRect.getHeight();
-            sal_Int32 nDestX = rDstRect.getMinX();
-            sal_Int32 nDestY = rDstRect.getMinY();
+            const basegfx::B2IVector& rSrcSize(rSrcBitmap->getSize());
+
+            sal_Int32 nSrcWidth = rSrcSize.getX();
+            sal_Int32 nSrcHeight = rSrcSize.getY();
 
             char* dstBuf =  reinterpret_cast<char*>(getBuffer().get());
             char* srcBuf =  reinterpret_cast<char*>(rSrcBitmap->getBuffer().get());
             sal_Int32 dstStride =  getScanlineStride();
             sal_Int32 srcStride =  rSrcBitmap->getScanlineStride();
             sal_Int32 bytesPerPixel = (bitsPerPixel[getScanlineFormat()] + 7) >> 3; // round up to bytes
-            bool dstTopDown = true;
-            bool srcTopDown = true;
-
-            if (dstBuf == srcBuf && nSrcY < nDestY) // reverse copy order to avoid overlapping
-            {
-                nSrcY = getBufferSize().getY() - nSrcY - nSrcHeight;
-                nDestY = getBufferSize().getY() - nDestY - nSrcHeight;
-                srcTopDown = !srcTopDown;
-                dstTopDown = !dstTopDown;
-            }
 
-            if (!dstTopDown)
-            {
-                dstBuf += dstStride * (getBufferSize().getY() - 1);
-                dstStride = -dstStride;
-            }
-
-            if (!srcTopDown)
-            {
-                srcBuf += srcStride * (rSrcBitmap->getBufferSize().getY() - 1);
-                srcStride = -srcStride;
-            }
-
-            char* dstline = dstBuf + dstStride * nDestY + nDestX * bytesPerPixel;
-            char* srcline = srcBuf + srcStride * nSrcY + nSrcX * bytesPerPixel;
+            char* dstline = dstBuf;
+            char* srcline = srcBuf;
             sal_Int32 lineBytes = nSrcWidth * bytesPerPixel;
 
             for(; 0 < nSrcHeight; nSrcHeight--)
@@ -320,24 +296,21 @@ namespace
             }
         }
 
-        virtual void drawBitmap_i(const BitmapDeviceSharedPtr& rSrcBitmap,
-                                  const basegfx::B2IBox&       rSrcRect,
-                                  const basegfx::B2IBox&       rDstRect ) override
+        virtual void copyBitmap_i(const BitmapDeviceSharedPtr& rSrcBitmap) override
         {
             if( isCompatibleBitmap( rSrcBitmap ) )
             {
                 if (bitsPerPixel[getScanlineFormat()] >= 8
-                         && rSrcRect.getWidth() == rDstRect.getWidth() && rSrcRect.getHeight() == rDstRect.getHeight()
                          && rSrcBitmap->getScanlineFormat() == getScanlineFormat())
-                    implDrawBitmapDirect(rSrcBitmap, rSrcRect, rDstRect);
+                    implDrawBitmapDirect(rSrcBitmap);
                 else
-                    implDrawBitmap(rSrcBitmap, rSrcRect, rDstRect,
+                    implDrawBitmap(rSrcBitmap,
                                    maBegin,
                                    maRawAccessor);
             }
             else
             {
-                implDrawBitmapGeneric(rSrcBitmap, rSrcRect, rDstRect,
+                implDrawBitmapGeneric(rSrcBitmap,
                                       maBegin,
                                       maAccessor);
             }
@@ -473,115 +446,9 @@ sal_uInt32 BitmapDevice::getPixelData( const basegfx::B2IPoint& rPt )
     return 0;
 }
 
-namespace
-{
-    void assertImageRange( const basegfx::B2IBox& rRange,
-                           const basegfx::B2IBox& rPermittedRange )
-    {
-#if OSL_DEBUG_LEVEL > 0
-        basegfx::B2IBox aRange( rRange );
-        aRange.intersect( rPermittedRange );
-
-        OSL_ASSERT( aRange == rRange );
-#else
-        (void)rRange; (void)rPermittedRange;
-#endif
-    }
-
-    // TODO(Q3): Move canvas/canvastools.hxx clipBlit() down
-    // to basegfx, and use here!
-    bool clipAreaImpl( ::basegfx::B2IBox&       io_rDestArea,
-                       ::basegfx::B2IBox&       io_rSourceArea,
-                       const ::basegfx::B2IBox& rDestBounds,
-                       const ::basegfx::B2IBox& rSourceBounds )
-    {
-        // extract inherent scale
-        double fWidth = io_rSourceArea.getWidth();
-        if (fWidth == 0.0)
-            return false;
-
-        double fHeight = io_rSourceArea.getHeight();
-        if (fHeight == 0.0)
-            return false;
-
-        const double nScaleX( io_rDestArea.getWidth() / fWidth );
-        const double nScaleY( io_rDestArea.getHeight() / fHeight );
-
-        // extract range origins
-        const basegfx::B2IPoint   aDestTopLeft(
-            io_rDestArea.getMinimum() );
-        const ::basegfx::B2IPoint aSourceTopLeft(
-            io_rSourceArea.getMinimum() );
-
-        ::basegfx::B2IBox aLocalSourceArea( io_rSourceArea );
-
-        // clip source area (which must be inside rSourceBounds)
-        aLocalSourceArea.intersect( rSourceBounds );
-
-        if( aLocalSourceArea.isEmpty() )
-            return false;
-
-        // calc relative new source area points (relative to orig
-        // source area)
-        const ::basegfx::B2IVector aUpperLeftOffset(
-            aLocalSourceArea.getMinimum()-aSourceTopLeft );
-        const ::basegfx::B2IVector aLowerRightOffset(
-            aLocalSourceArea.getMaximum()-aSourceTopLeft );
-
-        ::basegfx::B2IBox aLocalDestArea( basegfx::fround(aDestTopLeft.getX() + nScaleX*aUpperLeftOffset.getX()),
-                                          basegfx::fround(aDestTopLeft.getY() + nScaleY*aUpperLeftOffset.getY()),
-                                          basegfx::fround(aDestTopLeft.getX() + nScaleX*aLowerRightOffset.getX()),
-                                          basegfx::fround(aDestTopLeft.getY() + nScaleY*aLowerRightOffset.getY()) );
-
-        // clip dest area (which must be inside rDestBounds)
-        aLocalDestArea.intersect( rDestBounds );
-
-        if( aLocalDestArea.isEmpty() )
-            return false;
-
-        // calc relative new dest area points (relative to orig
-        // source area)
-        const ::basegfx::B2IVector aDestUpperLeftOffset(
-            aLocalDestArea.getMinimum()-aDestTopLeft );
-        const ::basegfx::B2IVector aDestLowerRightOffset(
-            aLocalDestArea.getMaximum()-aDestTopLeft );
-
-        io_rSourceArea = ::basegfx::B2IBox( basegfx::fround(aSourceTopLeft.getX() + aDestUpperLeftOffset.getX()/nScaleX),
-                                            basegfx::fround(aSourceTopLeft.getY() + aDestUpperLeftOffset.getY()/nScaleY),
-                                            basegfx::fround(aSourceTopLeft.getX() + aDestLowerRightOffset.getX()/nScaleX),
-                                            basegfx::fround(aSourceTopLeft.getY() + aDestLowerRightOffset.getY()/nScaleY) );
-        io_rDestArea   = aLocalDestArea;
-
-        // final source area clip (chopping round-offs)
-        io_rSourceArea.intersect( rSourceBounds );
-
-        if( io_rSourceArea.isEmpty() )
-            return false;
-
-
-        return true;
-    }
-}
-
-void BitmapDevice::drawBitmap( const BitmapDeviceSharedPtr& rSrcBitmap,
-                               const basegfx::B2IBox&       rSrcRect,
-                               const basegfx::B2IBox&       rDstRect )
+void BitmapDevice::copyBitmap( const BitmapDeviceSharedPtr& rSrcBitmap )
 {
-    const basegfx::B2IVector& rSrcSize( rSrcBitmap->getSize() );
-    const basegfx::B2IBox     aSrcBounds( 0,0,rSrcSize.getX(),rSrcSize.getY() );
-    basegfx::B2IBox           aSrcRange( rSrcRect );
-    basegfx::B2IBox           aDestRange( rDstRect );
-
-    if( clipAreaImpl( aDestRange,
-                      aSrcRange,
-                      mpImpl->maBounds,
-                      aSrcBounds ))
-    {
-        assertImageRange(aDestRange,mpImpl->maBounds);
-        assertImageRange(aSrcRange,aSrcBounds);
-
-        drawBitmap_i( rSrcBitmap, aSrcRange, aDestRange );
-    }
+    copyBitmap_i( rSrcBitmap );
 }
 
 /** Standard clip and alpha masks
diff --git a/include/basebmp/bitmapdevice.hxx b/include/basebmp/bitmapdevice.hxx
index 16c89aa..5f2756c 100644
--- a/include/basebmp/bitmapdevice.hxx
+++ b/include/basebmp/bitmapdevice.hxx
@@ -118,23 +118,9 @@ public:
     /** Draw another bitmap into this device
 
         @param rSrcBitmap
-        Bitmap to render into this one. It is permitted that source
-        and destination bitmap are the same.
-
-        @param rSrcRect
-        Rectangle within the source bitmap to take the pixel from.
-
-        @param rDstRect
-        Rectangle in the destination bitmap to put the pixel
-        into. Source and destination rectangle are permitted to have
-        differing sizes; this method will scale the source pixel
-        accordingly. Please note that both source and destination
-        rectangle are interpreted excluding the rightmost pixel column
-        and the bottommost pixel row
+        Bitmap to render into this one.
      */
-    void drawBitmap( const BitmapDeviceSharedPtr& rSrcBitmap,
-                     const basegfx::B2IBox&       rSrcRect,
-                     const basegfx::B2IBox&       rDstRect );
+    void copyBitmap( const BitmapDeviceSharedPtr& rSrcBitmap );
 
 protected:
     BASEBMP_DLLPRIVATE BitmapDevice( const basegfx::B2IBox&           rBounds,
@@ -155,10 +141,7 @@ private:
 
     BASEBMP_DLLPRIVATE virtual sal_uInt32 getPixelData_i( const basegfx::B2IPoint& rPt ) = 0;
 
-    // must work with *this == rSrcBitmap!
-    BASEBMP_DLLPRIVATE virtual void drawBitmap_i( const BitmapDeviceSharedPtr& rSrcBitmap,
-                                                  const basegfx::B2IBox&       rSrcRect,
-                                                  const basegfx::B2IBox&       rDstRect ) = 0;
+    BASEBMP_DLLPRIVATE virtual void copyBitmap_i( const BitmapDeviceSharedPtr& rSrcBitmap ) = 0;
 
     BitmapDeviceSharedPtr getGenericRenderer() const;
 
diff --git a/vcl/headless/svpbmp.cxx b/vcl/headless/svpbmp.cxx
index 6ef5684..e0b1afb 100644
--- a/vcl/headless/svpbmp.cxx
+++ b/vcl/headless/svpbmp.cxx
@@ -79,8 +79,7 @@ bool SvpSalBitmap::Create( const SalBitmap& rSalBmp )
     {
         B2IVector aSize = rSrcBmp->getSize();
         m_aBitmap = cloneBitmapDevice( aSize, rSrcBmp );
-        B2IBox aRect( 0, 0, aSize.getX(), aSize.getY() );
-        m_aBitmap->drawBitmap(rSrcBmp, aRect, aRect);
+        m_aBitmap->copyBitmap(rSrcBmp);
     }
     else
         m_aBitmap.reset();
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index 390ed8f..eb96693 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -130,9 +130,8 @@ namespace
                 Size aSize = rSourceBitmap.GetSize();
                 aTmpBmp.Create(aSize, 0, BitmapPalette());
                 assert(aTmpBmp.GetBitCount() == 32);
-                basegfx::B2IBox aRect(0, 0, aSize.Width(), aSize.Height());
                 const basebmp::BitmapDeviceSharedPtr& rTmpSrc = aTmpBmp.getBitmap();
-                rTmpSrc->drawBitmap(rSrcBmp, aRect, aRect);
+                rTmpSrc->copyBitmap(rSrcBmp);
                 source = SvpSalGraphics::createCairoSurface(rTmpSrc);
             }
             else


More information about the Libreoffice-commits mailing list