summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cui/source/inc/grfpage.hxx3
-rw-r--r--cui/source/tabpages/grfpage.cxx32
-rw-r--r--include/svx/svdmodel.hxx2
-rw-r--r--sd/inc/drawdoc.hxx2
-rw-r--r--svx/source/tbxctrls/grafctrl.cxx2
-rw-r--r--sw/source/ui/frmdlg/frmdlg.cxx7
6 files changed, 40 insertions, 8 deletions
diff --git a/cui/source/inc/grfpage.hxx b/cui/source/inc/grfpage.hxx
index 35653eaf6ade..2c7017a57189 100644
--- a/cui/source/inc/grfpage.hxx
+++ b/cui/source/inc/grfpage.hxx
@@ -56,6 +56,7 @@ class SvxGrfCropPage : public SfxTabPage
tools::Long nOldWidth;
tools::Long nOldHeight;
bool bSetOrigSize;
+ sal_Int32 m_aPreferredDPI;
SvxCropExample m_aExampleWN;
@@ -92,7 +93,7 @@ class SvxGrfCropPage : public SfxTabPage
void GraphicHasChanged(bool bFound);
virtual void ActivatePage(const SfxItemSet& rSet) override;
- static Size GetGrfOrigSize(const Graphic&);
+ Size GetGrfOrigSize(const Graphic& rGraphic);
public:
SvxGrfCropPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet &rSet);
static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet *rSet );
diff --git a/cui/source/tabpages/grfpage.cxx b/cui/source/tabpages/grfpage.cxx
index 8742044ab1c3..b83e0bbc0426 100644
--- a/cui/source/tabpages/grfpage.cxx
+++ b/cui/source/tabpages/grfpage.cxx
@@ -57,6 +57,7 @@ SvxGrfCropPage::SvxGrfCropPage(weld::Container* pPage, weld::DialogController* p
, nOldWidth(0)
, nOldHeight(0)
, bSetOrigSize(false)
+ , m_aPreferredDPI(0)
, m_xCropFrame(m_xBuilder->weld_widget("cropframe"))
, m_xZoomConstRB(m_xBuilder->weld_radio_button("keepscale"))
, m_xSizeConstRB(m_xBuilder->weld_radio_button("keepsize"))
@@ -287,6 +288,11 @@ void SvxGrfCropPage::ActivatePage(const SfxItemSet& rSet)
DBG_ASSERT( pPool, "Where is the pool?" );
#endif
+ if (!GetUserData().isEmpty())
+ {
+ m_aPreferredDPI = GetUserData().toInt32();
+ }
+
bSetOrigSize = false;
// Size
@@ -670,13 +676,27 @@ void SvxGrfCropPage::GraphicHasChanged( bool bFound )
Size SvxGrfCropPage::GetGrfOrigSize(const Graphic& rGrf)
{
- const MapMode aMapTwip( MapUnit::MapTwip );
- Size aSize( rGrf.GetPrefSize() );
- if( MapUnit::MapPixel == rGrf.GetPrefMapMode().GetMapUnit() )
- aSize = Application::GetDefaultDevice()->PixelToLogic(aSize, aMapTwip);
+ Size aSize;
+
+ if (m_aPreferredDPI > 0)
+ {
+ Size aPixelSize = rGrf.GetSizePixel();
+ double fWidth = aPixelSize.Width() / double(m_aPreferredDPI);
+ double fHeight = aPixelSize.Height() / double(m_aPreferredDPI);
+ fWidth = o3tl::convert(fWidth, o3tl::Length::in, o3tl::Length::twip);
+ fHeight = o3tl::convert(fHeight, o3tl::Length::in, o3tl::Length::twip);
+ aSize = Size(fWidth, fHeight);
+ }
else
- aSize = OutputDevice::LogicToLogic( aSize,
- rGrf.GetPrefMapMode(), aMapTwip );
+ {
+ const MapMode aMapTwip( MapUnit::MapTwip );
+ aSize = rGrf.GetPrefSize();
+ if( MapUnit::MapPixel == rGrf.GetPrefMapMode().GetMapUnit() )
+ aSize = Application::GetDefaultDevice()->PixelToLogic(aSize, aMapTwip);
+ else
+ aSize = OutputDevice::LogicToLogic( aSize,
+ rGrf.GetPrefMapMode(), aMapTwip );
+ }
return aSize;
}
diff --git a/include/svx/svdmodel.hxx b/include/svx/svdmodel.hxx
index ab9578a7bc93..831201de4d60 100644
--- a/include/svx/svdmodel.hxx
+++ b/include/svx/svdmodel.hxx
@@ -609,6 +609,8 @@ public:
bool DoesMakePageObjectsNamesUnique() const { return mbMakePageObjectsNamesUnique; }
void DoMakePageObjectsNamesUnique(bool bDo) { mbMakePageObjectsNamesUnique = bDo; }
+ virtual sal_Int32 getImagePreferredDPI() const { return 0; }
+
virtual void dumpAsXml(xmlTextWriterPtr pWriter) const;
};
diff --git a/sd/inc/drawdoc.hxx b/sd/inc/drawdoc.hxx
index aaed07cae960..a99c27c49bd1 100644
--- a/sd/inc/drawdoc.hxx
+++ b/sd/inc/drawdoc.hxx
@@ -616,7 +616,7 @@ public:
SAL_DLLPRIVATE void SetEmbedFontScriptAsian(bool bUse) { mbEmbedFontScriptAsian = bUse; }
SAL_DLLPRIVATE void SetEmbedFontScriptComplex(bool bUse) { mbEmbedFontScriptComplex = bUse; }
- sal_Int32 getImagePreferredDPI() { return mnImagePreferredDPI; }
+ sal_Int32 getImagePreferredDPI() const override { return mnImagePreferredDPI; }
void setImagePreferredDPI(sal_Int32 nValue) { mnImagePreferredDPI = nValue; }
void dumpAsXml(xmlTextWriterPtr pWriter) const override;
diff --git a/svx/source/tbxctrls/grafctrl.cxx b/svx/source/tbxctrls/grafctrl.cxx
index 7f644be79052..0d1913fb4780 100644
--- a/svx/source/tbxctrls/grafctrl.cxx
+++ b/svx/source/tbxctrls/grafctrl.cxx
@@ -654,6 +654,8 @@ void SvxGrafAttrHelper::ExecuteGrafAttr( SfxRequest& rReq, SdrView& rView )
SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
::CreateTabPage fnCreatePage = pFact->GetTabPageCreatorFunc( RID_SVXPAGE_GRFCROP );
std::unique_ptr<SfxTabPage> xTabPage = (*fnCreatePage)(aCropDialog.get_content_area(), &aCropDialog, &aCropDlgAttr);
+ OUString sPreferredDPI = OUString::number(rView.getSdrModelFromSdrView().getImagePreferredDPI());
+ xTabPage->SetUserData(sPreferredDPI);
xTabPage->SetPageTitle(aCropStr);
aCropDialog.SetTabPage(std::move(xTabPage));
diff --git a/sw/source/ui/frmdlg/frmdlg.cxx b/sw/source/ui/frmdlg/frmdlg.cxx
index ffb5a8ed76c9..fbb27c7d5f94 100644
--- a/sw/source/ui/frmdlg/frmdlg.cxx
+++ b/sw/source/ui/frmdlg/frmdlg.cxx
@@ -31,6 +31,7 @@
#include <wrap.hxx>
#include <column.hxx>
#include <macassgn.hxx>
+#include <IDocumentSettingAccess.hxx>
#include <strings.hrc>
#include <svl/eitem.hxx>
@@ -189,6 +190,12 @@ void SwFrameDlg::PageCreated(const OString& rId, SfxTabPage &rPage)
{
rPage.PageCreated(m_rSet);
}
+ else if (rId == "crop")
+ {
+ sal_Int32 nDPI = m_pWrtShell->GetDoc()->getIDocumentSettingAccess().getImagePreferredDPI();
+ if (nDPI)
+ rPage.SetUserData(OUString::number(nDPI));
+ }
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */