diff options
author | Cao Cuong Ngo <cao.cuong.ngo@gmail.com> | 2013-04-02 18:37:00 +0200 |
---|---|---|
committer | Thorsten Behrens <tbehrens@suse.com> | 2013-04-05 13:05:42 +0200 |
commit | 2c82e5d304b56c1dd95d0f3dcafc9a36ce02b5f4 (patch) | |
tree | 4d60d1a686085ae4cfb0a415defdb35402a65db8 | |
parent | 21d6c1022aa528836d20ae1b8be9ea1b84bd61aa (diff) |
fdo#59071 Slideshow: allow automatic transitions with sub-second
Enable slide transition each 0.25 second instead of whole second.
Change-Id: I1907a1baf30cede91a0438d021e003204ea06651
-rw-r--r-- | offapi/com/sun/star/presentation/DrawPage.idl | 6 | ||||
-rw-r--r-- | sd/inc/sdpage.hxx | 6 | ||||
-rw-r--r-- | sd/source/core/sdpage.cxx | 2 | ||||
-rw-r--r-- | sd/source/core/sdpage2.cxx | 2 | ||||
-rw-r--r-- | sd/source/filter/html/htmlex.cxx | 14 | ||||
-rw-r--r-- | sd/source/filter/html/htmlex.hxx | 2 | ||||
-rw-r--r-- | sd/source/filter/ppt/pptin.cxx | 2 | ||||
-rw-r--r-- | sd/source/ui/animations/SlideTransitionPane.cxx | 14 | ||||
-rw-r--r-- | sd/source/ui/animations/SlideTransitionPane.src | 10 | ||||
-rw-r--r-- | sd/source/ui/dlg/dlgass.cxx | 4 | ||||
-rw-r--r-- | sd/source/ui/unoidl/unopage.cxx | 19 | ||||
-rw-r--r-- | slideshow/source/engine/slideshowimpl.cxx | 2 | ||||
-rw-r--r-- | xmloff/source/draw/propimp0.cxx | 9 | ||||
-rw-r--r-- | xmloff/source/draw/sdpropls.cxx | 2 |
14 files changed, 57 insertions, 37 deletions
diff --git a/offapi/com/sun/star/presentation/DrawPage.idl b/offapi/com/sun/star/presentation/DrawPage.idl index 59dd8f3d3061..2abde0f3906d 100644 --- a/offapi/com/sun/star/presentation/DrawPage.idl +++ b/offapi/com/sun/star/presentation/DrawPage.idl @@ -62,6 +62,11 @@ published service DrawPage */ [property] long Duration; + /** If the property <member scope="com::sun::star::drawing">DrawPage::Change</member> is set to 1, + this is the time in seconds this page is shown before switching + to the next page, also permitting sub-second precision here. + */ + [optional, property] double HighResDuration; /** This is the effect that is used to fade in this page. */ @@ -136,6 +141,7 @@ published service DrawPage this page. This is only used if <code>IsDateTimeFixed</code> is <false/>. */ [optional, property] long DateTimeFormat; + }; diff --git a/sd/inc/sdpage.hxx b/sd/inc/sdpage.hxx index 18b58a315a1c..0b5d631b24a5 100644 --- a/sd/inc/sdpage.hxx +++ b/sd/inc/sdpage.hxx @@ -115,7 +115,7 @@ protected: sd::ScopeLock maLockAutoLayoutArrangement; sal_Bool mbSelected; ///< selection identifier PresChange mePresChange; ///< manual / automatic / semi automatic - sal_uInt32 mnTime; ///< Display time in seconds + double mfTime; ///< Display time in seconds sal_Bool mbSoundOn; ///< with / without sound. sal_Bool mbExcluded; ///< will (not) be displayed during show. OUString maLayoutName; ///< Name of the layout @@ -223,8 +223,8 @@ public: void SetPresChange(PresChange eChange) { mePresChange = eChange; } PresChange GetPresChange() const { return mePresChange; } - void SetTime(sal_uInt32 nNewTime) { mnTime = nNewTime; } - sal_uInt32 GetTime() const { return mnTime; } + void SetTime(double fNewTime) { mfTime = fNewTime; } + double GetTime() const { return mfTime; } void SetSound(sal_Bool bNewSoundOn) { mbSoundOn = bNewSoundOn; } sal_Bool IsSoundOn() const { return mbSoundOn; } diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx index 499af5031cb1..9057a4f68c73 100644 --- a/sd/source/core/sdpage.cxx +++ b/sd/source/core/sdpage.cxx @@ -88,7 +88,7 @@ SdPage::SdPage(SdDrawDocument& rNewDoc, StarBASIC* pBasic, sal_Bool bMasterPage) , meAutoLayout(AUTOLAYOUT_NONE) , mbSelected(sal_False) , mePresChange(PRESCHANGE_MANUAL) -, mnTime(1) +, mfTime(1.0) , mbSoundOn(sal_False) , mbExcluded(sal_False) , mbLoopSound(sal_False) diff --git a/sd/source/core/sdpage2.cxx b/sd/source/core/sdpage2.cxx index c446f05876e1..7007bf5fae69 100644 --- a/sd/source/core/sdpage2.cxx +++ b/sd/source/core/sdpage2.cxx @@ -390,7 +390,7 @@ SdPage::SdPage(const SdPage& rSrcPage) mnTransitionFadeColor = rSrcPage.mnTransitionFadeColor; mfTransitionDuration = rSrcPage.mfTransitionDuration; mePresChange = rSrcPage.mePresChange; - mnTime = rSrcPage.mnTime; + mfTime = rSrcPage.mfTime; mbSoundOn = rSrcPage.mbSoundOn; mbExcluded = rSrcPage.mbExcluded; diff --git a/sd/source/filter/html/htmlex.cxx b/sd/source/filter/html/htmlex.cxx index 706b199745bb..5cc1a4f1baf3 100644 --- a/sd/source/filter/html/htmlex.cxx +++ b/sd/source/filter/html/htmlex.cxx @@ -584,9 +584,9 @@ void HtmlExport::InitExportParameters( const Sequence< PropertyValue >& rParams } else if ( pParams->Name == "KioskSlideDuration" ) { - sal_Int32 temp = sal_False; + double temp = 0.0; pParams->Value >>= temp; - mnSlideDuration = temp; + mfSlideDuration = temp; mbAutoSlide = true; } else if ( pParams->Name == "KioskEndless" ) @@ -1521,28 +1521,28 @@ bool HtmlExport::CreateHtmlForPresPages() pPage = maPages[ nSdPage ]; if( meMode == PUBLISH_KIOSK ) { - sal_uLong nSecs = 0; + double fSecs = 0; bool bEndless = false; if( !mbAutoSlide ) { if( pPage->GetPresChange() != PRESCHANGE_MANUAL ) { - nSecs = pPage->GetTime(); + fSecs = pPage->GetTime(); bEndless = mpDoc->getPresentationSettings().mbEndless; } } else { - nSecs = mnSlideDuration; + fSecs = mfSlideDuration; bEndless = mbEndless; } - if( nSecs != 0 ) + if( fSecs != 0 ) { if( nSdPage < (mnSdPageCount-1) || bEndless ) { aStr.AppendAscii( "<meta http-equiv=\"refresh\" content=\"" ); - aStr += OUString::number(nSecs); + aStr += OUString::number(fSecs); aStr.AppendAscii( "; URL=" ); int nPage = nSdPage + 1; diff --git a/sd/source/filter/html/htmlex.hxx b/sd/source/filter/html/htmlex.hxx index 6ef80edd9bbf..3a8f586d8818 100644 --- a/sd/source/filter/html/htmlex.hxx +++ b/sd/source/filter/html/htmlex.hxx @@ -114,7 +114,7 @@ class HtmlExport bool mbDownload; bool mbAutoSlide; - sal_uInt32 mnSlideDuration; + double mfSlideDuration; bool mbSlideSound; bool mbHiddenSlides; bool mbEndless; diff --git a/sd/source/filter/ppt/pptin.cxx b/sd/source/filter/ppt/pptin.cxx index 308979d18e1f..9dc25d8af73b 100644 --- a/sd/source/filter/ppt/pptin.cxx +++ b/sd/source/filter/ppt/pptin.cxx @@ -1757,7 +1757,7 @@ void ImplSdPPTImport::ImportPageEffect( SdPage* pPage, const sal_Bool bNewAnimat if ( nBuildFlags & 0x400 ) // slidechange by time { // time to show (in Ticks) pPage->SetPresChange( PRESCHANGE_AUTO ); - pPage->SetTime( nSlideTime / 1000 ); + pPage->SetTime( nSlideTime / 1000.0 ); } else pPage->SetPresChange( mePresChange ); diff --git a/sd/source/ui/animations/SlideTransitionPane.cxx b/sd/source/ui/animations/SlideTransitionPane.cxx index 10eb311b03b4..8c3913e73575 100644 --- a/sd/source/ui/animations/SlideTransitionPane.cxx +++ b/sd/source/ui/animations/SlideTransitionPane.cxx @@ -108,7 +108,7 @@ struct TransitionEffect init(); mfDuration = rPage.getTransitionDuration(); - mnTime = rPage.GetTime(); + mfTime = rPage.GetTime(); mePresChange = rPage.GetPresChange(); mbSoundOn = rPage.IsSoundOn(); maSound = rPage.GetSoundFile(); @@ -119,7 +119,7 @@ struct TransitionEffect void init() { mfDuration = 2.0; - mnTime = 0; + mfTime = 0.0; mePresChange = PRESCHANGE_MANUAL; mbSoundOn = sal_False; mbLoopSound = sal_False; @@ -165,7 +165,7 @@ struct TransitionEffect if( ! mbDurationAmbiguous ) rOutPage.setTransitionDuration( mfDuration ); if( ! mbTimeAmbiguous ) - rOutPage.SetTime( mnTime ); + rOutPage.SetTime( mfTime ); if( ! mbPresChangeAmbiguous ) rOutPage.SetPresChange( mePresChange ); if( ! mbSoundAmbiguous ) @@ -196,7 +196,7 @@ struct TransitionEffect || (mnFadeColor != aOtherEffect.mnFadeColor); mbDurationAmbiguous = mbDurationAmbiguous || aOtherEffect.mbDurationAmbiguous || mfDuration != aOtherEffect.mfDuration; - mbTimeAmbiguous = mbTimeAmbiguous || aOtherEffect.mbTimeAmbiguous || mnTime != aOtherEffect.mnTime; + mbTimeAmbiguous = mbTimeAmbiguous || aOtherEffect.mbTimeAmbiguous || mfTime != aOtherEffect.mfTime; mbPresChangeAmbiguous = mbPresChangeAmbiguous || aOtherEffect.mbPresChangeAmbiguous || mePresChange != aOtherEffect.mePresChange; mbSoundAmbiguous = mbSoundAmbiguous || aOtherEffect.mbSoundAmbiguous || mbSoundOn != aOtherEffect.mbSoundOn; #if 0 @@ -217,7 +217,7 @@ struct TransitionEffect // other settings double mfDuration; - sal_uLong mnTime; + double mfTime; PresChange mePresChange; sal_Bool mbSoundOn; String maSound; @@ -859,7 +859,7 @@ void SlideTransitionPane::updateControls() { maRB_ADVANCE_ON_MOUSE.Check( aEffect.mePresChange == PRESCHANGE_MANUAL ); maRB_ADVANCE_AUTO.Check( aEffect.mePresChange == PRESCHANGE_AUTO ); - maMF_ADVANCE_AUTO_AFTER.SetValue( aEffect.mnTime ); + maMF_ADVANCE_AUTO_AFTER.SetValue( aEffect.mfTime * 100.0); } SdOptions* pOptions = SD_MOD()->GetSdOptions(DOCUMENT_TYPE_IMPRESS); @@ -1026,7 +1026,7 @@ impl::TransitionEffect SlideTransitionPane::getTransitionEffectFromControls() co aResult.mePresChange = PRESCHANGE_AUTO; if( maMF_ADVANCE_AUTO_AFTER.IsEnabled()) { - aResult.mnTime = static_cast<long>(maMF_ADVANCE_AUTO_AFTER.GetValue()); + aResult.mfTime = static_cast<double>(maMF_ADVANCE_AUTO_AFTER.GetValue() ) / 100.0 ; aResult.mbTimeAmbiguous = false; } } diff --git a/sd/source/ui/animations/SlideTransitionPane.src b/sd/source/ui/animations/SlideTransitionPane.src index d2017de8ea62..d78f0a0cf1bc 100644 --- a/sd/source/ui/animations/SlideTransitionPane.src +++ b/sd/source/ui/animations/SlideTransitionPane.src @@ -142,11 +142,11 @@ Control DLG_SLIDE_TRANSITION_PANE Repeat = TRUE ; Spin = TRUE ; Minimum = 0 ; - Maximum = 999 ; - // decimal digits should be 1, but for now the model only supports whole seconds - DecimalDigits = 0 ; - // spin size (increment value) should be 5 if digits are 1 - SpinSize = 1 ; + Maximum = 9999 ; + // fdo#59071, enable slide auto transition of 0.25 second + DecimalDigits = 2 ; + // spin size (increment value), each 0.25 second + SpinSize = 25 ; Unit = FUNIT_CUSTOM ; CustomUnitText [ en-US ] = "sec"; diff --git a/sd/source/ui/dlg/dlgass.cxx b/sd/source/ui/dlg/dlgass.cxx index ebb88e478961..b1ae03f5a5da 100644 --- a/sd/source/ui/dlg/dlgass.cxx +++ b/sd/source/ui/dlg/dlgass.cxx @@ -1036,7 +1036,7 @@ SfxObjectShellLock AssistentDlgImpl::GetDocument() { const sal_uInt16 nPageCount = pDoc->GetSdPageCount(PK_STANDARD); sal_Bool bKiosk = mpPage3PresTypeKioskRB->IsChecked(); - sal_uInt32 nNewTime = (sal_uInt32)mpPage3PresTimeTMF->GetTime().GetMSFromTime() / 1000; + double fNewTime = (double)mpPage3PresTimeTMF->GetTime().GetMSFromTime() / 1000.0; if(bKiosk) { PresentationSettings& rSettings = pDoc->getPresentationSettings(); @@ -1058,7 +1058,7 @@ SfxObjectShellLock AssistentDlgImpl::GetDocument() if(bKiosk) { pPage->SetPresChange( PRESCHANGE_AUTO ); - pPage->SetTime(nNewTime); + pPage->SetTime(fNewTime); } nPgRelNum++; } diff --git a/sd/source/ui/unoidl/unopage.cxx b/sd/source/ui/unoidl/unopage.cxx index 03b11bd7c2c0..a5c237b05cf0 100644 --- a/sd/source/ui/unoidl/unopage.cxx +++ b/sd/source/ui/unoidl/unopage.cxx @@ -92,7 +92,7 @@ enum WID_PAGE { WID_PAGE_LEFT, WID_PAGE_RIGHT, WID_PAGE_TOP, WID_PAGE_BOTTOM, WID_PAGE_WIDTH, WID_PAGE_HEIGHT, WID_PAGE_EFFECT, WID_PAGE_CHANGE, WID_PAGE_SPEED, WID_PAGE_NUMBER, - WID_PAGE_ORIENT, WID_PAGE_LAYOUT, WID_PAGE_DURATION, WID_PAGE_LDNAME, WID_PAGE_LDBITMAP, + WID_PAGE_ORIENT, WID_PAGE_LAYOUT, WID_PAGE_DURATION, WID_PAGE_HIGHRESDURATION, WID_PAGE_LDNAME, WID_PAGE_LDBITMAP, WID_PAGE_BACK, WID_PAGE_PREVIEW, WID_PAGE_PREVIEWBITMAP, WID_PAGE_VISIBLE, WID_PAGE_SOUNDFILE, WID_PAGE_BACKFULL, WID_PAGE_BACKVIS, WID_PAGE_BACKOBJVIS, WID_PAGE_USERATTRIBS, WID_PAGE_BOOKMARK, WID_PAGE_ISDARK, WID_PAGE_HEADERVISIBLE, WID_PAGE_HEADERTEXT, WID_PAGE_FOOTERVISIBLE, WID_PAGE_FOOTERTEXT, @@ -141,6 +141,7 @@ const SvxItemPropertySet* ImplGetDrawPagePropertySet( sal_Bool bImpress, PageKin { MAP_CHAR_LEN(sUNO_Prop_IsBackgroundObjectsVisible), WID_PAGE_BACKOBJVIS, &::getBooleanCppuType(), 0, 0}, { MAP_CHAR_LEN(sUNO_Prop_UserDefinedAttributes),WID_PAGE_USERATTRIBS, &::getCppuType((const Reference< ::com::sun::star::container::XNameContainer >*)0) , 0, 0}, { MAP_CHAR_LEN(sUNO_Prop_BookmarkURL), WID_PAGE_BOOKMARK, &::getCppuType((const OUString*)0), 0, 0}, + { MAP_CHAR_LEN("HighResDuration"), WID_PAGE_HIGHRESDURATION, &::getCppuType((const double*)0), 0, 0}, { MAP_CHAR_LEN("IsBackgroundDark" ), WID_PAGE_ISDARK, &::getBooleanCppuType(), beans::PropertyAttribute::READONLY, 0}, { MAP_CHAR_LEN("IsFooterVisible"), WID_PAGE_FOOTERVISIBLE, &::getBooleanCppuType(), 0, 0}, { MAP_CHAR_LEN("FooterText"), WID_PAGE_FOOTERTEXT, &::getCppuType((const OUString*)0), 0, 0}, @@ -612,11 +613,20 @@ void SAL_CALL SdGenericDrawPage::setPropertyValue( const OUString& aPropertyName GetPage()->SetAutoLayout( (AutoLayout)nValue, sal_True ); break; case WID_PAGE_DURATION: - GetPage()->SetTime((sal_uInt32)nValue); + GetPage()->SetTime((sal_Int32)nValue); break; } break; } + case WID_PAGE_HIGHRESDURATION: + { + double fValue = 0; + if(!(aValue >>= fValue)) + throw lang::IllegalArgumentException(); + + GetPage()->SetTime(fValue); + break; + } case WID_PAGE_WIDTH: { sal_Int32 nWidth = 0; @@ -1033,7 +1043,10 @@ Any SAL_CALL SdGenericDrawPage::getPropertyValue( const OUString& PropertyName ) } break; case WID_PAGE_DURATION: - aAny <<= (sal_Int32)(GetPage()->GetTime()); + aAny <<= (sal_Int32)( GetPage()->GetTime() + .5 ); + break; + case WID_PAGE_HIGHRESDURATION: + aAny <<= (double)( GetPage()->GetTime() ); break; case WID_PAGE_LDNAME: { diff --git a/slideshow/source/engine/slideshowimpl.cxx b/slideshow/source/engine/slideshowimpl.cxx index f64f68136da4..c1d0b2a4a765 100644 --- a/slideshow/source/engine/slideshowimpl.cxx +++ b/slideshow/source/engine/slideshowimpl.cxx @@ -2176,7 +2176,7 @@ void queryAutomaticSlideTransition( uno::Reference<drawing::XDrawPage> const& xD !getPropertyValue( nAutomaticNextSlideTimeout, xPropSet, ::rtl::OUString( - "Duration")) ) + "HighResDuration")) ) { OSL_TRACE( "queryAutomaticSlideTransition(): " diff --git a/xmloff/source/draw/propimp0.cxx b/xmloff/source/draw/propimp0.cxx index 75d8b93aa461..3d6dc4a59d83 100644 --- a/xmloff/source/draw/propimp0.cxx +++ b/xmloff/source/draw/propimp0.cxx @@ -56,9 +56,9 @@ sal_Bool XMLDurationPropertyHdl::importXML( util::Duration aDuration; ::sax::Converter::convertDuration(aDuration, rStrImpValue); - const sal_Int32 nSeconds = ((aDuration.Days * 24 + aDuration.Hours) * 60 - + aDuration.Minutes) * 60 + aDuration.Seconds; - rValue <<= nSeconds; + const double fSeconds = ((aDuration.Days * 24 + aDuration.Hours) * 60 + + aDuration.Minutes) * 60 + aDuration.Seconds + aDuration.MilliSeconds / 1000.0; + rValue <<= fSeconds; return sal_True; } @@ -68,12 +68,13 @@ sal_Bool XMLDurationPropertyHdl::exportXML( const ::com::sun::star::uno::Any& rValue, const SvXMLUnitConverter& ) const { - sal_Int32 nVal = 0; + double nVal = 0; if(rValue >>= nVal) { util::Duration aDuration; aDuration.Seconds = static_cast<sal_uInt16>(nVal); + aDuration.MilliSeconds = static_cast<sal_uInt32>(nVal * 1000.0) % 1000 ; OUStringBuffer aOut; ::sax::Converter::convertDuration(aOut, aDuration); diff --git a/xmloff/source/draw/sdpropls.cxx b/xmloff/source/draw/sdpropls.cxx index 1bf5b277538d..273517bccb0a 100644 --- a/xmloff/source/draw/sdpropls.cxx +++ b/xmloff/source/draw/sdpropls.cxx @@ -304,7 +304,7 @@ const XMLPropertyMapEntry aXMLSDPresPageProps[] = DPMAP( "Change", XML_NAMESPACE_PRESENTATION, XML_TRANSITION_TYPE, XML_SD_TYPE_PRESPAGE_TYPE, CTF_PAGE_TRANS_TYPE ), DPMAP( "Effect", XML_NAMESPACE_PRESENTATION, XML_TRANSITION_STYLE, XML_SD_TYPE_PRESPAGE_STYLE, CTF_PAGE_TRANS_STYLE ), DPMAP( "Speed", XML_NAMESPACE_PRESENTATION, XML_TRANSITION_SPEED, XML_SD_TYPE_PRESPAGE_SPEED, CTF_PAGE_TRANS_SPEED ), - DPMAP( "Duration", XML_NAMESPACE_PRESENTATION, XML_DURATION, XML_SD_TYPE_PRESPAGE_DURATION, CTF_PAGE_TRANS_DURATION ), + DPMAP( "HighResDuration", XML_NAMESPACE_PRESENTATION, XML_DURATION, XML_SD_TYPE_PRESPAGE_DURATION, CTF_PAGE_TRANS_DURATION ), DPMAP( "Visible", XML_NAMESPACE_PRESENTATION, XML_VISIBILITY, XML_SD_TYPE_PRESPAGE_VISIBILITY, CTF_PAGE_VISIBLE ), DPMAP( "Sound", XML_NAMESPACE_PRESENTATION, XML_SOUND, XML_TYPE_STRING|MID_FLAG_ELEMENT_ITEM, CTF_PAGE_SOUND_URL ), DPMAP( "BackgroundFullSize", XML_NAMESPACE_DRAW, XML_BACKGROUND_SIZE, XML_SD_TYPE_PRESPAGE_BACKSIZE, CTF_PAGE_BACKSIZE ), |