Skip to content

Commit 6e3b052

Browse files
committed
Remove aspect option, which and titles/snapshots bindings
1 parent f235b51 commit 6e3b052

File tree

10 files changed

+47
-170
lines changed

10 files changed

+47
-170
lines changed

src/m64py/archive.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,21 @@
2323
from subprocess import Popen, PIPE
2424
import binascii
2525

26-
from m64py.utils import which
27-
2826
try:
2927
import rarfile
3028
HAS_RAR = True
3129
RAR_CMD = None
3230
except ImportError:
3331
HAS_RAR = False
34-
RAR_CMD = which("rar") or which("unrar")
32+
RAR_CMD = shutil.which("rar") or shutil.which("unrar")
3533

3634
try:
3735
from py7zlib import Archive7z
3836
HAS_7Z = True
3937
LZMA_CMD = None
4038
except ImportError:
4139
HAS_7Z = False
42-
LZMA_CMD = which("7z")
40+
LZMA_CMD = shutil.which("7z")
4341

4442
ZIP, GZIP, BZIP, RAR, LZMA, ROM = range(6)
4543

src/m64py/core/vidext.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import ctypes
1818

1919
from PyQt6.QtWidgets import QApplication
20-
from PyQt6.QtGui import QSurfaceFormat, QGuiApplication
20+
from PyQt6.QtGui import QSurface, QSurfaceFormat, QGuiApplication
2121

2222
from sdl2 import SDL_WasInit, SDL_InitSubSystem, SDL_QuitSubSystem, SDL_INIT_VIDEO
2323
from sdl2 import SDL_GetNumDisplayModes, SDL_DisplayMode, SDL_GetDisplayMode
@@ -73,6 +73,8 @@ def init(self):
7373
if QGuiApplication.platformName() != "wayland":
7474
self.glcontext.setFormat(self.glformat)
7575

76+
self.widget.setSurfaceType(QSurface.SurfaceType.OpenGLSurface)
77+
7678
return M64ERR_SUCCESS
7779

7880
def init_with_render_mode(self, mode):
@@ -87,6 +89,8 @@ def quit(self):
8789
self.glcontext.moveToThread(QApplication.instance().thread())
8890
self.glcontext = None
8991

92+
self.widget.destroy()
93+
9094
return M64ERR_SUCCESS
9195

9296
def list_modes(self, size_array, num_sizes):

src/m64py/frontend/glwidget.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,12 @@
2020
class GLWidget(QWindow):
2121

2222
def __init__(self, parent=None):
23-
self.parent = parent
2423
QWindow.__init__(self, None)
25-
26-
self.setSurfaceType(QSurface.SurfaceType.OpenGLSurface)
24+
self.parent = parent
2725
self.ctx = QOpenGLContext()
2826

2927
def context(self):
3028
return self.ctx
3129

32-
def resizeEvent(self, event):
33-
size = event.size()
34-
width, height = int(size.width() * self.devicePixelRatio()), int(size.height() * self.devicePixelRatio())
35-
self.resize(width, height)
36-
3730
def mouseDoubleClickEvent(self, event):
3831
self.parent.toggle_fs.emit()

src/m64py/frontend/mainwindow.py

Lines changed: 24 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
4848
file_opening = pyqtSignal(str)
4949
set_caption = pyqtSignal(str)
5050
state_changed = pyqtSignal(tuple)
51-
save_image = pyqtSignal(bool)
5251
info_dialog = pyqtSignal(str)
5352
archive_dialog = pyqtSignal(list)
5453
vidext_init = pyqtSignal(QOpenGLContext)
@@ -70,8 +69,7 @@ def __init__(self, optparse):
7069
self.statusbar_label.setIndent(2)
7170
self.statusbar_label.setSizePolicy(QSizePolicy.Policy.Ignored, QSizePolicy.Policy.Fixed)
7271
self.statusbar.addPermanentWidget(self.statusbar_label, 1)
73-
self.update_status(self.tr(
74-
"Welcome to M64Py version %s." % FRONTEND_VERSION))
72+
self.update_status(self.tr("M64Py version %s." % FRONTEND_VERSION))
7573

