adding basic properties for videos

This commit is contained in:
Vivianne 2022-03-23 01:13:42 -07:00
parent 708caa431f
commit 76e211ac83
3 changed files with 105 additions and 7 deletions

View File

@ -1,5 +1,8 @@
namespace Deskcandy.Candy {
class Video : BaseCandy {
public bool loop { get; set; default = true; }
public double speed { get; set; default = 100.0; }
public Video() {
}
@ -8,7 +11,20 @@ namespace Deskcandy.Candy {
public override Subprocess launch(uint socket_id) throws Error {
message("Launching mpv video...");
return new Subprocess(SubprocessFlags.NONE, "mpv", @"--wid=$socket_id", "--no-audio", "--video-unscaled=downscale-big", "--video-zoom=20", this.name);
var args = new Array<string>();
args.append_val("mpv");
args.append_val(@"--wid=$socket_id");
args.append_val("--no-audio");
args.append_val("--no-terminal");
// TODO: temp
args.append_val("--video-unscaled=downscale-big");
args.append_val("--video-zoom=20");
args.append_val(@"--speed=$(this.speed)");
if (this.loop) {
args.append_val("--loop");
}
args.append_val(this.name);
return new Subprocess.newv(args.steal(), SubprocessFlags.NONE);
}
}
}

View File

@ -217,6 +217,13 @@
<mime-type>video/*</mime-type>
</mime-types>
</object>
<object class="GtkAdjustment" id="video_speed_adjustment">
<property name="lower">0.01</property>
<property name="upper">5</property>
<property name="value">1</property>
<property name="step-increment">0.01</property>
<property name="page-increment">0.10</property>
</object>
<template class="DeskcandyWindow" parent="GtkApplicationWindow">
<property name="can-focus">False</property>
<property name="window-position">center</property>
@ -645,13 +652,81 @@
</packing>
</child>
<child>
<object class="GtkFileChooserButton" id="video_chooser">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">start</property>
<property name="filter">video_file_filter</property>
<property name="title" translatable="yes">Select Video</property>
<signal name="file-set" handler="on_video_chooser_file_set" swapped="no"/>
<property name="orientation">vertical</property>
<child>
<object class="GtkFileChooserButton" id="video_chooser">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">start</property>
<property name="filter">video_file_filter</property>
<property name="title" translatable="yes">Select Video</property>
<signal name="file-set" handler="on_video_property_changed" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Speed</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScale" id="video_speed_slider">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="adjustment">video_speed_adjustment</property>
<property name="round-digits">0</property>
<property name="digits">2</property>
<property name="value-pos">left</property>
<signal name="value-changed" handler="on_video_property_changed" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="video_loop_checkbox">
<property name="label" translatable="yes">Loop</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="active">True</property>
<property name="draw-indicator">True</property>
<signal name="toggled" handler="on_video_property_changed" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">video_page</property>

View File

@ -20,6 +20,11 @@ namespace Deskcandy {
private unowned Gtk.ListStore screensavers_liststore;
[GtkChild]
private unowned Gtk.FileChooserButton video_chooser;
[GtkChild]
private unowned Gtk.CheckButton video_loop_checkbox;
[GtkChild]
private unowned Gtk.Range video_speed_slider;
private BaseCandy active_candy;
private Subprocess proc;
@ -96,8 +101,10 @@ namespace Deskcandy {
}
[GtkCallback]
private void on_video_chooser_file_set() {
private void on_video_property_changed() {
this.video.name = this.video_chooser.get_filename();
this.video.loop = this.video_loop_checkbox.get_active();
this.video.speed = this.video_speed_slider.get_value();
this.refresh_socket();
}