mirror of
https://github.com/Rafostar/clapper.git
synced 2025-08-31 16:31:58 +02:00
Add playback speed control
Adjustable playback speed control in the form of a slider with a range from 0.01x to 2x. Closes #33
This commit is contained in:
37
clapper_src/controls.js
vendored
37
clapper_src/controls.js
vendored
@@ -40,13 +40,7 @@ class ClapperControls extends Gtk.Box
|
|||||||
this.chapterHideId = null;
|
this.chapterHideId = null;
|
||||||
|
|
||||||
this._addTogglePlayButton();
|
this._addTogglePlayButton();
|
||||||
|
this._addElapsedButton();
|
||||||
const elapsedRevealer = new Revealers.ButtonsRevealer('SLIDE_RIGHT');
|
|
||||||
this.elapsedButton = this.addElapsedPopoverButton('00:00/00:00', elapsedRevealer);
|
|
||||||
elapsedRevealer.set_reveal_child(true);
|
|
||||||
this.revealersArr.push(elapsedRevealer);
|
|
||||||
this.append(elapsedRevealer);
|
|
||||||
|
|
||||||
this._addPositionScale();
|
this._addPositionScale();
|
||||||
|
|
||||||
const revealTracksButton = new Buttons.IconToggleButton(
|
const revealTracksButton = new Buttons.IconToggleButton(
|
||||||
@@ -318,6 +312,35 @@ class ClapperControls extends Gtk.Box
|
|||||||
this.addButton(this.togglePlayButton);
|
this.addButton(this.togglePlayButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_addElapsedButton()
|
||||||
|
{
|
||||||
|
const elapsedRevealer = new Revealers.ButtonsRevealer('SLIDE_RIGHT');
|
||||||
|
this.elapsedButton = this.addElapsedPopoverButton('00:00/00:00', elapsedRevealer);
|
||||||
|
elapsedRevealer.set_reveal_child(true);
|
||||||
|
this.revealersArr.push(elapsedRevealer);
|
||||||
|
|
||||||
|
const speedScale = new Gtk.Scale({
|
||||||
|
orientation: Gtk.Orientation.HORIZONTAL,
|
||||||
|
value_pos: Gtk.PositionType.BOTTOM,
|
||||||
|
draw_value: false,
|
||||||
|
round_digits: 2,
|
||||||
|
hexpand: true,
|
||||||
|
valign: Gtk.Align.CENTER,
|
||||||
|
});
|
||||||
|
|
||||||
|
this.speedAdjustment = speedScale.get_adjustment();
|
||||||
|
this.speedAdjustment.set_lower(0.01);
|
||||||
|
this.speedAdjustment.set_upper(2);
|
||||||
|
this.speedAdjustment.set_value(1);
|
||||||
|
|
||||||
|
speedScale.add_mark(0.25, Gtk.PositionType.BOTTOM, '0.25x');
|
||||||
|
speedScale.add_mark(1, Gtk.PositionType.BOTTOM, 'normal');
|
||||||
|
speedScale.add_mark(2, Gtk.PositionType.BOTTOM, '2x');
|
||||||
|
|
||||||
|
this.elapsedButton.popoverBox.append(speedScale);
|
||||||
|
this.append(elapsedRevealer);
|
||||||
|
}
|
||||||
|
|
||||||
_addPositionScale()
|
_addPositionScale()
|
||||||
{
|
{
|
||||||
this.positionScale = new Gtk.Scale({
|
this.positionScale = new Gtk.Scale({
|
||||||
|
@@ -78,6 +78,11 @@ class ClapperPlayer extends PlayerBase
|
|||||||
|
|
||||||
set_uri(uri)
|
set_uri(uri)
|
||||||
{
|
{
|
||||||
|
/* FIXME: Player does not notify about
|
||||||
|
* rate change after file load */
|
||||||
|
if(this.rate !== 1)
|
||||||
|
this.set_rate(1);
|
||||||
|
|
||||||
if(Gst.Uri.get_protocol(uri) !== 'file')
|
if(Gst.Uri.get_protocol(uri) !== 'file')
|
||||||
return super.set_uri(uri);
|
return super.set_uri(uri);
|
||||||
|
|
||||||
|
@@ -46,6 +46,9 @@ class ClapperWidget extends Gtk.Grid
|
|||||||
|
|
||||||
this.player = new Player();
|
this.player = new Player();
|
||||||
this.controls.elapsedButton.scrolledWindow.set_child(this.player.playlistWidget);
|
this.controls.elapsedButton.scrolledWindow.set_child(this.player.playlistWidget);
|
||||||
|
this.controls.speedAdjustment.bind_property(
|
||||||
|
'value', this.player, 'rate', GObject.BindingFlags.BIDIRECTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
this.player.connect('position-updated', this._onPlayerPositionUpdated.bind(this));
|
this.player.connect('position-updated', this._onPlayerPositionUpdated.bind(this));
|
||||||
this.player.connect('duration-changed', this._onPlayerDurationChanged.bind(this));
|
this.player.connect('duration-changed', this._onPlayerDurationChanged.bind(this));
|
||||||
|
Reference in New Issue
Block a user