7674
self.sizes = {
7775
SIZE_1X: self.action1X,
@@ -107,16 +105,6 @@ def changeEvent(self, event):
107105
self.windowState() == Qt.WindowState.WindowMaximized):
108106
self.maximized = True
109107

110-
def resizeEvent(self, event):
111-
event.ignore()
112-
size = event.size()
113-
if self.widgets_height:
114-
width, height = size.width(), size.height()
115-
self.window_size_triggered((width, height))
116-
else:
117-
width, height = size.width(), size.height()
118-
self.resize(width, height)
119-
120108
def showEvent(self, event):
121109
if not self.widgets_height:
122110
width, height = self.settings.get_size_safe()
@@ -136,49 +124,44 @@ def keyPressEvent(self, event):
136124

137125
if modifiers & Qt.KeyboardModifier.AltModifier and (key == Qt.Key.Key_Enter or key == Qt.Key.Key_Return):
138126
self.toggle_fs.emit()
139-
elif key == Qt.Key.Key_F3:
140-
self.worker.save_title()
141-
elif key == Qt.Key.Key_F4:
142-
self.worker.save_snapshot()
143127
else:
144-
try:
145-
sdl_key = QT2SDL2[key]
146-
self.worker.send_sdl_keydown(sdl_key)
147-
except KeyError:
148-
pass
128+
if key in QT2SDL2:
129+
self.worker.send_sdl_keydown(QT2SDL2[key])
149130

150131
def keyReleaseEvent(self, event):
151132
if self.worker.state != M64EMU_RUNNING:
152133
return
153134

154135
key = event.key()
155-
try:
156-
sdl_key = QT2SDL2[key]
157-
self.worker.send_sdl_keyup(sdl_key)
158-
except KeyError:
159-
pass
136+
if key in QT2SDL2:
137+
self.worker.send_sdl_keyup(QT2SDL2[key])
138+
139+
def resizeEvent(self, event):
140+
event.ignore()
141+
size = event.size()
142+
if self.widgets_height:
143+
width, height = size.width(), size.height()
144+
self.window_size_triggered((width, height))
145+
else:
146+
width, height = size.width(), size.height()
147+
self.resize(width, height)
160148

161149
def window_size_triggered(self, size):
162-
window_width, window_height = size
150+
width, height = size
163151
if self.vidext and self.worker.core.get_handle():
164-
game_height = window_height - self.widgets_height
165-
game_width = window_width
166-
167-
if not sys.platform == "win32":
168-
if bool(self.settings.get_int_safe("keep_aspect", 1)):
169-
game_width = int((4 / 3) * window_height)
170-
171152
self.worker.core.config.open_section("Video-General")
172-
self.worker.core.config.set_parameter("ScreenWidth", game_width)
173-
self.worker.core.config.set_parameter("ScreenHeight", game_height)
153+
self.worker.core.config.set_parameter("ScreenWidth", width)
154+
self.worker.core.config.set_parameter("ScreenHeight", height - self.widgets_height)
174155

175-
video_size = (game_width << 16) + game_height
156+
video_size = ((int(width * self.devicePixelRatio()) << 16) +
157+
(int(height * self.devicePixelRatio()) - self.widgets_height))
176158
if self.worker.state in (M64EMU_RUNNING, M64EMU_PAUSED):
177159
self.worker.core_state_set(M64CORE_VIDEO_SIZE, video_size)
178160

179-
self.set_sizes((window_width, window_height - self.widgets_height))
180-
self.settings.qset.setValue("size", (window_width, window_height - self.widgets_height))
181-
self.resize(window_width, window_height)
161+
self.set_sizes((width, height - self.widgets_height))
162+
self.settings.qset.setValue("size", (width, height - self.widgets_height))
163+
164+
self.resize(width, height)
182165

183166
def set_sizes(self, size):
184167
"""Sets 'Window Size' radio buttons on resize event."""
@@ -189,21 +172,6 @@ def set_sizes(self, size):
189172
for action in self.sizes.values():
190173
action.setChecked(False)
191174

