Commit 8b933bde authored by Alexander Mikhaylenko's avatar Alexander Mikhaylenko

savestate-listbox-row: Use correct aspect ratio

Try to fetch aspect ratio from savestate. Since older savestates are not
going to have it, fall back to width/height for them.

Fixes #204
parent e9311ad3
......@@ -2,6 +2,8 @@
[GtkTemplate (ui = "/org/gnome/Games/ui/savestate-listbox-row.ui")]
private class Games.SavestateListBoxRow : Gtk.ListBoxRow {
public const int THUMBNAIL_SIZE = 64;
[GtkChild]
private Gtk.Image image;
[GtkChild]
......@@ -17,9 +19,8 @@ private class Games.SavestateListBoxRow : Gtk.ListBoxRow {
if (savestate.is_automatic ())
name_label.label = _("Autosave");
else {
else
name_label.label = savestate.get_name ();
}
var creation_date = savestate.get_creation_date ();
......@@ -27,8 +28,7 @@ private class Games.SavestateListBoxRow : Gtk.ListBoxRow {
* by the abbreviated month name followed by the year followed
* by a time in 24h format i.e. "3 Feb 2015 23:04:00" */
/* xgettext:no-c-format */
var creation_date_str = creation_date.format (_("%-e %b %Y %X"));
date_label.label = creation_date_str;
date_label.label = creation_date.format (_("%-e %b %Y %X"));
// Load the savestate thumbnail
var screenshot_path = savestate.get_screenshot_path ();
......@@ -37,27 +37,31 @@ private class Games.SavestateListBoxRow : Gtk.ListBoxRow {
Gdk.Pixbuf.get_file_info (screenshot_path, out screenshot_width, out screenshot_height);
var aspect_ratio = ((double) screenshot_width) / screenshot_height;
var aspect_ratio = (double) savestate.get_screenshot_aspect_ratio ();
// A fallback for migrated savestates
if (aspect_ratio == 0)
aspect_ratio = (double) screenshot_width / screenshot_height;
// Calculate the thumbnail width and height
const int thumbnail_max_width_height = 64;
var thumbnail_width = screenshot_width;
var thumbnail_height = screenshot_height;
var thumbnail_height = (int) (screenshot_width / aspect_ratio);
if (screenshot_width > screenshot_height && screenshot_width != thumbnail_max_width_height) {
thumbnail_width = thumbnail_max_width_height;
thumbnail_height = (int) (thumbnail_max_width_height / aspect_ratio);
if (thumbnail_width > thumbnail_height && thumbnail_width != THUMBNAIL_SIZE) {
thumbnail_width = THUMBNAIL_SIZE;
thumbnail_height = (int) (THUMBNAIL_SIZE / aspect_ratio);
}
if (screenshot_height > screenshot_width && screenshot_height != thumbnail_max_width_height) {
thumbnail_height = thumbnail_max_width_height;
thumbnail_width = (int) (thumbnail_max_width_height * aspect_ratio);
if (thumbnail_height > thumbnail_width && thumbnail_height != THUMBNAIL_SIZE) {
thumbnail_height = THUMBNAIL_SIZE;
thumbnail_width = (int) (THUMBNAIL_SIZE * aspect_ratio);
}
Gdk.Pixbuf thumbnail = null;
try {
thumbnail = new Gdk.Pixbuf.from_file_at_scale (screenshot_path, thumbnail_width, thumbnail_height, false);
var thumbnail = new Gdk.Pixbuf.from_file_at_scale (screenshot_path,
thumbnail_width,
thumbnail_height,
false);
image.set_from_pixbuf (thumbnail);
}
catch (Error e) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment