diff --git a/src/m64py/core/core.py b/src/m64py/core/core.py index e36ca95..ce3a715 100644 --- a/src/m64py/core/core.py +++ b/src/m64py/core/core.py @@ -40,9 +40,11 @@ def debug_callback(context, level, message): def state_callback(context, param, value): if param == M64CORE_VIDEO_SIZE: - sys.stderr.write("%s: %s: %s\n" % (context, "M64CORE_VIDEO_SIZE", value)) + #sys.stderr.write("%s: %s: %s\n" % (context, "M64CORE_VIDEO_SIZE", value)) + pass elif param == M64CORE_VIDEO_MODE: - sys.stderr.write("%s: %s: %s\n" % (context, "M64CORE_VIDEO_MODE", value)) + #sys.stderr.write("%s: %s: %s\n" % (context, "M64CORE_VIDEO_MODE", value)) + pass DEBUGFUNC = C.CFUNCTYPE(None, C.c_char_p, C.c_int, C.c_char_p) STATEFUNC = C.CFUNCTYPE(None, C.c_char_p, C.c_int, C.c_int) @@ -220,9 +222,9 @@ class Core: plugin_name = os.path.basename(plugin_path) self.plugin_map[plugin_type][plugin_name] = (plugin_handle, plugin_path, PLUGIN_NAME[plugin_type], plugin_desc, plugin_version) - self.plugin_startup(plugin_handle, PLUGIN_NAME[plugin_type]) + self.plugin_startup(plugin_handle, PLUGIN_NAME[plugin_type], plugin_desc) - def plugin_startup(self, handle, name): + def plugin_startup(self, handle, name, desc): """This function initializes plugin for use by allocating memory, creating data structures, and loading the configuration data.""" rval = handle.PluginStartup(C.c_void_p(self.m64p._handle), @@ -230,7 +232,7 @@ class Core: if rval not in [M64ERR_SUCCESS, M64ERR_ALREADY_INIT]: log.debug("plugin_startup()") log.warn(self.error_message(rval)) - log.warn("%s plugin failed to start." % (name)) + log.warn("%s failed to start." % (desc)) def plugin_shutdown(self, handle): """This function destroys data structures and releases @@ -271,7 +273,7 @@ class Core: (plugin_handle, plugin_path, plugin_name, plugin_desc, plugin_version) = plugin_map - self.plugin_startup(plugin_handle, plugin_name) + self.plugin_startup(plugin_handle, plugin_name, plugin_desc) rval = self.m64p.CoreAttachPlugin( C.c_int(plugin_type), C.c_void_p(plugin_handle._handle)) diff --git a/src/m64py/core/defs.py b/src/m64py/core/defs.py index f7e3df3..d661939 100644 --- a/src/m64py/core/defs.py +++ b/src/m64py/core/defs.py @@ -20,7 +20,7 @@ CORE_NAME = "mupen64plus" CORE_API_VERSION = 0x20001 CONFIG_API_VERSION = 0x20000 MINIMUM_CORE_VERSION = 0x016300 -FRONTEND_VERSION = "0.1.1" +FRONTEND_VERSION = "0.1.2" SIZE_1X = (320, 240) SIZE_2X = (640, 480) @@ -183,7 +183,7 @@ class m64p_2d_size(C.Structure): ('uiHeight', C.c_uint) ] -FuncInit =C.CFUNCTYPE(m64p_error) +FuncInit = C.CFUNCTYPE(m64p_error) FuncQuit = C.CFUNCTYPE(m64p_error) FuncListModes = C.CFUNCTYPE(m64p_error, C.POINTER(m64p_2d_size), C.POINTER(C.c_int)) FuncSetMode = C.CFUNCTYPE(m64p_error, C.c_int, C.c_int, C.c_int, C.c_int) @@ -192,7 +192,8 @@ FuncGLSetAttr = C.CFUNCTYPE(m64p_error, m64p_GLattr, C.c_int) FuncGLGetAttr = C.CFUNCTYPE(m64p_error, m64p_GLattr, C.POINTER(C.c_int)) FuncGLSwapBuf = C.CFUNCTYPE(m64p_error) FuncSetCaption = C.CFUNCTYPE(m64p_error, C.c_char_p) -FuncToggleFS= C.CFUNCTYPE(m64p_error) +FuncToggleFS = C.CFUNCTYPE(m64p_error) +FuncResizeWindow = C.CFUNCTYPE(m64p_error, C.c_int, C.c_int) class m64p_video_extension_functions(C.Structure): _fields_ = [ @@ -207,4 +208,5 @@ class m64p_video_extension_functions(C.Structure): ('VidExtFuncGLSwapBuf', FuncGLSwapBuf), ('VidExtFuncSetCaption', FuncSetCaption), ('VidExtFuncToggleFS', FuncToggleFS), + ('VidExtFuncResizeWindow', FuncResizeWindow) ] diff --git a/src/m64py/core/vidext.py b/src/m64py/core/vidext.py index bb750c9..9dc01ce 100644 --- a/src/m64py/core/vidext.py +++ b/src/m64py/core/vidext.py @@ -149,9 +149,14 @@ class Video(): self.widget.swapBuffers() return M64ERR_SUCCESS + def resize_window(self, width, height): + """Called when the video plugin has resized its OpenGL + output viewport in response to a ResizeVideoOutput() call""" + return M64ERR_SUCCESS + video = Video() vidext = m64p_video_extension_functions() -vidext.Functions = 10 +vidext.Functions = 11 vidext.VidExtFuncInit = FuncInit(video.init) vidext.VidExtFuncQuit = FuncQuit(video.quit) vidext.VidExtFuncListModes = FuncListModes(video.list_fullscreen_modes) @@ -162,3 +167,4 @@ vidext.VidExtFuncGLGetAttr = FuncGLGetAttr(video.gl_get_attr) vidext.VidExtFuncGLSwapBuf = FuncGLSwapBuf(video.gl_swap_buf) vidext.VidExtFuncSetCaption = FuncSetCaption(video.set_caption) vidext.VidExtFuncToggleFS = FuncToggleFS(video.toggle_fs) +vidext.VidExtFuncResizeWindow = FuncResizeWindow(video.resize_window) diff --git a/src/m64py/frontend/mainwindow.py b/src/m64py/frontend/mainwindow.py index 8589b1a..fc5344b 100644 --- a/src/m64py/frontend/mainwindow.py +++ b/src/m64py/frontend/mainwindow.py @@ -101,10 +101,14 @@ class MainWindow(QMainWindow, Ui_MainWindow): if self.worker.use_vidext and self.worker.m64p.get_handle(): # FIXME event.ignore() doesn't work on windows if not sys.platform == "win32": - width, height = self.keep_aspect(size) + if not self.window().isFullScreen(): + width, height = self.keep_aspect(size) self.worker.m64p.config.open_section("Video-General") self.worker.m64p.config.set_parameter("ScreenWidth", width) self.worker.m64p.config.set_parameter("ScreenHeight", height) + if self.worker.state in (M64EMU_RUNNING, M64EMU_PAUSED): + self.worker.core_state_set( + M64CORE_VIDEO_SIZE, (width << 16) + height) self.set_sizes((width, height)) self.settings.qset.setValue("size", (width, height)) self.resize(width, height + self.widgets_height) diff --git a/src/m64py/frontend/romlist.py b/src/m64py/frontend/romlist.py index 752c356..a5fdb04 100644 --- a/src/m64py/frontend/romlist.py +++ b/src/m64py/frontend/romlist.py @@ -70,7 +70,7 @@ class ROMList(QMainWindow, Ui_ROMList): def init(self): self.read_rom_list() self.roms = self.qset.value("rom_list", []) - if bool(self.qset.value("show_available", 0)): + if bool(int(self.qset.value("show_available", 0))): self.add_available_items(self.roms) else: self.add_items() diff --git a/src/m64py/frontend/settings.py b/src/m64py/frontend/settings.py index ec669d5..5beabfa 100644 --- a/src/m64py/frontend/settings.py +++ b/src/m64py/frontend/settings.py @@ -225,7 +225,7 @@ class Settings(QDialog, Ui_Settings): if tooltip: self.checkFullscreen.setToolTip(tooltip) - enable_vidext = bool(self.qset.value("enable_vidext", 1)) + enable_vidext = bool(int(self.qset.value("enable_vidext", 1))) self.checkEnableVidExt.setChecked(enable_vidext) def set_core(self): @@ -281,8 +281,7 @@ class Settings(QDialog, Ui_Settings): width, height = self.comboResolution.currentText().split("x") self.m64p.config.set_parameter("ScreenWidth", int(width)) self.m64p.config.set_parameter("ScreenHeight", int(height)) - self.m64p.config.set_parameter("Fullscreen", - self.checkFullscreen.isChecked()) + self.m64p.config.set_parameter("Fullscreen", self.checkFullscreen.isChecked()) self.qset.setValue("enable_vidext", int(self.checkEnableVidExt.isChecked())) def save_core(self): diff --git a/src/m64py/frontend/worker.py b/src/m64py/frontend/worker.py index c0872ea..d555dd3 100644 --- a/src/m64py/frontend/worker.py +++ b/src/m64py/frontend/worker.py @@ -39,8 +39,8 @@ class Worker(QThread): self.m64p = Core() self.video = video self.settings = Settings(self.parent) - self.use_vidext = bool( - self.settings.qset.value("enable_vidext", 1)) + self.use_vidext = bool(int( + self.settings.qset.value("enable_vidext", 1))) self.core_load() def init(self):