nowplaying: Remove the Gtk.Frame from the Artwork
All I needed the frame for was to add rounded corners to the Gtk.Picture, but this had some problems with the Frame expanding beyond the edges of the picture in some cases. I can get the same effect by adding the "card" css class to the Picture so hopefully this will work better. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
1f434358de
commit
087c378e59
|
@ -8,39 +8,40 @@ from .. import gsetup
|
||||||
FALLBACK_RESOURCE = f"{gsetup.RESOURCE_ICONS}/emmental.svg"
|
FALLBACK_RESOURCE = f"{gsetup.RESOURCE_ICONS}/emmental.svg"
|
||||||
|
|
||||||
|
|
||||||
class Artwork(Gtk.Frame):
|
class Artwork(Gtk.Picture):
|
||||||
"""Our custom Album Art widget that draws a border around a picture."""
|
"""Our custom Album Art widget takes a pathlib.Path."""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
"""Initialize the Album Art widget."""
|
"""Initialize the Album Art widget."""
|
||||||
super().__init__(margin_top=6, margin_bottom=6, margin_start=6,
|
super().__init__(content_fit=Gtk.ContentFit.CONTAIN,
|
||||||
margin_end=6, halign=Gtk.Align.CENTER,
|
margin_top=6, margin_bottom=6,
|
||||||
valign=Gtk.Align.CENTER)
|
margin_start=6, margin_end=6,
|
||||||
self._picture = Gtk.Picture(content_fit=Gtk.ContentFit.CONTAIN)
|
halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER)
|
||||||
self._fullsize = Gtk.Picture(content_fit=Gtk.ContentFit.FILL)
|
self._fullsize = Gtk.Picture(content_fit=Gtk.ContentFit.FILL)
|
||||||
self._popover = Gtk.Popover(child=self._fullsize)
|
|
||||||
self._clicked = Gtk.GestureClick()
|
|
||||||
|
|
||||||
|
self._popover = Gtk.Popover(child=self._fullsize)
|
||||||
|
self._popover.set_parent(self)
|
||||||
|
|
||||||
|
self._clicked = Gtk.GestureClick()
|
||||||
self._clicked.connect("released", self.clicked)
|
self._clicked.connect("released", self.clicked)
|
||||||
self.add_controller(self._clicked)
|
self.add_controller(self._clicked)
|
||||||
|
|
||||||
self._popover.set_parent(self)
|
self.add_css_class("card")
|
||||||
self.set_child(self._picture)
|
|
||||||
self.filepath = None
|
self.filepath = None
|
||||||
|
|
||||||
@GObject.Property(type=GObject.TYPE_PYOBJECT)
|
@GObject.Property(type=GObject.TYPE_PYOBJECT)
|
||||||
def filepath(self) -> pathlib.Path:
|
def filepath(self) -> pathlib.Path:
|
||||||
"""Get the current artwork path."""
|
"""Get the current artwork path."""
|
||||||
name = self._picture.get_file().get_parse_name()
|
name = self.get_file().get_parse_name()
|
||||||
return None if name.startswith("resource:") else pathlib.Path(name)
|
return None if name.startswith("resource:") else pathlib.Path(name)
|
||||||
|
|
||||||
@filepath.setter
|
@filepath.setter
|
||||||
def filepath(self, path: pathlib.Path) -> None:
|
def filepath(self, path: pathlib.Path) -> None:
|
||||||
if path is not None:
|
if path is not None:
|
||||||
self._picture.set_filename(str(path))
|
self.set_filename(str(path))
|
||||||
self._fullsize.set_filename(str(path))
|
self._fullsize.set_filename(str(path))
|
||||||
else:
|
else:
|
||||||
self._picture.set_resource(FALLBACK_RESOURCE)
|
self.set_resource(FALLBACK_RESOURCE)
|
||||||
self._fullsize.set_resource(FALLBACK_RESOURCE)
|
self._fullsize.set_resource(FALLBACK_RESOURCE)
|
||||||
|
|
||||||
def clicked(self, gesture: Gtk.GestureClick, n_press: int,
|
def clicked(self, gesture: Gtk.GestureClick, n_press: int,
|
||||||
|
|
|
@ -21,7 +21,9 @@ class TestArtwork(unittest.TestCase):
|
||||||
|
|
||||||
def test_init(self):
|
def test_init(self):
|
||||||
"""Test that the artwork widget is configured correctly."""
|
"""Test that the artwork widget is configured correctly."""
|
||||||
self.assertIsInstance(self.artwork, Gtk.Frame)
|
self.assertIsInstance(self.artwork, Gtk.Picture)
|
||||||
|
self.assertEqual(self.artwork.get_content_fit(),
|
||||||
|
Gtk.ContentFit.CONTAIN)
|
||||||
|
|
||||||
self.assertEqual(self.artwork.get_halign(), Gtk.Align.CENTER)
|
self.assertEqual(self.artwork.get_halign(), Gtk.Align.CENTER)
|
||||||
self.assertEqual(self.artwork.get_valign(), Gtk.Align.CENTER)
|
self.assertEqual(self.artwork.get_valign(), Gtk.Align.CENTER)
|
||||||
|
@ -31,27 +33,24 @@ class TestArtwork(unittest.TestCase):
|
||||||
self.assertEqual(self.artwork.get_margin_start(), 6)
|
self.assertEqual(self.artwork.get_margin_start(), 6)
|
||||||
self.assertEqual(self.artwork.get_margin_end(), 6)
|
self.assertEqual(self.artwork.get_margin_end(), 6)
|
||||||
|
|
||||||
def test_picture(self):
|
self.assertTrue(self.artwork.has_css_class("card"))
|
||||||
"""Test that the artwork picture is configured correctly."""
|
|
||||||
self.assertIsInstance(self.artwork._picture, Gtk.Picture)
|
|
||||||
self.assertEqual(self.artwork._picture.get_content_fit(),
|
|
||||||
Gtk.ContentFit.CONTAIN)
|
|
||||||
self.assertEqual(self.artwork.get_child(), self.artwork._picture)
|
|
||||||
|
|
||||||
|
def test_filepath(self):
|
||||||
|
"""Test that the filepath property works as expected."""
|
||||||
self.assertIsNone(self.artwork.filepath)
|
self.assertIsNone(self.artwork.filepath)
|
||||||
self.assertIsNotNone(self.artwork._picture.get_paintable())
|
self.assertIsNotNone(self.artwork.get_paintable())
|
||||||
self.assertEqual(self.artwork._picture.get_file().get_parse_name(),
|
self.assertEqual(self.artwork.get_file().get_parse_name(),
|
||||||
f"resource://{self.fallback}")
|
f"resource://{self.fallback}")
|
||||||
|
|
||||||
self.artwork.filepath = tests.util.COVER_JPG
|
self.artwork.filepath = tests.util.COVER_JPG
|
||||||
self.assertIsNotNone(self.artwork._picture.get_paintable())
|
self.assertIsNotNone(self.artwork.get_paintable())
|
||||||
self.assertEqual(self.artwork._picture.get_file().get_parse_name(),
|
self.assertEqual(self.artwork.get_file().get_parse_name(),
|
||||||
str(tests.util.COVER_JPG))
|
str(tests.util.COVER_JPG))
|
||||||
self.assertEqual(self.artwork.filepath, tests.util.COVER_JPG)
|
self.assertEqual(self.artwork.filepath, tests.util.COVER_JPG)
|
||||||
|
|
||||||
self.artwork.filepath = None
|
self.artwork.filepath = None
|
||||||
self.assertIsNotNone(self.artwork._picture.get_paintable())
|
self.assertIsNotNone(self.artwork.get_paintable())
|
||||||
self.assertEqual(self.artwork._picture.get_file().get_parse_name(),
|
self.assertEqual(self.artwork.get_file().get_parse_name(),
|
||||||
f"resource://{self.fallback}")
|
f"resource://{self.fallback}")
|
||||||
|
|
||||||
def test_fullsize(self):
|
def test_fullsize(self):
|
||||||
|
|
Loading…
Reference in New Issue