[Libreoffice-commits] core.git: filter/source include/svtools svtools/source
Eike Rathke
erack at redhat.com
Mon Jul 24 21:33:26 UTC 2017
filter/source/graphic/GraphicExportDialog.cxx | 12 ++++--
filter/source/graphic/GraphicExportDialog.hxx | 1
filter/source/graphic/GraphicExportFilter.cxx | 7 +++
filter/source/graphic/GraphicExportFilter.hxx | 1
include/svtools/DocumentToGraphicRenderer.hxx | 5 ++
include/svtools/GraphicExportOptionsDialog.hxx | 3 +
svtools/source/filter/DocumentToGraphicRenderer.cxx | 35 +++++++++++++++----
svtools/source/filter/GraphicExportOptionsDialog.cxx | 5 +-
8 files changed, 55 insertions(+), 14 deletions(-)
New commits:
commit a7a99a574660fc62a9514b2ed3f8ddfe8ad8540c
Author: Eike Rathke <erack at redhat.com>
Date: Mon Jul 24 22:31:34 2017 +0200
Export to PNG: use selection if Selection is selected
The SelectionOnly property from the export file dialog was not passed down from
GraphicExportFilter::filter() to DocumentToGraphicRenderer so that always
passed a component model instead of a selection object to the implementation of
XRenderable (getRendererCount(), getRenderer(), render())
Also have GraphicExportDialog consider the selection so the
DocumentToGraphicRenderer at its GraphicExportOptionsDialog calls XRenderable
the same.
Change-Id: I976bf16cf87cf5ca2678bdba7adfaf61c2063168
Reviewed-on: https://gerrit.libreoffice.org/40380
Reviewed-by: Eike Rathke <erack at redhat.com>
Tested-by: Jenkins <ci at libreoffice.org>
diff --git a/filter/source/graphic/GraphicExportDialog.cxx b/filter/source/graphic/GraphicExportDialog.cxx
index 4cd6346ae3c7..4f1d47acaf68 100644
--- a/filter/source/graphic/GraphicExportDialog.cxx
+++ b/filter/source/graphic/GraphicExportDialog.cxx
@@ -35,8 +35,9 @@ using namespace css::uno;
using namespace css::beans;
using namespace css::lang;
-GraphicExportDialog::GraphicExportDialog( const Reference< XComponentContext >& )
- : meFieldUnit(FUNIT_NONE)
+GraphicExportDialog::GraphicExportDialog( const Reference< XComponentContext >& ) :
+ meFieldUnit(FUNIT_NONE),
+ mbSelectionOnly(false)
{
}
@@ -84,6 +85,10 @@ void GraphicExportDialog::setPropertyValues( const Sequence<PropertyValue>& aPro
{
maMediaDescriptor[ i ].Value >>= maFilterDataSequence;
}
+ else if ( maMediaDescriptor[ i ].Name == "SelectionOnly" )
+ {
+ maMediaDescriptor[ i ].Value >>= mbSelectionOnly;
+ }
}
}
@@ -96,7 +101,8 @@ void GraphicExportDialog::setTitle( const OUString& aTitle )
sal_Int16 GraphicExportDialog::execute()
{
sal_Int16 nReturn = ui::dialogs::ExecutableDialogResults::CANCEL;
- ScopedVclPtrInstance< GraphicExportOptionsDialog > graphicExportOptionsDialog( Application::GetDefDialogParent(), mxSourceDocument );
+ ScopedVclPtrInstance< GraphicExportOptionsDialog > graphicExportOptionsDialog( Application::GetDefDialogParent(),
+ mxSourceDocument, mbSelectionOnly );
if (graphicExportOptionsDialog->Execute() == RET_OK )
{
maFilterDataSequence = graphicExportOptionsDialog->getFilterData();
diff --git a/filter/source/graphic/GraphicExportDialog.hxx b/filter/source/graphic/GraphicExportDialog.hxx
index bad51f9ae1ee..dcbb8e5bcd9d 100644
--- a/filter/source/graphic/GraphicExportDialog.hxx
+++ b/filter/source/graphic/GraphicExportDialog.hxx
@@ -48,6 +48,7 @@ class GraphicExportDialog : public cppu::WeakImplHelper
OUString maDialogTitle;
FieldUnit meFieldUnit;
+ bool mbSelectionOnly;
public:
diff --git a/filter/source/graphic/GraphicExportFilter.cxx b/filter/source/graphic/GraphicExportFilter.cxx
index 15dea5400298..e4279513416e 100644
--- a/filter/source/graphic/GraphicExportFilter.cxx
+++ b/filter/source/graphic/GraphicExportFilter.cxx
@@ -26,6 +26,7 @@
GraphicExportFilter::GraphicExportFilter( const Reference<XComponentContext>& )
: mTargetWidth(0)
, mTargetHeight(0)
+ , mbSelectionOnly(false)
{}
GraphicExportFilter::~GraphicExportFilter()
@@ -56,6 +57,10 @@ void GraphicExportFilter::gatherProperties( const Sequence<PropertyValue>& rProp
{
aProperty.Value >>= mxOutputStream;
}
+ else if ( aProperty.Name == "SelectionOnly" )
+ {
+ aProperty.Value >>= mbSelectionOnly;
+ }
}
for ( sal_Int32 i = 0; i < mFilterDataSequence.getLength(); i++ )
@@ -93,7 +98,7 @@ sal_Bool SAL_CALL GraphicExportFilter::filter( const Sequence<PropertyValue>& rD
{
gatherProperties(rDescriptor);
- DocumentToGraphicRenderer aRenderer( mxDocument );
+ DocumentToGraphicRenderer aRenderer( mxDocument, mbSelectionOnly );
sal_Int32 aCurrentPage = aRenderer.getCurrentPageWriter();
Size aDocumentSizePixel = aRenderer.getDocumentSizeInPixels(aCurrentPage);
diff --git a/filter/source/graphic/GraphicExportFilter.hxx b/filter/source/graphic/GraphicExportFilter.hxx
index 1f639ca9d775..1514bdefa774 100644
--- a/filter/source/graphic/GraphicExportFilter.hxx
+++ b/filter/source/graphic/GraphicExportFilter.hxx
@@ -48,6 +48,7 @@ class GraphicExportFilter :
sal_Int32 mTargetWidth;
sal_Int32 mTargetHeight;
+ bool mbSelectionOnly;
public:
explicit GraphicExportFilter( const Reference<XComponentContext>& rxContext );
diff --git a/include/svtools/DocumentToGraphicRenderer.hxx b/include/svtools/DocumentToGraphicRenderer.hxx
index e43e47208198..2e6ee141773a 100644
--- a/include/svtools/DocumentToGraphicRenderer.hxx
+++ b/include/svtools/DocumentToGraphicRenderer.hxx
@@ -38,9 +38,12 @@ class SVT_DLLPUBLIC DocumentToGraphicRenderer
css::uno::Reference<css::frame::XController> mxController;
css::uno::Reference<css::view::XRenderable> mxRenderable;
css::uno::Reference<css::awt::XToolkit> mxToolkit;
+ bool mbSelectionOnly;
+
+ css::uno::Any getSelection() const;
public:
- DocumentToGraphicRenderer(const css::uno::Reference<css::lang::XComponent>& xDocument);
+ DocumentToGraphicRenderer(const css::uno::Reference<css::lang::XComponent>& xDocument, bool bSelectionOnly);
~DocumentToGraphicRenderer();
sal_Int32 getCurrentPageWriter( );
diff --git a/include/svtools/GraphicExportOptionsDialog.hxx b/include/svtools/GraphicExportOptionsDialog.hxx
index 5524b96d4db3..2ed5dfdd7749 100644
--- a/include/svtools/GraphicExportOptionsDialog.hxx
+++ b/include/svtools/GraphicExportOptionsDialog.hxx
@@ -61,7 +61,8 @@ private:
DECL_LINK( resolutionModifiedHandle, Edit&, void );
public:
- GraphicExportOptionsDialog( vcl::Window* pWindow, const css::uno::Reference<css::lang::XComponent>& rxSourceDocument );
+ GraphicExportOptionsDialog( vcl::Window* pWindow,
+ const css::uno::Reference<css::lang::XComponent>& rxSourceDocument, bool bSelectionOnly );
virtual ~GraphicExportOptionsDialog() override;
virtual void dispose() override;
css::uno::Sequence<css::beans::PropertyValue> getFilterData();
diff --git a/svtools/source/filter/DocumentToGraphicRenderer.cxx b/svtools/source/filter/DocumentToGraphicRenderer.cxx
index a94b8febf3dd..9c23168b209a 100644
--- a/svtools/source/filter/DocumentToGraphicRenderer.cxx
+++ b/svtools/source/filter/DocumentToGraphicRenderer.cxx
@@ -28,6 +28,7 @@
#include <com/sun/star/awt/XDevice.hpp>
#include <com/sun/star/text/XPageCursor.hpp>
#include <com/sun/star/text/XTextViewCursorSupplier.hpp>
+#include <com/sun/star/view/XSelectionSupplier.hpp>
#include <com/sun/star/beans/PropertyValues.hpp>
#include <toolkit/helper/vclunohelper.hxx>
@@ -37,12 +38,13 @@ using namespace css::uno;
using namespace css::lang;
using namespace css::beans;
-DocumentToGraphicRenderer::DocumentToGraphicRenderer( const Reference<XComponent>& rxDocument ) :
+DocumentToGraphicRenderer::DocumentToGraphicRenderer( const Reference<XComponent>& rxDocument, bool bSelectionOnly ) :
mxDocument(rxDocument),
mxModel( mxDocument, uno::UNO_QUERY ),
mxController( mxModel->getCurrentController() ),
mxRenderable (mxDocument, uno::UNO_QUERY ),
- mxToolkit( VCLUnoHelper::CreateToolkit() )
+ mxToolkit( VCLUnoHelper::CreateToolkit() ),
+ mbSelectionOnly( bSelectionOnly )
{
}
@@ -56,12 +58,34 @@ Size DocumentToGraphicRenderer::getDocumentSizeInPixels(sal_Int32 aCurrentPage)
return Application::GetDefaultDevice()->LogicToPixel( aSize100mm, MapUnit::Map100thMM );
}
+uno::Any DocumentToGraphicRenderer::getSelection() const
+{
+ uno::Any aSelection;
+ aSelection <<= mxDocument; // default: render whole document
+ if (mbSelectionOnly && mxController.is())
+ {
+ try
+ {
+ uno::Reference< view::XSelectionSupplier > xSelSup( mxController, uno::UNO_QUERY);
+ if (xSelSup.is())
+ {
+ uno::Any aViewSelection( xSelSup->getSelection());
+ if (aViewSelection.hasValue())
+ aSelection = aViewSelection;
+ }
+ }
+ catch (const uno::Exception&)
+ {
+ }
+ }
+ return aSelection;
+}
+
Size DocumentToGraphicRenderer::getDocumentSizeIn100mm(sal_Int32 aCurrentPage)
{
Reference< awt::XDevice > xDevice(mxToolkit->createScreenCompatibleDevice( 32, 32 ) );
- uno::Any selection;
- selection <<= mxDocument;
+ uno::Any selection( getSelection());
PropertyValues renderProperties;
@@ -134,8 +158,7 @@ Graphic DocumentToGraphicRenderer::renderToGraphic(
pOutputDev->Erase();
}
- uno::Any aSelection;
- aSelection <<= mxDocument;
+ uno::Any aSelection( getSelection());
mxRenderable->render(aCurrentPage - 1, aSelection, renderProps );
aMtf.Stop();
diff --git a/svtools/source/filter/GraphicExportOptionsDialog.cxx b/svtools/source/filter/GraphicExportOptionsDialog.cxx
index e7591cc2b98d..cb7928ad104e 100644
--- a/svtools/source/filter/GraphicExportOptionsDialog.cxx
+++ b/svtools/source/filter/GraphicExportOptionsDialog.cxx
@@ -23,10 +23,11 @@ using namespace css::beans;
using namespace css::lang;
using namespace css::uno;
-GraphicExportOptionsDialog::GraphicExportOptionsDialog(vcl::Window* pWindow, const Reference<XComponent>& rxSourceDocument) :
+GraphicExportOptionsDialog::GraphicExportOptionsDialog(vcl::Window* pWindow,
+ const Reference<XComponent>& rxSourceDocument, bool bSelectionOnly) :
ModalDialog(pWindow, "GraphicExporter", "svt/ui/GraphicExportOptionsDialog.ui"),
mResolution(96.0),
- mRenderer(rxSourceDocument)
+ mRenderer(rxSourceDocument, bSelectionOnly)
{
get(mpWidth, "spin-width");
get(mpHeight, "spin-height");
More information about the Libreoffice-commits
mailing list