0a6b54b4d3
* docx-brightness-contrast-1.diff * docx-brightness-contrast-2.diff - bnc#875712 - LO-L3: DOC import: picture brigtness/contrast not imported * doc-brightness-contrast.diff - bnc#870240 - LO-L3: pptx import file has text rotated on slide * fix-text-rotation.diff - bnc#870234 - LO-L3: pptx file has text imported as black instead of white * import-gradfill-for-text-colors.diff - bnc#870228 - LO-L3: Text inside the circle is not centered * text-alignment-in-shape.diff - bnc#863021 - LO-L3: Allow setting language for slide or presentation entirely * set-language-in-impress.diff - fix build on openSUSE 12.3: * disable-firebird-unit-test.diff OBS-URL: https://build.opensuse.org/package/show/LibreOffice:Factory/libreoffice?expand=0&rev=154
144 lines
6.6 KiB
Diff
144 lines
6.6 KiB
Diff
From 75a839188d1cac5f0ac602e59462b32879d2242a Mon Sep 17 00:00:00 2001
|
|
From: Luboš Luňák <l.lunak@collabora.com>
|
|
Date: Wed, 30 Apr 2014 20:19:08 +0000
|
|
Subject: handle brightness+contrast from msoffice (bnc#875713)
|
|
|
|
This is the same like 1139d618b8bc6ab823a96184bd0f0257980aad24, for docx.
|
|
|
|
(cherry picked from commit 893fe88469dec5b727d96f8ea1b4edb9e88288a7)
|
|
|
|
Conflicts:
|
|
oox/source/drawingml/fillproperties.cxx
|
|
|
|
Change-Id: I1ef4e18444e8c60e9ae8f67249bcef1053f0d62d
|
|
Reviewed-on: https://gerrit.libreoffice.org/9217
|
|
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
|
|
Tested-by: Caolán McNamara <caolanm@redhat.com>
|
|
---
|
|
diff --git a/offapi/com/sun/star/graphic/XGraphicTransformer.idl b/offapi/com/sun/star/graphic/XGraphicTransformer.idl
|
|
index d1a6ddf..dbd9c8d 100644
|
|
--- a/offapi/com/sun/star/graphic/XGraphicTransformer.idl
|
|
+++ b/offapi/com/sun/star/graphic/XGraphicTransformer.idl
|
|
@@ -51,6 +51,16 @@ interface XGraphicTransformer : ::com::sun::star::uno::XInterface
|
|
com::sun::star::graphic::XGraphic applyDuotone( [ in ] com::sun::star::graphic::XGraphic In,
|
|
[ in ] long ColorOne, [ in ] long ColorTwo )
|
|
raises( ::com::sun::star::lang::IllegalArgumentException );
|
|
+
|
|
+ /** changes brightness/contrast
|
|
+
|
|
+ @param mso whether to use MSOffice brightness/contrast formula
|
|
+ @returns
|
|
+ The modified graphic
|
|
+ */
|
|
+ com::sun::star::graphic::XGraphic applyBrightnessContrast( [ in ] com::sun::star::graphic::XGraphic In,
|
|
+ [ in ] long brightness, [ in ] long contrast, [ in ] boolean mso )
|
|
+ raises( ::com::sun::star::lang::IllegalArgumentException );
|
|
};
|
|
|
|
} ; } ; } ; } ;
|
|
diff --git a/oox/source/drawingml/fillproperties.cxx b/oox/source/drawingml/fillproperties.cxx
|
|
index c96c77a..99026a9 100644
|
|
--- a/oox/source/drawingml/fillproperties.cxx
|
|
+++ b/oox/source/drawingml/fillproperties.cxx
|
|
@@ -92,6 +92,18 @@ Reference< XGraphic > lclCheckAndApplyChangeColorTransform( const BlipFillProper
|
|
return xGraphic;
|
|
}
|
|
|
|
+Reference< XGraphic > applyBrightnessContrast( Reference< XGraphic > xGraphic, sal_Int32 brightness, sal_Int32 contrast )
|
|
+{
|
|
+ try
|
|
+ {
|
|
+ Reference< XGraphicTransformer > xTransformer( xGraphic, UNO_QUERY_THROW );
|
|
+ xGraphic = xTransformer->applyBrightnessContrast( xGraphic, brightness, contrast, true );
|
|
+ }
|
|
+ catch( Exception& )
|
|
+ {
|
|
+ }
|
|
+ return xGraphic;
|
|
+}
|
|
|
|
|
|
BitmapMode lclGetBitmapMode( sal_Int32 nToken )
|
|
@@ -501,12 +513,24 @@ void FillProperties::pushToPropMap( ShapePropertyMap& rPropMap,
|
|
|
|
void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const GraphicHelper& rGraphicHelper, sal_Int32 nPhClr ) const
|
|
{
|
|
+ sal_Int16 nBrightness = getLimitedValue< sal_Int16, sal_Int32 >( maBlipProps.moBrightness.get( 0 ) / PER_PERCENT, -100, 100 );
|
|
+ sal_Int16 nContrast = getLimitedValue< sal_Int16, sal_Int32 >( maBlipProps.moContrast.get( 0 ) / PER_PERCENT, -100, 100 );
|
|
if( maBlipProps.mxGraphic.is() )
|
|
{
|
|
// created transformed graphic
|
|
Reference< XGraphic > xGraphic = lclCheckAndApplyDuotoneTransform( maBlipProps, maBlipProps.mxGraphic, rGraphicHelper, nPhClr );
|
|
xGraphic = lclCheckAndApplyChangeColorTransform( maBlipProps, xGraphic, rGraphicHelper, nPhClr );
|
|
|
|
+ // MSO uses a different algorithm for contrast+brightness, LO applies contrast before brightness,
|
|
+ // while MSO apparently applies half of brightness before contrast and half after. So if only
|
|
+ // contrast or brightness need to be altered, the result is the same, but if both are involved,
|
|
+ // there's no way to map that, so just force a conversion of the image.
|
|
+ if( nBrightness != 0 && nContrast != 0 )
|
|
+ {
|
|
+ xGraphic = applyBrightnessContrast( xGraphic, nBrightness, nContrast );
|
|
+ nBrightness = 0;
|
|
+ nContrast = 0;
|
|
+ }
|
|
rPropMap[ PROP_Graphic ] <<= xGraphic;
|
|
|
|
// do we still need to set GraphicURL as well? (TODO)
|
|
@@ -545,10 +569,8 @@ void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const GraphicHelpe
|
|
rPropMap[ PROP_GraphicColorMode ] <<= eColorMode;
|
|
|
|
// brightness and contrast
|
|
- sal_Int16 nBrightness = getLimitedValue< sal_Int16, sal_Int32 >( maBlipProps.moBrightness.get( 0 ) / PER_PERCENT, -100, 100 );
|
|
if( nBrightness != 0 )
|
|
rPropMap[ PROP_AdjustLuminance ] <<= nBrightness;
|
|
- sal_Int16 nContrast = getLimitedValue< sal_Int16, sal_Int32 >( maBlipProps.moContrast.get( 0 ) / PER_PERCENT, -100, 100 );
|
|
if( nContrast != 0 )
|
|
rPropMap[ PROP_AdjustContrast ] <<= nContrast;
|
|
|
|
diff --git a/svtools/source/graphic/transformer.cxx b/svtools/source/graphic/transformer.cxx
|
|
index 30f07c7..bf63621 100644
|
|
--- a/svtools/source/graphic/transformer.cxx
|
|
+++ b/svtools/source/graphic/transformer.cxx
|
|
@@ -159,6 +159,23 @@ uno::Reference< graphic::XGraphic > SAL_CALL GraphicTransformer::applyDuotone(
|
|
return xRet;
|
|
}
|
|
|
|
+uno::Reference< graphic::XGraphic > SAL_CALL GraphicTransformer::applyBrightnessContrast(
|
|
+ const uno::Reference< graphic::XGraphic >& rxGraphic, sal_Int32 nBrightness, sal_Int32 nContrast, sal_Bool mso )
|
|
+ throw ( lang::IllegalArgumentException, uno::RuntimeException, std::exception)
|
|
+{
|
|
+ const uno::Reference< uno::XInterface > xIFace( rxGraphic, uno::UNO_QUERY );
|
|
+ ::Graphic aGraphic( *::unographic::Graphic::getImplementation( xIFace ) );
|
|
+
|
|
+ BitmapEx aBitmapEx( aGraphic.GetBitmapEx() );
|
|
+ aBitmapEx.Adjust( nBrightness, nContrast, 0, 0, 0, 0, false, mso );
|
|
+ aGraphic = ::Graphic( aBitmapEx );
|
|
+
|
|
+ ::unographic::Graphic* pUnoGraphic = new ::unographic::Graphic();
|
|
+ pUnoGraphic->init( aGraphic );
|
|
+ uno::Reference< graphic::XGraphic > xRet( pUnoGraphic );
|
|
+ return xRet;
|
|
+}
|
|
+
|
|
}
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/svtools/source/graphic/transformer.hxx b/svtools/source/graphic/transformer.hxx
|
|
index e57b8fa..1707183 100644
|
|
--- a/svtools/source/graphic/transformer.hxx
|
|
+++ b/svtools/source/graphic/transformer.hxx
|
|
@@ -51,6 +51,11 @@ class GraphicTransformer : public GraphicTransformer_UnoImplHelper1
|
|
sal_Int32 nColorOne, sal_Int32 nColorTwo )
|
|
throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
|
|
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic > SAL_CALL applyBrightnessContrast(
|
|
+ const ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >& rxGraphic,
|
|
+ sal_Int32 nBrightness, sal_Int32 nContrast, sal_Bool mso )
|
|
+ throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
|
|
+
|
|
};
|
|
|
|
}
|
|
--
|
|
cgit v0.9.0.2-2-gbebe
|