Skip to content

Commit e82ab99

Browse files
authored
Merge pull request #2 from jeertmans/windows-fix
fix(windows): enhance resolution in fullscreen mode
2 parents 7128c01 + 14b334f commit e82ab99

File tree

1 file changed

+37
-20
lines changed

1 file changed

+37
-20
lines changed

manim_slides/present.py

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
import json
22
import math
33
import os
4+
import platform
45
import sys
56
import time
6-
from enum import Enum
7+
from enum import IntEnum, auto, unique
8+
9+
if platform.system() == "Windows":
10+
import ctypes
711

812
import click
913
import cv2
@@ -14,29 +18,22 @@
1418
from .defaults import CONFIG_PATH, FOLDER_PATH
1519

1620

17-
class State(Enum):
18-
PLAYING = 0
19-
PAUSED = 1
20-
WAIT = 2
21-
END = 3
21+
@unique
22+
class State(IntEnum):
23+
PLAYING = auto()
24+
PAUSED = auto()
25+
WAIT = auto()
26+
END = auto()
2227

2328
def __str__(self):
24-
if self.value == 0:
25-
return "Playing"
26-
if self.value == 1:
27-
return "Paused"
28-
if self.value == 2:
29-
return "Wait"
30-
if self.value == 3:
31-
return "End"
32-
return "..."
33-
34-
35-
def now():
29+
return self.name.capitalize()
30+
31+
32+
def now() -> int:
3633
return round(time.time() * 1000)
3734

3835

39-
def fix_time(x):
36+
def fix_time(x: float) -> float:
4037
return x if x > 0 else 1
4138

4239

@@ -171,12 +168,26 @@ def __init__(self, presentations, config, start_paused=False, fullscreen=False):
171168
self.lag = 0
172169
self.last_time = now()
173170

171+
if platform.system() == "Windows":
172+
user32 = ctypes.windll.user32
173+
self.screen_width, self.screen_height = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)
174+
174175
if fullscreen:
175176
cv2.namedWindow("Video", cv2.WND_PROP_FULLSCREEN)
176177
cv2.setWindowProperty(
177178
"Video", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN
178179
)
179180

181+
def resize_frame_to_screen(self, frame: np.ndarray):
182+
frame_height, frame_width = frame.shape
183+
184+
scale_height = self.screen_height / frame_height
185+
scale_width = self.screen_width / frame_width
186+
187+
scale = min(scale_height, scale_width)
188+
189+
return cv2.resize(frame, (int(scale * frame_height, scale * frame_width)))
190+
180191
@property
181192
def current_presentation(self):
182193
return self.presentations[self.current_presentation_i]
@@ -203,7 +214,13 @@ def run(self):
203214
def show_video(self):
204215
self.lag = now() - self.last_time
205216
self.last_time = now()
206-
cv2.imshow("Video", self.lastframe)
217+
218+
frame = self.lastframe
219+
220+
if platform.system() == "Windows":
221+
frame = self.resize_frame_to_screen(frame)
222+
223+
cv2.imshow("Video", frame)
207224

208225
def show_info(self):
209226
info = np.zeros((130, 420), np.uint8)

0 commit comments

Comments
 (0)