Author: alg
Date: Thu Sep 27 15:24:57 2012
New Revision: 1391057

URL: http://svn.apache.org/viewvc?rev=1391057&view=rev
Log:
#121074# Added support for bitmap attributes transparency, red, green, blue and 
gamma for ppt export

Modified:
    incubator/ooo/trunk/main/filter/source/msfilter/escherex.cxx

Modified: incubator/ooo/trunk/main/filter/source/msfilter/escherex.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/filter/source/msfilter/escherex.cxx?rev=1391057&r1=1391056&r2=1391057&view=diff
==============================================================================
--- incubator/ooo/trunk/main/filter/source/msfilter/escherex.cxx (original)
+++ incubator/ooo/trunk/main/filter/source/msfilter/escherex.cxx Thu Sep 27 
15:24:57 2012
@@ -1181,11 +1181,6 @@ void EscherPropertyContainer::ImplCreate
        ::com::sun::star::drawing::ColorMode eColorMode( 
::com::sun::star::drawing::ColorMode_STANDARD );
        sal_Int16 nLuminance = 0;
        sal_Int32 nContrast = 0;
-       sal_Int16 nRed = 0;
-       sal_Int16 nGreen = 0;
-       sal_Int16 nBlue = 0;
-       double fGamma = 1.0;
-       sal_Int16 nTransparency = 0;
 
        if ( EscherPropertyValueHelper::GetPropertyValue( aAny, rXPropSet, 
String( RTL_CONSTASCII_USTRINGPARAM( "GraphicColorMode" ) ) ) )
                aAny >>= eColorMode;
@@ -1197,16 +1192,6 @@ void EscherPropertyContainer::ImplCreate
                aAny >>= nC;
                nContrast = nC;
        }
-       if ( EscherPropertyValueHelper::GetPropertyValue( aAny, rXPropSet, 
String( RTL_CONSTASCII_USTRINGPARAM( "AdjustRed" ) ) ) )
-               aAny >>= nRed;
-       if ( EscherPropertyValueHelper::GetPropertyValue( aAny, rXPropSet, 
String( RTL_CONSTASCII_USTRINGPARAM( "AdjustGreen" ) ) ) )
-               aAny >>= nGreen;
-       if ( EscherPropertyValueHelper::GetPropertyValue( aAny, rXPropSet, 
String( RTL_CONSTASCII_USTRINGPARAM( "AdjustBlue" ) ) ) )
-               aAny >>= nBlue;
-       if ( EscherPropertyValueHelper::GetPropertyValue( aAny, rXPropSet, 
String( RTL_CONSTASCII_USTRINGPARAM( "Gamma" ) ) ) )
-               aAny >>= fGamma;
-       if ( EscherPropertyValueHelper::GetPropertyValue( aAny, rXPropSet, 
String( RTL_CONSTASCII_USTRINGPARAM( "Transparency" ) ) ) )
-               aAny >>= nTransparency;
 
        if ( eColorMode == ::com::sun::star::drawing::ColorMode_WATERMARK )
        {
@@ -1483,6 +1468,12 @@ sal_Bool EscherPropertyContainer::Create
     String          aGraphicUrl;
     ByteString      aUniqueId;
     bool            bIsGraphicMtf(false);
+    // #121074#
+    sal_Int16 nTransparency(0); 
+    sal_Int16 nRed(0);
+    sal_Int16 nGreen(0);
+    sal_Int16 nBlue(0);
+    double fGamma(1.0);
 
     ::com::sun::star::drawing::BitmapMode   eBitmapMode( 
::com::sun::star::drawing::BitmapMode_NO_REPEAT );
     ::com::sun::star::uno::Any aAny;
@@ -1563,6 +1554,33 @@ sal_Bool EscherPropertyContainer::Create
         if ( EscherPropertyValueHelper::GetPropertyValue( aAny, rXPropSet, 
String( RTL_CONSTASCII_USTRINGPARAM( "IsMirrored" ) ), sal_True ) )
             aAny >>= bMirrored;
 
+        // #121074# transparency of graphic is not supported in MS formats, 
get and apply it
+        // in the GetTransformedGraphic call in GetBlibID
+        if(EscherPropertyValueHelper::GetPropertyValue(aAny, rXPropSet, 
String(RTL_CONSTASCII_USTRINGPARAM("Transparency"))))
+        {
+            aAny >>= nTransparency;
+        }
+
+        if ( EscherPropertyValueHelper::GetPropertyValue( aAny, rXPropSet, 
String( RTL_CONSTASCII_USTRINGPARAM( "AdjustRed" ) ) ) )
+        {
+            aAny >>= nRed;
+        }
+
+        if ( EscherPropertyValueHelper::GetPropertyValue( aAny, rXPropSet, 
String( RTL_CONSTASCII_USTRINGPARAM( "AdjustGreen" ) ) ) )
+        {
+            aAny >>= nGreen;
+        }
+
+        if ( EscherPropertyValueHelper::GetPropertyValue( aAny, rXPropSet, 
String( RTL_CONSTASCII_USTRINGPARAM( "AdjustBlue" ) ) ) )
+        {
+            aAny >>= nBlue;
+        }
+
+        if ( EscherPropertyValueHelper::GetPropertyValue( aAny, rXPropSet, 
String( RTL_CONSTASCII_USTRINGPARAM( "Gamma" ) ) ) )
+        {
+            aAny >>= fGamma;
+        }
+
         if ( bCreateFillBitmap && bFillBitmapModeAllowed )
         {
             if ( EscherPropertyValueHelper::GetPropertyValue( aAny, rXPropSet, 
String( RTL_CONSTASCII_USTRINGPARAM( "FillBitmapMode" ) ), sal_True ) )
@@ -1600,7 +1618,7 @@ sal_Bool EscherPropertyContainer::Create
                 const sal_uInt16 nFormat = aDescriptor.GetFileFormat();
 
                 // can MSO handle it?
-                if ( bMirrored || nAngle ||
+                if ( bMirrored || nAngle || nTransparency || nRed || nGreen || 
nBlue || (1.0 != fGamma) ||
                      (nFormat != GFF_BMP &&
                       nFormat != GFF_GIF &&
                       nFormat != GFF_JPG &&
@@ -1647,13 +1665,45 @@ sal_Bool EscherPropertyContainer::Create
 
         if ( aGraphicUrl.Len() || aUniqueId.Len() )
         {
-            if ( bMirrored || nAngle )
+            if(bMirrored || nTransparency || nRed || nGreen || nBlue || (1.0 
!= fGamma))
             {
                 pGraphicAttr = new GraphicAttr;
-                if ( bMirrored )
-                    pGraphicAttr->SetMirrorFlags( BMP_MIRROR_HORZ );
-                if ( bIsGraphicMtf )
-                    AddOpt( ESCHER_Prop_Rotation, ( ( ((sal_Int32)nAngle << 16 
) / 10 ) + 0x8000 ) &~ 0xffff );
+
+                if(bMirrored)
+                {
+                    pGraphicAttr->SetMirrorFlags(BMP_MIRROR_HORZ);
+                }
+
+                // #121074#
+                if(nTransparency) 
+                {
+                    pGraphicAttr->SetTransparency((nTransparency * 255) / 100);
+                }
+
+                if(nRed)
+                {
+                    pGraphicAttr->SetChannelR(nRed);
+                }
+
+                if(nGreen)
+                {
+                    pGraphicAttr->SetChannelG(nGreen);
+                }
+
+                if(nBlue)
+                {
+                    pGraphicAttr->SetChannelB(nBlue);
+                }
+
+                if(1.0 != fGamma)
+                {
+                    pGraphicAttr->SetGamma(fGamma);
+                }
+            }
+
+            if(nAngle && bIsGraphicMtf)
+            {
+                AddOpt( ESCHER_Prop_Rotation, ( ( ((sal_Int32)nAngle << 16 ) / 
10 ) + 0x8000 ) &~ 0xffff );
             }
 
             if ( eBitmapMode == ::com::sun::star::drawing::BitmapMode_REPEAT )
@@ -1703,18 +1753,20 @@ sal_Bool EscherPropertyContainer::Create
                 if ( pGraphicProvider && pPicOutStrm && pShapeBoundRect )
                 {
                     Rectangle aRect( Point( 0, 0 ), pShapeBoundRect->GetSize() 
);
-
-                    sal_uInt32 nBlibId = 0;
-                    nBlibId = pGraphicProvider->GetBlibID( *pPicOutStrm, 
aUniqueId, aRect, NULL, pGraphicAttr );
-                    if ( nBlibId )
+                    const sal_uInt32 
nBlibId(pGraphicProvider->GetBlibID(*pPicOutStrm, aUniqueId, aRect, NULL, 
pGraphicAttr));
+                    
+                    if(nBlibId)
                     {
-                        if ( bCreateFillBitmap )
-                            AddOpt( ESCHER_Prop_fillBlip, nBlibId, sal_True );
+                        if(bCreateFillBitmap)
+                        {                            
+                            AddOpt(ESCHER_Prop_fillBlip, nBlibId, sal_True);
+                        }
                         else
                         {
                             AddOpt( ESCHER_Prop_pib, nBlibId, sal_True );
                             ImplCreateGraphicAttributes( rXPropSet, nBlibId, 
bCreateCroppingAttributes );
                         }
+
                         bRetValue = sal_True;
                     }
                 }


Reply via email to