Commit 3e1ec750 authored by AndreiLisita's avatar AndreiLisita 🎮

ui: Add the SavestateListBoxRow widget

parent d9fb6bbf
......@@ -8,6 +8,10 @@
background-color: @theme_base_color;
}
.savestate-row {
padding: 0px;
}
gamesgamethumbnail {
background-color: mix (@theme_base_color, @theme_bg_color, 0.5);
border-width: 1px;
......
......@@ -48,6 +48,7 @@
<file preprocess="xml-stripblanks">ui/reset-controller-mapping-dialog.ui</file>
<file preprocess="xml-stripblanks">ui/resume-dialog.ui</file>
<file preprocess="xml-stripblanks">ui/resume-failed-dialog.ui</file>
<file preprocess="xml-stripblanks">ui/savestate-listbox-row.ui</file>
<file preprocess="xml-stripblanks">ui/search-bar.ui</file>
<file preprocess="xml-stripblanks">ui/shortcuts-window.ui</file>
</gresource>
......
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="3.24"/>
<template class="GamesSavestateListBoxRow" parent="GtkListBoxRow">
<property name="visible">true</property>
<child>
<object class="GtkBox">
<property name="visible">true</property>
<child>
<object class="GtkImage" id="image">
<property name="visible">true</property>
<style>
<class name="savestate-thumbnail"/>
</style>
</object>
</child>
<child>
<object class="GtkBox">
<property name="visible">true</property>
<property name="orientation">vertical</property>
<property name="margin">12</property>
<property name="spacing">12</property>
<property name="valign">center</property>
<child>
<object class="GtkLabel" id="name_label">
<property name="visible">true</property>
<property name="wrap">true</property>
<property name="xalign">0</property>
<attributes>
<!-- "1.2" is the value of "large" -->
<attribute name="scale" value="1.2"/>
</attributes>
</object>
</child>
<child>
<object class="GtkLabel" id="date_label">
<property name="visible">true</property>
<property name="wrap">true</property>
<property name="xalign">0</property>
<style>
<class name="dim-label"/>
</style>
<attributes>
<attribute name="scale" value="0.8"/>
</attributes>
</object>
</child>
</object>
</child>
</object>
</child>
<style>
<class name="savestate-row"/>
</style>
</template>
</interface>
......@@ -180,6 +180,7 @@ vala_sources = [
'ui/reset-controller-mapping-dialog.vala',
'ui/resume-dialog.vala',
'ui/resume-failed-dialog.vala',
'ui/savestate-listbox-row.vala',
'ui/search-bar.vala',
'ui/shortcuts-window.vala',
'ui/ui-view.vala',
......
// This file is part of GNOME Games. License: GPL-3.0+.
[GtkTemplate (ui = "/org/gnome/Games/ui/savestate-listbox-row.ui")]
private class Games.SavestateListBoxRow : Gtk.ListBoxRow {
[GtkChild]
private Gtk.Image image;
[GtkChild]
private Gtk.Label name_label;
[GtkChild]
private Gtk.Label date_label;
private Savestate _savestate;
public Savestate savestate {
get { return _savestate; }
set {
_savestate = value;
if (savestate.is_automatic ())
name_label.label = _("Autosave");
else {
name_label.label = savestate.get_name ();
}
var creation_date = savestate.get_creation_date ();
/* Translators: this is the day number followed
* 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;
// Load the savestate thumbnail
var screenshot_path = savestate.get_screenshot_path ();
var screenshot_width = 0;
var screenshot_height = 0;
Gdk.Pixbuf.get_file_info (screenshot_path, out screenshot_width, out screenshot_height);
var 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;
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 (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);
}
Gdk.Pixbuf thumbnail = null;
try {
thumbnail = new Gdk.Pixbuf.from_file_at_scale (screenshot_path, thumbnail_width, thumbnail_height, false);
image.set_from_pixbuf (thumbnail);
}
catch (Error e) {
warning ("Failed to load savestate thumbnail: %s", e.message);
}
}
}
public SavestateListBoxRow (Savestate savestate) {
Object (savestate: savestate);
}
}
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