diff --git a/disable-firebird-unit-test.diff b/disable-firebird-unit-test.diff new file mode 100644 index 0000000..60a6ff2 --- /dev/null +++ b/disable-firebird-unit-test.diff @@ -0,0 +1,17 @@ +diff --git a/dbaccess/Module_dbaccess.mk b/dbaccess/Module_dbaccess.mk +index b9d7d56..146c6ee 100644 +--- a/dbaccess/Module_dbaccess.mk ++++ b/dbaccess/Module_dbaccess.mk +@@ -34,12 +34,6 @@ $(eval $(call gb_Module_add_l10n_targets,dbaccess,\ + UIConfig_dbtdata \ + )) + +-ifeq ($(ENABLE_FIREBIRD_SDBC),TRUE) +-$(eval $(call gb_Module_add_check_targets,dbaccess,\ +- CppunitTest_dbaccess_firebird_test \ +-)) +-endif +- + $(eval $(call gb_Module_add_check_targets,dbaccess,\ + CppunitTest_dbaccess_dialog_save \ + CppunitTest_dbaccess_macros_test \ diff --git a/doc-brightness-contrast.diff b/doc-brightness-contrast.diff new file mode 100644 index 0000000..c5a5fa3 --- /dev/null +++ b/doc-brightness-contrast.diff @@ -0,0 +1,249 @@ +From 85e088c70aa3cfdd638276a2555b35ed1275c352 Mon Sep 17 00:00:00 2001 +From: Luboš Luňák +Date: Fri, 18 Apr 2014 18:46:34 +0000 +Subject: handle strange brightness+contrast adjustment from msoffice (fdo#38410) + +LO uses basically the formula "newpixel=(oldpixel-128)*contrast+128+brightness", +i.e. contrast is applied first. It looks like there's no "oficial" formula for this, +so a formula that applies brightness first would be ok too. MSO for some weird reason +apparently uses a formula that applies half of brightness before contrast and +half afterwards (insert funny political correctness or compromise joke here). +While the result is the same like with the LO formula if only either brightness +or contrast is adjusted, the result is different if both are involved. Just modify +the image using the MSO algorithm if this is the case. + +Conflicts: + filter/source/msfilter/msdffimp.cxx + include/vcl/bitmap.hxx + include/vcl/bitmapex.hxx + include/vcl/gdimtf.hxx + vcl/source/gdi/bitmap3.cxx + vcl/source/gdi/bitmapex.cxx + vcl/source/gdi/gdimtf.cxx + +Change-Id: I55fe8f395832685b90f024cf2f58b0797c1ba588 +Reviewed-on: https://gerrit.libreoffice.org/9099 +Reviewed-by: Miklos Vajna +Tested-by: Miklos Vajna +--- +diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx +index 63847b3..472e1a5 100644 +--- a/filter/source/msfilter/msdffimp.cxx ++++ b/filter/source/msfilter/msdffimp.cxx +@@ -3817,7 +3817,12 @@ SdrObject* SvxMSDffManager::ImportGraphic( SvStream& rSt, SfxItemSet& rSet, cons + + if ( nContrast || nBrightness || ( nGamma != 0x10000 ) || ( eDrawMode != GRAPHICDRAWMODE_STANDARD ) ) + { +- if ( ( rObjData.nSpFlags & SP_FOLESHAPE ) == 0 ) ++ // 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. ++ bool needsConversion = nContrast != 0 && nBrightness != 0; ++ if ( ( rObjData.nSpFlags & SP_FOLESHAPE ) == 0 && !needsConversion ) + { + if ( nBrightness ) + rSet.Put( SdrGrafLuminanceItem( nBrightness ) ); +@@ -3842,7 +3847,7 @@ SdrObject* SvxMSDffManager::ImportGraphic( SvStream& rSt, SfxItemSet& rSet, cons + { + BitmapEx aBitmapEx( aGraf.GetBitmapEx() ); + if ( nBrightness || nContrast || ( nGamma != 0x10000 ) ) +- aBitmapEx.Adjust( nBrightness, (sal_Int16)nContrast, 0, 0, 0, (double)nGamma / 0x10000, sal_False ); ++ aBitmapEx.Adjust( nBrightness, (sal_Int16)nContrast, 0, 0, 0, (double)nGamma / 0x10000, false, true ); + if ( eDrawMode == GRAPHICDRAWMODE_GREYS ) + aBitmapEx.Convert( BMP_CONVERSION_8BIT_GREYS ); + else if ( eDrawMode == GRAPHICDRAWMODE_MONO ) +@@ -3856,7 +3861,7 @@ SdrObject* SvxMSDffManager::ImportGraphic( SvStream& rSt, SfxItemSet& rSet, cons + { + GDIMetaFile aGdiMetaFile( aGraf.GetGDIMetaFile() ); + if ( nBrightness || nContrast || ( nGamma != 0x10000 ) ) +- aGdiMetaFile.Adjust( nBrightness, (sal_Int16)nContrast, 0, 0, 0, (double)nGamma / 0x10000, sal_False ); ++ aGdiMetaFile.Adjust( nBrightness, (sal_Int16)nContrast, 0, 0, 0, (double)nGamma / 0x10000, false, true ); + if ( eDrawMode == GRAPHICDRAWMODE_GREYS ) + aGdiMetaFile.Convert( MTF_CONVERSION_8BIT_GREYS ); + else if ( eDrawMode == GRAPHICDRAWMODE_MONO ) +diff --git a/include/vcl/bitmap.hxx b/include/vcl/bitmap.hxx +index adf6b63..621fceb 100644 +--- a/include/vcl/bitmap.hxx ++++ b/include/vcl/bitmap.hxx +@@ -779,6 +779,9 @@ public: + If sal_True, invert the channel values with the logical 'not' operator + + @return sal_True, if the operation was completed successfully. ++ ++ @param msoBrightness ++ Use the same formula for brightness as used by MSOffice. + */ + sal_Bool Adjust( short nLuminancePercent = 0, + short nContrastPercent = 0, +@@ -786,7 +789,8 @@ public: + short nChannelGPercent = 0, + short nChannelBPercent = 0, + double fGamma = 1.0, +- sal_Bool bInvert = sal_False ); ++ bool bInvert = false, ++ bool msoBrightness = false ); + + /** Apply specified filter to the bitmap + +diff --git a/include/vcl/bitmapex.hxx b/include/vcl/bitmapex.hxx +index da23547..8ac6325 100644 +--- a/include/vcl/bitmapex.hxx ++++ b/include/vcl/bitmapex.hxx +@@ -343,6 +343,10 @@ public: + If sal_True, invert the channel values with the logical 'not' operator + + @return sal_True, if the operation was completed successfully. ++ ++ @param msoFormula ++ Use the same formula for brightness as used by MSOffice. ++ + */ + sal_Bool Adjust( short nLuminancePercent = 0, + short nContrastPercent = 0, +@@ -350,7 +354,8 @@ public: + short nChannelGPercent = 0, + short nChannelBPercent = 0, + double fGamma = 1.0, +- sal_Bool bInvert = sal_False ); ++ bool bInvert = false, ++ bool msoBrightness = false ); + + /** Apply specified filter to the bitmap + +diff --git a/include/vcl/gdimtf.hxx b/include/vcl/gdimtf.hxx +index 8afdc14..d38f863 100644 +--- a/include/vcl/gdimtf.hxx ++++ b/include/vcl/gdimtf.hxx +@@ -150,7 +150,7 @@ public: + void Adjust( short nLuminancePercent = 0, short nContrastPercent = 0, + short nChannelRPercent = 0, short nChannelGPercent = 0, + short nChannelBPercent = 0, double fGamma = 1.0, +- sal_Bool bInvert = sal_False ++ bool bInvert = false, bool msoBrightness = false + ); + + void Convert( MtfConversion eConversion ); +diff --git a/vcl/source/gdi/bitmap3.cxx b/vcl/source/gdi/bitmap3.cxx +index 5c4905a..4fbe1b8 100644 +--- a/vcl/source/gdi/bitmap3.cxx ++++ b/vcl/source/gdi/bitmap3.cxx +@@ -3250,7 +3250,7 @@ sal_Bool Bitmap::Vectorize( GDIMetaFile& rMtf, sal_uInt8 cReduce, sal_uLong nFla + + sal_Bool Bitmap::Adjust( short nLuminancePercent, short nContrastPercent, + short nChannelRPercent, short nChannelGPercent, short nChannelBPercent, +- double fGamma, sal_Bool bInvert ) ++ double fGamma, bool bInvert, bool msoBrightness ) + { + sal_Bool bRet = sal_False; + +@@ -3282,8 +3282,11 @@ sal_Bool Bitmap::Adjust( short nLuminancePercent, short nContrastPercent, + else + fM = ( 128.0 + 1.27 * MinMax( nContrastPercent, -100L, 0L ) ) / 128.0; + +- // total offset = luminance offset + contrast offset +- fOff = MinMax( nLuminancePercent, -100L, 100L ) * 2.55 + 128.0 - fM * 128.0; ++ if(!msoBrightness) ++ // total offset = luminance offset + contrast offset ++ fOff = MinMax( nLuminancePercent, -100L, 100L ) * 2.55 + 128.0 - fM * 128.0; ++ else ++ fOff = MinMax( nLuminancePercent, -100L, 100L ) * 2.55; + + // channel offset = channel offset + total offset + fROff = nChannelRPercent * 2.55 + fOff; +@@ -3297,10 +3300,21 @@ sal_Bool Bitmap::Adjust( short nLuminancePercent, short nContrastPercent, + // create mapping table + for( nX = 0L; nX < 256L; nX++ ) + { +- cMapR[ nX ] = (sal_uInt8) MinMax( FRound( nX * fM + fROff ), 0L, 255L ); +- cMapG[ nX ] = (sal_uInt8) MinMax( FRound( nX * fM + fGOff ), 0L, 255L ); +- cMapB[ nX ] = (sal_uInt8) MinMax( FRound( nX * fM + fBOff ), 0L, 255L ); +- ++ if(!msoBrightness) ++ { ++ cMapR[ nX ] = (sal_uInt8) MinMax( FRound( nX * fM + fROff ), 0L, 255L ); ++ cMapG[ nX ] = (sal_uInt8) MinMax( FRound( nX * fM + fGOff ), 0L, 255L ); ++ cMapB[ nX ] = (sal_uInt8) MinMax( FRound( nX * fM + fBOff ), 0L, 255L ); ++ } ++ else ++ { ++ // LO simply uses (in a somewhat optimized form) "newcolor = (oldcolor-128)*contrast+brightness+128" ++ // as the formula, i.e. contrast first, brightness afterwards. MSOffice, for whatever weird reason, ++ // use neither first, but apparently it applies half of brightness before contrast and half afterwards. ++ cMapR[ nX ] = (sal_uInt8) MinMax( FRound( (nX+fROff/2-128) * fM + 128 + fROff/2 ), 0L, 255L ); ++ cMapG[ nX ] = (sal_uInt8) MinMax( FRound( (nX+fGOff/2-128) * fM + 128 + fGOff/2 ), 0L, 255L ); ++ cMapB[ nX ] = (sal_uInt8) MinMax( FRound( (nX+fBOff/2-128) * fM + 128 + fBOff/2 ), 0L, 255L ); ++ } + if( bGamma ) + { + cMapR[ nX ] = GAMMA( cMapR[ nX ], fGamma ); +diff --git a/vcl/source/gdi/bitmapex.cxx b/vcl/source/gdi/bitmapex.cxx +index 6deb1db..98c6b24 100644 +--- a/vcl/source/gdi/bitmapex.cxx ++++ b/vcl/source/gdi/bitmapex.cxx +@@ -633,11 +633,11 @@ sal_Bool BitmapEx::Replace( const Color* pSearchColors, const Color* pReplaceCol + + sal_Bool BitmapEx::Adjust( short nLuminancePercent, short nContrastPercent, + short nChannelRPercent, short nChannelGPercent, short nChannelBPercent, +- double fGamma, sal_Bool bInvert ) ++ double fGamma, bool bInvert, bool msoBrightness ) + { + return( !!aBitmap ? aBitmap.Adjust( nLuminancePercent, nContrastPercent, + nChannelRPercent, nChannelGPercent, nChannelBPercent, +- fGamma, bInvert ) : sal_False ); ++ fGamma, bInvert, msoBrightness ) : false ); + } + + sal_Bool BitmapEx::Filter( BmpFilter eFilter, const BmpFilterParam* pFilterParam, const Link* pProgress ) +diff --git a/vcl/source/gdi/gdimtf.cxx b/vcl/source/gdi/gdimtf.cxx +index 2e74172..12ad981 100644 +--- a/vcl/source/gdi/gdimtf.cxx ++++ b/vcl/source/gdi/gdimtf.cxx +@@ -2175,7 +2175,7 @@ void GDIMetaFile::ImplExchangeColors( ColorExchangeFnc pFncCol, const void* pCol + + void GDIMetaFile::Adjust( short nLuminancePercent, short nContrastPercent, + short nChannelRPercent, short nChannelGPercent, +- short nChannelBPercent, double fGamma, sal_Bool bInvert ) ++ short nChannelBPercent, double fGamma, bool bInvert, bool msoBrightness ) + { + // nothing to do? => return quickly + if( nLuminancePercent || nContrastPercent || +@@ -2196,8 +2196,11 @@ void GDIMetaFile::Adjust( short nLuminancePercent, short nContrastPercent, + else + fM = ( 128.0 + 1.27 * MinMax( nContrastPercent, -100L, 0L ) ) / 128.0; + +- // total offset = luminance offset + contrast offset +- fOff = MinMax( nLuminancePercent, -100L, 100L ) * 2.55 + 128.0 - fM * 128.0; ++ if(!msoBrightness) ++ // total offset = luminance offset + contrast offset ++ fOff = MinMax( nLuminancePercent, -100L, 100L ) * 2.55 + 128.0 - fM * 128.0; ++ else ++ fOff = MinMax( nLuminancePercent, -100L, 100L ) * 2.55; + + // channel offset = channel offset + total offset + fROff = nChannelRPercent * 2.55 + fOff; +@@ -2211,10 +2214,18 @@ void GDIMetaFile::Adjust( short nLuminancePercent, short nContrastPercent, + // create mapping table + for( long nX = 0L; nX < 256L; nX++ ) + { +- aColParam.pMapR[ nX ] = (sal_uInt8) MinMax( FRound( nX * fM + fROff ), 0L, 255L ); +- aColParam.pMapG[ nX ] = (sal_uInt8) MinMax( FRound( nX * fM + fGOff ), 0L, 255L ); +- aColParam.pMapB[ nX ] = (sal_uInt8) MinMax( FRound( nX * fM + fBOff ), 0L, 255L ); +- ++ if(!msoBrightness) ++ { ++ aColParam.pMapR[ nX ] = (sal_uInt8) MinMax( FRound( nX * fM + fROff ), 0L, 255L ); ++ aColParam.pMapG[ nX ] = (sal_uInt8) MinMax( FRound( nX * fM + fGOff ), 0L, 255L ); ++ aColParam.pMapB[ nX ] = (sal_uInt8) MinMax( FRound( nX * fM + fBOff ), 0L, 255L ); ++ } ++ else ++ { ++ aColParam.pMapR[ nX ] = (sal_uInt8) MinMax( FRound( (nX+fROff/2-128) * fM + 128 + fROff/2 ), 0L, 255L ); ++ aColParam.pMapG[ nX ] = (sal_uInt8) MinMax( FRound( (nX+fGOff/2-128) * fM + 128 + fGOff/2 ), 0L, 255L ); ++ aColParam.pMapB[ nX ] = (sal_uInt8) MinMax( FRound( (nX+fBOff/2-128) * fM + 128 + fBOff/2 ), 0L, 255L ); ++ } + if( bGamma ) + { + aColParam.pMapR[ nX ] = GAMMA( aColParam.pMapR[ nX ], fGamma ); +-- +cgit v0.9.0.2-2-gbebe diff --git a/docx-brightness-contrast-1.diff b/docx-brightness-contrast-1.diff new file mode 100644 index 0000000..b14b5ba --- /dev/null +++ b/docx-brightness-contrast-1.diff @@ -0,0 +1,30 @@ +From 02dcf4a9b7387f6675324245ab2fa5b7eabf0d12 Mon Sep 17 00:00:00 2001 +From: Luboš Luňák +Date: Wed, 30 Apr 2014 19:52:28 +0000 +Subject: actually read brightness/contrast when reading docx (bnc#875713) + +It's read for the shape in oox/ , but it didn't make it any further apparently. + +Change-Id: I0885a675f72d63b3d262f1ef7e42f5d2e03588b6 +(cherry picked from commit 804da2a977989ba1f046847b9e00f00c83749e30) +Reviewed-on: https://gerrit.libreoffice.org/9216 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +--- +diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx +index 304a3d2..607d92b 100644 +--- a/writerfilter/source/dmapper/GraphicImport.cxx ++++ b/writerfilter/source/dmapper/GraphicImport.cxx +@@ -924,6 +924,10 @@ void GraphicImport::lcl_attribute(Id nName, Value & val) + xShapeProps->getPropertyValue("ShadowTransparence") >>= m_pImpl->nShadowTransparence; + } + ++ xShapeProps->getPropertyValue("GraphicColorMode") >>= m_pImpl->eColorMode; ++ xShapeProps->getPropertyValue("AdjustLuminance") >>= m_pImpl->nBrightness; ++ xShapeProps->getPropertyValue("AdjustContrast") >>= m_pImpl->nContrast; ++ + // fdo#70457: transform XShape into a SwXTextGraphicObject only if there's no rotation + if ( nRotation == 0 ) + m_xGraphicObject = createGraphicObject( aMediaProperties ); +-- +cgit v0.9.0.2-2-gbebe diff --git a/docx-brightness-contrast-2.diff b/docx-brightness-contrast-2.diff new file mode 100644 index 0000000..0987b24 --- /dev/null +++ b/docx-brightness-contrast-2.diff @@ -0,0 +1,143 @@ +From 75a839188d1cac5f0ac602e59462b32879d2242a Mon Sep 17 00:00:00 2001 +From: Luboš Luňák +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 +Tested-by: Caolán McNamara +--- +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 diff --git a/fix-text-rotation.diff b/fix-text-rotation.diff new file mode 100644 index 0000000..b230221 --- /dev/null +++ b/fix-text-rotation.diff @@ -0,0 +1,26 @@ +From e3e12b1d1e36e1a0d4fc4c6423b584d677693897 Mon Sep 17 00:00:00 2001 +From: Muthu Subramanian +Date: Wed, 26 Mar 2014 10:35:44 +0000 +Subject: n#862510: Fix text rotation. + +Fix breaks document in n#783433 - the one there is +damaged - resaving it using mso 2010 should fix the problem there. + +Change-Id: Ib2ee7ab20489d716dc189ac6810d705763a16476 +--- +diff --git a/oox/source/drawingml/transform2dcontext.cxx b/oox/source/drawingml/transform2dcontext.cxx +index e232b4d..0a1bb59 100644 +--- a/oox/source/drawingml/transform2dcontext.cxx ++++ b/oox/source/drawingml/transform2dcontext.cxx +@@ -46,7 +46,8 @@ Transform2DContext::Transform2DContext( ContextHandler2Helper& rParent, const At + } + else + { +- mrShape.getTextBody()->getTextProperties().moRotation = rAttribs.getInteger( XML_rot ); ++ if( rAttribs.hasAttribute( XML_rot ) ) ++ mrShape.getTextBody()->getTextProperties().moRotation = -rAttribs.getInteger( XML_rot ).get(); + } + } + +-- +cgit v0.9.0.2-2-gbebe diff --git a/import-gradfill-for-text-colors.diff b/import-gradfill-for-text-colors.diff new file mode 100644 index 0000000..c23a9d4 --- /dev/null +++ b/import-gradfill-for-text-colors.diff @@ -0,0 +1,75 @@ +From ce609f477e488e9c701b2bfa893bcf01722d2a01 Mon Sep 17 00:00:00 2001 +From: Muthu Subramanian +Date: Fri, 28 Mar 2014 11:54:45 +0000 +Subject: n#870234: Import gradfill for text colors. + +Uses the first color from the gradfill list. +(Which is better than plain black!) + +(cherry picked from commit cfc76de83e3c0a56abd30a8f3bd7c69d3500d223) +Signed-off-by: Andras Timar + +Conflicts: + oox/source/drawingml/textcharacterproperties.cxx + oox/source/drawingml/textcharacterpropertiescontext.cxx + +Change-Id: I4c1c0c4b031f3681c95b75b3c0683eb4de95bffb +--- +diff --git a/include/oox/drawingml/textcharacterproperties.hxx b/include/oox/drawingml/textcharacterproperties.hxx +index c079015..d2335e1 100644 +--- a/include/oox/drawingml/textcharacterproperties.hxx ++++ b/include/oox/drawingml/textcharacterproperties.hxx +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + + namespace oox { class PropertySet; } + +@@ -53,6 +54,7 @@ struct TextCharacterProperties + OptValue< bool > moItalic; + OptValue< bool > moUnderlineLineFollowText; + OptValue< bool > moUnderlineFillFollowText; ++ GradientFillProperties maGradientProps; /// Properties for gradient text colors + + /** Overwrites all members that are explicitly set in rSourceProps. */ + void assignUsed( const TextCharacterProperties& rSourceProps ); +diff --git a/oox/source/drawingml/textcharacterproperties.cxx b/oox/source/drawingml/textcharacterproperties.cxx +index febb28c..a7be42b 100644 +--- a/oox/source/drawingml/textcharacterproperties.cxx ++++ b/oox/source/drawingml/textcharacterproperties.cxx +@@ -60,6 +60,7 @@ void TextCharacterProperties::assignUsed( const TextCharacterProperties& rSource + moItalic.assignIfUsed( rSourceProps.moItalic ); + moUnderlineLineFollowText.assignIfUsed( rSourceProps.moUnderlineLineFollowText ); + moUnderlineFillFollowText.assignIfUsed( rSourceProps.moUnderlineFillFollowText ); ++ maGradientProps.assignUsed( rSourceProps.maGradientProps ); + } + + void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFilterBase& rFilter, bool bUseOptional ) const +@@ -93,6 +94,8 @@ void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFil + + if( maCharColor.isUsed() ) + rPropMap[ PROP_CharColor ] <<= maCharColor.getColor( rFilter.getGraphicHelper() ); ++ if( maGradientProps.maGradientStops.size() > 0 ) ++ rPropMap[ PROP_CharColor ] <<= maGradientProps.maGradientStops.begin()->second.getColor( rFilter.getGraphicHelper() ); + + if( moLang.has() && !moLang.get().isEmpty() ) + { +diff --git a/oox/source/drawingml/textcharacterpropertiescontext.cxx b/oox/source/drawingml/textcharacterpropertiescontext.cxx +index e166e6d..6887cda 100644 +--- a/oox/source/drawingml/textcharacterpropertiescontext.cxx ++++ b/oox/source/drawingml/textcharacterpropertiescontext.cxx +@@ -132,6 +132,10 @@ ContextHandlerRef TextCharacterPropertiesContext::onCreateContext( sal_Int32 aEl + case A_TOKEN( hlinkClick ): // CT_Hyperlink + case A_TOKEN( hlinkMouseOver ): // CT_Hyperlink + return new HyperLinkContext( *this, rAttribs, mrTextCharacterProperties.maHyperlinkPropertyMap ); ++ ++ case A_TOKEN( gradFill ): ++ return new GradientFillContext( *this, rAttribs, mrTextCharacterProperties.maGradientProps ); ++ + } + + return this; +-- +cgit v0.9.0.2-2-gbebe diff --git a/libreoffice.changes b/libreoffice.changes index 6ad4f55..7d0dfbd 100644 --- a/libreoffice.changes +++ b/libreoffice.changes @@ -1,5 +1,48 @@ ------------------------------------------------------------------- -Fri May 16 10:20:00 UTC 2014 - timar@fsf.hu +Tue May 20 08:17:29 UTC 2014 - andras.timar@collabora.com + +- bnc#875713 - LO-L3: DOCX import: picture brigtness/contrast not imported + * docx-brightness-contrast-1.diff + * docx-brightness-contrast-2.diff + +------------------------------------------------------------------- +Tue May 20 08:11:28 UTC 2014 - andras.timar@collabora.com + +- bnc#875712 - LO-L3: DOC import: picture brigtness/contrast not imported + * doc-brightness-contrast.diff + +------------------------------------------------------------------- +Tue May 20 08:05:13 UTC 2014 - andras.timar@collabora.com + +- bnc#870240 - LO-L3: pptx import file has text rotated on slide + * fix-text-rotation.diff + +------------------------------------------------------------------- +Tue May 20 07:55:57 UTC 2014 - andras.timar@collabora.com + +- bnc#870234 - LO-L3: pptx file has text imported as black instead of white + * import-gradfill-for-text-colors.diff + +------------------------------------------------------------------- +Tue May 20 07:51:16 UTC 2014 - andras.timar@collabora.com + +- bnc#870228 - LO-L3: Text inside the circle is not centered + * text-alignment-in-shape.diff + +------------------------------------------------------------------- +Tue May 20 07:38:00 UTC 2014 - andras.timar@collabora.com + +- bnc#863021 - LO-L3: Allow setting language for slide or presentation entirely + * set-language-in-impress.diff + +------------------------------------------------------------------- +Tue May 20 07:27:24 UTC 2014 - andras.timar@collabora.com + +- fix build on openSUSE 12.3: + * disable-firebird-unit-test.diff + +------------------------------------------------------------------- +Fri May 16 10:20:00 UTC 2014 - andras.timar@collabora.com - fix build on openSUSE 12.3: * 0001-std-strlen-requires-cstring-include-to-build.patch diff --git a/libreoffice.spec b/libreoffice.spec index 3fb808c..0df5fa9 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -91,6 +91,21 @@ Patch16: wizards-create-temlates-with-python-2.6.diff Patch18: kde4-4.2.3.3-timer-mutex.patch # Fix build on openSUSE 12.3 Patch19: 0001-std-strlen-requires-cstring-include-to-build.patch +# disable Firebird unit test which fails on openSUSE 12.3 (it's an experimental feature anyway) +Patch20: disable-firebird-unit-test.diff +# bnc#863021 - LO-L3: Allow setting language for slide or presentation entirely +Patch21: set-language-in-impress.diff +# bnc#870228 - LO-L3: Text inside the circle is not centered +Patch22: text-alignment-in-shape.diff +# bnc#870234 - LO-L3: pptx file has text imported as black instead of white +Patch23: import-gradfill-for-text-colors.diff +# bnc#870240 - LO-L3: pptx import file has text rotated on slide +Patch24: fix-text-rotation.diff +# bnc#875712 - LO-L3: DOC import: picture brigtness/contrast not imported +Patch25: doc-brightness-contrast.diff +# bnc#875713 - LO-L3: DOCX import: picture brigtness/contrast not imported +Patch26: docx-brightness-contrast-1.diff +Patch27: docx-brightness-contrast-2.diff # try to save space by using hardlinks Patch990: install-with-hardlinks.diff BuildRequires: ImageMagick @@ -853,6 +868,14 @@ Provides additional %{langname} translations and resources for %{project}. \ %patch16 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 +%patch21 -p1 +%patch22 -p1 +%patch23 -p1 +%patch24 -p1 +%patch25 -p1 +%patch26 -p1 +%patch27 -p1 %patch990 -p1 # 256x256 icons tar -xjf %{SOURCE20} diff --git a/set-language-in-impress.diff b/set-language-in-impress.diff new file mode 100644 index 0000000..4060b1b --- /dev/null +++ b/set-language-in-impress.diff @@ -0,0 +1,245 @@ +From d5aedeef765d60c7420ada7eba8405cfe448c6a8 Mon Sep 17 00:00:00 2001 +From: Muthu Subramanian +Date: Wed, 23 Apr 2014 18:33:22 +0530 +Subject: [PATCH] fdo#64047: n#863021: Add set-all language menu. + +Problems: +* Doesn't reset the spell error markers +* Modifies only at object level +* Currently has only setting for 'all text' +* Maybe provide a current slide only option? + +Change-Id: I4695423fed3ed9422185b23803eedd12ef434bea +(cherry picked from commit 0833f4046a1afa77aeed97a131c5325c44be1bb3) +Signed-off-by: Andras Timar +--- + sd/sdi/_docsh.sdi | 15 ++-- + sd/source/ui/docshell/docshel3.cxx | 114 +++++++++++++++++++++++++++++++ + sd/source/ui/docshell/docshell.cxx | 6 ++ + sd/uiconfig/sdraw/menubar/menubar.xml | 2 + + sd/uiconfig/simpress/menubar/menubar.xml | 2 + + 5 files changed, 134 insertions(+), 5 deletions(-) + +diff --git a/sd/sdi/_docsh.sdi b/sd/sdi/_docsh.sdi +index 075b60a..b087723 100644 +--- a/sd/sdi/_docsh.sdi ++++ b/sd/sdi/_docsh.sdi +@@ -32,11 +32,16 @@ interface DrawDocument + ExecMethod = Execute ; + StateMethod = GetState ; + ] +- SID_CHINESE_CONVERSION // ole : ?, status : ? +- [ +- ExecMethod = Execute ; +- StateMethod = GetState ; +- ] ++ SID_CHINESE_CONVERSION // ole : ?, status : ? ++ [ ++ ExecMethod = Execute ; ++ StateMethod = GetState ; ++ ] ++ SID_LANGUAGE_STATUS ++ [ ++ ExecMethod = Execute ; ++ StateMethod = GetState ; ++ ] + // ? + FID_SEARCH_NOW // ole : ?, status : ? + [ +diff --git a/sd/source/ui/docshell/docshel3.cxx b/sd/source/ui/docshell/docshel3.cxx +index d22f50a..cd45b39 100644 +--- a/sd/source/ui/docshell/docshel3.cxx ++++ b/sd/source/ui/docshell/docshel3.cxx +@@ -17,6 +17,7 @@ + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + ++#include "Window.hxx" + #include "DrawDocShell.hxx" + + #include "app.hrc" +@@ -28,11 +29,18 @@ + #include + #include + #include ++#include ++#include + #include + #include ++#include ++#include ++#include + #include + #include + #include ++#include ++#include + #include + + #include "strings.hrc" +@@ -55,6 +63,68 @@ using namespace ::com::sun::star::uno; + + namespace sd { + ++static void lcl_setLanguageForObj( SdrObject *pObj, LanguageType nLang, bool bLanguageNone = false ) ++{ ++ const sal_uInt16 aLangWhichId_EE[3] = ++ { ++ EE_CHAR_LANGUAGE, ++ EE_CHAR_LANGUAGE_CJK, ++ EE_CHAR_LANGUAGE_CTL ++ }; ++ ++ if( bLanguageNone ) ++ nLang = LANGUAGE_NONE; ++ ++ if( nLang != LANGUAGE_DONTKNOW ) ++ { ++ if( nLang == LANGUAGE_NONE ) ++ { ++ for(sal_Int32 n = 0; n < 3; n++ ) ++ pObj->SetMergedItem( SvxLanguageItem( nLang, aLangWhichId_EE[n] ) ); ++ } ++ else ++ { ++ sal_uInt16 nLangWhichId = 0; ++ sal_uInt16 nScriptType = SvtLanguageOptions::GetScriptTypeOfLanguage( nLang ); ++ switch (nScriptType) ++ { ++ case SCRIPTTYPE_LATIN : nLangWhichId = EE_CHAR_LANGUAGE; break; ++ case SCRIPTTYPE_ASIAN : nLangWhichId = EE_CHAR_LANGUAGE_CJK; break; ++ case SCRIPTTYPE_COMPLEX : nLangWhichId = EE_CHAR_LANGUAGE_CTL; break; ++ default: ++ OSL_FAIL("unexpected case" ); ++ return; ++ } ++ pObj->SetMergedItem( SvxLanguageItem( nLang, nLangWhichId ) ); ++ } ++ } ++ else // Reset to default ++ { ++ for( sal_Int32 n = 0; n < 3; n++ ) ++ pObj->ClearMergedItem( aLangWhichId_EE[n] ); ++ } ++} ++ ++ ++static void lcl_setLanguage( const SdDrawDocument *pDoc, const OUString &rLanguage, bool bLanguageNone = false ) ++{ ++ LanguageType nLang = SvtLanguageTable().GetType( rLanguage ); ++ ++ // Do it for SdDrawDocument->SetLanguage as well? ++ ++ sal_uInt16 nPageCount = pDoc->GetPageCount(); // Pick All Pages ++ for( sal_uInt16 nPage = 0; nPage < nPageCount; nPage++ ) ++ { ++ const SdrPage *pPage = pDoc->GetPage( nPage ); ++ sal_uIntPtr nObjCount = pPage->GetObjCount(); ++ for( sal_uInt16 nObj = 0; nObj < nObjCount; nObj++ ) ++ { ++ SdrObject *pObj = pPage->GetObj( nObj ); ++ lcl_setLanguageForObj( pObj, nLang, bLanguageNone ); ++ } ++ } ++} ++ + /** + * Handles SFX-Requests + */ +@@ -201,6 +271,50 @@ void DrawDocShell::Execute( SfxRequest& rReq ) + } + } + break; ++ case SID_LANGUAGE_STATUS: ++ { ++ OUString aNewLangTxt; ++ SFX_REQUEST_ARG( rReq, pItem, SfxStringItem, SID_LANGUAGE_STATUS , false ); ++ if (pItem) ++ aNewLangTxt = pItem->GetValue(); ++ if (aNewLangTxt == "*" ) ++ { ++ // open the dialog "Tools/Options/Language Settings - Language" ++ SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); ++ if (pFact && mpViewShell) ++ { ++ VclAbstractDialog* pDlg = pFact->CreateVclDialog( mpViewShell->GetActiveWindow(), SID_LANGUAGE_OPTIONS ); ++ pDlg->Execute(); ++ delete pDlg; ++ } ++ } ++ else ++ { ++ // setting the new language... ++ if (!aNewLangTxt.isEmpty()) ++ { ++ const OUString aDocumentLangPrefix("Default_"); ++ const OUString aStrNone("LANGUAGE_NONE"); ++ const OUString aStrResetLangs("RESET_LANGUAGES"); ++ sal_Int32 nPos = -1; ++ if (-1 != (nPos = aNewLangTxt.indexOf( aDocumentLangPrefix , 0 ))) ++ { ++ aNewLangTxt = aNewLangTxt.replaceAt( nPos, aDocumentLangPrefix.getLength(), "" ); ++ } ++ else ++ { ++ break; ++ } ++ if (aNewLangTxt == aStrNone) ++ lcl_setLanguage( mpViewShell->GetDoc(), OUString() ); ++ else if (aNewLangTxt == aStrResetLangs) ++ lcl_setLanguage( mpViewShell->GetDoc(), OUString(), true ); ++ else ++ lcl_setLanguage( mpViewShell->GetDoc(), aNewLangTxt ); ++ } ++ } ++ } ++ break; + + default: + break; +diff --git a/sd/source/ui/docshell/docshell.cxx b/sd/source/ui/docshell/docshell.cxx +index 1553954..ee0fad0 100644 +--- a/sd/source/ui/docshell/docshell.cxx ++++ b/sd/source/ui/docshell/docshell.cxx +@@ -270,6 +270,12 @@ void DrawDocShell::GetState(SfxItemSet &rSet) + rSet.Put(SfxVisibilityItem(nWhich, SvtCJKOptions().IsAnyEnabled())); + } + break; ++ case SID_LANGUAGE_STATUS: ++ { ++ // Keeping this enabled for the time being ++ rSet.Put(SfxVisibilityItem(nWhich, true)); ++ } ++ break; + + default: + break; +diff --git a/sd/uiconfig/sdraw/menubar/menubar.xml b/sd/uiconfig/sdraw/menubar/menubar.xml +index 6e8f9e4..289acf9 100644 +--- a/sd/uiconfig/sdraw/menubar/menubar.xml ++++ b/sd/uiconfig/sdraw/menubar/menubar.xml +@@ -245,6 +245,8 @@ + + + ++ ++ + + + +diff --git a/sd/uiconfig/simpress/menubar/menubar.xml b/sd/uiconfig/simpress/menubar/menubar.xml +index b2d5ae6..e8b1a6d 100644 +--- a/sd/uiconfig/simpress/menubar/menubar.xml ++++ b/sd/uiconfig/simpress/menubar/menubar.xml +@@ -273,6 +273,8 @@ + + + ++ ++ + + + +-- +1.8.4.5 + diff --git a/text-alignment-in-shape.diff b/text-alignment-in-shape.diff new file mode 100644 index 0000000..0d5d5cd --- /dev/null +++ b/text-alignment-in-shape.diff @@ -0,0 +1,58 @@ +From 709f06eb261b3225cd4b56a7efb8e2d591909960 Mon Sep 17 00:00:00 2001 +From: Muthu Subramanian +Date: Wed, 26 Mar 2014 10:43:08 +0000 +Subject: n#862510: anchorCtr controls the anchoring as well. + +(cherry picked from commit c17eb67460293fbe72ffa8e80cd10743df493afa) +Signed-off-by: Andras Timar + +Conflicts: + oox/source/drawingml/textbodypropertiescontext.cxx + +Change-Id: Ib244d89a9f7d400b3891d477314cd5f0193552e0 +--- +diff --git a/include/oox/drawingml/textbodyproperties.hxx b/include/oox/drawingml/textbodyproperties.hxx +index 3fb0684..af68f20 100644 +--- a/include/oox/drawingml/textbodyproperties.hxx ++++ b/include/oox/drawingml/textbodyproperties.hxx +@@ -34,6 +34,7 @@ struct TextBodyProperties + { + PropertyMap maPropertyMap; + OptValue< sal_Int32 > moRotation; ++ bool mbAnchorCtr; + OptValue< sal_Int32 > moVert; + boost::optional< sal_Int32 > moInsets[4]; + boost::optional< sal_Int32 > moTextOffX; +diff --git a/oox/source/drawingml/textbodyproperties.cxx b/oox/source/drawingml/textbodyproperties.cxx +index 36f39d9..9e53897 100644 +--- a/oox/source/drawingml/textbodyproperties.cxx ++++ b/oox/source/drawingml/textbodyproperties.cxx +@@ -80,8 +80,8 @@ void TextBodyProperties::pushRotationAdjustments( sal_Int32 nRotation ) + // Hack for n#760986 + // TODO: Preferred method would be to have a textbox on top + // of the shape and the place it according to the (off,ext) +- if( nOff == 0 && moTextOffX ) nVal = *moTextOffX; +- if( nOff == 1 && moTextOffY ) nVal = *moTextOffY; ++ if( nOff == 0 && moTextOffX && mbAnchorCtr ) nVal = *moTextOffX; ++ if( nOff == 1 && moTextOffY && mbAnchorCtr ) nVal = *moTextOffY; + if( nVal < 0 ) nVal = 0; + + if( moInsets[i] ) +diff --git a/oox/source/drawingml/textbodypropertiescontext.cxx b/oox/source/drawingml/textbodypropertiescontext.cxx +index 358db9f..b580be3 100644 +--- a/oox/source/drawingml/textbodypropertiescontext.cxx ++++ b/oox/source/drawingml/textbodypropertiescontext.cxx +@@ -56,9 +56,9 @@ TextBodyPropertiesContext::TextBodyPropertiesContext( ContextHandler2Helper& rPa + mrTextBodyProp.moInsets[i] = GetCoordinate( sValue ); + } + +- bool bAnchorCenter = rAttribs.getBool( XML_anchorCtr, false ); ++ mrTextBodyProp.mbAnchorCtr = rAttribs.getBool( XML_anchorCtr, false ); + if( rAttribs.hasAttribute( XML_anchorCtr ) ) { +- if( bAnchorCenter ) ++ if( mrTextBodyProp.mbAnchorCtr ) + mrTextBodyProp.maPropertyMap[ PROP_TextHorizontalAdjust ] <<= + TextHorizontalAdjust_CENTER; + } +-- +cgit v0.9.0.2-2-gbebe