summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--avmedia/inc/mediacontrol.hxx1
-rw-r--r--avmedia/source/framework/mediacontrol.cxx20
2 files changed, 16 insertions, 5 deletions
diff --git a/avmedia/inc/mediacontrol.hxx b/avmedia/inc/mediacontrol.hxx
index 99ad5ef91a01..bdf0ce300005 100644
--- a/avmedia/inc/mediacontrol.hxx
+++ b/avmedia/inc/mediacontrol.hxx
@@ -77,6 +77,7 @@ private:
Size maMinSize;
bool mbLocked;
MediaControlStyle meControlStyle;
+ double mfTime;
};
}
diff --git a/avmedia/source/framework/mediacontrol.cxx b/avmedia/source/framework/mediacontrol.cxx
index f9c645ba15c9..0988c88c0d13 100644
--- a/avmedia/source/framework/mediacontrol.cxx
+++ b/avmedia/source/framework/mediacontrol.cxx
@@ -44,7 +44,8 @@ MediaControl::MediaControl( vcl::Window* pParent, MediaControlStyle eControlStyl
maIdle( "avmedia MediaControl Idle" ),
maItem( 0, AVMediaSetMask::ALL ),
mbLocked( false ),
- meControlStyle( eControlStyle )
+ meControlStyle( eControlStyle ),
+ mfTime(0.0)
{
mpPlayToolBox = VclPtr<ToolBox>::Create(this, WB_3DLOOK) ;
mpTimeSlider = VclPtr<Slider>::Create(this, WB_HORZ | WB_DRAG | WB_3DLOOK) ;
@@ -116,10 +117,10 @@ MediaControl::MediaControl( vcl::Window* pParent, MediaControlStyle eControlStyl
mpZoomToolBox->SetBackground();
mpZoomToolBox->SetPaintTransparent( true );
}
-
- maIdle.SetPriority( TaskPriority::HIGH_IDLE );
+ // we want time field + progress slider to update as the media plays
+ // give this task a lower prio than REPAINT so that UI updates are not starved
+ maIdle.SetPriority( TaskPriority::POST_PAINT );
maIdle.SetInvokeHandler( LINK( this, MediaControl, implTimeoutHdl ) );
- maIdle.Start();
}
void MediaControl::InitializeWidgets()
@@ -245,8 +246,10 @@ void MediaControl::Resize()
void MediaControl::setState( const MediaItem& rItem )
{
- if( !mbLocked )
+ double fTime = rItem.getTime();
+ if( !mbLocked && fTime != mfTime)
{
+ mfTime = fTime;
maItem.merge( rItem );
if( rItem.getURL().isEmpty() && meControlStyle == MEDIACONTROLSTYLE_SINGLELINE )
mpPlayToolBox->Disable();
@@ -310,6 +313,12 @@ IMPL_LINK( MediaControl, implSelectHdl, ToolBox*, p, void )
else
SelectPlayToolBoxItem( aExecItem, maItem, p->GetCurItemId() );
+ if (aExecItem.getState() == MediaState::Play)
+ maIdle.Start();
+ else if (aExecItem.getState() == MediaState::Pause ||
+ aExecItem.getState() == MediaState::Stop)
+ maIdle.Stop();
+
if( aExecItem.getMaskSet() != AVMediaSetMask::NONE )
execute( aExecItem );
}
@@ -347,6 +356,7 @@ IMPL_LINK( MediaControl, implZoomSelectHdl, ListBox&, p, void )
IMPL_LINK_NOARG(MediaControl, implTimeoutHdl, Timer *, void)
{
update();
+ maIdle.Start();
}
} // namespace avmedia