@@ -27,6 +27,7 @@ public sealed class NativeMainMenu
2727 private readonly Dictionary < MouseType , NativeMenuItem > _mouseTypes = new ( ) ;
2828 private readonly Dictionary < string , NativeMenuItem > _emulationSpeeds = new ( ) ;
2929 private readonly Dictionary < BorderSize , NativeMenuItem > _borderSizes = new ( ) ;
30+ private readonly Dictionary < ScreenEffect , NativeMenuItem > _screenEffects = new ( ) ;
3031 private readonly Dictionary < TapeSpeed , NativeMenuItem > _tapeLoadingSpeeds = new ( ) ;
3132 private readonly Dictionary < MicrodriveId , NativeMenuItem > _microdrives = new ( ) ;
3233 private readonly Dictionary < DriveId , NativeMenuItem > _diskDrives = new ( ) ;
@@ -49,6 +50,7 @@ public NativeMainMenu(MainWindowViewModel viewModel)
4950 CreateMouseTypeMenu ( ) ;
5051 CreateSpeedOptionMenu ( ) ;
5152 CreateBorderSizeMenu ( ) ;
53+ CreateScreenEffectMenu ( ) ;
5254 CreateTapeLoadingSpeedMenu ( ) ;
5355
5456 _viewModel . PropertyChanged += ( _ , e ) => ViewModelPropertyChanged ( e . PropertyName ) ;
@@ -145,6 +147,14 @@ private void ViewModelPropertyChanged(string? propertyName)
145147
146148 break ;
147149
150+ case nameof ( MainWindowViewModel . ScreenEffect ) :
151+ foreach ( var screenEffect in _screenEffects . Keys )
152+ {
153+ _screenEffects [ screenEffect ] . IsChecked = _viewModel . ScreenEffect . HasFlag ( screenEffect ) ;
154+ }
155+
156+ break ;
157+
148158 case nameof ( MainWindowViewModel . IsFullScreen ) :
149159 _fullScreenMenuItem ? . Header = _viewModel . IsFullScreen ? "Exit Full Screen" : "Full Screen" ;
150160
@@ -460,6 +470,17 @@ private NativeMenuItem CreateViewMenu()
460470 ]
461471 } ,
462472
473+ new NativeMenuItem ( "Effect" )
474+ {
475+ Menu =
476+ [
477+ _screenEffects [ ScreenEffect . Blur ] ,
478+ _screenEffects [ ScreenEffect . Crt ] ,
479+ ]
480+ } ,
481+
482+ new NativeMenuItemSeparator ( ) ,
483+
463484 new NativeMenuItem ( "Trainers" )
464485 {
465486 Command = _viewModel . ShowTrainersCommand ,
@@ -923,6 +944,27 @@ private void CreateBorderSizeMenu()
923944 }
924945 }
925946
947+ private void CreateScreenEffectMenu ( )
948+ {
949+ var effects = new [ ]
950+ {
951+ new { Effect = ScreenEffect . Blur , DisplayName = "Blur" } ,
952+ new { Effect = ScreenEffect . Crt , DisplayName = "CRT" } ,
953+ } ;
954+
955+ foreach ( var effect in effects )
956+ {
957+ _screenEffects [ effect . Effect ] = new NativeMenuItem ( effect . DisplayName )
958+ {
959+ ToggleType = NativeMenuItemToggleType . CheckBox ,
960+ Command = _viewModel . ChangeScreenEffectCommand ,
961+ CommandParameter = effect . Effect ,
962+ IsChecked = _viewModel . ScreenEffect . HasFlag ( effect . Effect ) ,
963+ IsEnabled = true
964+ } ;
965+ }
966+ }
967+
926968 private void CreateTapeLoadingSpeedMenu ( )
927969 {
928970 var speeds = new [ ]
0 commit comments