From a80aed54a0e66eea5ed8f2f7d32bb2b86d5258e1 Mon Sep 17 00:00:00 2001 From: ww-rm Date: Wed, 7 May 2025 17:43:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BA=B9=E7=90=86=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E8=8F=9C=E5=8D=95=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpineViewer/Forms/SpineViewerForm.Designer.cs | 156 +- SpineViewer/Forms/SpineViewerForm.cs | 990 ++++----- SpineViewer/Forms/SpineViewerForm.en.resx | 61 +- SpineViewer/Forms/SpineViewerForm.resx | 1834 ++++++++--------- 4 files changed, 1522 insertions(+), 1519 deletions(-) diff --git a/SpineViewer/Forms/SpineViewerForm.Designer.cs b/SpineViewer/Forms/SpineViewerForm.Designer.cs index 4a5a246..15b323c 100644 --- a/SpineViewer/Forms/SpineViewerForm.Designer.cs +++ b/SpineViewer/Forms/SpineViewerForm.Designer.cs @@ -64,6 +64,10 @@ toolStripMenuItem_ExportCustom = new ToolStripMenuItem(); toolStripSeparator2 = new ToolStripSeparator(); toolStripMenuItem_Exit = new ToolStripMenuItem(); + toolStripMenuItem_Texture = new ToolStripMenuItem(); + toolStripMenuItem_ForceSmooth = new ToolStripMenuItem(); + toolStripMenuItem_ForceRepeated = new ToolStripMenuItem(); + toolStripMenuItem_ForceMipmap = new ToolStripMenuItem(); toolStripMenuItem_Tool = new ToolStripMenuItem(); toolStripMenuItem_ConvertFileFormat = new ToolStripMenuItem(); toolStripMenuItem_Download = new ToolStripMenuItem(); @@ -106,98 +110,80 @@ // // splitContainer_MainForm // - resources.ApplyResources(splitContainer_MainForm, "splitContainer_MainForm"); splitContainer_MainForm.Cursor = Cursors.SizeNS; + resources.ApplyResources(splitContainer_MainForm, "splitContainer_MainForm"); splitContainer_MainForm.FixedPanel = FixedPanel.Panel2; splitContainer_MainForm.Name = "splitContainer_MainForm"; // // splitContainer_MainForm.Panel1 // - resources.ApplyResources(splitContainer_MainForm.Panel1, "splitContainer_MainForm.Panel1"); splitContainer_MainForm.Panel1.Controls.Add(splitContainer_Functional); splitContainer_MainForm.Panel1.Cursor = Cursors.Default; - toolTip.SetToolTip(splitContainer_MainForm.Panel1, resources.GetString("splitContainer_MainForm.Panel1.ToolTip")); // // splitContainer_MainForm.Panel2 // - resources.ApplyResources(splitContainer_MainForm.Panel2, "splitContainer_MainForm.Panel2"); splitContainer_MainForm.Panel2.Controls.Add(rtbLog); splitContainer_MainForm.Panel2.Cursor = Cursors.Default; - toolTip.SetToolTip(splitContainer_MainForm.Panel2, resources.GetString("splitContainer_MainForm.Panel2.ToolTip")); splitContainer_MainForm.TabStop = false; - toolTip.SetToolTip(splitContainer_MainForm, resources.GetString("splitContainer_MainForm.ToolTip")); splitContainer_MainForm.SplitterMoved += splitContainer_SplitterMoved; splitContainer_MainForm.MouseUp += splitContainer_MouseUp; // // splitContainer_Functional // - resources.ApplyResources(splitContainer_Functional, "splitContainer_Functional"); splitContainer_Functional.Cursor = Cursors.SizeWE; + resources.ApplyResources(splitContainer_Functional, "splitContainer_Functional"); splitContainer_Functional.FixedPanel = FixedPanel.Panel1; splitContainer_Functional.Name = "splitContainer_Functional"; // // splitContainer_Functional.Panel1 // - resources.ApplyResources(splitContainer_Functional.Panel1, "splitContainer_Functional.Panel1"); splitContainer_Functional.Panel1.Controls.Add(splitContainer_Information); splitContainer_Functional.Panel1.Cursor = Cursors.Default; - toolTip.SetToolTip(splitContainer_Functional.Panel1, resources.GetString("splitContainer_Functional.Panel1.ToolTip")); // // splitContainer_Functional.Panel2 // - resources.ApplyResources(splitContainer_Functional.Panel2, "splitContainer_Functional.Panel2"); splitContainer_Functional.Panel2.Controls.Add(groupBox_Preview); splitContainer_Functional.Panel2.Cursor = Cursors.Default; - toolTip.SetToolTip(splitContainer_Functional.Panel2, resources.GetString("splitContainer_Functional.Panel2.ToolTip")); splitContainer_Functional.TabStop = false; - toolTip.SetToolTip(splitContainer_Functional, resources.GetString("splitContainer_Functional.ToolTip")); splitContainer_Functional.SplitterMoved += splitContainer_SplitterMoved; splitContainer_Functional.MouseUp += splitContainer_MouseUp; // // splitContainer_Information // - resources.ApplyResources(splitContainer_Information, "splitContainer_Information"); splitContainer_Information.Cursor = Cursors.SizeWE; + resources.ApplyResources(splitContainer_Information, "splitContainer_Information"); splitContainer_Information.Name = "splitContainer_Information"; // // splitContainer_Information.Panel1 // - resources.ApplyResources(splitContainer_Information.Panel1, "splitContainer_Information.Panel1"); splitContainer_Information.Panel1.Controls.Add(groupBox_SkelList); splitContainer_Information.Panel1.Cursor = Cursors.Default; - toolTip.SetToolTip(splitContainer_Information.Panel1, resources.GetString("splitContainer_Information.Panel1.ToolTip")); // // splitContainer_Information.Panel2 // - resources.ApplyResources(splitContainer_Information.Panel2, "splitContainer_Information.Panel2"); splitContainer_Information.Panel2.Controls.Add(splitContainer_Config); splitContainer_Information.Panel2.Cursor = Cursors.Default; - toolTip.SetToolTip(splitContainer_Information.Panel2, resources.GetString("splitContainer_Information.Panel2.ToolTip")); splitContainer_Information.TabStop = false; - toolTip.SetToolTip(splitContainer_Information, resources.GetString("splitContainer_Information.ToolTip")); splitContainer_Information.SplitterMoved += splitContainer_SplitterMoved; splitContainer_Information.MouseUp += splitContainer_MouseUp; // // groupBox_SkelList // - resources.ApplyResources(groupBox_SkelList, "groupBox_SkelList"); groupBox_SkelList.Controls.Add(spineListView); + resources.ApplyResources(groupBox_SkelList, "groupBox_SkelList"); groupBox_SkelList.Name = "groupBox_SkelList"; groupBox_SkelList.TabStop = false; - toolTip.SetToolTip(groupBox_SkelList, resources.GetString("groupBox_SkelList.ToolTip")); // // spineListView // resources.ApplyResources(spineListView, "spineListView"); spineListView.Name = "spineListView"; spineListView.SpinePropertyGrid = spineViewPropertyGrid; - toolTip.SetToolTip(spineListView, resources.GetString("spineListView.ToolTip")); // // spineViewPropertyGrid // resources.ApplyResources(spineViewPropertyGrid, "spineViewPropertyGrid"); spineViewPropertyGrid.Name = "spineViewPropertyGrid"; - toolTip.SetToolTip(spineViewPropertyGrid, resources.GetString("spineViewPropertyGrid.ToolTip")); // // splitContainer_Config // @@ -206,47 +192,38 @@ // // splitContainer_Config.Panel1 // - resources.ApplyResources(splitContainer_Config.Panel1, "splitContainer_Config.Panel1"); splitContainer_Config.Panel1.Controls.Add(groupBox_PreviewConfig); - toolTip.SetToolTip(splitContainer_Config.Panel1, resources.GetString("splitContainer_Config.Panel1.ToolTip")); // // splitContainer_Config.Panel2 // - resources.ApplyResources(splitContainer_Config.Panel2, "splitContainer_Config.Panel2"); splitContainer_Config.Panel2.Controls.Add(groupBox_SkelConfig); - toolTip.SetToolTip(splitContainer_Config.Panel2, resources.GetString("splitContainer_Config.Panel2.ToolTip")); - toolTip.SetToolTip(splitContainer_Config, resources.GetString("splitContainer_Config.ToolTip")); // // groupBox_PreviewConfig // - resources.ApplyResources(groupBox_PreviewConfig, "groupBox_PreviewConfig"); groupBox_PreviewConfig.Controls.Add(propertyGrid_Previewer); + resources.ApplyResources(groupBox_PreviewConfig, "groupBox_PreviewConfig"); groupBox_PreviewConfig.Name = "groupBox_PreviewConfig"; groupBox_PreviewConfig.TabStop = false; - toolTip.SetToolTip(groupBox_PreviewConfig, resources.GetString("groupBox_PreviewConfig.ToolTip")); // // propertyGrid_Previewer // resources.ApplyResources(propertyGrid_Previewer, "propertyGrid_Previewer"); propertyGrid_Previewer.Name = "propertyGrid_Previewer"; propertyGrid_Previewer.ToolbarVisible = false; - toolTip.SetToolTip(propertyGrid_Previewer, resources.GetString("propertyGrid_Previewer.ToolTip")); // // groupBox_SkelConfig // - resources.ApplyResources(groupBox_SkelConfig, "groupBox_SkelConfig"); groupBox_SkelConfig.Controls.Add(spineViewPropertyGrid); + resources.ApplyResources(groupBox_SkelConfig, "groupBox_SkelConfig"); groupBox_SkelConfig.Name = "groupBox_SkelConfig"; groupBox_SkelConfig.TabStop = false; - toolTip.SetToolTip(groupBox_SkelConfig, resources.GetString("groupBox_SkelConfig.ToolTip")); // // groupBox_Preview // - resources.ApplyResources(groupBox_Preview, "groupBox_Preview"); groupBox_Preview.Controls.Add(spinePreviewPanel); + resources.ApplyResources(groupBox_Preview, "groupBox_Preview"); groupBox_Preview.Name = "groupBox_Preview"; groupBox_Preview.TabStop = false; - toolTip.SetToolTip(groupBox_Preview, resources.GetString("groupBox_Preview.ToolTip")); // // spinePreviewPanel // @@ -254,230 +231,250 @@ spinePreviewPanel.Name = "spinePreviewPanel"; spinePreviewPanel.PropertyGrid = propertyGrid_Previewer; spinePreviewPanel.SpineListView = spineListView; - toolTip.SetToolTip(spinePreviewPanel, resources.GetString("spinePreviewPanel.ToolTip")); // // rtbLog // - resources.ApplyResources(rtbLog, "rtbLog"); rtbLog.BackColor = SystemColors.Window; rtbLog.BorderStyle = BorderStyle.None; + resources.ApplyResources(rtbLog, "rtbLog"); rtbLog.Name = "rtbLog"; rtbLog.ReadOnly = true; - toolTip.SetToolTip(rtbLog, resources.GetString("rtbLog.ToolTip")); // // menuStrip // - resources.ApplyResources(menuStrip, "menuStrip"); menuStrip.BackColor = SystemColors.Control; menuStrip.ImageScalingSize = new Size(24, 24); - menuStrip.Items.AddRange(new ToolStripItem[] { toolStripMenuItem_File, toolStripMenuItem_Tool, toolStripMenuItem_Download, toolStripMenuItem_Help, toolStripMenuItem_Experiment, ToolStripMenuItem_Language }); + menuStrip.Items.AddRange(new ToolStripItem[] { toolStripMenuItem_File, toolStripMenuItem_Texture, toolStripMenuItem_Tool, toolStripMenuItem_Download, toolStripMenuItem_Help, toolStripMenuItem_Experiment, ToolStripMenuItem_Language }); + resources.ApplyResources(menuStrip, "menuStrip"); menuStrip.Name = "menuStrip"; - toolTip.SetToolTip(menuStrip, resources.GetString("menuStrip.ToolTip")); // // toolStripMenuItem_File // - resources.ApplyResources(toolStripMenuItem_File, "toolStripMenuItem_File"); toolStripMenuItem_File.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_Open, toolStripMenuItem_BatchOpen, toolStripSeparator1, toolStripMenuItem_Export, toolStripSeparator2, toolStripMenuItem_Exit }); toolStripMenuItem_File.Name = "toolStripMenuItem_File"; + resources.ApplyResources(toolStripMenuItem_File, "toolStripMenuItem_File"); // // toolStripMenuItem_Open // - resources.ApplyResources(toolStripMenuItem_Open, "toolStripMenuItem_Open"); toolStripMenuItem_Open.Name = "toolStripMenuItem_Open"; + resources.ApplyResources(toolStripMenuItem_Open, "toolStripMenuItem_Open"); toolStripMenuItem_Open.Click += toolStripMenuItem_Open_Click; // // toolStripMenuItem_BatchOpen // - resources.ApplyResources(toolStripMenuItem_BatchOpen, "toolStripMenuItem_BatchOpen"); toolStripMenuItem_BatchOpen.Name = "toolStripMenuItem_BatchOpen"; + resources.ApplyResources(toolStripMenuItem_BatchOpen, "toolStripMenuItem_BatchOpen"); toolStripMenuItem_BatchOpen.Click += toolStripMenuItem_BatchOpen_Click; // // toolStripSeparator1 // - resources.ApplyResources(toolStripSeparator1, "toolStripSeparator1"); toolStripSeparator1.Name = "toolStripSeparator1"; + resources.ApplyResources(toolStripSeparator1, "toolStripSeparator1"); // // toolStripMenuItem_Export // - resources.ApplyResources(toolStripMenuItem_Export, "toolStripMenuItem_Export"); toolStripMenuItem_Export.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_ExportFrame, toolStripMenuItem_ExportFrameSequence, toolStripSeparator4, toolStripMenuItem_ExportGif, toolStripMenuItem_ExportWebp, toolStripMenuItem_ExportAvif, toolStripSeparator5, toolStripMenuItem_ExportMp4, toolStripMenuItem_ExportWebm, toolStripMenuItem_ExportMkv, toolStripMenuItem_ExportMov, toolStripSeparator6, toolStripMenuItem_ExportCustom }); toolStripMenuItem_Export.Name = "toolStripMenuItem_Export"; + resources.ApplyResources(toolStripMenuItem_Export, "toolStripMenuItem_Export"); // // toolStripMenuItem_ExportFrame // - resources.ApplyResources(toolStripMenuItem_ExportFrame, "toolStripMenuItem_ExportFrame"); toolStripMenuItem_ExportFrame.Name = "toolStripMenuItem_ExportFrame"; + resources.ApplyResources(toolStripMenuItem_ExportFrame, "toolStripMenuItem_ExportFrame"); toolStripMenuItem_ExportFrame.Click += toolStripMenuItem_ExportFrame_Click; // // toolStripMenuItem_ExportFrameSequence // - resources.ApplyResources(toolStripMenuItem_ExportFrameSequence, "toolStripMenuItem_ExportFrameSequence"); toolStripMenuItem_ExportFrameSequence.Name = "toolStripMenuItem_ExportFrameSequence"; + resources.ApplyResources(toolStripMenuItem_ExportFrameSequence, "toolStripMenuItem_ExportFrameSequence"); toolStripMenuItem_ExportFrameSequence.Click += toolStripMenuItem_ExportFrameSequence_Click; // // toolStripSeparator4 // - resources.ApplyResources(toolStripSeparator4, "toolStripSeparator4"); toolStripSeparator4.Name = "toolStripSeparator4"; + resources.ApplyResources(toolStripSeparator4, "toolStripSeparator4"); // // toolStripMenuItem_ExportGif // - resources.ApplyResources(toolStripMenuItem_ExportGif, "toolStripMenuItem_ExportGif"); toolStripMenuItem_ExportGif.Name = "toolStripMenuItem_ExportGif"; + resources.ApplyResources(toolStripMenuItem_ExportGif, "toolStripMenuItem_ExportGif"); toolStripMenuItem_ExportGif.Click += toolStripMenuItem_ExportGif_Click; // // toolStripMenuItem_ExportWebp // - resources.ApplyResources(toolStripMenuItem_ExportWebp, "toolStripMenuItem_ExportWebp"); toolStripMenuItem_ExportWebp.Name = "toolStripMenuItem_ExportWebp"; + resources.ApplyResources(toolStripMenuItem_ExportWebp, "toolStripMenuItem_ExportWebp"); toolStripMenuItem_ExportWebp.Click += toolStripMenuItem_ExportWebp_Click; // // toolStripMenuItem_ExportAvif // - resources.ApplyResources(toolStripMenuItem_ExportAvif, "toolStripMenuItem_ExportAvif"); toolStripMenuItem_ExportAvif.Name = "toolStripMenuItem_ExportAvif"; + resources.ApplyResources(toolStripMenuItem_ExportAvif, "toolStripMenuItem_ExportAvif"); toolStripMenuItem_ExportAvif.Click += toolStripMenuItem_ExportAvif_Click; // // toolStripSeparator5 // - resources.ApplyResources(toolStripSeparator5, "toolStripSeparator5"); toolStripSeparator5.Name = "toolStripSeparator5"; + resources.ApplyResources(toolStripSeparator5, "toolStripSeparator5"); // // toolStripMenuItem_ExportMp4 // - resources.ApplyResources(toolStripMenuItem_ExportMp4, "toolStripMenuItem_ExportMp4"); toolStripMenuItem_ExportMp4.Name = "toolStripMenuItem_ExportMp4"; + resources.ApplyResources(toolStripMenuItem_ExportMp4, "toolStripMenuItem_ExportMp4"); toolStripMenuItem_ExportMp4.Click += toolStripMenuItem_ExportMp4_Click; // // toolStripMenuItem_ExportWebm // - resources.ApplyResources(toolStripMenuItem_ExportWebm, "toolStripMenuItem_ExportWebm"); toolStripMenuItem_ExportWebm.Name = "toolStripMenuItem_ExportWebm"; + resources.ApplyResources(toolStripMenuItem_ExportWebm, "toolStripMenuItem_ExportWebm"); toolStripMenuItem_ExportWebm.Click += toolStripMenuItem_ExportWebm_Click; // // toolStripMenuItem_ExportMkv // - resources.ApplyResources(toolStripMenuItem_ExportMkv, "toolStripMenuItem_ExportMkv"); toolStripMenuItem_ExportMkv.Name = "toolStripMenuItem_ExportMkv"; + resources.ApplyResources(toolStripMenuItem_ExportMkv, "toolStripMenuItem_ExportMkv"); toolStripMenuItem_ExportMkv.Click += toolStripMenuItem_ExportMkv_Click; // // toolStripMenuItem_ExportMov // - resources.ApplyResources(toolStripMenuItem_ExportMov, "toolStripMenuItem_ExportMov"); toolStripMenuItem_ExportMov.Name = "toolStripMenuItem_ExportMov"; + resources.ApplyResources(toolStripMenuItem_ExportMov, "toolStripMenuItem_ExportMov"); toolStripMenuItem_ExportMov.Click += toolStripMenuItem_ExportMov_Click; // // toolStripSeparator6 // - resources.ApplyResources(toolStripSeparator6, "toolStripSeparator6"); toolStripSeparator6.Name = "toolStripSeparator6"; + resources.ApplyResources(toolStripSeparator6, "toolStripSeparator6"); // // toolStripMenuItem_ExportCustom // - resources.ApplyResources(toolStripMenuItem_ExportCustom, "toolStripMenuItem_ExportCustom"); toolStripMenuItem_ExportCustom.Name = "toolStripMenuItem_ExportCustom"; + resources.ApplyResources(toolStripMenuItem_ExportCustom, "toolStripMenuItem_ExportCustom"); toolStripMenuItem_ExportCustom.Click += toolStripMenuItem_ExportCustom_Click; // // toolStripSeparator2 // - resources.ApplyResources(toolStripSeparator2, "toolStripSeparator2"); toolStripSeparator2.Name = "toolStripSeparator2"; + resources.ApplyResources(toolStripSeparator2, "toolStripSeparator2"); // // toolStripMenuItem_Exit // - resources.ApplyResources(toolStripMenuItem_Exit, "toolStripMenuItem_Exit"); toolStripMenuItem_Exit.Name = "toolStripMenuItem_Exit"; + resources.ApplyResources(toolStripMenuItem_Exit, "toolStripMenuItem_Exit"); toolStripMenuItem_Exit.Click += toolStripMenuItem_Exit_Click; // + // toolStripMenuItem_Texture + // + toolStripMenuItem_Texture.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_ForceSmooth, toolStripMenuItem_ForceRepeated, toolStripMenuItem_ForceMipmap }); + toolStripMenuItem_Texture.Name = "toolStripMenuItem_Texture"; + resources.ApplyResources(toolStripMenuItem_Texture, "toolStripMenuItem_Texture"); + // + // toolStripMenuItem_ForceSmooth + // + toolStripMenuItem_ForceSmooth.Name = "toolStripMenuItem_ForceSmooth"; + resources.ApplyResources(toolStripMenuItem_ForceSmooth, "toolStripMenuItem_ForceSmooth"); + toolStripMenuItem_ForceSmooth.Click += toolStripMenuItem_ForceSmooth_Click; + // + // toolStripMenuItem_ForceRepeated + // + toolStripMenuItem_ForceRepeated.Name = "toolStripMenuItem_ForceRepeated"; + resources.ApplyResources(toolStripMenuItem_ForceRepeated, "toolStripMenuItem_ForceRepeated"); + toolStripMenuItem_ForceRepeated.Click += toolStripMenuItem_ForceRepeated_Click; + // + // toolStripMenuItem_ForceMipmap + // + toolStripMenuItem_ForceMipmap.Name = "toolStripMenuItem_ForceMipmap"; + resources.ApplyResources(toolStripMenuItem_ForceMipmap, "toolStripMenuItem_ForceMipmap"); + toolStripMenuItem_ForceMipmap.Click += toolStripMenuItem_ForceMipmap_Click; + // // toolStripMenuItem_Tool // - resources.ApplyResources(toolStripMenuItem_Tool, "toolStripMenuItem_Tool"); toolStripMenuItem_Tool.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_ConvertFileFormat }); toolStripMenuItem_Tool.Name = "toolStripMenuItem_Tool"; + resources.ApplyResources(toolStripMenuItem_Tool, "toolStripMenuItem_Tool"); // // toolStripMenuItem_ConvertFileFormat // - resources.ApplyResources(toolStripMenuItem_ConvertFileFormat, "toolStripMenuItem_ConvertFileFormat"); toolStripMenuItem_ConvertFileFormat.Name = "toolStripMenuItem_ConvertFileFormat"; + resources.ApplyResources(toolStripMenuItem_ConvertFileFormat, "toolStripMenuItem_ConvertFileFormat"); toolStripMenuItem_ConvertFileFormat.Click += toolStripMenuItem_ConvertFileFormat_Click; // // toolStripMenuItem_Download // - resources.ApplyResources(toolStripMenuItem_Download, "toolStripMenuItem_Download"); toolStripMenuItem_Download.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_ManageResource }); toolStripMenuItem_Download.Name = "toolStripMenuItem_Download"; + resources.ApplyResources(toolStripMenuItem_Download, "toolStripMenuItem_Download"); // // toolStripMenuItem_ManageResource // - resources.ApplyResources(toolStripMenuItem_ManageResource, "toolStripMenuItem_ManageResource"); toolStripMenuItem_ManageResource.Name = "toolStripMenuItem_ManageResource"; + resources.ApplyResources(toolStripMenuItem_ManageResource, "toolStripMenuItem_ManageResource"); toolStripMenuItem_ManageResource.Click += toolStripMenuItem_ManageResource_Click; // // toolStripMenuItem_Help // - resources.ApplyResources(toolStripMenuItem_Help, "toolStripMenuItem_Help"); toolStripMenuItem_Help.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_Diagnostics, toolStripSeparator3, toolStripMenuItem_About, toolStripMenuItem_Debug }); toolStripMenuItem_Help.Name = "toolStripMenuItem_Help"; + resources.ApplyResources(toolStripMenuItem_Help, "toolStripMenuItem_Help"); // // toolStripMenuItem_Diagnostics // - resources.ApplyResources(toolStripMenuItem_Diagnostics, "toolStripMenuItem_Diagnostics"); toolStripMenuItem_Diagnostics.Name = "toolStripMenuItem_Diagnostics"; + resources.ApplyResources(toolStripMenuItem_Diagnostics, "toolStripMenuItem_Diagnostics"); toolStripMenuItem_Diagnostics.Click += toolStripMenuItem_Diagnostics_Click; // // toolStripSeparator3 // - resources.ApplyResources(toolStripSeparator3, "toolStripSeparator3"); toolStripSeparator3.Name = "toolStripSeparator3"; + resources.ApplyResources(toolStripSeparator3, "toolStripSeparator3"); // // toolStripMenuItem_About // - resources.ApplyResources(toolStripMenuItem_About, "toolStripMenuItem_About"); toolStripMenuItem_About.Name = "toolStripMenuItem_About"; + resources.ApplyResources(toolStripMenuItem_About, "toolStripMenuItem_About"); toolStripMenuItem_About.Click += toolStripMenuItem_About_Click; // // toolStripMenuItem_Debug // - resources.ApplyResources(toolStripMenuItem_Debug, "toolStripMenuItem_Debug"); toolStripMenuItem_Debug.Name = "toolStripMenuItem_Debug"; + resources.ApplyResources(toolStripMenuItem_Debug, "toolStripMenuItem_Debug"); toolStripMenuItem_Debug.Click += toolStripMenuItem_Debug_Click; // // toolStripMenuItem_Experiment // - resources.ApplyResources(toolStripMenuItem_Experiment, "toolStripMenuItem_Experiment"); toolStripMenuItem_Experiment.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_DesktopProjection }); toolStripMenuItem_Experiment.Name = "toolStripMenuItem_Experiment"; + resources.ApplyResources(toolStripMenuItem_Experiment, "toolStripMenuItem_Experiment"); // // toolStripMenuItem_DesktopProjection // - resources.ApplyResources(toolStripMenuItem_DesktopProjection, "toolStripMenuItem_DesktopProjection"); toolStripMenuItem_DesktopProjection.Name = "toolStripMenuItem_DesktopProjection"; + resources.ApplyResources(toolStripMenuItem_DesktopProjection, "toolStripMenuItem_DesktopProjection"); toolStripMenuItem_DesktopProjection.Click += toolStripMenuItem_DesktopProjection_Click; // // ToolStripMenuItem_Language // - resources.ApplyResources(ToolStripMenuItem_Language, "ToolStripMenuItem_Language"); ToolStripMenuItem_Language.DropDownItems.AddRange(new ToolStripItem[] { ToolStripMenuItem_English, ToolStripMenuItem_Chinese }); ToolStripMenuItem_Language.Name = "ToolStripMenuItem_Language"; + resources.ApplyResources(ToolStripMenuItem_Language, "ToolStripMenuItem_Language"); // // ToolStripMenuItem_English // - resources.ApplyResources(ToolStripMenuItem_English, "ToolStripMenuItem_English"); ToolStripMenuItem_English.Name = "ToolStripMenuItem_English"; + resources.ApplyResources(ToolStripMenuItem_English, "ToolStripMenuItem_English"); ToolStripMenuItem_English.Click += ToolStripMenuItem_English_Click; // // ToolStripMenuItem_Chinese // - resources.ApplyResources(ToolStripMenuItem_Chinese, "ToolStripMenuItem_Chinese"); ToolStripMenuItem_Chinese.Name = "ToolStripMenuItem_Chinese"; + resources.ApplyResources(ToolStripMenuItem_Chinese, "ToolStripMenuItem_Chinese"); ToolStripMenuItem_Chinese.Click += ToolStripMenuItem_Chinese_Click; // // panel_MainForm // - resources.ApplyResources(panel_MainForm, "panel_MainForm"); panel_MainForm.Controls.Add(splitContainer_MainForm); + resources.ApplyResources(panel_MainForm, "panel_MainForm"); panel_MainForm.Name = "panel_MainForm"; - toolTip.SetToolTip(panel_MainForm, resources.GetString("panel_MainForm.ToolTip")); // // toolTip // @@ -491,7 +488,6 @@ Controls.Add(menuStrip); MainMenuStrip = menuStrip; Name = "SpineViewerForm"; - toolTip.SetToolTip(this, resources.GetString("$this.ToolTip")); FormClosing += MainForm_FormClosing; Load += MainForm_Load; splitContainer_MainForm.Panel1.ResumeLayout(false); @@ -573,5 +569,9 @@ private ToolStripMenuItem ToolStripMenuItem_Language; private ToolStripMenuItem ToolStripMenuItem_English; private ToolStripMenuItem ToolStripMenuItem_Chinese; - } + private ToolStripMenuItem toolStripMenuItem_Texture; + private ToolStripMenuItem toolStripMenuItem_ForceSmooth; + private ToolStripMenuItem toolStripMenuItem_ForceRepeated; + private ToolStripMenuItem toolStripMenuItem_ForceMipmap; + } } diff --git a/SpineViewer/Forms/SpineViewerForm.cs b/SpineViewer/Forms/SpineViewerForm.cs index 2e289a9..c45d941 100644 --- a/SpineViewer/Forms/SpineViewerForm.cs +++ b/SpineViewer/Forms/SpineViewerForm.cs @@ -10,505 +10,523 @@ using SpineViewer.Utils.Localize; namespace SpineViewer { - internal partial class SpineViewerForm : Form - { - private readonly Logger logger = LogManager.GetCurrentClassLogger(); + internal partial class SpineViewerForm : Form + { + private readonly Logger logger = LogManager.GetCurrentClassLogger(); - private readonly Dictionary exporterCache = []; + private readonly Dictionary exporterCache = []; - public SpineViewerForm() - { - InitializeComponent(); - InitializeLogConfiguration(); + public SpineViewerForm() + { + InitializeComponent(); + InitializeLogConfiguration(); - // 执行一些初始化工作 - try - { - SFMLShader.Init(); - } - catch (Exception ex) - { - logger.Error(ex.ToString()); - logger.Error("Failed to load fragment shader"); - MessagePopup.Warn(Properties.Resources.failLoadingFragmentShader, Properties.Resources.msgBoxWarning); - } + // 执行一些初始化工作 + try + { + SFMLShader.Init(); + } + catch (Exception ex) + { + logger.Error(ex.ToString()); + logger.Error("Failed to load fragment shader"); + MessagePopup.Warn(Properties.Resources.failLoadingFragmentShader, Properties.Resources.msgBoxWarning); + } #if DEBUG - toolStripMenuItem_Debug.Visible = true; + toolStripMenuItem_Debug.Visible = true; #endif - } - - /// - /// 初始化窗口日志器 - /// - private void InitializeLogConfiguration() - { - // 窗口日志 - var rtbTarget = new NLog.Windows.Forms.RichTextBoxTarget - { - Name = "rtbTarget", - TargetForm = this, - TargetRichTextBox = rtbLog, - AutoScroll = true, - MaxLines = 3000, - SupportLinks = true, - Layout = "[${level:format=OneLetter}]${date:format=yyyy-MM-dd HH\\:mm\\:ss} - ${message}" - }; - - rtbTarget.WordColoringRules.Add(new("[D]", "Gray", "Empty", FontStyle.Bold)); - rtbTarget.WordColoringRules.Add(new("[I]", "DimGray", "Empty", FontStyle.Bold)); - rtbTarget.WordColoringRules.Add(new("[W]", "DarkOrange", "Empty", FontStyle.Bold)); - rtbTarget.WordColoringRules.Add(new("[E]", "Red", "Empty", FontStyle.Bold)); - rtbTarget.WordColoringRules.Add(new("[F]", "DarkRed", "Empty", FontStyle.Bold)); - - LogManager.Configuration.AddTarget(rtbTarget); - LogManager.Configuration.AddRule(LogLevel.Debug, LogLevel.Fatal, rtbTarget); - LogManager.ReconfigExistingLoggers(); - } - - private void MainForm_Load(object sender, EventArgs e) - { - spinePreviewPanel.StartRender(); - string cultureName = ConfigurationManager.AppSettings["localize"]; - switch (cultureName) - { - case "zh-CN": - ToolStripMenuItem_Chinese.Checked = true; - ToolStripMenuItem_English.Checked = false; - break; - case "en-US": - ToolStripMenuItem_English.Checked = true; - ToolStripMenuItem_Chinese.Checked = false; - break; - default: - ToolStripMenuItem_Chinese.Checked = true; - ToolStripMenuItem_English.Checked = false; - break; - } - } - - private void MainForm_FormClosing(object sender, FormClosingEventArgs e) - { - spinePreviewPanel.StopRender(); - } - - private void toolStripMenuItem_Open_Click(object sender, EventArgs e) - { - spineListView.Add(); - } - - private void toolStripMenuItem_BatchOpen_Click(object sender, EventArgs e) - { - spineListView.BatchAdd(); - } - - #region private void toolStripMenuItem_ExportXXX_Click(object sender, EventArgs e) - - private void toolStripMenuItem_ExportFrame_Click(object sender, EventArgs e) - { - if (spinePreviewPanel.IsUpdating && MessagePopup.Quest(Properties.Resources.isUpdatingAndManuallyExportFrame, Properties.Resources.msgBoxQuest) != DialogResult.OK) - return; - - var k = nameof(toolStripMenuItem_ExportFrame); - if (!exporterCache.ContainsKey(k)) exporterCache[k] = new FrameExporter(); - - var exporter = exporterCache[k]; - using var view = spinePreviewPanel.GetView(); - exporter.Resolution = spinePreviewPanel.Resolution; - exporter.PreviewerView = view; - exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; - - var exportDialog = new Dialogs.ExportDialog(new FrameExporterProperty((FrameExporter)exporter)); - if (exportDialog.ShowDialog() != DialogResult.OK) - return; - - var progressDialog = new Dialogs.ProgressDialog(); - progressDialog.DoWork += Export_Work; - progressDialog.RunWorkerAsync(exporter); - progressDialog.ShowDialog(); - } - - private void toolStripMenuItem_ExportFrameSequence_Click(object sender, EventArgs e) - { - var k = nameof(toolStripMenuItem_ExportFrameSequence); - if (!exporterCache.ContainsKey(k)) exporterCache[k] = new FrameSequenceExporter(); - - var exporter = exporterCache[k]; - using var view = spinePreviewPanel.GetView(); - exporter.Resolution = spinePreviewPanel.Resolution; - exporter.PreviewerView = view; - exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; - - var exportDialog = new Dialogs.ExportDialog(new FrameSequenceExporterProperty((FrameSequenceExporter)exporter)); - if (exportDialog.ShowDialog() != DialogResult.OK) - return; - - var progressDialog = new Dialogs.ProgressDialog(); - progressDialog.DoWork += Export_Work; - progressDialog.RunWorkerAsync(exporter); - progressDialog.ShowDialog(); - } - - private void toolStripMenuItem_ExportGif_Click(object sender, EventArgs e) - { - var k = nameof(toolStripMenuItem_ExportGif); - if (!exporterCache.ContainsKey(k)) exporterCache[k] = new GifExporter(); - - var exporter = exporterCache[k]; - using var view = spinePreviewPanel.GetView(); - exporter.Resolution = spinePreviewPanel.Resolution; - exporter.PreviewerView = view; - exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; - - var exportDialog = new Dialogs.ExportDialog(new GifExporterProperty((GifExporter)exporter)); - if (exportDialog.ShowDialog() != DialogResult.OK) - return; - - var progressDialog = new Dialogs.ProgressDialog(); - progressDialog.DoWork += Export_Work; - progressDialog.RunWorkerAsync(exporter); - progressDialog.ShowDialog(); - } - - private void toolStripMenuItem_ExportWebp_Click(object sender, EventArgs e) - { - var k = nameof(toolStripMenuItem_ExportWebp); - if (!exporterCache.ContainsKey(k)) exporterCache[k] = new WebpExporter(); - - var exporter = exporterCache[k]; - using var view = spinePreviewPanel.GetView(); - exporter.Resolution = spinePreviewPanel.Resolution; - exporter.PreviewerView = view; - exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; - - var exportDialog = new Dialogs.ExportDialog(new WebpExporterProperty((WebpExporter)exporter)); - if (exportDialog.ShowDialog() != DialogResult.OK) - return; - - var progressDialog = new Dialogs.ProgressDialog(); - progressDialog.DoWork += Export_Work; - progressDialog.RunWorkerAsync(exporter); - progressDialog.ShowDialog(); - } - - private void toolStripMenuItem_ExportAvif_Click(object sender, EventArgs e) - { - var k = nameof(toolStripMenuItem_ExportAvif); - if (!exporterCache.ContainsKey(k)) exporterCache[k] = new AvifExporter(); - - var exporter = exporterCache[k]; - using var view = spinePreviewPanel.GetView(); - exporter.Resolution = spinePreviewPanel.Resolution; - exporter.PreviewerView = view; - exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; - - var exportDialog = new Dialogs.ExportDialog(new AvifExporterProperty((AvifExporter)exporter)); - if (exportDialog.ShowDialog() != DialogResult.OK) - return; - - var progressDialog = new Dialogs.ProgressDialog(); - progressDialog.DoWork += Export_Work; - progressDialog.RunWorkerAsync(exporter); - progressDialog.ShowDialog(); - } - - private void toolStripMenuItem_ExportMp4_Click(object sender, EventArgs e) - { - var k = nameof(toolStripMenuItem_ExportMp4); - if (!exporterCache.ContainsKey(k)) exporterCache[k] = new Mp4Exporter(); - - var exporter = exporterCache[k]; - using var view = spinePreviewPanel.GetView(); - exporter.Resolution = spinePreviewPanel.Resolution; - exporter.PreviewerView = view; - exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; - - var exportDialog = new Dialogs.ExportDialog(new Mp4ExporterProperty((Mp4Exporter)exporter)); - if (exportDialog.ShowDialog() != DialogResult.OK) - return; - - var progressDialog = new Dialogs.ProgressDialog(); - progressDialog.DoWork += Export_Work; - progressDialog.RunWorkerAsync(exporter); - progressDialog.ShowDialog(); - } - - private void toolStripMenuItem_ExportWebm_Click(object sender, EventArgs e) - { - var k = nameof(toolStripMenuItem_ExportWebm); - if (!exporterCache.ContainsKey(k)) exporterCache[k] = new WebmExporter(); - - var exporter = exporterCache[k]; - using var view = spinePreviewPanel.GetView(); - exporter.Resolution = spinePreviewPanel.Resolution; - exporter.PreviewerView = view; - exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; - - var exportDialog = new Dialogs.ExportDialog(new WebmExporterProperty((WebmExporter)exporter)); - if (exportDialog.ShowDialog() != DialogResult.OK) - return; - - var progressDialog = new Dialogs.ProgressDialog(); - progressDialog.DoWork += Export_Work; - progressDialog.RunWorkerAsync(exporter); - progressDialog.ShowDialog(); - } - - private void toolStripMenuItem_ExportMkv_Click(object sender, EventArgs e) - { - var k = nameof(toolStripMenuItem_ExportMkv); - if (!exporterCache.ContainsKey(k)) exporterCache[k] = new MkvExporter(); - - var exporter = exporterCache[k]; - using var view = spinePreviewPanel.GetView(); - exporter.Resolution = spinePreviewPanel.Resolution; - exporter.PreviewerView = view; - exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; - - var exportDialog = new Dialogs.ExportDialog(new MkvExporterProperty((MkvExporter)exporter)); - if (exportDialog.ShowDialog() != DialogResult.OK) - return; - - var progressDialog = new Dialogs.ProgressDialog(); - progressDialog.DoWork += Export_Work; - progressDialog.RunWorkerAsync(exporter); - progressDialog.ShowDialog(); - } - - private void toolStripMenuItem_ExportMov_Click(object sender, EventArgs e) - { - var k = nameof(toolStripMenuItem_ExportMov); - if (!exporterCache.ContainsKey(k)) exporterCache[k] = new MovExporter(); - - var exporter = exporterCache[k]; - using var view = spinePreviewPanel.GetView(); - exporter.Resolution = spinePreviewPanel.Resolution; - exporter.PreviewerView = view; - exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; - - var exportDialog = new Dialogs.ExportDialog(new MovExporterProperty((MovExporter)exporter)); - if (exportDialog.ShowDialog() != DialogResult.OK) - return; - - var progressDialog = new Dialogs.ProgressDialog(); - progressDialog.DoWork += Export_Work; - progressDialog.RunWorkerAsync(exporter); - progressDialog.ShowDialog(); - } - - private void toolStripMenuItem_ExportCustom_Click(object sender, EventArgs e) - { - var k = nameof(toolStripMenuItem_ExportCustom); - if (!exporterCache.ContainsKey(k)) exporterCache[k] = new CustomExporter(); - - var exporter = exporterCache[k]; - using var view = spinePreviewPanel.GetView(); - exporter.Resolution = spinePreviewPanel.Resolution; - exporter.PreviewerView = view; - exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; - - var exportDialog = new Dialogs.ExportDialog(new CustomExporterProperty((CustomExporter)exporter)); - if (exportDialog.ShowDialog() != DialogResult.OK) - return; - - var progressDialog = new Dialogs.ProgressDialog(); - progressDialog.DoWork += Export_Work; - progressDialog.RunWorkerAsync(exporter); - progressDialog.ShowDialog(); - } - - #endregion - - private void toolStripMenuItem_Exit_Click(object sender, EventArgs e) - { - Close(); - } - - private void toolStripMenuItem_ConvertFileFormat_Click(object sender, EventArgs e) - { - var openDialog = new Dialogs.ConvertFileFormatDialog(); - if (openDialog.ShowDialog() != DialogResult.OK) - return; - - var progressDialog = new Dialogs.ProgressDialog(); - progressDialog.DoWork += ConvertFileFormat_Work; - progressDialog.RunWorkerAsync(openDialog.Result); - progressDialog.ShowDialog(); - } - - private void toolStripMenuItem_ManageResource_Click(object sender, EventArgs e) - { - - } - - private void toolStripMenuItem_About_Click(object sender, EventArgs e) - { - using var dialog = new Dialogs.AboutDialog(); - dialog.ShowDialog(); - } - - private void toolStripMenuItem_Diagnostics_Click(object sender, EventArgs e) - { - using var dialog = new Dialogs.DiagnosticsDialog(); - dialog.ShowDialog(); - } - - private void splitContainer_SplitterMoved(object sender, SplitterEventArgs e) => ActiveControl = null; - - private void splitContainer_MouseUp(object sender, MouseEventArgs e) => ActiveControl = null; - - private void Export_Work(object? sender, DoWorkEventArgs e) - { - var worker = (BackgroundWorker)sender; - var exporter = (Exporter)e.Argument; - Invoke(() => TaskbarManager.SetProgressState(Handle, TBPFLAG.TBPF_INDETERMINATE)); - spinePreviewPanel.StopRender(); - lock (spineListView.Spines) { exporter.Export(spineListView.Spines.Where(sp => !sp.IsHidden).ToArray(), (BackgroundWorker)sender); } - e.Cancel = worker.CancellationPending; - spinePreviewPanel.StartRender(); - Invoke(() => TaskbarManager.SetProgressState(Handle, TBPFLAG.TBPF_NOPROGRESS)); - } - - private void ConvertFileFormat_Work(object? sender, DoWorkEventArgs e) - { - var worker = sender as BackgroundWorker; - var args = e.Argument as Dialogs.ConvertFileFormatDialogResult; - var newSuffix = args.JsonTarget ? ".json" : ".skel"; - - int totalCount = args.SkelPaths.Length; - int success = 0; - int error = 0; - - SkeletonConverter srcCvter = args.SourceVersion != SpineVersion.Auto ? SkeletonConverter.New(args.SourceVersion) : null; - SkeletonConverter tgtCvter = SkeletonConverter.New(args.TargetVersion); - - worker.ReportProgress(0, $"{Properties.Resources.process} 0/{totalCount}"); - for (int i = 0; i < totalCount; i++) - { - if (worker.CancellationPending) - { - e.Cancel = true; - break; - } - - var skelPath = args.SkelPaths[i]; - var newPath = Path.ChangeExtension(skelPath, newSuffix); - if (args.OutputDir is string outputDir) newPath = Path.Combine(outputDir, Path.GetFileName(newPath)); - - try - { - if (args.SourceVersion == SpineVersion.Auto) - { - try - { - srcCvter = SkeletonConverter.New(SpineUtils.GetVersion(skelPath)); - } - catch (Exception ex) - { - throw new InvalidDataException($"Auto version detection failed for {skelPath}, try to use a specific version", ex); - } - } - var root = srcCvter.Read(skelPath); - root = srcCvter.ToVersion(root, args.TargetVersion); - if (args.JsonTarget) tgtCvter.WriteJson(root, newPath); - else tgtCvter.WriteBinary(root, newPath); - success++; - } - catch (Exception ex) - { - logger.Error(ex.ToString()); - logger.Error("Failed to convert {}", skelPath); - error++; - } - - worker.ReportProgress((int)((i + 1) * 100.0) / totalCount, $"{Properties.Resources.process} {i + 1}/{totalCount}"); - } - - if (error > 0) - { - logger.Warn("Batch convert {} successfully, {} failed", success, error); - } - else - { - logger.Info("{} skel converted successfully", success); - } - } - - private void toolStripMenuItem_DesktopProjection_Click(object sender, EventArgs e) - { - toolStripMenuItem_DesktopProjection.Checked = !toolStripMenuItem_DesktopProjection.Checked; - spinePreviewPanel.EnableDesktopProjection = toolStripMenuItem_DesktopProjection.Checked; - } - - private void toolStripMenuItem_Debug_Click(object sender, EventArgs e) - { + } + + /// + /// 初始化窗口日志器 + /// + private void InitializeLogConfiguration() + { + // 窗口日志 + var rtbTarget = new NLog.Windows.Forms.RichTextBoxTarget + { + Name = "rtbTarget", + TargetForm = this, + TargetRichTextBox = rtbLog, + AutoScroll = true, + MaxLines = 3000, + SupportLinks = true, + Layout = "[${level:format=OneLetter}]${date:format=yyyy-MM-dd HH\\:mm\\:ss} - ${message}" + }; + + rtbTarget.WordColoringRules.Add(new("[D]", "Gray", "Empty", FontStyle.Bold)); + rtbTarget.WordColoringRules.Add(new("[I]", "DimGray", "Empty", FontStyle.Bold)); + rtbTarget.WordColoringRules.Add(new("[W]", "DarkOrange", "Empty", FontStyle.Bold)); + rtbTarget.WordColoringRules.Add(new("[E]", "Red", "Empty", FontStyle.Bold)); + rtbTarget.WordColoringRules.Add(new("[F]", "DarkRed", "Empty", FontStyle.Bold)); + + LogManager.Configuration.AddTarget(rtbTarget); + LogManager.Configuration.AddRule(LogLevel.Debug, LogLevel.Fatal, rtbTarget); + LogManager.ReconfigExistingLoggers(); + } + + private void MainForm_Load(object sender, EventArgs e) + { + spinePreviewPanel.StartRender(); + string cultureName = ConfigurationManager.AppSettings["localize"]; + switch (cultureName) + { + case "zh-CN": + ToolStripMenuItem_Chinese.Checked = true; + ToolStripMenuItem_English.Checked = false; + break; + case "en-US": + ToolStripMenuItem_English.Checked = true; + ToolStripMenuItem_Chinese.Checked = false; + break; + default: + ToolStripMenuItem_Chinese.Checked = true; + ToolStripMenuItem_English.Checked = false; + break; + } + } + + private void MainForm_FormClosing(object sender, FormClosingEventArgs e) + { + spinePreviewPanel.StopRender(); + } + + private void toolStripMenuItem_Open_Click(object sender, EventArgs e) + { + spineListView.Add(); + } + + private void toolStripMenuItem_BatchOpen_Click(object sender, EventArgs e) + { + spineListView.BatchAdd(); + } + + #region private void toolStripMenuItem_ExportXXX_Click(object sender, EventArgs e) + + private void toolStripMenuItem_ExportFrame_Click(object sender, EventArgs e) + { + if (spinePreviewPanel.IsUpdating && MessagePopup.Quest(Properties.Resources.isUpdatingAndManuallyExportFrame, Properties.Resources.msgBoxQuest) != DialogResult.OK) + return; + + var k = nameof(toolStripMenuItem_ExportFrame); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new FrameExporter(); + + var exporter = exporterCache[k]; + using var view = spinePreviewPanel.GetView(); + exporter.Resolution = spinePreviewPanel.Resolution; + exporter.PreviewerView = view; + exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new FrameExporterProperty((FrameExporter)exporter)); + if (exportDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += Export_Work; + progressDialog.RunWorkerAsync(exporter); + progressDialog.ShowDialog(); + } + + private void toolStripMenuItem_ExportFrameSequence_Click(object sender, EventArgs e) + { + var k = nameof(toolStripMenuItem_ExportFrameSequence); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new FrameSequenceExporter(); + + var exporter = exporterCache[k]; + using var view = spinePreviewPanel.GetView(); + exporter.Resolution = spinePreviewPanel.Resolution; + exporter.PreviewerView = view; + exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new FrameSequenceExporterProperty((FrameSequenceExporter)exporter)); + if (exportDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += Export_Work; + progressDialog.RunWorkerAsync(exporter); + progressDialog.ShowDialog(); + } + + private void toolStripMenuItem_ExportGif_Click(object sender, EventArgs e) + { + var k = nameof(toolStripMenuItem_ExportGif); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new GifExporter(); + + var exporter = exporterCache[k]; + using var view = spinePreviewPanel.GetView(); + exporter.Resolution = spinePreviewPanel.Resolution; + exporter.PreviewerView = view; + exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new GifExporterProperty((GifExporter)exporter)); + if (exportDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += Export_Work; + progressDialog.RunWorkerAsync(exporter); + progressDialog.ShowDialog(); + } + + private void toolStripMenuItem_ExportWebp_Click(object sender, EventArgs e) + { + var k = nameof(toolStripMenuItem_ExportWebp); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new WebpExporter(); + + var exporter = exporterCache[k]; + using var view = spinePreviewPanel.GetView(); + exporter.Resolution = spinePreviewPanel.Resolution; + exporter.PreviewerView = view; + exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new WebpExporterProperty((WebpExporter)exporter)); + if (exportDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += Export_Work; + progressDialog.RunWorkerAsync(exporter); + progressDialog.ShowDialog(); + } + + private void toolStripMenuItem_ExportAvif_Click(object sender, EventArgs e) + { + var k = nameof(toolStripMenuItem_ExportAvif); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new AvifExporter(); + + var exporter = exporterCache[k]; + using var view = spinePreviewPanel.GetView(); + exporter.Resolution = spinePreviewPanel.Resolution; + exporter.PreviewerView = view; + exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new AvifExporterProperty((AvifExporter)exporter)); + if (exportDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += Export_Work; + progressDialog.RunWorkerAsync(exporter); + progressDialog.ShowDialog(); + } + + private void toolStripMenuItem_ExportMp4_Click(object sender, EventArgs e) + { + var k = nameof(toolStripMenuItem_ExportMp4); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new Mp4Exporter(); + + var exporter = exporterCache[k]; + using var view = spinePreviewPanel.GetView(); + exporter.Resolution = spinePreviewPanel.Resolution; + exporter.PreviewerView = view; + exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new Mp4ExporterProperty((Mp4Exporter)exporter)); + if (exportDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += Export_Work; + progressDialog.RunWorkerAsync(exporter); + progressDialog.ShowDialog(); + } + + private void toolStripMenuItem_ExportWebm_Click(object sender, EventArgs e) + { + var k = nameof(toolStripMenuItem_ExportWebm); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new WebmExporter(); + + var exporter = exporterCache[k]; + using var view = spinePreviewPanel.GetView(); + exporter.Resolution = spinePreviewPanel.Resolution; + exporter.PreviewerView = view; + exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new WebmExporterProperty((WebmExporter)exporter)); + if (exportDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += Export_Work; + progressDialog.RunWorkerAsync(exporter); + progressDialog.ShowDialog(); + } + + private void toolStripMenuItem_ExportMkv_Click(object sender, EventArgs e) + { + var k = nameof(toolStripMenuItem_ExportMkv); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new MkvExporter(); + + var exporter = exporterCache[k]; + using var view = spinePreviewPanel.GetView(); + exporter.Resolution = spinePreviewPanel.Resolution; + exporter.PreviewerView = view; + exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new MkvExporterProperty((MkvExporter)exporter)); + if (exportDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += Export_Work; + progressDialog.RunWorkerAsync(exporter); + progressDialog.ShowDialog(); + } + + private void toolStripMenuItem_ExportMov_Click(object sender, EventArgs e) + { + var k = nameof(toolStripMenuItem_ExportMov); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new MovExporter(); + + var exporter = exporterCache[k]; + using var view = spinePreviewPanel.GetView(); + exporter.Resolution = spinePreviewPanel.Resolution; + exporter.PreviewerView = view; + exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new MovExporterProperty((MovExporter)exporter)); + if (exportDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += Export_Work; + progressDialog.RunWorkerAsync(exporter); + progressDialog.ShowDialog(); + } + + private void toolStripMenuItem_ExportCustom_Click(object sender, EventArgs e) + { + var k = nameof(toolStripMenuItem_ExportCustom); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new CustomExporter(); + + var exporter = exporterCache[k]; + using var view = spinePreviewPanel.GetView(); + exporter.Resolution = spinePreviewPanel.Resolution; + exporter.PreviewerView = view; + exporter.RenderSelectedOnly = spinePreviewPanel.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new CustomExporterProperty((CustomExporter)exporter)); + if (exportDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += Export_Work; + progressDialog.RunWorkerAsync(exporter); + progressDialog.ShowDialog(); + } + + #endregion + + private void toolStripMenuItem_Exit_Click(object sender, EventArgs e) + { + Close(); + } + + private void toolStripMenuItem_ForceSmooth_Click(object sender, EventArgs e) + { + SpineObject.TextureLoader.ForceSmooth = !toolStripMenuItem_ForceSmooth.Checked; + toolStripMenuItem_ForceSmooth.Checked = SpineObject.TextureLoader.ForceSmooth; + } + + private void toolStripMenuItem_ForceRepeated_Click(object sender, EventArgs e) + { + SpineObject.TextureLoader.ForceRepeated = !toolStripMenuItem_ForceRepeated.Checked; + toolStripMenuItem_ForceRepeated.Checked = SpineObject.TextureLoader.ForceRepeated; + } + + private void toolStripMenuItem_ForceMipmap_Click(object sender, EventArgs e) + { + SpineObject.TextureLoader.ForceMipmap = !toolStripMenuItem_ForceMipmap.Checked; + toolStripMenuItem_ForceMipmap.Checked = SpineObject.TextureLoader.ForceMipmap; + } + + private void toolStripMenuItem_ConvertFileFormat_Click(object sender, EventArgs e) + { + var openDialog = new Dialogs.ConvertFileFormatDialog(); + if (openDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += ConvertFileFormat_Work; + progressDialog.RunWorkerAsync(openDialog.Result); + progressDialog.ShowDialog(); + } + + private void toolStripMenuItem_ManageResource_Click(object sender, EventArgs e) + { + + } + + private void toolStripMenuItem_About_Click(object sender, EventArgs e) + { + using var dialog = new Dialogs.AboutDialog(); + dialog.ShowDialog(); + } + + private void toolStripMenuItem_Diagnostics_Click(object sender, EventArgs e) + { + using var dialog = new Dialogs.DiagnosticsDialog(); + dialog.ShowDialog(); + } + + private void splitContainer_SplitterMoved(object sender, SplitterEventArgs e) => ActiveControl = null; + + private void splitContainer_MouseUp(object sender, MouseEventArgs e) => ActiveControl = null; + + private void Export_Work(object? sender, DoWorkEventArgs e) + { + var worker = (BackgroundWorker)sender; + var exporter = (Exporter)e.Argument; + Invoke(() => TaskbarManager.SetProgressState(Handle, TBPFLAG.TBPF_INDETERMINATE)); + spinePreviewPanel.StopRender(); + lock (spineListView.Spines) { exporter.Export(spineListView.Spines.Where(sp => !sp.IsHidden).ToArray(), (BackgroundWorker)sender); } + e.Cancel = worker.CancellationPending; + spinePreviewPanel.StartRender(); + Invoke(() => TaskbarManager.SetProgressState(Handle, TBPFLAG.TBPF_NOPROGRESS)); + } + + private void ConvertFileFormat_Work(object? sender, DoWorkEventArgs e) + { + var worker = sender as BackgroundWorker; + var args = e.Argument as Dialogs.ConvertFileFormatDialogResult; + var newSuffix = args.JsonTarget ? ".json" : ".skel"; + + int totalCount = args.SkelPaths.Length; + int success = 0; + int error = 0; + + SkeletonConverter srcCvter = args.SourceVersion != SpineVersion.Auto ? SkeletonConverter.New(args.SourceVersion) : null; + SkeletonConverter tgtCvter = SkeletonConverter.New(args.TargetVersion); + + worker.ReportProgress(0, $"{Properties.Resources.process} 0/{totalCount}"); + for (int i = 0; i < totalCount; i++) + { + if (worker.CancellationPending) + { + e.Cancel = true; + break; + } + + var skelPath = args.SkelPaths[i]; + var newPath = Path.ChangeExtension(skelPath, newSuffix); + if (args.OutputDir is string outputDir) newPath = Path.Combine(outputDir, Path.GetFileName(newPath)); + + try + { + if (args.SourceVersion == SpineVersion.Auto) + { + try + { + srcCvter = SkeletonConverter.New(SpineUtils.GetVersion(skelPath)); + } + catch (Exception ex) + { + throw new InvalidDataException($"Auto version detection failed for {skelPath}, try to use a specific version", ex); + } + } + var root = srcCvter.Read(skelPath); + root = srcCvter.ToVersion(root, args.TargetVersion); + if (args.JsonTarget) tgtCvter.WriteJson(root, newPath); + else tgtCvter.WriteBinary(root, newPath); + success++; + } + catch (Exception ex) + { + logger.Error(ex.ToString()); + logger.Error("Failed to convert {}", skelPath); + error++; + } + + worker.ReportProgress((int)((i + 1) * 100.0) / totalCount, $"{Properties.Resources.process} {i + 1}/{totalCount}"); + } + + if (error > 0) + { + logger.Warn("Batch convert {} successfully, {} failed", success, error); + } + else + { + logger.Info("{} skel converted successfully", success); + } + } + + private void toolStripMenuItem_DesktopProjection_Click(object sender, EventArgs e) + { + toolStripMenuItem_DesktopProjection.Checked = !toolStripMenuItem_DesktopProjection.Checked; + spinePreviewPanel.EnableDesktopProjection = toolStripMenuItem_DesktopProjection.Checked; + } + + private void toolStripMenuItem_Debug_Click(object sender, EventArgs e) + { #if DEBUG - //var cvt = SkeletonConverter.New(SpineVersion.V38); - //var root = cvt.ReadBinary(@"D:\ACGN\AzurLane_Export\AzurLane_Dynamic\docs\aerhangeersike\aerhangeersike_3\aerhangeersike_3 - 副本.skel"); - //cvt.WriteJson(root, @"D:\ACGN\AzurLane_Export\AzurLane_Dynamic\docs\aerhangeersike\aerhangeersike_3\aerhangeersike_3.json"); + //var cvt = SkeletonConverter.New(SpineVersion.V38); + //var root = cvt.ReadBinary(@"D:\ACGN\AzurLane_Export\AzurLane_Dynamic\docs\aerhangeersike\aerhangeersike_3\aerhangeersike_3 - 副本.skel"); + //cvt.WriteJson(root, @"D:\ACGN\AzurLane_Export\AzurLane_Dynamic\docs\aerhangeersike\aerhangeersike_3\aerhangeersike_3.json"); - //root = cvt.ReadJson(@"D:\ACGN\AzurLane_Export\AzurLane_Dynamic\docs\aerhangeersike\aerhangeersike_3\aerhangeersike_3.json"); - //cvt.WriteBinary(root, @"D:\ACGN\AzurLane_Export\AzurLane_Dynamic\docs\aerhangeersike\aerhangeersike_3\aerhangeersike_3.skel"); - //var sp = SpineObject.New(SpineVersion.V38, @"D:\ACGN\AzurLane_Export\AzurLane_Dynamic\docs\aerhangeersike\aerhangeersike_3\aerhangeersike_3.skel"); + //root = cvt.ReadJson(@"D:\ACGN\AzurLane_Export\AzurLane_Dynamic\docs\aerhangeersike\aerhangeersike_3\aerhangeersike_3.json"); + //cvt.WriteBinary(root, @"D:\ACGN\AzurLane_Export\AzurLane_Dynamic\docs\aerhangeersike\aerhangeersike_3\aerhangeersike_3.skel"); + //var sp = SpineObject.New(SpineVersion.V38, @"D:\ACGN\AzurLane_Export\AzurLane_Dynamic\docs\aerhangeersike\aerhangeersike_3\aerhangeersike_3.skel"); - //var cvt = SkeletonConverter.New(SpineVersion.V38); - //var root = cvt.ReadJson(@"D:\ACGN\G\GirlsCreation\standing_spine\st4020069\st4020069.json"); - //cvt.WriteBinary(root, @"D:\ACGN\G\GirlsCreation\standing_spine\st4020069\st4020069.skel"); - //var sp = SpineObject.New(SpineVersion.V38, @"D:\ACGN\G\GirlsCreation\standing_spine\st4020069\st4020069.skel"); - //_Test(); + //var cvt = SkeletonConverter.New(SpineVersion.V38); + //var root = cvt.ReadJson(@"D:\ACGN\G\GirlsCreation\standing_spine\st4020069\st4020069.json"); + //cvt.WriteBinary(root, @"D:\ACGN\G\GirlsCreation\standing_spine\st4020069\st4020069.skel"); + //var sp = SpineObject.New(SpineVersion.V38, @"D:\ACGN\G\GirlsCreation\standing_spine\st4020069\st4020069.skel"); + //_Test(); #endif - } + } - private void ToolStripMenuItem_English_Click(object sender, EventArgs e) - { - if (ToolStripMenuItem_English.Checked) return; - ChangeLanguage("en-US"); - } + private void ToolStripMenuItem_English_Click(object sender, EventArgs e) + { + if (ToolStripMenuItem_English.Checked) return; + ChangeLanguage("en-US"); + } - private void ToolStripMenuItem_Chinese_Click(object sender, EventArgs e) - { - if (ToolStripMenuItem_Chinese.Checked) return; - ChangeLanguage("zh-CN"); - } + private void ToolStripMenuItem_Chinese_Click(object sender, EventArgs e) + { + if (ToolStripMenuItem_Chinese.Checked) return; + ChangeLanguage("zh-CN"); + } - private void ChangeLanguage(string localize) - { - DialogResult result = MessageBox.Show( - Properties.Resources.restartPrompt, - Properties.Resources.restartTitle, - MessageBoxButtons.YesNo, - MessageBoxIcon.Question); + private void ChangeLanguage(string localize) + { + DialogResult result = MessageBox.Show( + Properties.Resources.restartPrompt, + Properties.Resources.restartTitle, + MessageBoxButtons.YesNo, + MessageBoxIcon.Question); - if (result == DialogResult.Yes) - { - LocalizeConfiguration.UpdateLocalizeSetting(localize); - LocalizeConfiguration.SetCulture(); - Application.Restart(); - Environment.Exit(0); - } - } + if (result == DialogResult.Yes) + { + LocalizeConfiguration.UpdateLocalizeSetting(localize); + LocalizeConfiguration.SetCulture(); + Application.Restart(); + Environment.Exit(0); + } + } - //private void spinePreviewer_KeyDown(object sender, KeyEventArgs e) - //{ - // switch (e.KeyCode) - // { - // case Keys.Space: - // if ((ModifierKeys & Keys.Alt) != 0) - // spinePreviewer.ClickStopButton(); - // else - // spinePreviewer.ClickStartButton(); - // break; - // case Keys.Right: - // if ((ModifierKeys & Keys.Alt) != 0) - // spinePreviewer.ClickForwardFastButton(); - // else - // spinePreviewer.ClickForwardStepButton(); - // break; - // case Keys.Left: - // if ((ModifierKeys & Keys.Alt) != 0) - // spinePreviewer.ClickRestartButton(); - // break; - // } - //} - } + //private void spinePreviewer_KeyDown(object sender, KeyEventArgs e) + //{ + // switch (e.KeyCode) + // { + // case Keys.Space: + // if ((ModifierKeys & Keys.Alt) != 0) + // spinePreviewer.ClickStopButton(); + // else + // spinePreviewer.ClickStartButton(); + // break; + // case Keys.Right: + // if ((ModifierKeys & Keys.Alt) != 0) + // spinePreviewer.ClickForwardFastButton(); + // else + // spinePreviewer.ClickForwardStepButton(); + // break; + // case Keys.Left: + // if ((ModifierKeys & Keys.Alt) != 0) + // spinePreviewer.ClickRestartButton(); + // break; + // } + //} + } } diff --git a/SpineViewer/Forms/SpineViewerForm.en.resx b/SpineViewer/Forms/SpineViewerForm.en.resx index a3c0f56..bd6dcf6 100644 --- a/SpineViewer/Forms/SpineViewerForm.en.resx +++ b/SpineViewer/Forms/SpineViewerForm.en.resx @@ -119,7 +119,7 @@ - 350, 808 + 350, 804 Model List @@ -131,7 +131,7 @@ - 430, 267 + 430, 265 Image Parameters @@ -143,7 +143,7 @@ - 430, 533 + 430, 531 Model Parameters @@ -155,11 +155,11 @@ - 430, 808 + 430, 804 - 267 + 265 @@ -168,7 +168,7 @@ - 788, 808 + 788, 804 @@ -177,7 +177,7 @@ - 962, 808 + 962, 804 Preview Screen @@ -189,7 +189,7 @@ - 1758, 808 + 1758, 804 @@ -198,7 +198,7 @@ - 1758, 188 + 1758, 192 @@ -207,16 +207,16 @@ - 808 + 804 - 346, 781 + 346, 777 - 426, 506 + 426, 504 @@ -225,13 +225,13 @@ - 426, 240 + 426, 238 - 958, 781 + 958, 777 @@ -246,22 +246,22 @@ File(&F) - 270, 34 + 266, 34 Open(&O)... - 270, 34 + 266, 34 Batch Open(&B)... - 267, 6 + 263, 6 - 270, 34 + 266, 34 Export(&E) @@ -315,14 +315,29 @@ FFmpeg Custom Export... - 267, 6 + 263, 6 - 270, 34 + 266, 34 Exit(&X) + + 112, 32 + + + Texture(&E) + + + Force Smooth + + + Force Repeated + + + Force Mipmap + 93, 32 @@ -392,12 +407,6 @@ Language(&L) - - 270, 34 - - - 270, 34 - diff --git a/SpineViewer/Forms/SpineViewerForm.resx b/SpineViewer/Forms/SpineViewerForm.resx index 14c6482..a23b1aa 100644 --- a/SpineViewer/Forms/SpineViewerForm.resx +++ b/SpineViewer/Forms/SpineViewerForm.resx @@ -117,1059 +117,816 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 260, 34 - - - toolStripMenuItem_Debug - - - toolStripSeparator5 - - - ToolStripMenuItem_Chinese - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Horizontal + + Fill - - MP4... - - - 2, 25 - - - - - - 0 + + + 10, 5 - - 2, 2, 2, 2 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.PropertyGrid, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 0 - - - 0 - - - 288, 34 - - - 285, 6 - - - Ctrl+O - - - 1778, 1055 - - - 0 - - - 2, 25 - - - groupBox_PreviewConfig - - - splitContainer_Information.Panel1 - - - 0 - - - 288, 34 - - - System.Windows.Forms.RichTextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 285, 6 - - - toolStripMenuItem_ExportMov - - - ToolStripMenuItem_Language - - - 1 - - - 962, 802 - - - toolStripMenuItem_BatchOpen - - - toolStripMenuItem_Export - - - - - - 菜单 - - - - - - - 0 - - - splitContainer_Information.Panel2 - - - 254, 34 - - - 桌面投影 - - - propertyGrid_Previewer - - - 350, 802 - - - 182, 34 - - - 0 - 2, 2, 2, 2 Horizontal - - 288, 34 - - - 2, 2, 2, 2 - - - 208, 34 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - splitContainer_Config - - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - splitContainer_Information - - - 2, 2, 2, 2 - - - toolStripSeparator1 - - - 430, 802 - - - WebM... - - - 2, 2, 2, 2 - - - 0 - - - toolStripMenuItem_ExportMkv - - - 958, 775 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 788 - - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 288, 34 - - + Fill - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GIF... - - - toolStripMenuItem_About - - - 1778, 36 - - - SpineViewer.Controls.SpineListView, SpineViewer, Culture=neutral, PublicKeyToken=null - - - - - - 254, 34 - - - SpineViewer.Controls.SpinePreviewPanel, SpineViewer, Culture=neutral, PublicKeyToken=null - - - toolStripSeparator6 - - - WebP... - - - splitContainer_Config.Panel1 - - - splitContainer_MainForm.Panel2 - - - spineViewPropertyGrid - - - 管理下载资源(&M)... - - - splitContainer_Functional - - - 288, 34 - - - 83, 32 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - - 模型列表 - - + 0, 0 - - toolStripSeparator2 - - - 788, 802 - - - 退出(&X) - - - Fill - - - $this - - - System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripMenuItem_Download - - - splitContainer_MainForm - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox_Preview - - - 1 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + 2, 2, 2, 2 - - splitContainer_Config.Panel2 - - - 182, 34 - - - SpineViewer - - - 调试 - - - - - - 2, 2, 2, 2 - - - 0 - - - 0 - - - 8 - - - 208, 34 - - - groupBox_SkelConfig - - - 1 - - - toolStripMenuItem_Experiment - - - 2, 2, 2, 2 - - - 单帧画面... - - - splitContainer_Information - Fill - - Consolas, 9pt - - - toolStripMenuItem_ManageResource - - - 语言(&L) - - - 426, 501 - - - 1 - - - 8, 2, 0, 2 - - - 0, 0 - - - - - - 0 - - - rtbLog - - - 1758, 1004 - - - menuStrip - - - 0, 36 - - - splitContainer_MainForm.Panel1 - - - 182, 34 - - - spinePreviewPanel - - - 0 - - - 0 - - - Fill - - - 8 - - - splitContainer_MainForm - - - False - - - toolStripMenuItem_ExportWebp - - - False - - - - 0, 0 - - toolStripMenuItem_ExportFrame - - - toolStripMenuItem_ExportWebm - - - toolTip - - - - - - 144, 144 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel_MainForm + + 2, 2, 2, 2 spineListView - - groupBox_PreviewConfig + + SpineViewer.Controls.SpineListView, SpineViewer, Culture=neutral, PublicKeyToken=null - + + groupBox_SkelList + + 0 - - 1778, 1019 + + Fill - - 0, 0, 0, 0 + + 0, 0 - - System.Windows.Forms.SplitContainer, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - + + 2, 2, 2, 2 2, 2, 2, 2 - - 预览画面 + + 350, 794 - - 1758, 802 + + + 0 + + + 模型列表 + + + groupBox_SkelList + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer_Information.Panel1 + + + 0 + + + splitContainer_Information.Panel1 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer_Information + + + 0 + + + Fill + + + 0, 0 + + + 2, 2, 2, 2 + + + Horizontal + + + propertyGrid_Previewer + + + System.Windows.Forms.PropertyGrid, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_PreviewConfig + + + 0 + + + Fill + + + 0, 0 + + + 0, 0, 0, 0 + + + 2, 2, 2, 2 + + + 430, 262 + + + 1 + + + 画面参数 + + + groupBox_PreviewConfig + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer_Config.Panel1 + + + 0 + + + splitContainer_Config.Panel1 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer_Config + + + 0 + + + Fill + + + 0, 0 + + + 0, 0, 0, 0 + + + 2, 2, 2, 2 + + + 430, 524 + + + 0 + + + 模型参数 + + + groupBox_SkelConfig + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer_Config.Panel2 + + + 0 + + + splitContainer_Config.Panel2 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer_Config + + + 1 + + + 430, 794 + + + 262 + + + 8 + + + 0 + + + splitContainer_Config + + + System.Windows.Forms.SplitContainer, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer_Information.Panel2 + + + 0 + + + splitContainer_Information.Panel2 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer_Information + + + 1 + + + 788, 794 + + + 350 + + + 8 + + + 1 + + + splitContainer_Information + + + System.Windows.Forms.SplitContainer, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer_Functional.Panel1 + + + 0 + + + splitContainer_Functional.Panel1 System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 诊断信息(&D) + + splitContainer_Functional - - Alt+F4 + + 0 - - + + spinePreviewPanel - - Fill + + SpineViewer.Controls.SpinePreviewPanel, SpineViewer, Culture=neutral, PublicKeyToken=null - - 430, 266 - - - toolStripMenuItem_Exit + + groupBox_Preview 0 + + Fill + + + 0, 0 + + + 2, 2, 2, 2 + + + 2, 2, 2, 2 + + + 962, 794 + + + 1 + + + 预览画面 + + + groupBox_Preview + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer_Functional.Panel2 + + + 0 + splitContainer_Functional.Panel2 - - 2, 2, 2, 2 + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - splitContainer_Information - - - 帧序列... - - - 0, 0 - - - toolStripMenuItem_ExportGif - - - 1758, 194 - - - System.Windows.Forms.ToolTip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - splitContainer_Information.Panel1 - - - groupBox_SkelList - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - 4 - - - toolStripMenuItem_ExportFrameSequence - - - 346, 775 - - - 288, 34 - - + splitContainer_Functional - - System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1758, 794 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 788 - - - - - toolStripMenuItem_ConvertFileFormat - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 254, 34 - - - 2, 25 - - - - - - toolStripMenuItem_Tool - - - 426, 239 - - - 0 - - - 帮助(&H) - - - Fill + + 8 2 - - splitContainer_Config.Panel1 + + splitContainer_Functional - - 266 + + System.Windows.Forms.SplitContainer, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + splitContainer_MainForm.Panel1 + + + 0 + + + splitContainer_MainForm.Panel1 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer_MainForm + + + 0 + + + Fill + + + Consolas, 9pt + + + 0, 0 + + + 2, 2, 2, 2 + + + 1758, 202 + + + 0 + + - - splitContainer_Functional.Panel2 + + False - - toolStripMenuItem_Help + + rtbLog - + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer_MainForm.Panel2 + + + 0 + + + splitContainer_MainForm.Panel2 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer_MainForm + + + 1 + + + 1758, 1004 + + + 794 + + + 8 + + + 3 + + + splitContainer_MainForm + + + System.Windows.Forms.SplitContainer, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel_MainForm + + + 0 + + + Fill + + + 2, 25 + + + 2, 2, 2, 2 + + + 346, 767 + + + Fill + + + 2, 25 + + + 2, 2, 2, 2 + + + 426, 497 + + + 0 + + + spineViewPropertyGrid + + + SpineViewer.Controls.SpineViewPropertyGrid, SpineViewer, Culture=neutral, PublicKeyToken=null + + + groupBox_SkelConfig + + + 0 + + + 0 + + + Fill + + + False + + + 2, 25 + + + 2, 2, 2, 2 + + + 426, 235 + + + 1 + + + Fill + + + 2, 25 + + + 2, 2, 2, 2 + + + 958, 767 + + + 0 + + + 26, 24 + + 84, 32 文件(&F) - - 实验性功能(&E) + + 270, 34 - - + + 强制 Smooth - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 270, 34 + + + 强制 Repeated + + + 270, 34 + + + 强制 Mipmap + + + 84, 32 + + + 纹理(&E) + + + 84, 32 + + + 工具(&T) + + + 88, 32 + + + 下载(&D) + + + 88, 32 + + + 帮助(&H) 138, 32 - + + 实验性功能(&E) + + + 83, 32 + + + 语言(&L) + + 0, 0 - - toolStripMenuItem_File + + 8, 2, 0, 2 - - splitContainer_Functional.Panel1 + + 1778, 36 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - - Fill - - - groupBox_SkelConfig - - - toolStripMenuItem_Diagnostics - - + 0 - - toolStripMenuItem_ExportCustom + + 菜单 - - splitContainer_Config + + menuStrip - - splitContainer_MainForm + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 + + $this - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + 1 - - + + Ctrl+O - - 画面参数 + + 254, 34 - - 802 + + 打开(&O)... - - splitContainer_Information.Panel2 + + 254, 34 - - Fill + + 批量打开(&B)... - - 1 + + 251, 6 - - + + 254, 34 - - 3 + + 导出(&E) + + + 288, 34 + + + 单帧画面... + + + 288, 34 + + + 帧序列... + + + 285, 6 + + + 288, 34 + + + GIF... + + + 288, 34 + + + WebP... 288, 34 - - 0 + + AVIF... - - 205, 6 + + 285, 6 - - 简体中文 + + 288, 34 - - 0 - - - CenterScreen - - - Fill + + MP4... 288, 34 + + WebM... + + + 288, 34 + + + MKV... + + + 288, 34 + MOV... - - 2, 2, 2, 2 - - - Fill - - - 1 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - SpineViewer.Controls.SpineViewPropertyGrid, SpineViewer, Culture=neutral, PublicKeyToken=null - - - SpineViewerForm - - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 1 - - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 下载(&D) - - - splitContainer_MainForm.Panel1 - - - 2, 2, 2, 2 - - - 导出(&E) - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 批量打开(&B)... - - - splitContainer_Functional - - - toolStripMenuItem_DesktopProjection - - - 模型参数 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 254, 34 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - toolStripSeparator4 - - - - - - 2, 2, 2, 2 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 88, 32 - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MKV... - - - 0 - - - 251, 6 - - - 0, 0, 0, 0 - - - 工具(&T) - - - splitContainer_Functional.Panel1 - - - - - - 251, 6 - - - 2, 2, 2, 2 - - - - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - False - - - 打开(&O)... - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2, 25 - 285, 6 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 关于(&A) - - + 288, 34 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - splitContainer_Config - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 10, 5 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripMenuItem_ExportAvif - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.SplitContainer, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - - 8 - - - toolStripMenuItem_Open - - - 0, 0 - - - Fill - - - 0 - - - - - - 0, 0 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2, 2, 2, 2 - FFmpeg 自定义导出... - - 88, 32 + + 251, 6 - - toolStripMenuItem_ExportMp4 + + Alt+F4 + + + 254, 34 + + + 退出(&X) + + + 254, 34 转换文件格式(&C)... - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 260, 34 - - 254, 34 + + 管理下载资源(&M)... - - System.Windows.Forms.SplitContainer, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 270, 34 - - Fill + + 诊断信息(&D) - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 430, 528 - - - - - - System.Windows.Forms.SplitContainer, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - - 8 - - - 84, 32 - - - panel_MainForm - - - groupBox_SkelList - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 267, 6 - 208, 34 + 270, 34 - - ToolStripMenuItem_English + + 关于(&A) - - splitContainer_MainForm.Panel2 + + 270, 34 - - 0 + + 调试 - - 10, 5, 10, 10 + + False + + + 270, 34 + + + 桌面投影 + + + 182, 34 English - + + 182, 34 + + + 简体中文 + + + Fill + + + 0, 36 + + 2, 2, 2, 2 - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 10, 5, 10, 10 - - toolStripSeparator3 + + 1778, 1019 - - splitContainer_Config.Panel2 + + 4 - + + panel_MainForm + + + System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 0 - - 2, 2, 2, 2 + + 187, 20 + + + True + + + 89 + + + 144, 144 - - 350 - - - AVIF... - - - 288, 34 + + 1778, 1055 @@ -4317,34 +4074,253 @@ ////////wAAAAAAAB/////// - - groupBox_Preview + + 2, 2, 2, 2 - - 0 + + CenterScreen - - 0, 0 + + SpineViewer + + + toolStripMenuItem_File + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_Open + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_BatchOpen + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator1 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_Export + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ExportFrame + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ExportFrameSequence + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator4 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ExportGif + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ExportWebp + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ExportAvif + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator5 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ExportMp4 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ExportWebm System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 1 + + toolStripMenuItem_ExportMkv - - 0 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ExportMov + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator6 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ExportCustom + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator2 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_Exit + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_Texture + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ForceSmooth + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ForceRepeated + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ForceMipmap + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_Tool + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ConvertFileFormat + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_Download + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_ManageResource + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_Help + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_Diagnostics + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator3 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_About + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_Debug + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_Experiment + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem_DesktopProjection + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ToolStripMenuItem_Language + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ToolStripMenuItem_English + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ToolStripMenuItem_Chinese + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolTip + + + System.Windows.Forms.ToolTip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + SpineViewerForm + + + System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 89 - - - 26, 24 - - - True - - - 187, 20 - \ No newline at end of file