1 using System; 2 using System.Collections.Generic; 3 using System.Drawing; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 using System.Windows.Forms; 8 using Mesen.GUI.Config; 9 using Mesen.GUI.Forms.Config; 10 11 namespace Mesen.GUI.Forms 12 { 13 public partial class frmMain 14 { SetScale(double scale)15 private void SetScale(double scale) 16 { 17 _customSize = false; 18 if(this.HideMenuStrip) { 19 this.menuStrip.Visible = false; 20 } 21 InteropEmu.SetVideoScale(scale); 22 UpdateScaleMenu(scale); 23 UpdateViewerSize(); 24 } 25 SetVideoFilter(VideoFilterType type)26 private void SetVideoFilter(VideoFilterType type) 27 { 28 if(!_fullscreenMode) { 29 _customSize = false; 30 } 31 InteropEmu.SetVideoFilter(type); 32 UpdateFilterMenu(type); 33 } 34 UpdateScaleMenu(double scale)35 private void UpdateScaleMenu(double scale) 36 { 37 mnuScale1x.Checked = (scale == 1.0); 38 mnuScale2x.Checked = (scale == 2.0); 39 mnuScale3x.Checked = (scale == 3.0); 40 mnuScale4x.Checked = (scale == 4.0); 41 mnuScale5x.Checked = (scale == 5.0); 42 mnuScale6x.Checked = (scale == 6.0); 43 44 ConfigManager.Config.VideoInfo.VideoScale = scale; 45 ConfigManager.ApplyChanges(); 46 } 47 UpdateFilterMenu(VideoFilterType filterType)48 private void UpdateFilterMenu(VideoFilterType filterType) 49 { 50 mnuNoneFilter.Checked = (filterType == VideoFilterType.None); 51 mnuNtscFilter.Checked = (filterType == VideoFilterType.NTSC); 52 mnuNtscBisqwitFullFilter.Checked = (filterType == VideoFilterType.BisqwitNtsc); 53 mnuNtscBisqwitHalfFilter.Checked = (filterType == VideoFilterType.BisqwitNtscHalfRes); 54 mnuNtscBisqwitQuarterFilter.Checked = (filterType == VideoFilterType.BisqwitNtscQuarterRes); 55 56 mnuXBRZ2xFilter.Checked = (filterType == VideoFilterType.xBRZ2x); 57 mnuXBRZ3xFilter.Checked = (filterType == VideoFilterType.xBRZ3x); 58 mnuXBRZ4xFilter.Checked = (filterType == VideoFilterType.xBRZ4x); 59 mnuXBRZ5xFilter.Checked = (filterType == VideoFilterType.xBRZ5x); 60 mnuXBRZ6xFilter.Checked = (filterType == VideoFilterType.xBRZ6x); 61 mnuHQ2xFilter.Checked = (filterType == VideoFilterType.HQ2x); 62 mnuHQ3xFilter.Checked = (filterType == VideoFilterType.HQ3x); 63 mnuHQ4xFilter.Checked = (filterType == VideoFilterType.HQ4x); 64 mnuScale2xFilter.Checked = (filterType == VideoFilterType.Scale2x); 65 mnuScale3xFilter.Checked = (filterType == VideoFilterType.Scale3x); 66 mnuScale4xFilter.Checked = (filterType == VideoFilterType.Scale4x); 67 mnu2xSaiFilter.Checked = (filterType == VideoFilterType._2xSai); 68 mnuSuper2xSaiFilter.Checked = (filterType == VideoFilterType.Super2xSai); 69 mnuSuperEagleFilter.Checked = (filterType == VideoFilterType.SuperEagle); 70 mnuPrescale2xFilter.Checked = (filterType == VideoFilterType.Prescale2x); 71 mnuPrescale3xFilter.Checked = (filterType == VideoFilterType.Prescale3x); 72 mnuPrescale4xFilter.Checked = (filterType == VideoFilterType.Prescale4x); 73 mnuPrescale6xFilter.Checked = (filterType == VideoFilterType.Prescale6x); 74 mnuPrescale8xFilter.Checked = (filterType == VideoFilterType.Prescale8x); 75 mnuPrescale10xFilter.Checked = (filterType == VideoFilterType.Prescale10x); 76 77 ConfigManager.Config.VideoInfo.VideoFilter = filterType; 78 ConfigManager.ApplyChanges(); 79 } 80 mnuVideoConfig_Click(object sender, EventArgs e)81 private void mnuVideoConfig_Click(object sender, EventArgs e) 82 { 83 Size originalSize = this.Size; 84 InteropEmu.ScreenSize originalScreenSize = InteropEmu.GetScreenSize(false); 85 Configuration configBackup = ConfigManager.Config.Clone(); 86 bool cancelled = false; 87 using(frmVideoConfig frm = new frmVideoConfig()) { 88 cancelled = frm.ShowDialog(sender, this) == DialogResult.Cancel; 89 } 90 if(cancelled) { 91 ConfigManager.RevertToBackup(configBackup); 92 ConfigManager.Config.ApplyConfig(); 93 } 94 UpdateVideoSettings(); 95 InteropEmu.ScreenSize screenSize = InteropEmu.GetScreenSize(false); 96 if((cancelled || (screenSize.Height == originalScreenSize.Height && screenSize.Width == originalScreenSize.Width)) && this.WindowState == FormWindowState.Normal) { 97 this.Size = originalSize; 98 } 99 if(_fullscreenMode && ConfigManager.Config.VideoInfo.UseExclusiveFullscreen && _frmFullscreenRenderer == null) { 100 StopFullscreenWindowMode(); 101 if(!this._isNsfPlayerMode) { 102 SetFullscreenState(true); 103 } 104 } 105 } 106 mnuInput_Click(object sender, EventArgs e)107 private void mnuInput_Click(object sender, EventArgs e) 108 { 109 using(frmInputConfig frm = new frmInputConfig()) { 110 frm.ShowDialog(sender, this); 111 } 112 } 113 mnuAudioConfig_Click(object sender, EventArgs e)114 private void mnuAudioConfig_Click(object sender, EventArgs e) 115 { 116 using(frmAudioConfig frm = new frmAudioConfig()) { 117 frm.ShowDialog(sender, this); 118 } 119 this.ctrlNsfPlayer.UpdateVolume(); 120 } 121 mnuPreferences_Click(object sender, EventArgs e)122 private void mnuPreferences_Click(object sender, EventArgs e) 123 { 124 using(frmPreferences frm = new frmPreferences()) { 125 VsDualOutputOption originalVsDualOutput = ConfigManager.Config.PreferenceInfo.VsDualVideoOutput; 126 127 if(frm.ShowDialog(sender, this) == DialogResult.OK) { 128 if(frm.NeedRestart) { 129 //Data folder has changed, end process 130 ConfigManager.DoNotSaveSettings = true; 131 this.Close(); 132 return; 133 } 134 135 VsDualOutputOption newVsDualOutput = ConfigManager.Config.PreferenceInfo.VsDualVideoOutput; 136 if(originalVsDualOutput != newVsDualOutput) { 137 if(newVsDualOutput == VsDualOutputOption.Both || originalVsDualOutput == VsDualOutputOption.Both) { 138 UpdateViewerSize(true); 139 } else { 140 UpdateDualSystemViewer(); 141 } 142 } 143 ResourceHelper.LoadResources(ConfigManager.Config.PreferenceInfo.DisplayLanguage); 144 ResourceHelper.UpdateEmuLanguage(); 145 ResourceHelper.ApplyResources(this); 146 UpdateMenus(); 147 InitializeNsfMode(); 148 ctrlRecentGames.UpdateGameInfo(); 149 TopMost = ConfigManager.Config.PreferenceInfo.AlwaysOnTop; 150 FormBorderStyle = ConfigManager.Config.PreferenceInfo.DisableMouseResize ? FormBorderStyle.Fixed3D : FormBorderStyle.Sizable; 151 } else { 152 UpdateVideoSettings(); 153 UpdateMenus(); 154 UpdateViewerSize(); 155 } 156 } 157 ResizeRecentGames(sender, e); 158 } 159 mnuEmulationConfig_Click(object sender, EventArgs e)160 private void mnuEmulationConfig_Click(object sender, EventArgs e) 161 { 162 using(frmEmulationConfig frm = new frmEmulationConfig()) { 163 frm.ShowDialog(sender, this); 164 } 165 } 166 mnuRegion_Click(object sender, EventArgs e)167 private void mnuRegion_Click(object sender, EventArgs e) 168 { 169 if(sender == mnuRegionAuto) { 170 ConfigManager.Config.Region = NesModel.Auto; 171 } else if(sender == mnuRegionNtsc) { 172 ConfigManager.Config.Region = NesModel.NTSC; 173 } else if(sender == mnuRegionPal) { 174 ConfigManager.Config.Region = NesModel.PAL; 175 } else if(sender == mnuRegionDendy) { 176 ConfigManager.Config.Region = NesModel.Dendy; 177 } 178 InteropEmu.SetNesModel(ConfigManager.Config.Region); 179 } 180 mnuShowFPS_Click(object sender, EventArgs e)181 private void mnuShowFPS_Click(object sender, EventArgs e) 182 { 183 ToggleFps(); 184 } 185 UpdateEmulationFlags()186 private void UpdateEmulationFlags() 187 { 188 ConfigManager.Config.VideoInfo.ShowFPS = mnuShowFPS.Checked; 189 ConfigManager.ApplyChanges(); 190 191 VideoInfo.ApplyConfig(); 192 } 193 UpdateVideoSettings()194 private void UpdateVideoSettings() 195 { 196 mnuShowFPS.Checked = ConfigManager.Config.VideoInfo.ShowFPS; 197 mnuBilinearInterpolation.Checked = ConfigManager.Config.VideoInfo.UseBilinearInterpolation; 198 UpdateScaleMenu(ConfigManager.Config.VideoInfo.VideoScale); 199 UpdateFilterMenu(ConfigManager.Config.VideoInfo.VideoFilter); 200 201 _customSize = false; 202 UpdateViewerSize(); 203 } 204 InitializeEmulationSpeedMenu()205 private void InitializeEmulationSpeedMenu() 206 { 207 mnuEmuSpeedNormal.Tag = 100; 208 mnuEmuSpeedTriple.Tag = 300; 209 mnuEmuSpeedDouble.Tag = 200; 210 mnuEmuSpeedHalf.Tag = 50; 211 mnuEmuSpeedQuarter.Tag = 25; 212 mnuEmuSpeedMaximumSpeed.Tag = 0; 213 } 214 UpdateEmulationSpeedMenu()215 private void UpdateEmulationSpeedMenu() 216 { 217 ConfigManager.Config.EmulationInfo.EmulationSpeed = InteropEmu.GetEmulationSpeed(); 218 foreach(ToolStripMenuItem item in new ToolStripMenuItem[] { mnuEmuSpeedDouble, mnuEmuSpeedHalf, mnuEmuSpeedNormal, mnuEmuSpeedQuarter, mnuEmuSpeedTriple, mnuEmuSpeedMaximumSpeed }) { 219 item.Checked = ((int)item.Tag == ConfigManager.Config.EmulationInfo.EmulationSpeed); 220 } 221 } 222 SetEmulationSpeed(uint emulationSpeed)223 private void SetEmulationSpeed(uint emulationSpeed) 224 { 225 ConfigManager.Config.EmulationInfo.EmulationSpeed = emulationSpeed; 226 ConfigManager.ApplyChanges(); 227 EmulationInfo.ApplyConfig(); 228 } 229 mnuEmulationSpeed_DropDownOpening(object sender, EventArgs e)230 private void mnuEmulationSpeed_DropDownOpening(object sender, EventArgs e) 231 { 232 UpdateEmulationSpeedMenu(); 233 } 234 mnuEmulationSpeedOption_Click(object sender, EventArgs e)235 private void mnuEmulationSpeedOption_Click(object sender, EventArgs e) 236 { 237 SetEmulationSpeed((uint)(int)((ToolStripItem)sender).Tag); 238 } 239 mnuBilinearInterpolation_Click(object sender, EventArgs e)240 private void mnuBilinearInterpolation_Click(object sender, EventArgs e) 241 { 242 ConfigManager.Config.VideoInfo.UseBilinearInterpolation = mnuBilinearInterpolation.Checked; 243 ConfigManager.ApplyChanges(); 244 VideoInfo.ApplyConfig(); 245 } 246 mnuNoneFilter_Click(object sender, EventArgs e)247 private void mnuNoneFilter_Click(object sender, EventArgs e) 248 { 249 SetVideoFilter(VideoFilterType.None); 250 } 251 mnuNtscFilter_Click(object sender, EventArgs e)252 private void mnuNtscFilter_Click(object sender, EventArgs e) 253 { 254 SetVideoFilter(VideoFilterType.NTSC); 255 } 256 mnuXBRZ2xFilter_Click(object sender, EventArgs e)257 private void mnuXBRZ2xFilter_Click(object sender, EventArgs e) 258 { 259 SetVideoFilter(VideoFilterType.xBRZ2x); 260 } 261 mnuXBRZ3xFilter_Click(object sender, EventArgs e)262 private void mnuXBRZ3xFilter_Click(object sender, EventArgs e) 263 { 264 SetVideoFilter(VideoFilterType.xBRZ3x); 265 } 266 mnuXBRZ4xFilter_Click(object sender, EventArgs e)267 private void mnuXBRZ4xFilter_Click(object sender, EventArgs e) 268 { 269 SetVideoFilter(VideoFilterType.xBRZ4x); 270 } 271 mnuXBRZ5xFilter_Click(object sender, EventArgs e)272 private void mnuXBRZ5xFilter_Click(object sender, EventArgs e) 273 { 274 SetVideoFilter(VideoFilterType.xBRZ5x); 275 } 276 mnuXBRZ6xFilter_Click(object sender, EventArgs e)277 private void mnuXBRZ6xFilter_Click(object sender, EventArgs e) 278 { 279 SetVideoFilter(VideoFilterType.xBRZ6x); 280 } 281 mnuHQ2xFilter_Click(object sender, EventArgs e)282 private void mnuHQ2xFilter_Click(object sender, EventArgs e) 283 { 284 SetVideoFilter(VideoFilterType.HQ2x); 285 } 286 mnuHQ3xFilter_Click(object sender, EventArgs e)287 private void mnuHQ3xFilter_Click(object sender, EventArgs e) 288 { 289 SetVideoFilter(VideoFilterType.HQ3x); 290 } 291 mnuHQ4xFilter_Click(object sender, EventArgs e)292 private void mnuHQ4xFilter_Click(object sender, EventArgs e) 293 { 294 SetVideoFilter(VideoFilterType.HQ4x); 295 } 296 mnuScale2xFilter_Click(object sender, EventArgs e)297 private void mnuScale2xFilter_Click(object sender, EventArgs e) 298 { 299 SetVideoFilter(VideoFilterType.Scale2x); 300 } 301 mnuScale3xFilter_Click(object sender, EventArgs e)302 private void mnuScale3xFilter_Click(object sender, EventArgs e) 303 { 304 SetVideoFilter(VideoFilterType.Scale3x); 305 } 306 mnuScale4xFilter_Click(object sender, EventArgs e)307 private void mnuScale4xFilter_Click(object sender, EventArgs e) 308 { 309 SetVideoFilter(VideoFilterType.Scale4x); 310 } 311 mnu2xSaiFilter_Click(object sender, EventArgs e)312 private void mnu2xSaiFilter_Click(object sender, EventArgs e) 313 { 314 SetVideoFilter(VideoFilterType._2xSai); 315 } 316 mnuSuper2xSaiFilter_Click(object sender, EventArgs e)317 private void mnuSuper2xSaiFilter_Click(object sender, EventArgs e) 318 { 319 SetVideoFilter(VideoFilterType.Super2xSai); 320 } 321 mnuSuperEagleFilter_Click(object sender, EventArgs e)322 private void mnuSuperEagleFilter_Click(object sender, EventArgs e) 323 { 324 SetVideoFilter(VideoFilterType.SuperEagle); 325 } 326 mnuPrescale2xFilter_Click(object sender, EventArgs e)327 private void mnuPrescale2xFilter_Click(object sender, EventArgs e) 328 { 329 SetVideoFilter(VideoFilterType.Prescale2x); 330 } 331 mnuPrescale3xFilter_Click(object sender, EventArgs e)332 private void mnuPrescale3xFilter_Click(object sender, EventArgs e) 333 { 334 SetVideoFilter(VideoFilterType.Prescale3x); 335 } 336 mnuPrescale4xFilter_Click(object sender, EventArgs e)337 private void mnuPrescale4xFilter_Click(object sender, EventArgs e) 338 { 339 SetVideoFilter(VideoFilterType.Prescale4x); 340 } 341 mnuPrescale6xFilter_Click(object sender, EventArgs e)342 private void mnuPrescale6xFilter_Click(object sender, EventArgs e) 343 { 344 SetVideoFilter(VideoFilterType.Prescale6x); 345 } 346 mnuPrescale8xFilter_Click(object sender, EventArgs e)347 private void mnuPrescale8xFilter_Click(object sender, EventArgs e) 348 { 349 SetVideoFilter(VideoFilterType.Prescale8x); 350 } 351 mnuPrescale10xFilter_Click(object sender, EventArgs e)352 private void mnuPrescale10xFilter_Click(object sender, EventArgs e) 353 { 354 SetVideoFilter(VideoFilterType.Prescale10x); 355 } 356 mnuNtscBisqwitFullFilter_Click(object sender, EventArgs e)357 private void mnuNtscBisqwitFullFilter_Click(object sender, EventArgs e) 358 { 359 SetVideoFilter(VideoFilterType.BisqwitNtsc); 360 } 361 mnuNtscBisqwitHalfFilter_Click(object sender, EventArgs e)362 private void mnuNtscBisqwitHalfFilter_Click(object sender, EventArgs e) 363 { 364 SetVideoFilter(VideoFilterType.BisqwitNtscHalfRes); 365 } 366 mnuNtscBisqwitQuarterFilter_Click(object sender, EventArgs e)367 private void mnuNtscBisqwitQuarterFilter_Click(object sender, EventArgs e) 368 { 369 SetVideoFilter(VideoFilterType.BisqwitNtscQuarterRes); 370 } 371 } 372 } 373