summaryrefslogtreecommitdiff
path: root/filter
diff options
context:
space:
mode:
authorMarco Cecchetti <marco.cecchetti@collabora.com>2015-12-18 21:55:31 +0100
committerAndras Timar <andras.timar@collabora.com>2016-06-12 12:26:32 +0200
commit8dc6db220d7ad1a65b8c45ebd020eb7461b5bb1b (patch)
treeef6541ebc53ddafa5ca5761451af02bdbe679979 /filter
parentce13dd5cd19aa289a85bdee3712a1f9f3facca37 (diff)
svg export: borders of leaving slide are not covered by the entering one
Change-Id: Ib467c062e68fa8fe2a104daff399407aefffbb3f Reviewed-on: https://gerrit.libreoffice.org/20807 Reviewed-by: Marco Cecchetti <mrcekets@gmail.com> Tested-by: Marco Cecchetti <mrcekets@gmail.com>
Diffstat (limited to 'filter')
-rw-r--r--filter/source/svg/presentation_engine.js26
-rw-r--r--filter/source/svg/svgexport.cxx16
2 files changed, 39 insertions, 3 deletions
diff --git a/filter/source/svg/presentation_engine.js b/filter/source/svg/presentation_engine.js
index dcc5cc607e3c..a8b9f6bd7efd 100644
--- a/filter/source/svg/presentation_engine.js
+++ b/filter/source/svg/presentation_engine.js
@@ -735,6 +735,7 @@ var aOOOElemMetaSlides = 'ooo:meta_slides';
var aOOOElemMetaSlide = 'ooo:meta_slide';
var aOOOElemTextField = 'ooo:text_field';
var aPresentationClipPathId = 'presentation_clip_path';
+var aPresentationClipPathShrinkId = 'presentation_clip_path_shrink';
// ooo attributes
var aOOOAttrNumberOfSlides = 'number-of-slides';
@@ -1937,8 +1938,12 @@ MasterPageView.prototype.createElement = function()
// that is also a workaround for some kind of slide transition
// when the master page is empty
var aWhiteRect = theDocument.createElementNS( NSS['svg'], 'rect' );
- aWhiteRect.setAttribute( 'width', String( WIDTH ) );
- aWhiteRect.setAttribute( 'height', String( HEIGHT) );
+ var nWidthExt = WIDTH / 1000;
+ var nHeightExt = HEIGHT / 1000;
+ aWhiteRect.setAttribute( 'x', String( -nWidthExt / 2 ) );
+ aWhiteRect.setAttribute( 'y', String( -nHeightExt / 2 ) );
+ aWhiteRect.setAttribute( 'width', String( WIDTH + nWidthExt ) );
+ aWhiteRect.setAttribute( 'height', String( HEIGHT + nHeightExt ) );
aWhiteRect.setAttribute( 'fill', '#FFFFFF' );
aMasterPageViewElement.appendChild( aWhiteRect );
@@ -12252,7 +12257,16 @@ SlideShow.prototype.notifySlideStart = function( nNewSlideIndex, nOldSlideIndex
SlideShow.prototype.notifyTransitionEnd = function( nSlideIndex )
{
- theMetaDoc.setCurrentSlide( nSlideIndex );
+ // reset the presentation clip path on the leaving slide
+ // to the standard one when transition ends
+ if( theMetaDoc.getCurrentSlide() )
+ {
+ var sRef = 'url(#' + aPresentationClipPathId + ')';
+ theMetaDoc.getCurrentSlide().slideElement.setAttribute('clip-path', sRef);
+ }
+
+ theMetaDoc.setCurrentSlide(nSlideIndex);
+
if( this.aSlideViewElement )
{
theMetaDoc.getCurrentSlide().aVisibilityStatusElement.parentNode.removeChild( this.aSlideViewElement );
@@ -12629,6 +12643,11 @@ SlideShow.prototype.displaySlide = function( nNewSlide, bSkipSlideTransition )
var aSlideTransitionHandler = aNewMetaSlide.aTransitionHandler;
if( aSlideTransitionHandler && aSlideTransitionHandler.isValid() )
{
+ // clipPath element used for the leaving slide in order
+ // to avoid that slide borders are visible during transition
+ var sRef = 'url(#' + aPresentationClipPathShrinkId + ')';
+ aOldMetaSlide.slideElement.setAttribute( 'clip-path', sRef );
+
// when we switch from the last to the first slide we need to hide the last slide
// or nobody will see the transition, hence we create a view of the last slide and
// we place it before the first slide
@@ -12639,6 +12658,7 @@ SlideShow.prototype.displaySlide = function( nNewSlide, bSkipSlideTransition )
aNewMetaSlide.aVisibilityStatusElement.parentNode.insertBefore( this.aSlideViewElement, aNewMetaSlide.aVisibilityStatusElement );
aOldMetaSlide.hide();
}
+
var aLeavingSlide = aOldMetaSlide;
var aEnteringSlide = aNewMetaSlide;
var aTransitionEndEvent = makeEvent( bind2( this.notifyTransitionEnd, this, nNewSlide ) );
diff --git a/filter/source/svg/svgexport.cxx b/filter/source/svg/svgexport.cxx
index d55e3c4c6e45..1adec14435dd 100644
--- a/filter/source/svg/svgexport.cxx
+++ b/filter/source/svg/svgexport.cxx
@@ -847,6 +847,22 @@ bool SVGFilter::implExportDocument()
SvXMLElementExport aRectElem( *mpSVGExport, XML_NAMESPACE_NONE, "rect", true, true );
}
}
+ // Create a ClipPath element applied to the leaving slide in order
+ // to avoid that slide borders are visible during transition
+ {
+ mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "id", "presentation_clip_path_shrink" );
+ mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "clipPathUnits", "userSpaceOnUse" );
+ SvXMLElementExport aClipPathElem( *mpSVGExport, XML_NAMESPACE_NONE, "clipPath", true, true );
+ {
+ sal_Int32 nDocWidthExt = nDocWidth / 500;
+ sal_Int32 nDocHeightExt = nDocHeight / 500;
+ mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "x", OUString::number( nDocX + nDocWidthExt / 2 ) );
+ mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "y", OUString::number( nDocY + nDocHeightExt / 2) );
+ mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "width", OUString::number( nDocWidth - nDocWidthExt ) );
+ mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "height", OUString::number( nDocHeight - nDocHeightExt ) );
+ SvXMLElementExport aRectElem( *mpSVGExport, XML_NAMESPACE_NONE, "rect", true, true );
+ }
+ }
}
if( implLookForFirstVisiblePage() ) // OK! We found at least one visible page.