192-
def keep_aspect(self, size):
193-
"""Keeps 4:3 aspect ratio."""
194-
width, height = size
195-
if self.maximized:
196-
return width, height
197-
fixed_ratio = 1.3333333333333333
198-
current_ratio = float(width)/float(height)
199-
if fixed_ratio > current_ratio:
200-
w = int(width)
201-
h = int(width/fixed_ratio)
202-
else:
203-
h = int(height)
204-
w = int(height*fixed_ratio)
205-
return w, h
206-
207175
def center_widget(self):
208176
"""Centers widget on desktop."""
209177
size = self.size()
@@ -221,7 +189,6 @@ def connect_signals(self):
221189
self.file_opening.connect(self.on_file_opening)
222190
self.set_caption.connect(self.on_set_caption)
223191
self.state_changed.connect(self.on_state_changed)
224-
self.save_image.connect(self.on_save_image)
225192
self.info_dialog.connect(self.on_info_dialog)
226193
self.archive_dialog.connect(self.on_archive_dialog)
227194
self.toggle_fs.connect(self.on_toggle_fs)
@@ -316,10 +283,6 @@ def on_file_opening(self, filepath):
316283
self.update_status("Loading %s..." % (
317284
os.path.basename(filepath)))
318285

319-
def on_save_image(self, title):
320-
"""Saves snapshot or title image."""
321-
self.worker.save_image(title)
322-
323286
def on_info_dialog(self, info):
324287
"""Shows info dialog."""
325288
self.settings.show_page(0)

src/m64py/frontend/settings.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
# along with this program. If not, see <http://www.gnu.org/licenses/>.
1616

1717
import os
18-
import sys
1918

2019
from PyQt6.QtCore import Qt, QSettings
2120
from PyQt6.QtWidgets import QDialog, QFileDialog, QRadioButton, QVBoxLayout
@@ -250,13 +249,6 @@ def set_video(self):
250249
self.checkVsync.setToolTip(
251250
self.get_parameter_help_safe("VerticalSync"))
252251

253-
if sys.platform == "win32":
254-
self.checkKeepAspect.setChecked(False)
255-
self.checkKeepAspect.setEnabled(False)
256-
else:
257-
keep_aspect = bool(self.get_int_safe("keep_aspect", 1))
258-
self.checkKeepAspect.setChecked(keep_aspect)
259-
260252
disable_screensaver = bool(self.get_int_safe("disable_screensaver", 1))
261253
self.checkDisableScreenSaver.setChecked(disable_screensaver)
262254

@@ -340,7 +332,7 @@ def save_video(self):
340332
self.core.config.set_parameter("ScreenHeight", int(height))
341333
self.core.config.set_parameter("Fullscreen", self.checkFullscreen.isChecked())
342334
self.core.config.set_parameter("VerticalSync", self.checkVsync.isChecked())
343-
self.qset.setValue("keep_aspect", int(self.checkKeepAspect.isChecked()))
335+
344336
self.qset.setValue("disable_screensaver", int(self.checkDisableScreenSaver.isChecked()))
345337
self.qset.setValue("enable_vidext", int(self.checkEnableVidExt.isChecked()))
346338

src/m64py/frontend/worker.py

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -205,53 +205,6 @@ def save_screenshot(self):
205205
"""Saves screenshot."""
206206
self.core.take_next_screenshot()
207207

