diff options
| author | Joren De Cuyper <jorendc@libreoffice.org> | 2015-05-11 22:14:41 +0200 | 
|---|---|---|
| committer | Caolán McNamara <caolanm@redhat.com> | 2015-05-12 08:12:00 +0000 | 
| commit | ab81e3bff2a1844be67209bc8947d539edbaf8e6 (patch) | |
| tree | ad78671a73ba7bf22e30ef7d1de45f342f7cdf3e | |
| parent | e1ebdf38969a17af9453f674c81663187411597d (diff) | |
tdf#76941 : image greyscale not imported correctly
The eColorMode and other graphic attributes were never checked due to this statement.
This statement is last altered by 0f0a22ade666d33a10d9c83c0f636be9acf1ed39
This only fixes the import.
Change-Id: I9ba7e745582faf37898f284600d638aa4806a362
Reviewed-on: https://gerrit.libreoffice.org/15710
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
| -rw-r--r-- | writerfilter/source/dmapper/GraphicImport.cxx | 219 | 
1 files changed, 109 insertions, 110 deletions
| diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index 56c37414a8ca..a97da371e536 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -1220,126 +1220,125 @@ uno::Reference< text::XTextContent > GraphicImport::createGraphicObject( const b                  xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SIZE_PROTECTED ),                      uno::makeAny(true)); -            if (m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR) -            { -                sal_Int32 nWidth = m_pImpl->nRightPosition - m_pImpl->nLeftPosition; -                //adjust margins -                if( (m_pImpl->nHoriOrient == text::HoriOrientation::LEFT && +            sal_Int32 nWidth = m_pImpl->nRightPosition - m_pImpl->nLeftPosition; +            //adjust margins +            if( (m_pImpl->nHoriOrient == text::HoriOrientation::LEFT && +                (m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA || +                    m_pImpl->nHoriRelation == text::RelOrientation::FRAME) ) || +                (m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE && +                    m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA )) +                m_pImpl->nLeftMargin = 0; +            if((m_pImpl->nHoriOrient == text::HoriOrientation::RIGHT &&                      (m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA ||                          m_pImpl->nHoriRelation == text::RelOrientation::FRAME) ) || -                     (m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE && -                       m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA )) -                    m_pImpl->nLeftMargin = 0; -                if((m_pImpl->nHoriOrient == text::HoriOrientation::RIGHT && -                        (m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA || -                            m_pImpl->nHoriRelation == text::RelOrientation::FRAME) ) || -                    (m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE && -                        m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA )) -                    m_pImpl->nRightMargin = 0; -                // adjust top/bottom margins -                if( m_pImpl->nVertOrient == text::VertOrientation::TOP && -                        ( m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA || -                            m_pImpl->nVertRelation == text::RelOrientation::PAGE_FRAME)) -                    m_pImpl->nTopMargin = 0; -                if( m_pImpl->nVertOrient == text::VertOrientation::BOTTOM && -                        ( m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA || -                            m_pImpl->nVertRelation == text::RelOrientation::PAGE_FRAME)) -                    m_pImpl->nBottomMargin = 0; -                if( m_pImpl->nVertOrient == text::VertOrientation::BOTTOM && -                        m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA ) -                    m_pImpl->nBottomMargin = 0; - -                //adjust alignment -                if( m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE && -                        m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME ) -                { -                    // convert 'left to page' to 'from left -<width> to page text area' -                    m_pImpl->nHoriOrient = text::HoriOrientation::NONE; -                    m_pImpl->nHoriRelation = text::RelOrientation::PAGE_PRINT_AREA; -                    m_pImpl->nLeftPosition = - nWidth; -                } -                else if( m_pImpl->nHoriOrient == text::HoriOrientation::OUTSIDE && -                        m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME ) -                { -                    // convert 'right to page' to 'from left 0 to right page border' -                    m_pImpl->nHoriOrient = text::HoriOrientation::NONE; -                    m_pImpl->nHoriRelation = text::RelOrientation::PAGE_RIGHT; -                    m_pImpl->nLeftPosition = 0; -                } - -                m_pImpl->applyPosition(xGraphicObjectProperties); -                m_pImpl->applyRelativePosition(xGraphicObjectProperties); -                bool bOpaque = m_pImpl->bOpaque && !m_pImpl->rDomainMapper.IsInHeaderFooter( ); -                if( !bOpaque ) -                { -                    xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_OPAQUE ), -                        uno::makeAny(bOpaque)); -                } -                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SURROUND ), -                        uno::makeAny(m_pImpl->nWrap)); -                if( m_pImpl->bLayoutInCell && m_pImpl->nWrap != text::WrapTextMode_THROUGHT ) -                    xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_FOLLOW_TEXT_FLOW ), -                            uno::makeAny(true)); - -                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SURROUND_CONTOUR ), -                    uno::makeAny(m_pImpl->bContour)); -                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_OUTSIDE ), -                    uno::makeAny(m_pImpl->bContourOutside)); -                m_pImpl->applyMargins(xGraphicObjectProperties); +                (m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE && +                    m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA )) +                m_pImpl->nRightMargin = 0; +            // adjust top/bottom margins +            if( m_pImpl->nVertOrient == text::VertOrientation::TOP && +                    ( m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA || +                        m_pImpl->nVertRelation == text::RelOrientation::PAGE_FRAME)) +                m_pImpl->nTopMargin = 0; +            if( m_pImpl->nVertOrient == text::VertOrientation::BOTTOM && +                    ( m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA || +                        m_pImpl->nVertRelation == text::RelOrientation::PAGE_FRAME)) +                m_pImpl->nBottomMargin = 0; +            if( m_pImpl->nVertOrient == text::VertOrientation::BOTTOM && +                    m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA ) +                m_pImpl->nBottomMargin = 0; + +            //adjust alignment +            if( m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE && +                    m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME ) +            { +                // convert 'left to page' to 'from left -<width> to page text area' +                m_pImpl->nHoriOrient = text::HoriOrientation::NONE; +                m_pImpl->nHoriRelation = text::RelOrientation::PAGE_PRINT_AREA; +                m_pImpl->nLeftPosition = - nWidth; +            } +            else if( m_pImpl->nHoriOrient == text::HoriOrientation::OUTSIDE && +                    m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME ) +            { +                // convert 'right to page' to 'from left 0 to right page border' +                m_pImpl->nHoriOrient = text::HoriOrientation::NONE; +                m_pImpl->nHoriRelation = text::RelOrientation::PAGE_RIGHT; +                m_pImpl->nLeftPosition = 0; +            } -                if( m_pImpl->eColorMode == drawing::ColorMode_STANDARD && -                    m_pImpl->nContrast == -70 && -                    m_pImpl->nBrightness == 70 ) -                { -                    // strange definition of WATERMARK! -                    m_pImpl->nContrast = 0; -                    m_pImpl->nBrightness = 0; -                    m_pImpl->eColorMode = drawing::ColorMode_WATERMARK; -                } +            m_pImpl->applyPosition(xGraphicObjectProperties); +            m_pImpl->applyRelativePosition(xGraphicObjectProperties); +            bool bOpaque = m_pImpl->bOpaque && !m_pImpl->rDomainMapper.IsInHeaderFooter( ); +            if( !bOpaque ) +            { +                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_OPAQUE ), +                    uno::makeAny(bOpaque)); +            } +            xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SURROUND ), +                    uno::makeAny(m_pImpl->nWrap)); +            if( m_pImpl->bLayoutInCell && m_pImpl->nWrap != text::WrapTextMode_THROUGHT ) +                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_FOLLOW_TEXT_FLOW ), +                        uno::makeAny(true)); + +            xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SURROUND_CONTOUR ), +                uno::makeAny(m_pImpl->bContour)); +            xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_OUTSIDE ), +                uno::makeAny(m_pImpl->bContourOutside)); +            m_pImpl->applyMargins(xGraphicObjectProperties); + +            if( m_pImpl->eColorMode == drawing::ColorMode_STANDARD && +                m_pImpl->nContrast == -70 && +                m_pImpl->nBrightness == 70 ) +            { +                // strange definition of WATERMARK! +                m_pImpl->nContrast = 0; +                m_pImpl->nBrightness = 0; +                m_pImpl->eColorMode = drawing::ColorMode_WATERMARK; +            } -                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_ADJUST_CONTRAST ), -                    uno::makeAny((sal_Int16)m_pImpl->nContrast)); -                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_ADJUST_LUMINANCE ), -                    uno::makeAny((sal_Int16)m_pImpl->nBrightness)); -                if(m_pImpl->eColorMode != drawing::ColorMode_STANDARD) -                    xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GRAPHIC_COLOR_MODE ), -                        uno::makeAny(m_pImpl->eColorMode)); -                if(m_pImpl->fGamma > 0. ) -                    xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GAMMA ), -                        uno::makeAny(m_pImpl->fGamma )); -                if(m_pImpl->bHoriFlip) -                { -                    xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_MIRRORED_ON_EVEN_PAGES ), -                        uno::makeAny( m_pImpl->bHoriFlip )); -                    xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_MIRRORED_ON_ODD_PAGES ), -                        uno::makeAny( m_pImpl->bHoriFlip )); -                } +            xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_ADJUST_CONTRAST ), +                uno::makeAny((sal_Int16)m_pImpl->nContrast)); +            xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_ADJUST_LUMINANCE ), +                uno::makeAny((sal_Int16)m_pImpl->nBrightness)); +            if(m_pImpl->eColorMode != drawing::ColorMode_STANDARD) +            { +                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GRAPHIC_COLOR_MODE ), +                    uno::makeAny(m_pImpl->eColorMode)); +            } +            if(m_pImpl->fGamma > 0. ) +                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GAMMA ), +                    uno::makeAny(m_pImpl->fGamma )); +            if(m_pImpl->bHoriFlip) +            { +                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_MIRRORED_ON_EVEN_PAGES ), +                uno::makeAny( m_pImpl->bHoriFlip )); +                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_MIRRORED_ON_ODD_PAGES ), +                uno::makeAny( m_pImpl->bHoriFlip )); +            } -                if( m_pImpl->bVertFlip ) -                    xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_VERT_MIRRORED ), -                        uno::makeAny( m_pImpl->bVertFlip )); -                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_BACK_COLOR ), -                    uno::makeAny( m_pImpl->nFillColor )); +            if( m_pImpl->bVertFlip ) +                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_VERT_MIRRORED ), +                    uno::makeAny( m_pImpl->bVertFlip )); +            xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_BACK_COLOR ), +                uno::makeAny( m_pImpl->nFillColor )); -                m_pImpl->applyZOrder(xGraphicObjectProperties); +            m_pImpl->applyZOrder(xGraphicObjectProperties); -                //there seems to be no way to detect the original size via _real_ API -                uno::Reference< beans::XPropertySet > xGraphicProperties( xGraphic, uno::UNO_QUERY_THROW ); -                awt::Size aGraphicSize, aGraphicSizePixel; -                xGraphicProperties->getPropertyValue(rPropNameSupplier.GetName( PROP_SIZE100th_M_M )) >>= aGraphicSize; -                xGraphicProperties->getPropertyValue(rPropNameSupplier.GetName( PROP_SIZE_PIXEL )) >>= aGraphicSizePixel; +            //there seems to be no way to detect the original size via _real_ API +            uno::Reference< beans::XPropertySet > xGraphicProperties( xGraphic, uno::UNO_QUERY_THROW ); +            awt::Size aGraphicSize, aGraphicSizePixel; +            xGraphicProperties->getPropertyValue(rPropNameSupplier.GetName( PROP_SIZE100th_M_M )) >>= aGraphicSize; +            xGraphicProperties->getPropertyValue(rPropNameSupplier.GetName( PROP_SIZE_PIXEL )) >>= aGraphicSizePixel; -                uno::Any aContourPolyPolygon; -                if( aGraphicSize.Width && aGraphicSize.Height && -                    m_pImpl->mpWrapPolygon.get() != nullptr) -                { -                    WrapPolygon::Pointer_t pCorrected = m_pImpl->mpWrapPolygon->correctWordWrapPolygon(aGraphicSize); -                    aContourPolyPolygon <<= pCorrected->getPointSequenceSequence(); -                } +            uno::Any aContourPolyPolygon; +            if( aGraphicSize.Width && aGraphicSize.Height && +                m_pImpl->mpWrapPolygon.get() != nullptr) +            { +                WrapPolygon::Pointer_t pCorrected = m_pImpl->mpWrapPolygon->correctWordWrapPolygon(aGraphicSize); +                aContourPolyPolygon <<= pCorrected->getPointSequenceSequence(); +            } -                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_POLY_POLYGON), +            xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_POLY_POLYGON),                                                             aContourPolyPolygon); -            }              if(m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_INLINE || m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR)              { | 
