11import json
22import math
33import os
4+ import platform
45import sys
56import time
6- from enum import Enum
7+ from enum import IntEnum , auto , unique
8+
9+ if platform .system () == "Windows" :
10+ import ctypes
711
812import click
913import cv2
1418from .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