mirror of
https://github.com/Rosalie241/RMG.git
synced 2026-07-14 19:04:29 +02:00
Compare commits
2 Commits
windowsize
..
v0.8.9
| Author | SHA1 | Date | |
|---|---|---|---|
| 969d63f182 | |||
| c7a4e6c47a |
@@ -1,6 +1,6 @@
|
||||
# Maintainer: Rosalie Wanders <rosalie@mailbox.org>
|
||||
pkgname=rmg
|
||||
pkgver=0.8.8
|
||||
pkgver=0.8.9
|
||||
pkgrel=1
|
||||
pkgdesc="Rosalie's Mupen GUI"
|
||||
arch=('x86_64' 'aarch64')
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Name: RMG
|
||||
Version: 0.8.8
|
||||
Version: 0.8.9
|
||||
Release: %autorelease
|
||||
Summary: Rosalie's Mupen GUI
|
||||
|
||||
|
||||
@@ -29,6 +29,20 @@
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<releases>
|
||||
<release version="v0.8.9" date="2026-01-23" type="stable">
|
||||
<description>
|
||||
<p>Changes:</p>
|
||||
<ul>
|
||||
<li>Fix AppImage icon not working since v0.7.1 (thank you Samueru-sama)</li>
|
||||
<li>Fix desktop file causing a crash on Budgie (thank you jpleatherland)</li>
|
||||
<li>Fix memory pak from player 2, 3 and 4 not saving correctly</li>
|
||||
<li>Fix Star Wars - Rogue Squadron having missing geometry when using GLideN64</li>
|
||||
<li>Remove translations from the configuration GUI of GLideN64</li>
|
||||
<li>Add plugin settings shortcuts to the toolbar</li>
|
||||
<li>Update mupen64plus-video-GLideN64, SDL_net and SDL_GameControllerDB</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="v0.8.8" date="2025-11-16" type="stable">
|
||||
<description>
|
||||
<p>Changes:</p>
|
||||
|
||||
@@ -7,7 +7,7 @@ It offers a simple-to-use user interface.
|
||||
## Download
|
||||
|
||||
#### Windows
|
||||
You can download Rosalie's Mupen GUI on 
|
||||
You can download Rosalie's Mupen GUI on [Github Releases](https://github.com/Rosalie241/RMG/releases)
|
||||
|
||||
#### Linux
|
||||
You can download Rosalie's Mupen GUI on
|
||||
@@ -18,9 +18,7 @@ You can download Rosalie's Mupen GUI on
|
||||
|
||||
## Support
|
||||
|
||||
You can ask for help or report issues on
|
||||
* [Github](https://github.com/Rosalie241/RMG/issues/new)
|
||||
* [Discord](https://discord.gg/k9GuyJ2PpF)
|
||||
You can ask for help or report issues on [Github](https://github.com/Rosalie241/RMG/issues/new)
|
||||
|
||||
## License
|
||||
|
||||
|
||||
@@ -110,11 +110,6 @@ void DisplayWindow::closeWindow()
|
||||
m_bToggleFullscreen = false;
|
||||
}
|
||||
|
||||
void DisplayWindow::setInitialWindowSize(u32 width, u32 height)
|
||||
{
|
||||
m_initialWidth = width;
|
||||
m_initialHeight = height;
|
||||
}
|
||||
|
||||
void DisplayWindow::setWindowSize(u32 _width, u32 _height)
|
||||
{
|
||||
|
||||
@@ -17,7 +17,6 @@ public:
|
||||
bool changeWindow();
|
||||
bool resizeWindow();
|
||||
void closeWindow();
|
||||
void setInitialWindowSize(u32 width, u32 height);
|
||||
void setWindowSize(u32 _width, u32 _height);
|
||||
void setCaptureScreen(const char * const _strDirectory);
|
||||
void setToggleFullscreen() { m_bToggleFullscreen = true; }
|
||||
@@ -56,8 +55,6 @@ protected:
|
||||
bool m_bAdjustScreen = false;
|
||||
|
||||
u32 m_buffersSwapCount = 0;
|
||||
u32 m_initialWidth = 0;
|
||||
u32 m_initialHeight = 0;
|
||||
u32 m_width = 0;
|
||||
u32 m_height = 0;
|
||||
u32 m_heightOffset = 0;
|
||||
|
||||
+2
-2
@@ -90,8 +90,8 @@ bool DisplayWindowMupen64plus::_start()
|
||||
_setAttributes();
|
||||
|
||||
m_bFullscreen = config.video.fullscreen > 0;
|
||||
m_screenWidth = m_initialWidth > 0 ? m_initialWidth : config.video.windowedWidth;
|
||||
m_screenHeight = m_initialHeight > 0 ? m_initialHeight : config.video.windowedHeight;
|
||||
m_screenWidth = config.video.windowedWidth;
|
||||
m_screenHeight = config.video.windowedHeight;
|
||||
m_screenRefresh = config.video.fullscreenRefresh;
|
||||
|
||||
_getDisplaySize();
|
||||
|
||||
@@ -57,11 +57,6 @@ EXPORT void CALL SetRenderingCallback(void (*callback)(int))
|
||||
api().SetRenderingCallback(callback);
|
||||
}
|
||||
|
||||
EXPORT void CALL SetInitialVideoSize(int width, int height)
|
||||
{
|
||||
api().SetInitialVideoSize(width, height);
|
||||
}
|
||||
|
||||
EXPORT void CALL ResizeVideoOutput(int width, int height)
|
||||
{
|
||||
api().ResizeVideoOutput(width, height);
|
||||
|
||||
@@ -80,9 +80,6 @@ public:
|
||||
void FBGetFrameBufferInfo(void *pinfo);
|
||||
#else
|
||||
// MupenPlus
|
||||
#ifdef M64P_GLIDENUI
|
||||
void SetInitialVideoSize(int width, int height);
|
||||
#endif
|
||||
void ResizeVideoOutput(int _Width, int _Height);
|
||||
void ReadScreen2(void * _dest, int * _width, int * _height, int _front);
|
||||
|
||||
|
||||
@@ -166,13 +166,6 @@ void PluginAPI::SetRenderingCallback(void (*callback)(int))
|
||||
renderCallback = callback;
|
||||
}
|
||||
|
||||
#ifdef M64P_GLIDENUI
|
||||
void PluginAPI::SetInitialVideoSize(int width, int height)
|
||||
{
|
||||
dwnd().setInitialWindowSize(width, height);
|
||||
}
|
||||
#endif
|
||||
|
||||
void PluginAPI::ResizeVideoOutput(int _Width, int _Height)
|
||||
{
|
||||
dwnd().setWindowSize(_Width, _Height);
|
||||
|
||||
@@ -16,7 +16,6 @@ ViStatusChanged;
|
||||
ViWidthChanged;
|
||||
ReadScreen2;
|
||||
SetRenderingCallback;
|
||||
SetInitialVideoSize;
|
||||
ResizeVideoOutput;
|
||||
FBRead;
|
||||
FBWrite;
|
||||
|
||||
-9
@@ -68,9 +68,6 @@ extern int32_t win_width;
|
||||
extern int32_t win_height;
|
||||
extern int32_t win_fullscreen;
|
||||
|
||||
extern int32_t init_win_width;
|
||||
extern int32_t init_win_height;
|
||||
|
||||
EXPORT m64p_error CALL PluginStartup(m64p_dynlib_handle _CoreLibHandle, void *Context,
|
||||
void (*DebugCallback)(void *, int, const char *))
|
||||
{
|
||||
@@ -172,12 +169,6 @@ extern "C"
|
||||
|
||||
return M64ERR_SUCCESS;
|
||||
}
|
||||
|
||||
EXPORT void CALL SetInitialVideoSize(int width, int height)
|
||||
{
|
||||
init_win_width = width;
|
||||
init_win_height = height;
|
||||
}
|
||||
}
|
||||
|
||||
EXPORT int CALL InitiateGFX (GFX_INFO Gfx_Info)
|
||||
|
||||
-5
@@ -23,8 +23,6 @@ static ptr_VidExt_GL_GetAttribute CoreVideo_GL_GetAttribute = NULL;
|
||||
static ptr_VidExt_GL_SwapBuffers CoreVideo_GL_SwapBuffers = NULL;
|
||||
|
||||
// framebuffer texture states
|
||||
int32_t init_win_width = 0;
|
||||
int32_t init_win_height = 0;
|
||||
int32_t win_width;
|
||||
int32_t win_height;
|
||||
int32_t win_fullscreen;
|
||||
@@ -64,9 +62,6 @@ void screen_init(struct n64video_config* config)
|
||||
|
||||
CoreVideo_GL_SetAttribute(M64P_GL_SWAP_CONTROL, config->vi.vsync);
|
||||
|
||||
win_width = init_win_width > 0 ? init_win_width : win_width;
|
||||
win_height = init_win_height > 0 ? init_win_height : win_height;
|
||||
|
||||
CoreVideo_SetVideoMode(win_width, win_height, 0, win_fullscreen ? M64VIDEO_FULLSCREEN : M64VIDEO_WINDOWED, M64VIDEOFLAG_SUPPORT_RESIZING);
|
||||
}
|
||||
|
||||
|
||||
@@ -71,10 +71,6 @@ m64p_handle configVideoParallel = NULL;
|
||||
uint32_t rdram_size;
|
||||
static ptr_PluginGetVersion CoreGetVersion = NULL;
|
||||
|
||||
static int initialWidth = 0;
|
||||
static int initialHeight = 0;
|
||||
static bool initialSizeSet = false;
|
||||
|
||||
void plugin_init(void)
|
||||
{
|
||||
CoreGetVersion = (ptr_PluginGetVersion)DLSYM(CoreLibHandle, "PluginGetVersion");
|
||||
@@ -272,13 +268,6 @@ extern "C"
|
||||
|
||||
return M64ERR_SUCCESS;
|
||||
}
|
||||
|
||||
EXPORT void CALL SetInitialVideoSize(int width, int height)
|
||||
{
|
||||
initialWidth = width;
|
||||
initialHeight = height;
|
||||
initialSizeSet = true;
|
||||
}
|
||||
}
|
||||
#endif // CONFIG_GUI
|
||||
|
||||
@@ -337,12 +326,6 @@ EXPORT int CALL RomOpen(void)
|
||||
vk_ssreadbacks = 0; // can cause desyncs
|
||||
}
|
||||
|
||||
if (initialSizeSet)
|
||||
{
|
||||
window_width = initialWidth;
|
||||
window_height = initialHeight;
|
||||
}
|
||||
|
||||
plugin_init();
|
||||
|
||||
if (vk_init())
|
||||
@@ -364,8 +347,6 @@ EXPORT void CALL RomClosed(void)
|
||||
{
|
||||
vk_destroy();
|
||||
}
|
||||
|
||||
initialSizeSet = false;
|
||||
}
|
||||
|
||||
EXPORT void CALL ShowCFB(void)
|
||||
|
||||
@@ -511,17 +511,6 @@ CORE_EXPORT bool CorePluginsOpenROMConfig(CorePluginType type, void* parent, std
|
||||
return open_plugin_config(type, parent, true, file);
|
||||
}
|
||||
|
||||
CORE_EXPORT void CoreSetInitialVideoSize(int width, int height)
|
||||
{
|
||||
m64p::PluginApi& plugin = get_plugin(CorePluginType::Gfx);
|
||||
if (!plugin.IsHooked() || plugin.SetInitialVideoSize == nullptr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
plugin.SetInitialVideoSize(width, height);
|
||||
}
|
||||
|
||||
CORE_EXPORT bool CoreAttachPlugins(void)
|
||||
{
|
||||
std::string error;
|
||||
|
||||
@@ -62,9 +62,6 @@ bool CorePluginsHasROMConfig(CorePluginType type);
|
||||
// used plugin of given type
|
||||
bool CorePluginsOpenROMConfig(CorePluginType type, void* parent = nullptr, std::filesystem::path file = "");
|
||||
|
||||
// sets initial video size for the video plugin
|
||||
void CoreSetInitialVideoSize(int width, int height);
|
||||
|
||||
// attaches all used plugins
|
||||
bool CoreAttachPlugins(void);
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ bool PluginApi::Hook(m64p_dynlib_handle handle)
|
||||
HOOK_FUNC(handle, Plugin, Shutdown);
|
||||
HOOK_FUNC_OPT(handle, Plugin, Config);
|
||||
HOOK_FUNC_OPT(handle, Plugin, ConfigWithRomConfig);
|
||||
HOOK_FUNC_OPT(handle, , SetInitialVideoSize);
|
||||
HOOK_FUNC(handle, Plugin, GetVersion);
|
||||
|
||||
this->handle = handle;
|
||||
@@ -43,7 +42,6 @@ bool PluginApi::Unhook(void)
|
||||
UNHOOK_FUNC(Plugin, Shutdown);
|
||||
UNHOOK_FUNC(Plugin, Config);
|
||||
UNHOOK_FUNC(Plugin, ConfigWithRomConfig);
|
||||
UNHOOK_FUNC(Plugin, SetInitialVideoSize);
|
||||
UNHOOK_FUNC(Plugin, GetVersion);
|
||||
|
||||
this->handle = nullptr;
|
||||
|
||||
@@ -37,7 +37,6 @@ class PluginApi
|
||||
ptr_PluginShutdown Shutdown;
|
||||
ptr_PluginConfig Config;
|
||||
ptr_PluginConfigWithRomConfig ConfigWithRomConfig;
|
||||
ptr_SetInitialVideoSize SetInitialVideoSize;
|
||||
ptr_PluginGetVersion GetVersion;
|
||||
|
||||
private:
|
||||
|
||||
@@ -39,17 +39,6 @@ typedef m64p_error (*ptr_PluginConfigWithRomConfig)(void*, int, CoreRomHeader*,
|
||||
EXPORT m64p_error CALL PluginConfigWithRomConfig(void*, int, CoreRomHeader*, CoreRomSettings*);
|
||||
#endif
|
||||
|
||||
/* SetInitialVideoSize(int width, int height)
|
||||
*
|
||||
* This optional function allows a front-end to set the initial video
|
||||
* size for a video plugin.
|
||||
*
|
||||
*/
|
||||
typedef void (*ptr_SetInitialVideoSize)(int width, int height);
|
||||
#if defined(M64P_PLUGIN_PROTOTYPES) || defined(M64P_CORE_PROTOTYPES)
|
||||
EXPORT void CALL SetInitialVideoSize(int width, int height);
|
||||
#endif
|
||||
|
||||
#endif // __cplusplus
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#include "EmulationThread.hpp"
|
||||
|
||||
#include <RMG-Core/Emulation.hpp>
|
||||
#include <RMG-Core/Plugins.hpp>
|
||||
#include <RMG-Core/Error.hpp>
|
||||
|
||||
#ifdef _WIN32
|
||||
@@ -55,19 +54,12 @@ void EmulationThread::SetNetplay(QString address, int port, int player)
|
||||
this->player = player;
|
||||
}
|
||||
|
||||
void EmulationThread::SetVideoSize(int width, int height)
|
||||
{
|
||||
this->videoSize = QSize(width, height);
|
||||
}
|
||||
|
||||
void EmulationThread::run(void)
|
||||
{
|
||||
this->inhibitScreensaver();
|
||||
|
||||
emit this->on_Emulation_Started();
|
||||
|
||||
CoreSetInitialVideoSize(this->videoSize.width(), this->videoSize.height());
|
||||
|
||||
bool ret = CoreStartEmulation(this->rom.toStdU32String(), this->disk.toStdU32String(),
|
||||
this->address.toStdString(), this->port, this->player);
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
#include <QSurfaceFormat>
|
||||
#include <QString>
|
||||
#include <QThread>
|
||||
#include <QSize>
|
||||
|
||||
enum class VidExtRenderMode
|
||||
{
|
||||
@@ -38,7 +37,6 @@ class EmulationThread : public QThread
|
||||
void SetRomFile(QString);
|
||||
void SetDiskFile(QString);
|
||||
void SetNetplay(QString address, int port, int player);
|
||||
void SetVideoSize(int width, int height);
|
||||
|
||||
void run(void) override;
|
||||
|
||||
@@ -48,7 +46,6 @@ class EmulationThread : public QThread
|
||||
QString address;
|
||||
int port = -1;
|
||||
int player = -1;
|
||||
QSize videoSize;
|
||||
#ifndef _WIN32
|
||||
uint32_t dbusCookieId = 0;
|
||||
QDBusInterface* dbusInterface = nullptr;
|
||||
|
||||
@@ -601,12 +601,15 @@ void MainWindow::updateUI(bool inEmulation, bool isPaused)
|
||||
// launch RMG with a ROM on the commandline or drag & drop
|
||||
this->ui_Widgets->setCurrentWidget(this->ui_Widget_Dummy);
|
||||
}
|
||||
|
||||
this->storeGeometry();
|
||||
}
|
||||
else if (!this->ui_NoSwitchToRomBrowser)
|
||||
{
|
||||
this->setWindowTitle(this->ui_WindowTitle);
|
||||
this->ui_Widgets->setCurrentWidget(this->ui_Widget_RomBrowser);
|
||||
this->ui_StatusBar_RenderModeLabel->clear();
|
||||
this->loadGeometry();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -619,9 +622,69 @@ void MainWindow::updateUI(bool inEmulation, bool isPaused)
|
||||
|
||||
void MainWindow::storeGeometry(void)
|
||||
{
|
||||
std::string geometryStr = this->saveGeometry().toBase64().toStdString();
|
||||
if (this->ui_Geometry_Saved)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
this->ui_Geometry = this->saveGeometry();
|
||||
this->ui_Geometry_Maximized = this->isMaximized();
|
||||
this->ui_Geometry_Saved = true;
|
||||
|
||||
std::string geometryStr = this->ui_Geometry.toBase64().toStdString();
|
||||
CoreSettingsSetValue(SettingsID::RomBrowser_Geometry, geometryStr);
|
||||
CoreSettingsSetValue(SettingsID::RomBrowser_Maximized, this->isMaximized());
|
||||
CoreSettingsSetValue(SettingsID::RomBrowser_Maximized, this->ui_Geometry_Maximized);
|
||||
}
|
||||
|
||||
void MainWindow::loadGeometry(void)
|
||||
{
|
||||
if (!this->ui_Geometry_Saved)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (this->ui_Geometry_Maximized)
|
||||
{
|
||||
this->showMaximized();
|
||||
}
|
||||
else
|
||||
{
|
||||
this->restoreGeometry(this->ui_Geometry);
|
||||
}
|
||||
|
||||
if (this->isFullScreen())
|
||||
{
|
||||
this->showNormal();
|
||||
}
|
||||
|
||||
if (this->ui_ShowMenubar && this->menuBar()->isHidden())
|
||||
{
|
||||
this->menuBar()->show();
|
||||
}
|
||||
else if (!this->ui_ShowMenubar && !this->menuBar()->isHidden())
|
||||
{
|
||||
this->menuBar()->hide();
|
||||
}
|
||||
|
||||
if (this->ui_ShowToolbar && this->toolBar->isHidden())
|
||||
{
|
||||
this->toolBar->show();
|
||||
}
|
||||
else if (!this->ui_ShowToolbar && !this->toolBar->isHidden())
|
||||
{
|
||||
this->toolBar->hide();
|
||||
}
|
||||
|
||||
if (this->ui_ShowStatusbar && this->statusBar()->isHidden())
|
||||
{
|
||||
this->statusBar()->show();
|
||||
}
|
||||
else if (!this->ui_ShowStatusbar && !this->statusBar()->isHidden())
|
||||
{
|
||||
this->statusBar()->hide();
|
||||
}
|
||||
|
||||
this->ui_Geometry_Saved = false;
|
||||
}
|
||||
|
||||
void MainWindow::initializeEmulationThread(void)
|
||||
@@ -738,8 +801,6 @@ void MainWindow::launchEmulationThread(QString cartRom, QString diskRom, bool re
|
||||
this->ui_ShowStatusbar = CoreSettingsGetBoolValue(SettingsID::GUI_StatusBar);
|
||||
}
|
||||
|
||||
this->emulationThread->SetVideoSize(this->ui_Widgets->width() * this->devicePixelRatio(),
|
||||
this->ui_Widgets->height() * this->devicePixelRatio());
|
||||
this->emulationThread->SetRomFile(cartRom);
|
||||
this->emulationThread->SetDiskFile(diskRom);
|
||||
this->emulationThread->start();
|
||||
@@ -2304,7 +2365,8 @@ void MainWindow::on_NetplaySessionDialog_rejected()
|
||||
|
||||
void MainWindow::on_VidExt_Init(VidExtRenderMode renderMode)
|
||||
{
|
||||
this->ui_VidExtRenderMode = renderMode;
|
||||
this->ui_VidExtRenderMode = renderMode;
|
||||
this->ui_VidExtForceSetMode = true;
|
||||
|
||||
if (CoreSettingsGetBoolValue(SettingsID::GUI_OpenGLES))
|
||||
{
|
||||
@@ -2491,9 +2553,12 @@ void MainWindow::on_VidExt_ResizeWindow(int width, int height)
|
||||
height += this->statusBar()->height();
|
||||
}
|
||||
|
||||
if (this->size() == QSize(width, height))
|
||||
if (!this->ui_VidExtForceSetMode)
|
||||
{
|
||||
return;
|
||||
if (this->size() == QSize(width, height))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (this->isMaximized() || this->isMinimized())
|
||||
@@ -2502,6 +2567,10 @@ void MainWindow::on_VidExt_ResizeWindow(int width, int height)
|
||||
}
|
||||
|
||||
this->resize(width, height);
|
||||
|
||||
// we've force set the size once,
|
||||
// we can safely disable it now
|
||||
this->ui_VidExtForceSetMode = false;
|
||||
}
|
||||
|
||||
void MainWindow::on_VidExt_ToggleFS(bool fullscreen)
|
||||
|
||||
@@ -63,9 +63,14 @@ class MainWindow : public QMainWindow, private Ui::MainWindow
|
||||
QLabel *ui_StatusBar_Label = nullptr;
|
||||
QLabel *ui_StatusBar_RenderModeLabel = nullptr;
|
||||
|
||||
QByteArray ui_Geometry;
|
||||
bool ui_Geometry_Maximized = false;
|
||||
bool ui_Geometry_Saved = false;
|
||||
|
||||
bool ui_HideCursorInEmulation = false;
|
||||
bool ui_HideCursorInFullscreenEmulation = false;
|
||||
bool ui_NoSwitchToRomBrowser = false;
|
||||
bool ui_VidExtForceSetMode = false;
|
||||
bool ui_LaunchInFullscreen = false;
|
||||
bool ui_QuitAfterEmulation = false;
|
||||
bool ui_RefreshRomListAfterEmulation = false;
|
||||
@@ -131,6 +136,7 @@ class MainWindow : public QMainWindow, private Ui::MainWindow
|
||||
void updateUI(bool inEmulation, bool isPaused);
|
||||
|
||||
void storeGeometry(void);
|
||||
void loadGeometry(void);
|
||||
|
||||
void initializeEmulationThread(void);
|
||||
void connectEmulationThreadSignals(void);
|
||||
|
||||
@@ -69,11 +69,6 @@ void OGLWidget::resizeEvent(QResizeEvent *event)
|
||||
return;
|
||||
}
|
||||
|
||||
if (event->oldSize() == event->size())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (this->timerId != 0)
|
||||
{
|
||||
this->killTimer(this->timerId);
|
||||
|
||||
@@ -42,11 +42,6 @@ void VKWidget::resizeEvent(QResizeEvent *event)
|
||||
return;
|
||||
}
|
||||
|
||||
if (event->oldSize() == event->size())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (this->timerId != 0)
|
||||
{
|
||||
this->killTimer(this->timerId);
|
||||
|
||||
Reference in New Issue
Block a user