cover: Fix covers

This commit is contained in:
Vladimir Vaskov 2025-06-10 19:49:51 +03:00
parent 51e2606bf1
commit 2672bf3253
No known key found for this signature in database
GPG key ID: CECAF75A5D478132
2 changed files with 44 additions and 15 deletions

View file

@ -5,7 +5,17 @@ template $CassetteCoverImage: Frame {
halign: center; halign: center;
valign: center; valign: center;
Image real_image { Stack stack {
icon-size: large; hhomogeneous: true;
StackPage {
name: "placeholder";
child: Image placeholder_image {
icon-size: large;
icon-name: "audio-x-generic-symbolic";
width-request: bind template.image-widget-size;
height-request: bind template.image-widget-size;
};
}
} }
} }

View file

@ -24,7 +24,9 @@ using Gee;
public sealed class Cassette.CoverImage : Gtk.Frame { public sealed class Cassette.CoverImage : Gtk.Frame {
[GtkChild] [GtkChild]
unowned Gtk.Image real_image; unowned Gtk.Image placeholder_image;
[GtkChild]
unowned Gtk.Stack stack;
public CoverSize cover_size { get; set; default = CoverSize.BIG; } public CoverSize cover_size { get; set; default = CoverSize.BIG; }
@ -33,25 +35,20 @@ public sealed class Cassette.CoverImage : Gtk.Frame {
/** /**
* Easy way to set both width and height of the cover widget. * Easy way to set both width and height of the cover widget.
*/ */
public int image_widget_size { public int image_widget_size { get; set; }
get {
return real_image.pixel_size;
}
set {
real_image.pixel_size = value;
}
}
construct { construct {
notify["cover-size"].connect (() => { notify["cover-size"].connect (() => {
switch (cover_size) { switch (cover_size) {
case CoverSize.SMALL: case CoverSize.SMALL:
real_image.icon_size = Gtk.IconSize.NORMAL; placeholder_image.icon_size = Gtk.IconSize.NORMAL;
image_widget_size = 60;
add_css_class ("small-border-radius"); add_css_class ("small-border-radius");
break; break;
case CoverSize.BIG: case CoverSize.BIG:
real_image.icon_size = Gtk.IconSize.LARGE; placeholder_image.icon_size = Gtk.IconSize.LARGE;
image_widget_size = 200;
remove_css_class ("small-border-radius"); remove_css_class ("small-border-radius");
break; break;
@ -62,13 +59,11 @@ public sealed class Cassette.CoverImage : Gtk.Frame {
} }
public void init_content (HasCover yam_object) { public void init_content (HasCover yam_object) {
real_image.icon_name = "audio-x-generic-symbolic";
this.yam_object = yam_object; this.yam_object = yam_object;
add_css_class ("card"); add_css_class ("card");
} }
public void clear () { public void clear () {
real_image.icon_name = null;
yam_object = null; yam_object = null;
remove_css_class ("card"); remove_css_class ("card");
} }
@ -81,7 +76,31 @@ public sealed class Cassette.CoverImage : Gtk.Frame {
pixbuf_buffer = yield Cachier.get_image (yam_object, (int) cover_size); pixbuf_buffer = yield Cachier.get_image (yam_object, (int) cover_size);
if (pixbuf_buffer != null) { if (pixbuf_buffer != null) {
var real_image = new Gtk.Image ();
real_image.set_from_paintable (Gdk.Texture.for_pixbuf (pixbuf_buffer)); real_image.set_from_paintable (Gdk.Texture.for_pixbuf (pixbuf_buffer));
bind_property (
"image-widget-size",
real_image,
"width-request",
GLib.BindingFlags.SYNC_CREATE
);
bind_property (
"image-widget-size",
real_image,
"height-request",
GLib.BindingFlags.SYNC_CREATE
);
bind_property (
"image-widget-size",
real_image,
"pixel-size",
GLib.BindingFlags.SYNC_CREATE
);
stack.add_child (real_image);
stack.visible_child = real_image;
} }
} }
} }