def get_pixbuf_for_game(game_slug, icon_type, is_installed=True): if icon_type.startswith("banner"): default_icon_path = os.path.join(datapath.get(), "media/default_banner.png") icon_path = datapath.get_banner_path(game_slug) elif icon_type.startswith("icon"): default_icon_path = os.path.join(datapath.get(), "media/default_icon.png") icon_path = datapath.get_icon_path(game_slug) else: logger.error("Invalid icon type '%s'", icon_type) return None size = IMAGE_SIZES[icon_type] pixbuf = get_pixbuf(icon_path, size, fallback=default_icon_path) if not is_installed: unavailable_game_overlay = os.path.join(datapath.get(), "media/unavailable.png") transparent_pixbuf = get_overlay(unavailable_game_overlay, size).copy() pixbuf.composite( transparent_pixbuf, 0, 0, size[0], size[1], 0, 0, 1, 1, GdkPixbuf.InterpType.NEAREST, 100, ) return transparent_pixbuf return pixbuf
def get_pixbuf_for_game(game_slug, icon_type, is_installed=True): if icon_type.startswith("banner"): default_icon_path = DEFAULT_BANNER icon_path = datapath.get_banner_path(game_slug) elif icon_type.startswith("icon"): default_icon_path = DEFAULT_ICON icon_path = datapath.get_icon_path(game_slug) else: logger.error("Invalid icon type '%s'", icon_type) return None size = IMAGE_SIZES[icon_type] pixbuf = get_pixbuf(icon_path, size, fallback=default_icon_path) if not is_installed: transparent_pixbuf = get_overlay(UNAVAILABLE_GAME_OVERLAY, size).copy() pixbuf.composite( transparent_pixbuf, 0, 0, size[0], size[1], 0, 0, 1, 1, GdkPixbuf.InterpType.NEAREST, 100, ) return transparent_pixbuf return pixbuf
def on_custom_image_select(self, widget, image_type): dialog = Gtk.FileChooserDialog( "Please choose a custom image", self, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) image_filter = Gtk.FileFilter() image_filter.set_name("Images") image_filter.add_pixbuf_formats() dialog.add_filter(image_filter) response = dialog.run() if response == Gtk.ResponseType.OK: image_path = dialog.get_filename() if image_type == 'banner': self.game.has_custom_banner = True dest_path = datapath.get_banner_path(self.game.slug) size = BANNER_SIZE file_format = 'jpeg' else: self.game.has_custom_icon = True dest_path = datapath.get_icon_path(self.game.slug) size = ICON_SIZE file_format = 'png' pixbuf = get_pixbuf(image_path, None, size) pixbuf.savev(dest_path, file_format, [], []) self._set_image(image_type) dialog.destroy()
def on_custom_image_select(self, widget, image_type): dialog = Gtk.FileChooserDialog("Please choose a custom image", self, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) image_filter = Gtk.FileFilter() image_filter.set_name("Images") image_filter.add_pixbuf_formats() dialog.add_filter(image_filter) response = dialog.run() if response == Gtk.ResponseType.OK: image_path = dialog.get_filename() if image_type == 'banner': self.game.has_custom_banner = True dest_path = datapath.get_banner_path(self.game.slug) size = BANNER_SIZE file_format = 'jpeg' else: self.game.has_custom_icon = True dest_path = datapath.get_icon_path(self.game.slug) size = ICON_SIZE file_format = 'png' pixbuf = get_pixbuf(image_path, None, size) pixbuf.savev(dest_path, file_format, [], []) self._set_image(image_type) dialog.destroy()
def on_custom_image_reset_clicked(self, widget, image_type): if image_type == 'banner': self.game.has_custom_banner = False dest_path = datapath.get_banner_path(self.game.slug) elif image_type == 'icon': self.game.has_custom_icon = False dest_path = datapath.get_icon_path(self.game.slug) else: raise ValueError('Unsupported image type %s', image_type) os.remove(dest_path) self._set_image(image_type)
def get_pixbuf_for_game(game_slug, icon_type, is_installed=True): if icon_type in ("banner", "banner_small"): size = BANNER_SIZE if icon_type == "banner" else BANNER_SMALL_SIZE default_icon_path = DEFAULT_BANNER icon_path = datapath.get_banner_path(game_slug) elif icon_type == "icon": size = ICON_SIZE default_icon_path = DEFAULT_ICON icon_path = datapath.get_icon_path(game_slug) pixbuf = get_pixbuf(icon_path, default_icon_path, size) if not is_installed: transparent_pixbuf = get_overlay(size).copy() pixbuf.composite(transparent_pixbuf, 0, 0, size[0], size[1], 0, 0, 1, 1, GdkPixbuf.InterpType.NEAREST, 100) return transparent_pixbuf return pixbuf
def get_pixbuf_for_game(game_slug, icon_type, is_installed=True): if icon_type in ("banner", "banner_small"): default_icon_path = DEFAULT_BANNER icon_path = datapath.get_banner_path(game_slug) elif icon_type in ("icon", "icon_small"): default_icon_path = DEFAULT_ICON icon_path = datapath.get_icon_path(game_slug) else: logger.error("Invalid icon type '%s'", icon_type) return size = IMAGE_SIZES[icon_type] pixbuf = get_pixbuf(icon_path, default_icon_path, size) if not is_installed: transparent_pixbuf = get_overlay(size).copy() pixbuf.composite(transparent_pixbuf, 0, 0, size[0], size[1], 0, 0, 1, 1, GdkPixbuf.InterpType.NEAREST, 100) return transparent_pixbuf return pixbuf
def play(self): launch_info = {} launch_info["env"] = self.get_env(os_env=False) game_data = pga.get_game_by_field(self.config.game_config_id, "configpath") command = self.launch_args if self.is_native: if not self.runner_config.get("splore"): command.append("-run") cartPath = self.cart_path if not os.path.exists(cartPath): return {"error": "FILE_NOT_FOUND", "file": cartPath} command.append(cartPath) else: command.append("--name") command.append(game_data.get("name") + " - PICO-8") icon = datapath.get_icon_path(game_data.get("slug")) if not os.path.exists(icon): icon = os.path.join(datapath.get(), "media/runner_icons/pico8.png") command.append("--icon") command.append(icon) webargs = { "cartridge": self.cart_path, "engine": self.engine_path, "fullscreen": self.runner_config.get("fullscreen") is True, } command.append("--execjs") command.append("load_config(" + json.dumps(webargs) + ")") launch_info["command"] = command return launch_info
def play(self): url = self.game_config.get('main_file') if not url: return {'error': 'CUSTOM', 'text': ("The web address is empty, \n" "verify the game's configuration."), } # check if it's an url or a file isUrl = urlparse(url).scheme is not '' if not isUrl: if not os.path.exists(url): return {'error': 'CUSTOM', 'text': ("The file " + url + " does not exist, \n" "verify the game's configuration."), } url = 'file://' + url game_data = pga.get_game_by_field(self.config.game_config_id, 'configpath') # keep the old behavior from browser runner, but with support for extra arguments! if self.runner_config.get("external_browser"): # is it possible to disable lutris runtime here? browser = self.runner_config.get('custom_browser_executable') or 'xdg-open' args = self.runner_config.get('custom_browser_args') if args == '': args = '"$GAME"' arguments = string.Template(args).safe_substitute({ 'GAME': url, 'URL': url }) command = [browser] for arg in shlex.split(arguments): command.append(arg) return {'command': command} icon = datapath.get_icon_path(game_data.get('slug')) if not os.path.exists(icon): icon = DEFAULT_ICON command = [self.get_executable()] command.append(os.path.join(settings.RUNNER_DIR, 'web/electron/resources/app.asar')) command.append(url) command.append("--name") command.append(game_data.get('name')) command.append("--icon") command.append(icon) if self.runner_config.get("fullscreen"): command.append("--fullscreen") if self.runner_config.get("frameless"): command.append("--frameless") if self.runner_config.get("disable_resizing"): command.append("--disable-resizing") if self.runner_config.get("disable_menu_bar"): command.append("--disable-menu-bar") if self.runner_config.get("window_size"): command.append("--window-size") command.append(self.runner_config.get("window_size")) if self.runner_config.get("maximize_window"): command.append("--maximize-window") if self.runner_config.get("disable_scrolling"): command.append("--disable-scrolling") if self.runner_config.get("hide_cursor"): command.append("--hide-cursor") if self.runner_config.get("open_links"): command.append("--open-links") if self.runner_config.get("remove_margin"): command.append("--remove-margin") if self.runner_config.get("devtools"): command.append("--devtools") return {'command': command, 'env': self.get_env(False)}
def play(self): url = self.game_config.get('main_file') if not url: return { 'error': 'CUSTOM', 'text': ("The web address is empty, \n" "verify the game's configuration."), } # check if it's an url or a file isUrl = urlparse(url).scheme is not '' if not isUrl: if not os.path.exists(url): return { 'error': 'CUSTOM', 'text': ("The file " + url + " does not exist, \n" "verify the game's configuration."), } url = 'file://' + url game_data = pga.get_game_by_field(self.config.game_config_id, 'configpath') # keep the old behavior from browser runner, but with support for extra arguments! if self.runner_config.get("external_browser"): # is it possible to disable lutris runtime here? browser = self.runner_config.get( 'custom_browser_executable') or 'xdg-open' args = self.runner_config.get('custom_browser_args') if args == '': args = '"$GAME"' arguments = string.Template(args).safe_substitute({ 'GAME': url, 'URL': url }) command = [browser] for arg in shlex.split(arguments): command.append(arg) return {'command': command} icon = datapath.get_icon_path(game_data.get('slug')) if not os.path.exists(icon): icon = DEFAULT_ICON command = [self.get_executable()] command.append( os.path.join(settings.RUNNER_DIR, 'web/electron/resources/app.asar')) command.append(url) command.append("--name") command.append(game_data.get('name')) command.append("--icon") command.append(icon) if self.runner_config.get("fullscreen"): command.append("--fullscreen") if self.runner_config.get("frameless"): command.append("--frameless") if self.runner_config.get("disable_resizing"): command.append("--disable-resizing") if self.runner_config.get("disable_menu_bar"): command.append("--disable-menu-bar") if self.runner_config.get("window_size"): command.append("--window-size") command.append(self.runner_config.get("window_size")) if self.runner_config.get("maximize_window"): command.append("--maximize-window") if self.runner_config.get("disable_scrolling"): command.append("--disable-scrolling") if self.runner_config.get("hide_cursor"): command.append("--hide-cursor") if self.runner_config.get("open_links"): command.append("--open-links") if self.runner_config.get("remove_margin"): command.append("--remove-margin") if self.runner_config.get("devtools"): command.append("--devtools") return {'command': command, 'env': self.get_env(False)}