: BBox(frame, NULL, B_FOLLOW_NONE, B_WILL_DRAW | B_FRAME_EVENTS | B_PULSE_NEEDED,
B_PLAIN_BORDER),
p_intf( _p_intf ),
- fScrubSem(B_ERROR),
fCurrentRate(INPUT_RATE_DEFAULT),
fCurrentStatus(-1),
fBottomControlHeight(0.0),
BRect frame(0.0, 0.0, 10.0, 10.0);
// Seek Slider
- fSeekSlider = new SeekSlider( frame, "seek slider", this,
- 0, SEEKSLIDER_RANGE );
+ fSeekSlider = new SeekSlider( p_intf, frame, "seek slider", this );
fSeekSlider->SetValue(0);
fSeekSlider->ResizeToPreferred();
AddChild( fSeekSlider );
fVolumeSlider->SetEnabled(enabled);
}
-// GetSeekTo
-uint32
-MediaControlView::GetSeekTo() const
-{
- return fSeekSlider->Value();
-}
-
// GetVolume
uint32
MediaControlView::GetVolume() const
/*****************************************************************************
* SeekSlider
*****************************************************************************/
-SeekSlider::SeekSlider(BRect frame, const char* name, MediaControlView *owner,
- int32 minValue, int32 maxValue)
+SeekSlider::SeekSlider( intf_thread_t * _p_intf,
+ BRect frame, const char* name, MediaControlView *owner )
: BControl(frame, name, NULL, NULL, B_FOLLOW_NONE,
B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE),
+ p_intf(_p_intf),
fOwner(owner),
- fTracking(false),
- fMinValue(minValue),
- fMaxValue(maxValue)
+ fTracking(false)
{
BFont font(be_plain_font);
font.SetSize(9.0);
SeekSlider::~SeekSlider()
{
- _EndSeek();
}
/*****************************************************************************
float sliderStart = (r.left + knobWidth2);
float sliderEnd = (r.right - knobWidth2);
float knobPos = sliderStart
- + floorf((sliderEnd - sliderStart - 1.0) * (Value() - fMinValue)
- / (fMaxValue - fMinValue) + 0.5);
+ + floorf((sliderEnd - sliderStart - 1.0) * Value()
+ / SEEKSLIDER_RANGE);
// draw both sides (the original from Be doesn't seem
// to make a difference for enabled/disabled state)
// DrawBitmapAsync(fLeftSideBits, r.LeftTop());
SetValue(_ValueFor(where.x));
fTracking = true;
SetMouseEventMask(B_POINTER_EVENTS, B_LOCK_WINDOW_FOCUS);
- _BeginSeek();
}
}
if (fTracking)
{
SetValue(_ValueFor(where.x));
- _Seek();
}
}
if (fTracking)
{
fTracking = false;
- _EndSeek();
+ input_thread_t * p_input;
+ p_input = (input_thread_t *)
+ vlc_object_find( p_intf, VLC_OBJECT_INPUT, FIND_ANYWHERE );
+
+ if( p_input )
+ {
+ var_SetFloat( p_input, "position",
+ (float) Value() / SEEKSLIDER_RANGE );
+ vlc_object_release( p_input );
+ }
}
}
{
if ( LockLooper() )
{
- SetValue(fMinValue + (int32)floorf((fMaxValue - fMinValue) * position + 0.5));
+ if( !fTracking )
+ {
+ SetValue( SEEKSLIDER_RANGE * position );
+ }
UnlockLooper();
}
}
float knobWidth2 = SEEK_SLIDER_KNOB_WIDTH / 2.0;
float sliderStart = (r.left + knobWidth2);
float sliderEnd = (r.right - knobWidth2);
- int32 value = fMinValue + (int32)(((xPos - sliderStart) * (fMaxValue - fMinValue))
+ int32 value = (int32)(((xPos - sliderStart) * SEEKSLIDER_RANGE)
/ (sliderEnd - sliderStart - 1.0));
- if (value < fMinValue)
- value = fMinValue;
- if (value > fMaxValue)
- value = fMaxValue;
+ if (value < 0)
+ value = 0;
+ if (value > SEEKSLIDER_RANGE)
+ value = SEEKSLIDER_RANGE;
return value;
}
EndLineArray();
}
-/*****************************************************************************
- * SeekSlider::_BeginSeek
- *****************************************************************************/
-void
-SeekSlider::_BeginSeek()
-{
- fOwner->fScrubSem = create_sem(0, "Vlc::fScrubSem");
- if (fOwner->fScrubSem >= B_OK)
- release_sem(fOwner->fScrubSem);
-}
-
-/*****************************************************************************
- * SeekSlider::_Seek
- *****************************************************************************/
-void
-SeekSlider::_Seek()
-{
- if (fOwner->fScrubSem >= B_OK)
- delete_sem(fOwner->fScrubSem);
- fOwner->fScrubSem = create_sem(0, "Vlc::fScrubSem");
- if (fOwner->fScrubSem >= B_OK)
- release_sem(fOwner->fScrubSem);
-}
-
-/*****************************************************************************
- * SeekSlider::_EndSeek
- *****************************************************************************/
-void
-SeekSlider::_EndSeek()
-{
- if (fOwner->fScrubSem >= B_OK)
- delete_sem(fOwner->fScrubSem);
- fOwner->fScrubSem = B_ERROR;
-}
-
-
/*****************************************************************************
* VolumeSlider
*****************************************************************************/
void SetStatus(int status, int rate);
void SetEnabled(bool enable);
void SetAudioEnabled(bool enable);
- uint32 GetSeekTo() const;
uint32 GetVolume() const;
void SetSkippable(bool backward,
bool forward);
void SetMuted(bool mute);
-
- sem_id fScrubSem;
private:
void _LayoutControls(BRect frame) const;
class SeekSlider : public BControl
{
public:
- SeekSlider(BRect frame,
+ SeekSlider(intf_thread_t * p_intf,
+ BRect frame,
const char* name,
- MediaControlView* owner,
- int32 minValue,
- int32 maxValue);
+ MediaControlView* owner );
virtual ~SeekSlider();
rgb_color top,
rgb_color right,
rgb_color bottom);
- void _BeginSeek();
- void _Seek();
- void _EndSeek();
+ intf_thread_t * p_intf;
MediaControlView* fOwner;
bool fTracking;
- int32 fMinValue;
- int32 fMaxValue;
};
class VolumeSlider : public BControl