Create GameCover class

This commit is contained in:
kramo
2023-04-11 12:33:42 +02:00
parent 3e495283b0
commit 3c6639ae07
6 changed files with 64 additions and 17 deletions

View File

@@ -25,6 +25,7 @@ import sys
from gi.repository import GdkPixbuf, Gio, Gtk from gi.repository import GdkPixbuf, Gio, Gtk
from .game_cover import GameCover
from .save_game import save_game from .save_game import save_game
@@ -57,9 +58,9 @@ class game(Gtk.Box): # pylint: disable=invalid-name
self.removed = "removed" in data self.removed = "removed" in data
self.blacklisted = "blacklisted" in data self.blacklisted = "blacklisted" in data
self.pixbuf = self.get_cover() self.game_cover = GameCover(self.cover, self.get_cover())
self.pixbuf = self.game_cover.get_pixbuf()
self.cover.set_pixbuf(self.pixbuf)
self.title.set_label(self.name) self.title.set_label(self.name)
self.event_contoller_motion = Gtk.EventControllerMotion.new() self.event_contoller_motion = Gtk.EventControllerMotion.new()
@@ -134,8 +135,7 @@ class game(Gtk.Box): # pylint: disable=invalid-name
self.parent_widget.pixbufs[self.game_id] = pixbuf self.parent_widget.pixbufs[self.game_id] = pixbuf
return pixbuf return pixbuf
# Return the placeholder pixbuf return None
return self.parent_widget.placeholder_pixbuf
def show_play(self, _widget, *_unused): def show_play(self, _widget, *_unused):
self.play_revealer.set_reveal_child(True) self.play_revealer.set_reveal_child(True)

44
src/game_cover.py Normal file
View File

@@ -0,0 +1,44 @@
# game_cover.py
#
# Copyright 2022-2023 kramo
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# SPDX-License-Identifier: GPL-3.0-or-later
from gi.repository import GdkPixbuf
class GameCover:
placeholder_pixbuf = GdkPixbuf.Pixbuf.new_from_resource_at_scale(
"/hu/kramo/Cartridges/library_placeholder.svg", 400, 600, False
)
def __init__(self, picture, pixbuf=None, path=None):
self.picture = picture
self.pixbuf = pixbuf
if path:
self.pixbuf = GdkPixbuf.Pixbuf.new_from_file(path)
if not self.pixbuf:
self.pixbuf = self.placeholder_pixbuf
self.update_pixbuf()
def get_pixbuf(self):
return self.pixbuf
def update_pixbuf(self):
self.picture.set_pixbuf(self.pixbuf)

View File

@@ -22,6 +22,7 @@ cartridges_sources = [
'window.py', 'window.py',
'preferences.py', 'preferences.py',
'game.py', 'game.py',
'game_cover.py',
'utils/importer.py', 'utils/importer.py',
'utils/steamgriddb.py', 'utils/steamgriddb.py',
'utils/steam_parser.py', 'utils/steam_parser.py',

View File

@@ -24,6 +24,7 @@ import time
from gi.repository import Adw, GdkPixbuf, Gio, GLib, GObject, Gtk from gi.repository import Adw, GdkPixbuf, Gio, GLib, GObject, Gtk
from .game_cover import GameCover
from .create_dialog import create_dialog from .create_dialog import create_dialog
from .save_cover import save_cover from .save_cover import save_cover
from .save_game import save_game from .save_game import save_game
@@ -61,7 +62,8 @@ def create_details_window(parent_widget, game_id=None):
nonlocal pixbuf nonlocal pixbuf
nonlocal cover_deleted nonlocal cover_deleted
cover.set_pixbuf(parent_widget.placeholder_pixbuf) GameCover(cover)
cover_button_delete_revealer.set_reveal_child(False) cover_button_delete_revealer.set_reveal_child(False)
pixbuf = None pixbuf = None
cover_deleted = True cover_deleted = True
@@ -74,16 +76,18 @@ def create_details_window(parent_widget, game_id=None):
margin_end=40, margin_end=40,
) )
cover = Gtk.Picture.new()
if not game_id: if not game_id:
window.set_title(_("Add New Game")) window.set_title(_("Add New Game"))
cover = Gtk.Picture.new_for_pixbuf(parent_widget.placeholder_pixbuf) GameCover(cover)
name = Gtk.Entry() name = Gtk.Entry()
developer = Gtk.Entry() developer = Gtk.Entry()
executable = Gtk.Entry() executable = Gtk.Entry()
apply_button = Gtk.Button.new_with_label(_("Confirm")) apply_button = Gtk.Button.new_with_label(_("Confirm"))
else: else:
window.set_title(_("Edit Game Details")) window.set_title(_("Edit Game Details"))
cover = Gtk.Picture.new_for_pixbuf(parent_widget.games[game_id].pixbuf) GameCover(cover, parent_widget.games[game_id].pixbuf)
developer = Gtk.Entry.new_with_buffer( developer = Gtk.Entry.new_with_buffer(
Gtk.EntryBuffer.new(games[game_id].developer, -1) Gtk.EntryBuffer.new(games[game_id].developer, -1)
) )
@@ -93,7 +97,7 @@ def create_details_window(parent_widget, game_id=None):
) )
apply_button = Gtk.Button.new_with_label(_("Apply")) apply_button = Gtk.Button.new_with_label(_("Apply"))
if parent_widget.games[game_id].pixbuf != parent_widget.placeholder_pixbuf: if parent_widget.games[game_id].pixbuf:
cover_button_delete_revealer.set_reveal_child(True) cover_button_delete_revealer.set_reveal_child(True)
image_filter = Gtk.FileFilter(name=_("Images")) image_filter = Gtk.FileFilter(name=_("Images"))
@@ -232,7 +236,7 @@ def create_details_window(parent_widget, game_id=None):
) )
cover_button_delete_revealer.set_reveal_child(True) cover_button_delete_revealer.set_reveal_child(True)
cover.set_pixbuf(pixbuf) GameCover(cover, pixbuf)
def close_window(_widget, _callback=None): def close_window(_widget, _callback=None):
window.close() window.close()

