cui/source/inc/cuitabarea.hxx | 2 cui/source/tabpages/tpbitmap.cxx | 110 ++++++++++++++++++++++++++++----------- 2 files changed, 83 insertions(+), 29 deletions(-)
New commits: commit d2c8766a5e827e53f8f34893ff3d82a0df252f30 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Sat Mar 31 14:48:13 2018 +0200 Read and write tiled state and relative/absolute bitmap size With this, things are at least rountripped correctly (open dialog and close w/ OK, no changes made) Change-Id: Ief9182f05d86ff3b2a0000abe08184fcc1e2b681 Reviewed-on: https://gerrit.libreoffice.org/52368 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Katarina Behrens <katarina.behr...@cib.de> diff --git a/cui/source/inc/cuitabarea.hxx b/cui/source/inc/cuitabarea.hxx index f180f133d6b3..81fabd1fb934 100644 --- a/cui/source/inc/cuitabarea.hxx +++ b/cui/source/inc/cuitabarea.hxx @@ -525,11 +525,13 @@ private: double m_fObjectWidth; double m_fObjectHeight; + bool m_bLogicalSize; XFillAttrSetItem m_aXFillAttr; SfxItemSet& m_rXFSet; const SdrView* mpView; MapUnit mePoolUnit; + FieldUnit meFieldUnit; Size rBitmapSize; Size rFilledSize; Size rZoomedSize; diff --git a/cui/source/tabpages/tpbitmap.cxx b/cui/source/tabpages/tpbitmap.cxx index 95f1b6d206e9..3f9cab8712d1 100644 --- a/cui/source/tabpages/tpbitmap.cxx +++ b/cui/source/tabpages/tpbitmap.cxx @@ -80,7 +80,7 @@ SvxBitmapTabPage::SvxBitmapTabPage( vcl::Window* pParent, const SfxItemSet& rInA m_aXBitmapItem( OUString(), Graphic() ), m_fObjectWidth(0.0), m_fObjectHeight(0.0), - + m_bLogicalSize(false), m_aXFillAttr ( rInAttrs.GetPool() ), m_rXFSet ( m_aXFillAttr.GetItemSet() ), mpView(nullptr), @@ -134,7 +134,11 @@ SvxBitmapTabPage::SvxBitmapTabPage( vcl::Window* pParent, const SfxItemSet& rInA m_pCtlBitmapPreview->set_height_request(aSize.Height()); SfxItemPool* pPool = m_rXFSet.GetPool(); - mePoolUnit = pPool->GetMetric( SID_ATTR_TRANSFORM_WIDTH ); + mePoolUnit = pPool->GetMetric( XATTR_FILLBMP_SIZEX ); + meFieldUnit = GetModuleFieldUnit( rInAttrs ); + SetFieldUnit( *m_pBitmapWidth, meFieldUnit, true ); + SetFieldUnit( *m_pBitmapHeight, meFieldUnit, true ); + SfxViewShell* pViewShell = SfxViewShell::Current(); if( pViewShell ) mpView = pViewShell->GetDrawView(); @@ -207,7 +211,8 @@ bool SvxBitmapTabPage::FillItemSet( SfxItemSet* rAttrs ) rAttrs->Put(XFillBitmapItem(aString, pXBitmapEntry->GetGraphicObject())); } - BitmapStyle eStylePos = static_cast<BitmapStyle>(m_pBitmapStyleLB->GetSelectedEntryPos()); bool bIsStretched( eStylePos == STRETCHED ); + BitmapStyle eStylePos = static_cast<BitmapStyle>(m_pBitmapStyleLB->GetSelectedEntryPos()); + bool bIsStretched( eStylePos == STRETCHED ); bool bIsTiled( eStylePos == TILED ); rAttrs->Put( XFillBmpTileItem(bIsTiled) ); @@ -221,23 +226,31 @@ bool SvxBitmapTabPage::FillItemSet( SfxItemSet* rAttrs ) case CUSTOM: case TILED: { - sal_Int64 nWidthPercent = m_pBitmapWidth->Denormalize(m_pBitmapWidth->GetValue()); - sal_Int64 nHeightPercent = m_pBitmapHeight->Denormalize(m_pBitmapHeight->GetValue()); - if(eStylePos == CUSTOM && m_pTsbScale->IsEnabled() && m_pTsbScale->GetState() == TRISTATE_TRUE) + sal_Int64 nWidthPercent = m_pBitmapWidth->GetValue(); + sal_Int64 nHeightPercent = m_pBitmapHeight->GetValue(); + if(m_pTsbScale->IsEnabled() && m_pTsbScale->GetState() == TRISTATE_TRUE) { aSetBitmapSize.setWidth( -nWidthPercent ); aSetBitmapSize.setHeight( -nHeightPercent ); } + else if (!m_bLogicalSize) + { + aSetBitmapSize.setWidth( GetCoreValue(*m_pBitmapWidth, mePoolUnit) ); + aSetBitmapSize.setHeight( GetCoreValue(*m_pBitmapHeight, mePoolUnit) ); + } else { - aSetBitmapSize.setWidth( static_cast<long>(nWidthPercent*rBitmapSize.Width()/100) ); - aSetBitmapSize.setHeight( static_cast<long>(nHeightPercent*rBitmapSize.Height()/100) ); + rAttrs->Put( XFillBmpSizeLogItem(true) ); + aSetBitmapSize.setWidth( 0 ); + aSetBitmapSize.setHeight( 0 ); } + break; } default: break; } + rAttrs->Put( XFillBmpSizeXItem( aSetBitmapSize.Width() ) ); rAttrs->Put( XFillBmpSizeYItem( aSetBitmapSize.Height() ) ); } @@ -304,15 +317,13 @@ void SvxBitmapTabPage::Reset( const SfxItemSet* rAttrs ) { BitmapEx aBmpEx(pGraphicObject->GetGraphic().GetBitmapEx()); Size aTempBitmapSize = aBmpEx.GetSizePixel(); - rBitmapSize.setWidth( (OutputDevice::LogicToLogic(static_cast<sal_Int32>(aTempBitmapSize.Width()),MapUnit::MapPixel, MapUnit::Map100thMM )) / fUIScale ); - rBitmapSize.setHeight( (OutputDevice::LogicToLogic(static_cast<sal_Int32>(aTempBitmapSize.Height()),MapUnit::MapPixel, MapUnit::Map100thMM )) / fUIScale ); + rBitmapSize = PixelToLogic( aTempBitmapSize, MapMode(MapUnit::Map100thMM)); CalculateBitmapPresetSize(); } bool bTiled = false; bool bStretched = false; if(rAttrs->GetItemState( XATTR_FILLBMP_TILE ) != SfxItemState::DONTCARE) bTiled = rAttrs->Get( XATTR_FILLBMP_TILE ).GetValue(); - if(rAttrs->GetItemState( XATTR_FILLBMP_STRETCH ) != SfxItemState::DONTCARE) bStretched = rAttrs->Get( XATTR_FILLBMP_STRETCH ).GetValue(); @@ -326,6 +337,26 @@ void SvxBitmapTabPage::Reset( const SfxItemSet* rAttrs ) long nWidth = 0; long nHeight = 0; + if(rAttrs->GetItemState(XATTR_FILLBMP_SIZELOG) != SfxItemState::DONTCARE) + { + m_pTsbScale->EnableTriState( false ); + + if( rAttrs->Get( XATTR_FILLBMP_SIZELOG ).GetValue() ) + { + m_pTsbScale->SetState( TRISTATE_FALSE ); + m_bLogicalSize = true; + } + else + { + m_pTsbScale->SetState( TRISTATE_TRUE ); + m_bLogicalSize = false; + } + + ClickScaleHdl( nullptr ); + } + else + m_pTsbScale->SetState( TRISTATE_INDET ); + TriState eRelative = TRISTATE_FALSE; if(rAttrs->GetItemState(XATTR_FILLBMP_SIZEX) != SfxItemState::DONTCARE) { @@ -352,12 +383,6 @@ void SvxBitmapTabPage::Reset( const SfxItemSet* rAttrs ) } m_pTsbScale->SetState(eRelative); - if(eRelative != TRISTATE_TRUE) - { - nWidth = (OutputDevice::LogicToLogic(nWidth, mePoolUnit, MapUnit::Map100thMM )) / fUIScale; - nHeight = (OutputDevice::LogicToLogic(nHeight, mePoolUnit, MapUnit::Map100thMM )) / fUIScale; - } - if(rBitmapSize.Width() > 0 && rBitmapSize.Height() > 0) { if(eRelative == TRISTATE_TRUE) @@ -367,10 +392,8 @@ void SvxBitmapTabPage::Reset( const SfxItemSet* rAttrs ) } else { - sal_Int64 nWidthPercent = m_pBitmapWidth->Normalize(nWidth*100/rBitmapSize.Width()); - m_pBitmapWidth->SetValue(nWidthPercent); - sal_Int64 nHeightPercent = m_pBitmapHeight->Normalize(nHeight*100/rBitmapSize.Height()); - m_pBitmapHeight->SetValue(nHeightPercent); + SetMetricValue(*m_pBitmapWidth, nWidth, mePoolUnit); + SetMetricValue(*m_pBitmapHeight, nHeight, mePoolUnit); } } @@ -592,6 +615,7 @@ IMPL_LINK_NOARG(SvxBitmapTabPage, ClickDeleteHdl, SvxPresetListBox*, void) IMPL_LINK_NOARG( SvxBitmapTabPage, ModifyBitmapSizeHdl, Edit&, void ) { + m_bLogicalSize = false; if( m_pTsbScale->GetState() != TRISTATE_TRUE && static_cast<BitmapStyle>(m_pBitmapStyleLB->GetSelectedEntryPos()) != TILED ) { sal_Int64 nWidthPercent = m_pBitmapWidth->Denormalize( m_pBitmapWidth->GetValue() ); @@ -607,6 +631,36 @@ IMPL_LINK_NOARG( SvxBitmapTabPage, ModifyBitmapSizeHdl, Edit&, void ) IMPL_LINK_NOARG( SvxBitmapTabPage, ClickScaleHdl, Button*, void ) { + if( m_pTsbScale->GetState() == TRISTATE_TRUE ) + { + m_pBitmapWidth->SetDecimalDigits( 0 ); + m_pBitmapWidth->SetUnit(FUNIT_PERCENT); + m_pBitmapWidth->SetValue( 100 ); + m_pBitmapWidth->SetMax( 100 ); + m_pBitmapWidth->SetLast( 100 ); + + m_pBitmapHeight->SetDecimalDigits( 0 ); + m_pBitmapHeight->SetUnit(FUNIT_PERCENT); + m_pBitmapHeight->SetValue( 100 ); + m_pBitmapHeight->SetMax( 100 ); + m_pBitmapHeight->SetLast( 100 ); + } + else + { + m_pBitmapWidth->SetDecimalDigits( 2 ); + m_pBitmapWidth->SetUnit( meFieldUnit ); + m_pBitmapWidth->SetValue( 100 ); + m_pBitmapWidth->SetMax( 999900 ); + m_pBitmapWidth->SetLast( 100000 ); + + m_pBitmapHeight->SetDecimalDigits( 2 ); + m_pBitmapHeight->SetDecimalDigits( 2 ); + m_pBitmapHeight->SetUnit( meFieldUnit ); + m_pBitmapHeight->SetValue( 100 ); + m_pBitmapHeight->SetMax( 999900 ); + m_pBitmapHeight->SetLast( 100000 ); + } + ModifyBitmapStyleHdl( *m_pBitmapStyleLB ); } @@ -633,22 +687,20 @@ IMPL_LINK_NOARG( SvxBitmapTabPage, ModifyBitmapStyleHdl, ListBox&, void ) case CUSTOM: case TILED: { - sal_Int64 nWidthPercent = m_pBitmapWidth->Denormalize( m_pBitmapWidth->GetValue() ); - sal_Int64 nHeightPercent = m_pBitmapWidth->Denormalize( m_pBitmapHeight->GetValue() ); if(eStylePos == CUSTOM && m_pTsbScale->IsEnabled() && m_pTsbScale->GetState() == TRISTATE_TRUE) { - aSetBitmapSize.setWidth( -nWidthPercent ); - aSetBitmapSize.setHeight( -nHeightPercent ); + aSetBitmapSize.setWidth( -m_pBitmapWidth->GetValue() ); + aSetBitmapSize.setHeight( -m_pBitmapWidth->GetValue() ); } else { - aSetBitmapSize.setWidth( static_cast<long>(nWidthPercent*rBitmapSize.Width()/100) ); - aSetBitmapSize.setHeight( static_cast<long>(nHeightPercent*rBitmapSize.Height()/100) ); + aSetBitmapSize.setWidth( GetCoreValue( *m_pBitmapWidth, mePoolUnit ) ); + aSetBitmapSize.setHeight( GetCoreValue( *m_pBitmapHeight, mePoolUnit ) ); } } - break; + break; default: - break; + break; } m_rXFSet.Put( XFillBmpSizeXItem( aSetBitmapSize.Width() ) ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits