Kaydet (Commit) 19caa204 authored tarafından Luboš Luňák's avatar Luboš Luňák

fix emf transparency handling (bnc#820385)

46e53913 fixed some transparency emf problems
on X11, it however did it by implementing alpha support in X11SalBitmap only
and made generic code rely on it. Now it doesn't work at least on Windows,
after reverting it works on Windows but not on X11. As I have no idea what
the real problem is, at least keep both code paths.

Change-Id: I2f2cf247becfcd777b4f3d129efe4d6a5d641f7b
üst e39e9e4c
......@@ -48,7 +48,6 @@ public:
Size& rSize,
bool bMask = false ) = 0;
virtual bool HasAlpha() const { return false; }
virtual void SetHasAlpha( bool ) { }
virtual void Destroy() = 0;
virtual Size GetSize() const = 0;
virtual sal_uInt16 GetBitCount() const = 0;
......
......@@ -47,6 +47,10 @@
#include <com/sun/star/graphic/XGraphic.hpp>
#include <com/sun/star/graphic/XGraphicRenderer.hpp>
#ifdef UNX
#include <unx/salbmp.h>
#endif
using namespace com::sun::star;
#define GAMMA( _def_cVal, _def_InvGamma ) ((sal_uInt8)MinMax(FRound(pow( _def_cVal/255.0,_def_InvGamma)*255.0),0L,255L))
......@@ -442,18 +446,39 @@ bool GDIMetaFile::ImplPlayWithRenderer( OutputDevice* pOut, const Point& rPos, S
}
SalBitmap* pSalBmp = ImplGetSVData()->mpDefInst->CreateSalBitmap();
pSalBmp->SetHasAlpha( true );
if( pSalBmp->Create( xBitmapCanvas, aSize ) )
// I don't quite understand this, but the old code didn't work properly on X11 when alpha was used,
// and the commit that changed to the new code relied on alpha support in bitmap
// (which that commit implemented only in X11SalBitmap) and so it didn't work on Windows.
// So keep both.
#ifdef UNX
X11SalBitmap* X11Bmp = static_cast< X11SalBitmap* >( pSalBmp );
X11Bmp->SetHasAlpha( true );
if( X11Bmp->Create( xBitmapCanvas, aSize ) )
{
Bitmap aBitmap( pSalBmp );
Bitmap aBitmap( X11Bmp );
if ( pOut->GetMapMode() == MAP_PIXEL )
pOut->DrawBitmap( rPos, aBitmap );
else
pOut->DrawBitmap( rPos, rLogicDestSize, aBitmap );
return true;
}
#else
SalBitmap* pSalMask = ImplGetSVData()->mpDefInst->CreateSalBitmap();
if( pSalBmp->Create( xBitmapCanvas, aSize ) && pSalMask->Create( xBitmapCanvas, aSize, true ) )
{
Bitmap aBitmap( pSalBmp );
Bitmap aMask( pSalMask );
AlphaMask aAlphaMask( aMask );
BitmapEx aBitmapEx( aBitmap, aAlphaMask );
if ( pOut->GetMapMode() == MAP_PIXEL )
pOut->DrawBitmapEx( rPos, aBitmapEx );
else
pOut->DrawBitmapEx( rPos, rLogicDestSize, aBitmapEx );
return true;
}
delete pSalMask;
#endif
delete pSalBmp;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment