Kaydet (Commit) ab81e3bf authored tarafından Joren De Cuyper's avatar Joren De Cuyper Kaydeden (comit) Caolán McNamara

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 0f0a22ad
This only fixes the import.

Change-Id: I9ba7e745582faf37898f284600d638aa4806a362
Reviewed-on: https://gerrit.libreoffice.org/15710Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst e1ebdf38
...@@ -1220,126 +1220,125 @@ uno::Reference< text::XTextContent > GraphicImport::createGraphicObject( const b ...@@ -1220,126 +1220,125 @@ uno::Reference< text::XTextContent > GraphicImport::createGraphicObject( const b
xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SIZE_PROTECTED ), xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SIZE_PROTECTED ),
uno::makeAny(true)); uno::makeAny(true));
if (m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR) sal_Int32 nWidth = m_pImpl->nRightPosition - m_pImpl->nLeftPosition;
{ //adjust margins
sal_Int32 nWidth = m_pImpl->nRightPosition - m_pImpl->nLeftPosition; if( (m_pImpl->nHoriOrient == text::HoriOrientation::LEFT &&
//adjust margins (m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA ||
if( (m_pImpl->nHoriOrient == text::HoriOrientation::LEFT && 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::PAGE_PRINT_AREA ||
m_pImpl->nHoriRelation == text::RelOrientation::FRAME) ) || m_pImpl->nHoriRelation == text::RelOrientation::FRAME) ) ||
(m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE && (m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE &&
m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA )) m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA ))
m_pImpl->nLeftMargin = 0; m_pImpl->nRightMargin = 0;
if((m_pImpl->nHoriOrient == text::HoriOrientation::RIGHT && // adjust top/bottom margins
(m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA || if( m_pImpl->nVertOrient == text::VertOrientation::TOP &&
m_pImpl->nHoriRelation == text::RelOrientation::FRAME) ) || ( m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA ||
(m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE && m_pImpl->nVertRelation == text::RelOrientation::PAGE_FRAME))
m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA )) m_pImpl->nTopMargin = 0;
m_pImpl->nRightMargin = 0; if( m_pImpl->nVertOrient == text::VertOrientation::BOTTOM &&
// adjust top/bottom margins ( m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA ||
if( m_pImpl->nVertOrient == text::VertOrientation::TOP && m_pImpl->nVertRelation == text::RelOrientation::PAGE_FRAME))
( m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA || m_pImpl->nBottomMargin = 0;
m_pImpl->nVertRelation == text::RelOrientation::PAGE_FRAME)) if( m_pImpl->nVertOrient == text::VertOrientation::BOTTOM &&
m_pImpl->nTopMargin = 0; m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA )
if( m_pImpl->nVertOrient == text::VertOrientation::BOTTOM && m_pImpl->nBottomMargin = 0;
( m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA ||
m_pImpl->nVertRelation == text::RelOrientation::PAGE_FRAME)) //adjust alignment
m_pImpl->nBottomMargin = 0; if( m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE &&
if( m_pImpl->nVertOrient == text::VertOrientation::BOTTOM && m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME )
m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA ) {
m_pImpl->nBottomMargin = 0; // convert 'left to page' to 'from left -<width> to page text area'
m_pImpl->nHoriOrient = text::HoriOrientation::NONE;
//adjust alignment m_pImpl->nHoriRelation = text::RelOrientation::PAGE_PRINT_AREA;
if( m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE && m_pImpl->nLeftPosition = - nWidth;
m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME ) }
{ else if( m_pImpl->nHoriOrient == text::HoriOrientation::OUTSIDE &&
// convert 'left to page' to 'from left -<width> to page text area' m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME )
m_pImpl->nHoriOrient = text::HoriOrientation::NONE; {
m_pImpl->nHoriRelation = text::RelOrientation::PAGE_PRINT_AREA; // convert 'right to page' to 'from left 0 to right page border'
m_pImpl->nLeftPosition = - nWidth; m_pImpl->nHoriOrient = text::HoriOrientation::NONE;
} m_pImpl->nHoriRelation = text::RelOrientation::PAGE_RIGHT;
else if( m_pImpl->nHoriOrient == text::HoriOrientation::OUTSIDE && m_pImpl->nLeftPosition = 0;
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);
if( m_pImpl->eColorMode == drawing::ColorMode_STANDARD && m_pImpl->applyPosition(xGraphicObjectProperties);
m_pImpl->nContrast == -70 && m_pImpl->applyRelativePosition(xGraphicObjectProperties);
m_pImpl->nBrightness == 70 ) bool bOpaque = m_pImpl->bOpaque && !m_pImpl->rDomainMapper.IsInHeaderFooter( );
{ if( !bOpaque )
// strange definition of WATERMARK! {
m_pImpl->nContrast = 0; xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_OPAQUE ),
m_pImpl->nBrightness = 0; uno::makeAny(bOpaque));
m_pImpl->eColorMode = drawing::ColorMode_WATERMARK; }
} 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 ), xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_ADJUST_CONTRAST ),
uno::makeAny((sal_Int16)m_pImpl->nContrast)); uno::makeAny((sal_Int16)m_pImpl->nContrast));
xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_ADJUST_LUMINANCE ), xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_ADJUST_LUMINANCE ),
uno::makeAny((sal_Int16)m_pImpl->nBrightness)); uno::makeAny((sal_Int16)m_pImpl->nBrightness));
if(m_pImpl->eColorMode != drawing::ColorMode_STANDARD) if(m_pImpl->eColorMode != drawing::ColorMode_STANDARD)
xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GRAPHIC_COLOR_MODE ), {
uno::makeAny(m_pImpl->eColorMode)); xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GRAPHIC_COLOR_MODE ),
if(m_pImpl->fGamma > 0. ) uno::makeAny(m_pImpl->eColorMode));
xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GAMMA ), }
uno::makeAny(m_pImpl->fGamma )); if(m_pImpl->fGamma > 0. )
if(m_pImpl->bHoriFlip) xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GAMMA ),
{ uno::makeAny(m_pImpl->fGamma ));
xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_MIRRORED_ON_EVEN_PAGES ), if(m_pImpl->bHoriFlip)
uno::makeAny( m_pImpl->bHoriFlip )); {
xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_MIRRORED_ON_ODD_PAGES ), xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_MIRRORED_ON_EVEN_PAGES ),
uno::makeAny( m_pImpl->bHoriFlip )); uno::makeAny( m_pImpl->bHoriFlip ));
} xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_MIRRORED_ON_ODD_PAGES ),
uno::makeAny( m_pImpl->bHoriFlip ));
}
if( m_pImpl->bVertFlip ) if( m_pImpl->bVertFlip )
xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_VERT_MIRRORED ), xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_VERT_MIRRORED ),
uno::makeAny( m_pImpl->bVertFlip )); uno::makeAny( m_pImpl->bVertFlip ));
xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_BACK_COLOR ), xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_BACK_COLOR ),
uno::makeAny( m_pImpl->nFillColor )); 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 //there seems to be no way to detect the original size via _real_ API
uno::Reference< beans::XPropertySet > xGraphicProperties( xGraphic, uno::UNO_QUERY_THROW ); uno::Reference< beans::XPropertySet > xGraphicProperties( xGraphic, uno::UNO_QUERY_THROW );
awt::Size aGraphicSize, aGraphicSizePixel; awt::Size aGraphicSize, aGraphicSizePixel;
xGraphicProperties->getPropertyValue(rPropNameSupplier.GetName( PROP_SIZE100th_M_M )) >>= aGraphicSize; xGraphicProperties->getPropertyValue(rPropNameSupplier.GetName( PROP_SIZE100th_M_M )) >>= aGraphicSize;
xGraphicProperties->getPropertyValue(rPropNameSupplier.GetName( PROP_SIZE_PIXEL )) >>= aGraphicSizePixel; xGraphicProperties->getPropertyValue(rPropNameSupplier.GetName( PROP_SIZE_PIXEL )) >>= aGraphicSizePixel;
uno::Any aContourPolyPolygon; uno::Any aContourPolyPolygon;
if( aGraphicSize.Width && aGraphicSize.Height && if( aGraphicSize.Width && aGraphicSize.Height &&
m_pImpl->mpWrapPolygon.get() != nullptr) m_pImpl->mpWrapPolygon.get() != nullptr)
{ {
WrapPolygon::Pointer_t pCorrected = m_pImpl->mpWrapPolygon->correctWordWrapPolygon(aGraphicSize); WrapPolygon::Pointer_t pCorrected = m_pImpl->mpWrapPolygon->correctWordWrapPolygon(aGraphicSize);
aContourPolyPolygon <<= pCorrected->getPointSequenceSequence(); aContourPolyPolygon <<= pCorrected->getPointSequenceSequence();
} }
xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_POLY_POLYGON), xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_POLY_POLYGON),
aContourPolyPolygon); aContourPolyPolygon);
}
if(m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_INLINE || m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR) if(m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_INLINE || m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR)
{ {
......
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