View File

@@ -60,7 +60,7 @@ def get_game(task, current_time, parent_widget, row):
task.return_value((values, None)) task.return_value((values, None))
return return
cover_pixbuf = GdkPixbuf.Pixbuf.new_from_stream_at_scale( game_cover = GdkPixbuf.Pixbuf.new_from_stream_at_scale(
tmp_file.read(), 2, 2, False tmp_file.read(), 2, 2, False
).scale_simple(400, 600, GdkPixbuf.InterpType.BILINEAR) ).scale_simple(400, 600, GdkPixbuf.InterpType.BILINEAR)
@@ -71,7 +71,7 @@ def get_game(task, current_time, parent_widget, row):
GdkPixbuf.InterpType.BILINEAR, GdkPixbuf.InterpType.BILINEAR,
) )
itch_pixbuf.composite( itch_pixbuf.composite(
cover_pixbuf, game_cover,
0, 0,
(600 - itch_pixbuf.get_height()) / 2, (600 - itch_pixbuf.get_height()) / 2,
itch_pixbuf.get_width(), itch_pixbuf.get_width(),
@@ -84,9 +84,9 @@ def get_game(task, current_time, parent_widget, row):
255, 255,
) )
else: else:
cover_pixbuf = None game_cover = None
task.return_value((values, cover_pixbuf)) task.return_value((values, game_cover))
def get_games_async(parent_widget, rows, importer): def get_games_async(parent_widget, rows, importer):

View File

@@ -25,6 +25,7 @@ from shutil import rmtree
from gi.repository import Adw, GdkPixbuf, Gio, GLib, Gtk from gi.repository import Adw, GdkPixbuf, Gio, GLib, Gtk
from .game_cover import GameCover
from .game import game from .game import game
from .get_games import get_games from .get_games import get_games
from .save_game import save_game from .save_game import save_game
@@ -104,9 +105,6 @@ class CartridgesWindow(Adw.ApplicationWindow):
self.overview.set_clip_overlay(self.overview_box, False) self.overview.set_clip_overlay(self.overview_box, False)
self.schema = Gio.Settings.new("hu.kramo.Cartridges") self.schema = Gio.Settings.new("hu.kramo.Cartridges")
self.placeholder_pixbuf = GdkPixbuf.Pixbuf.new_from_resource_at_scale(
"/hu/kramo/Cartridges/library_placeholder.svg", 400, 600, False
)
games = get_games(self) games = get_games(self)
for game_id in games: for game_id in games:
if "removed" in games[game_id]: if "removed" in games[game_id]:
@@ -284,7 +282,7 @@ class CartridgesWindow(Adw.ApplicationWindow):
self.active_game_id = game_id self.active_game_id = game_id
pixbuf = current_game.pixbuf pixbuf = current_game.pixbuf
self.overview_cover.set_pixbuf(pixbuf) GameCover(self.overview_cover, pixbuf)
self.scaled_pixbuf = pixbuf.scale_simple(2, 3, GdkPixbuf.InterpType.BILINEAR) self.scaled_pixbuf = pixbuf.scale_simple(2, 3, GdkPixbuf.InterpType.BILINEAR)
self.overview_blurred_cover.set_pixbuf(self.scaled_pixbuf) self.overview_blurred_cover.set_pixbuf(self.scaled_pixbuf)