208-
def get_screenshot(self, path):
209-
"""Gets last saved screenshot."""
210-
name = self.core.rom_header.Name.decode()
211-
rom_name = name.replace(' ', '_').lower()
212-
screenshots = []
213-
for filename in os.listdir(path):
214-
if filename.startswith(rom_name):
215-
screenshots.append(os.path.join(
216-
path, filename))
217-
if screenshots:
218-
return sorted(screenshots)[-1]
219-
return None
220-
221-
def save_image(self, title=True):
222-
"""Saves snapshot or title image."""
223-
data_path = self.core.config.get_path("UserData")
224-
capture = "title" if title else "snapshot"
225-
dst_path = os.path.join(data_path, capture)
226-
if not os.path.isdir(dst_path):
227-
os.makedirs(dst_path)
228-
screenshot = self.get_screenshot(
229-
os.path.join(data_path, "screenshot"))
230-
if screenshot:
231-
image_name = "%X%X.png" % (
232-
sl(self.core.rom_header.CRC1), sl(self.core.rom_header.CRC2))
233-
try:
234-
shutil.copyfile(screenshot, os.path.join(dst_path, image_name))
235-
log.info("Captured %s" % capture)
236-
except IOError:
237-
log.exception("couldn't save image %s" % image_name)
238-
239-
def save_title(self):
240-
"""Saves title."""
241-
self.save_screenshot()
242-
QTimer.singleShot(1500, self.save_title_image)
243-
244-
def save_snapshot(self):
245-
"""Saves snapshot."""
246-
self.save_screenshot()
247-
QTimer.singleShot(1500, self.save_snapshot_image)
248-
249-
def save_title_image(self):
250-
self.parent.save_image.emit(True)
251-
252-
def save_snapshot_image(self):
253-
self.parent.save_image.emit(False)
254-
255208
def state_load(self, state_path=None):
256209
"""Loads state."""
257210
self.core.state_load(state_path)

src/m64py/ui/i18n/m64py_de_DE.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -587,8 +587,8 @@
587587
</message>
588588
<message>
589589
<location filename="mainwindow.py" line="60"/>
590-
<source>Welcome to M64Py version %s.</source>
591-
<translation type="unfinished">Willkommen zu M64py version %s.</translation>
590+
<source>M64Py version %s.</source>
591+
<translation type="unfinished">M64py version %s.</translation>
592592
</message>
593593
<message>
594594
<location filename="mainwindow.py" line="323"/>

src/m64py/ui/i18n/m64py_en.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@
586586
</message>
587587
<message>
588588
<location filename="mainwindow.py" line="60"/>
589-
<source>Welcome to M64Py version %s.</source>
589+
<source>M64Py version %s.</source>
590590
<translation type="unfinished"></translation>
591591
</message>
592592
<message>

src/m64py/ui/settings.ui

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -426,13 +426,16 @@ QGroupBox::title {
426426
<bool>false</bool>
427427
</property>
428428
<layout class="QGridLayout" name="gridLayout_5">
429-
<item row="0" column="0">
430-
<widget class="QCheckBox" name="checkOSD">
429+
<item row="2" column="0">
430+
<widget class="QCheckBox" name="checkEnableVidExt">
431+
<property name="toolTip">
432+
<string>Enable embedding of OpenGL window.</string>
433+
</property>
431434
<property name="text">
432-
<string>On Screen Display</string>
435+
<string>Enable Video Extension</string>
433436
</property>
434437
<property name="checked">
435-
<bool>true</bool>
438+
<bool>false</bool>
436439
</property>
437440
</widget>
438441
</item>
@@ -446,26 +449,13 @@ QGroupBox::title {
446449
</property>
447450
</widget>
448451
</item>
449-
<item row="2" column="0">
450-
<widget class="QCheckBox" name="checkEnableVidExt">
451-
<property name="toolTip">
452-
<string>Enable embedding of OpenGL window.</string>
453-
</property>
452+
<item row="0" column="0">
453+
<widget class="QCheckBox" name="checkOSD">
454454
<property name="text">
455-
<string>Enable Video Extension</string>
455+
<string>On Screen Display</string>
456456
</property>
457457
<property name="checked">
458-
<bool>false</bool>
459-
</property>
460-
</widget>
461-
</item>
462-
<item row="3" column="0">
463-
<widget class="QCheckBox" name="checkKeepAspect">
464-
<property name="toolTip">
465-
<string>Maintain aspect-ratio on resizing</string>
466-
</property>
467-
<property name="text">
468-
<string>Keep Aspect Ratio</string>
458+
<bool>true</bool>
469459
</property>
470460
</widget>
471461
</item>

0 commit comments

Comments
 (0)