private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Music.Dispose(); Properties.Settings.Default["Theme"] = Theme.CurrentTheme.Name; foreach (Theme theme in Theme.AvailableThemes) { Properties.Settings.Default["Opacity" + theme.Name] = _opacity[theme.Name]; Properties.Settings.Default["Volume" + theme.Name] = theme.SFX.Volume; Properties.Settings.Default["Accompaniment" + theme.Name] = theme.SFX.hasAccompanied; } Properties.Settings.Default["NoteResolution"] = Music.NoteResolution; Properties.Settings.Default.Save(); notifyIcon1.Dispose(); TypingTracker.DestroyIMEContext(); TypingTracker.Stop(); IsReady = false; }
/// <summary> /// Form을 초기화하는 함수입니다. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load(object sender, EventArgs e) { MarshallingUpdateSplashScreen(2); #region Initialize phase Form form = (Form)sender; form.ShowInTaskbar = false; instance = this; MarshallingUpdateSplashScreen(3); TypingTracker.NewIMEContext(); MarshallingUpdateSplashScreen(4); Theme.Initialize(); MarshallingUpdateSplashScreen(5); bool themeExist = false; foreach (Theme t in Theme.AvailableThemes) { _opacity[t.Name] = (int)Properties.Settings.Default["Opacity" + t.Name]; t.SFX.Volume = (int)Properties.Settings.Default["Volume" + t.Name]; if (t.Name.Equals((string)Properties.Settings.Default["Theme"])) { themeExist = true; SetTheme(t); } } MarshallingUpdateSplashScreen(6); /* * TODO * 테마를 추가했다가 삭제하는 경우를 처리해야 함. * Theme.AvailableThemes에 themeName의 테마가 없는데 * Properties.Settings.Default["Opacity/Volume" + themeName]이 남아있는 경우 * Properties.Settings.Default.Properties.Remove() 사용하여 제거 바람. */ if (!themeExist && Theme.AvailableThemes.Count > 0) { SetTheme(Theme.AvailableThemes[0]); } MarshallingUpdateSplashScreen(7); int resolution = (int)Properties.Settings.Default["NoteResolution"]; MarshallingUpdateSplashScreen(8); Music.Initialize(Theme.CurrentTheme.SFX.Name, resolution, new SFX.Timer.TickDelegate[] { MarshallingUpdateFrame }); MarshallingUpdateSplashScreen(9); foreach (Theme t in Theme.AvailableThemes) { // 이 코드를 위의 foreach문과 합치면 CurrentSFXTheme이 아직 설정되지 않은 상태가 되어 문제가 발생할 수 있음 t.SFX.hasAccompanied = (bool)Properties.Settings.Default["Accompaniment" + t.Name]; } if (Theme.CurrentTheme.SFX.hasAccompanied) { 자동반주ToolStripMenuItem.CheckState = CheckState.Checked; } else { 자동반주ToolStripMenuItem.CheckState = CheckState.Unchecked; } MarshallingUpdateSplashScreen(10); if (ENABLE_VFX) { #pragma warning disable CS0162 // 접근할 수 없는 코드가 있습니다. Music.OnPlayNotes += (pitch) => AddParticleToBasicParticleSystem((Chord.Root)(pitch % 12)); Music.OnChordTransition += (pitch) => { if (Theme.CurrentTheme.ParticleSystemForWhitespace != null) { AddParticleSystem(Theme.CurrentTheme.ParticleSystemForWhitespace); } else { AddParticleToBasicParticleSystem((Chord.Root)(pitch % 12)); } }; #pragma warning restore CS0162 // 접근할 수 없는 코드가 있습니다. } else { #pragma warning disable CS0162 // 접근할 수 없는 코드가 있습니다. List <TrackBarMenuItem> l = new List <TrackBarMenuItem>(); foreach (TrackBarMenuItem i in 불투명도ToolStripMenuItem.DropDownItems) { l.Add(i); } foreach (TrackBarMenuItem i in l) { i.TrackBar.Dispose(); i.Dispose(); } 불투명도ToolStripMenuItem.Dispose(); #pragma warning restore CS0162 // 접근할 수 없는 코드가 있습니다. } MarshallingUpdateSplashScreen(11); SetNoteResolution(resolution); MarshallingUpdateSplashScreen(12); if (ENABLE_SENTIMENT_ANALYZER) { #pragma warning disable CS0162 // 접근할 수 없는 코드가 있습니다. ksa = new KoreanSentimentAnalyzer(); // 반드시 Music.Initialize()가 완료된 후에 호출할 것. #pragma warning restore CS0162 // 접근할 수 없는 코드가 있습니다. } MarshallingUpdateSplashScreen(13); if (ENABLE_SENTIMENT_ANALYZER) { #pragma warning disable CS0162 // 접근할 수 없는 코드가 있습니다. esa = new EnglishSentimentAnalyzer(); // 반드시 Music.Initialize()가 완료된 후에 호출할 것. #pragma warning restore CS0162 // 접근할 수 없는 코드가 있습니다. } #endregion MarshallingUpdateSplashScreen(14); #region Start phase TypingTracker.Start(); if (ENABLE_SENTIMENT_ANALYZER) { #pragma warning disable CS0162 // 접근할 수 없는 코드가 있습니다. ksa.Start(); esa.Start(); #pragma warning restore CS0162 // 접근할 수 없는 코드가 있습니다. } Music.Start(); notifyIcon1.ShowBalloonTip(8); MarshallingUpdateSplashScreen(15); splash.DisposeFont(); splashThread.Abort(); IsReady = true; #endregion }