audio: Add a custom VolumeScale widget
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
33c7bdf517
commit
edc3e7f876
|
@ -59,6 +59,20 @@ class SeekScale(ScalePlus):
|
|||
return GLib.SOURCE_CONTINUE
|
||||
|
||||
|
||||
class VolumeScale(ScalePlus):
|
||||
def __init__(self, player):
|
||||
ScalePlus.__init__(self, 0.0, 1.0, 0.05, 0.25)
|
||||
self.player = player
|
||||
self.set_value(player.get_volume())
|
||||
|
||||
def do_change_value(self, scroll, value):
|
||||
self.set_value(value)
|
||||
self.player.set_volume(value)
|
||||
|
||||
def format_value(self, scale, value):
|
||||
return f"{int(value * 100)}%"
|
||||
|
||||
|
||||
class ScaleButton(Gtk.Button):
|
||||
def __init__(self, scale, icon):
|
||||
Gtk.Button.__init__(self)
|
||||
|
|
|
@ -6,14 +6,17 @@ from gi.repository import Gst
|
|||
from . import scale
|
||||
|
||||
class FakePlayer(GObject.GObject):
|
||||
def __init__(self, position, duration):
|
||||
def __init__(self, position, duration, volume):
|
||||
GObject.GObject.__init__(self)
|
||||
self.pos = position
|
||||
self.dur = duration
|
||||
self.vol = volume
|
||||
|
||||
def position(self): return self.pos
|
||||
def duration(self): return self.dur
|
||||
def seek(self, value): self.seek_val = value
|
||||
def set_volume(self, volume): self.vol = volume
|
||||
def get_volume(self): return self.vol
|
||||
|
||||
|
||||
class TestScalePlus(unittest.TestCase):
|
||||
|
@ -67,7 +70,7 @@ class TestScalePlus(unittest.TestCase):
|
|||
|
||||
class TestSeekScale(unittest.TestCase):
|
||||
def test_seek_scale_init(self):
|
||||
fake = FakePlayer(0, 5 * Gst.SECOND)
|
||||
fake = FakePlayer(0, 5 * Gst.SECOND, 1)
|
||||
seek = scale.SeekScale(fake)
|
||||
adj = seek.get_adjustment()
|
||||
|
||||
|
@ -82,7 +85,7 @@ class TestSeekScale(unittest.TestCase):
|
|||
self.assertEqual(adj.get_page_increment(), 30 * Gst.SECOND)
|
||||
|
||||
def test_seek_scale_update(self):
|
||||
fake = FakePlayer(3 * Gst.SECOND, 15 * Gst.SECOND)
|
||||
fake = FakePlayer(3 * Gst.SECOND, 15 * Gst.SECOND, 1)
|
||||
seek = scale.SeekScale(fake)
|
||||
adj = seek.get_adjustment()
|
||||
|
||||
|
@ -93,7 +96,7 @@ class TestSeekScale(unittest.TestCase):
|
|||
self.assertEqual(adj.get_upper(), 15 * Gst.SECOND)
|
||||
|
||||
def test_seek_scale_values(self):
|
||||
fake = FakePlayer(0, 15 * Gst.SECOND)
|
||||
fake = FakePlayer(0, 15 * Gst.SECOND, 1)
|
||||
seek = scale.SeekScale(fake)
|
||||
|
||||
seek.update()
|
||||
|
@ -106,6 +109,37 @@ class TestSeekScale(unittest.TestCase):
|
|||
self.assertEqual(fake.seek_val, 0)
|
||||
|
||||
|
||||
class TestVolumeScale(unittest.TestCase):
|
||||
def test_volume_scale_init(self):
|
||||
fake = FakePlayer(0, 5 * Gst.SECOND, 1.0)
|
||||
volume = scale.VolumeScale(fake)
|
||||
adj = volume.get_adjustment()
|
||||
|
||||
self.assertIsInstance(volume, scale.ScalePlus)
|
||||
self.assertEqual(volume.player, fake)
|
||||
self.assertEqual(adj.get_value(), 1.0)
|
||||
self.assertEqual(adj.get_lower(), 0.0)
|
||||
self.assertEqual(adj.get_upper(), 1.0)
|
||||
self.assertEqual(adj.get_step_increment(), 0.05)
|
||||
self.assertEqual(adj.get_page_increment(), 0.25)
|
||||
|
||||
fake.set_volume(0.5)
|
||||
vol2 = scale.VolumeScale(fake)
|
||||
self.assertEqual(vol2.get_value(), 0.5)
|
||||
|
||||
def test_volume_scale_values(self):
|
||||
fake = FakePlayer(0, 15 * Gst.SECOND, 0.5)
|
||||
volume = scale.VolumeScale(fake)
|
||||
|
||||
volume.increment()
|
||||
self.assertEqual(fake.get_volume(), 0.55)
|
||||
self.assertEqual(volume.format_value(volume, 0.55), "55%")
|
||||
|
||||
volume.decrement()
|
||||
self.assertEqual(fake.get_volume(), 0.50)
|
||||
self.assertEqual(volume.format_value(volume, 0.50), "50%")
|
||||
|
||||
|
||||
class TestScaleButton(unittest.TestCase):
|
||||
def test_scale_button(self):
|
||||
splus = scale.ScalePlus(0, 5, 1, 1)
|
||||
|
|
Loading…
Reference in New Issue