support window resizing

This commit is contained in:
gen2brain 2013-06-03 22:02:33 +02:00
parent d52c7cc669
commit d84815c4a7
7 changed files with 30 additions and 17 deletions

View file

@ -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))

View file

@ -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)
@ -193,6 +193,7 @@ 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)
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)
]

View file

@ -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)

View file

@ -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":
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)

View file

@ -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()

View file

@ -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):

View file

@ -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):