Compare commits

..

89 Commits

Author SHA1 Message Date
ww-rm
acf48cd74d Merge pull request #51 from ww-rm/dev/wf
Release v0.12.17
2025-06-14 20:10:34 +08:00
ww-rm
2fecf4223a 更新至v0.12.17 2025-06-14 20:08:54 +08:00
ww-rm
2953ec44fb update changelog 2025-06-14 20:08:45 +08:00
ww-rm
77399b4524 改善动画边界检测 2025-06-14 20:07:09 +08:00
ww-rm
b34639c383 Merge pull request #48 from ww-rm/dev/wf
Release v0.12.16
2025-06-11 13:43:20 +08:00
ww-rm
c0e2bb81e5 更新至v0.12.16 2025-06-11 13:41:25 +08:00
ww-rm
55ebcc1857 合并导出时也允许自动时长 2025-06-11 13:38:55 +08:00
ww-rm
e3a201af89 Merge pull request #42 from ww-rm/dev/wf
修复工作流错误
2025-05-28 18:23:30 +08:00
ww-rm
292ede8461 修复工作流错误 2025-05-28 18:22:33 +08:00
ww-rm
112a9a1bf2 Merge pull request #41 from ww-rm/dev/wf
修复工作流错误
2025-05-28 17:29:22 +08:00
ww-rm
63ed8d7ca4 修复工作流错误 2025-05-28 17:27:55 +08:00
ww-rm
d1e33c25bc Merge pull request #40 from ww-rm/dev/wf
修复工作流错误
2025-05-28 17:15:34 +08:00
ww-rm
ce7c6f3802 修复工作流错误 2025-05-28 17:14:08 +08:00
ww-rm
0a30af0ad2 Merge pull request #39 from ww-rm/dev/wf
修复工作流错误
2025-05-28 17:11:05 +08:00
ww-rm
0b478cab18 修复工作流错误 2025-05-28 17:09:58 +08:00
ww-rm
b14849a0b1 Merge pull request #38 from ww-rm/dev/wf
Dev/wf
2025-05-28 17:00:46 +08:00
ww-rm
b7f5f24e6f Merge branch 'dev/wf' of github.com:ww-rm/SpineViewer into dev/wf 2025-05-28 16:59:51 +08:00
ww-rm
150331d2e4 修复工作流错误 2025-05-28 16:59:38 +08:00
ww-rm
dcec8797b0 Merge pull request #37 from ww-rm/dev/wf
Dev/wf
2025-05-28 16:46:12 +08:00
ww-rm
4d1aec9ed8 Merge branch 'release/wf' into dev/wf 2025-05-28 16:45:42 +08:00
ww-rm
0cb325820b 修复工作流版本提取错误 2025-05-28 16:38:00 +08:00
ww-rm
2a862b28be 更改工作流自动获取版本号 2025-05-28 16:29:29 +08:00
ww-rm
c2935f49e9 更新至v0.12.15 2025-05-28 16:29:29 +08:00
ww-rm
22043f8f38 update changelog 2025-05-28 16:29:29 +08:00
ww-rm
3020a818f0 修复附件类型枚举量的字符串大小写问题 2025-05-28 16:29:29 +08:00
ww-rm
30177e8d7f 更改工作流自动获取版本号 2025-05-28 16:28:12 +08:00
ww-rm
3ad49838be 更新至v0.12.15 2025-05-28 16:05:55 +08:00
ww-rm
3e480abd44 update changelog 2025-05-28 16:05:42 +08:00
ww-rm
49f6b28aef 修复附件类型枚举量的字符串大小写问题 2025-05-28 16:05:09 +08:00
ww-rm
b81d13b582 更新至v0.12.14 2025-05-28 09:13:03 +08:00
ww-rm
04eb3cb640 update changelog 2025-05-28 09:12:37 +08:00
ww-rm
0ac75a088a 修复curve读取错误 2025-05-28 09:11:25 +08:00
ww-rm
cd652a72a1 更新至v0.12.13 2025-05-19 10:31:34 +08:00
ww-rm
828ff30dbf update changelog 2025-05-19 10:31:15 +08:00
ww-rm
f452fe8a71 生成文件增加额外的随机后缀 2025-05-19 10:30:29 +08:00
ww-rm
15e29a3b8a 修复readattachmentline里的顺序错误 2025-05-17 10:47:49 +08:00
ww-rm
5c6e98f5e1 更新至v0.12.12 2025-05-13 14:21:13 +08:00
ww-rm
ef06073119 update changelog 2025-05-13 14:19:52 +08:00
ww-rm
bca8b0ad85 补充SkinnedMeshAttachment附件的渲染 2025-05-13 14:19:15 +08:00
ww-rm
4983b1fa88 更新至v0.12.11 2025-05-08 18:35:23 +08:00
ww-rm
f6b6d9f0e7 update changelog 2025-05-08 18:35:12 +08:00
ww-rm
12a168df92 修复atlas null 引用导致的闪退 2025-05-08 18:34:43 +08:00
ww-rm
e06d2012d6 更新至v0.12.10 2025-05-07 17:45:07 +08:00
ww-rm
faed2448eb update changelog 2025-05-07 17:44:52 +08:00
ww-rm
a80aed54a0 增加纹理加载菜单选项 2025-05-07 17:43:55 +08:00
ww-rm
3f9c4dfe99 抽出TextureLoader,增加部分可调参数 2025-05-07 17:43:42 +08:00
ww-rm
3c91f335fc 修复skin索引顺序问题 2025-05-06 19:11:46 +08:00
ww-rm
1ea4586360 Merge pull request #21 from steve14608/main
4.1版本格式转换,以及4.2版本发现的一些小bug
2025-05-02 16:29:23 +08:00
YongQi Li
45e08b5b60 Merge branch 'main' of https://github.com/steve14608/SpineViewer 2025-05-02 16:25:53 +08:00
YongQi Li
43ce5a5288 修改了skin2idx的读取逻辑 2025-05-02 16:25:39 +08:00
YongQi Li
887315ceda Merge branch 'main' of https://github.com/steve14608/SpineViewer 2025-05-02 14:52:01 +08:00
ww-rm
30b5c8dd74 4.1的格式转换 2025-05-02 14:51:40 +08:00
ww-rm
ef7ef76a59 更新至v0.12.9 2025-05-01 22:40:59 +08:00
ww-rm
a9834bcc13 update changelog 2025-05-01 22:40:38 +08:00
ww-rm
ec2752464d 修复部分情况下为调用UpdateCache导致皮肤设置失败 2025-05-01 22:38:55 +08:00
ww-rm
7b6a9b2a0f 更新至v0.12.8 2025-05-01 20:56:02 +08:00
ww-rm
8eda4f0849 update readme 2025-05-01 20:55:43 +08:00
ww-rm
cde25214ae update changelog 2025-05-01 20:55:10 +08:00
ww-rm
9f1f66776c 修复浮点数转换问题 2025-05-01 20:52:55 +08:00
ww-rm
c93b78528d 修复浮点数转换问题 2025-05-01 20:49:29 +08:00
ww-rm
e567e61383 修复写入问题 2025-05-01 20:17:17 +08:00
ww-rm
7c3184d88a 修改 Write 输入类型 2025-05-01 17:07:04 +08:00
ww-rm
e6f38657a3 修复path constraints target错误 2025-05-01 00:28:10 +08:00
ww-rm
ebcd61a9a2 fix ConvertFileFormatDialog localization 2025-04-30 11:08:05 +08:00
ww-rm
179fbfe84f 修改默认值写入范式 2025-04-30 02:19:43 +08:00
ww-rm
79441abff3 fix some text and shortcut keys 2025-04-29 16:23:59 +08:00
ww-rm
c3db8cd4ea Merge pull request #17 from myssal/main
feat: english localization
2025-04-29 16:08:56 +08:00
Myssal
27c58ffd87 fix: remove duplicate elements 2025-04-29 01:57:29 +07:00
Myssal
244249db2b fix: displayResolution typo 2025-04-29 01:10:53 +07:00
Myssal
33b937da87 fix: use check and ignore action instead of disable item 2025-04-29 01:04:06 +07:00
ww-rm
058834e8a6 修复读取部分问题 2025-04-28 23:45:01 +08:00
ww-rm
b134af3727 small change 2025-04-28 23:44:50 +08:00
ww-rm
6d2eafb4f1 add SkeletonConverter42 2025-04-28 20:30:01 +08:00
ww-rm
9f618804df 明确null类型 2025-04-28 20:21:31 +08:00
Myssal
61a3a62b65 Merge pull request #1 from myssal/feat/en_localization
Feat: English localization
2025-04-28 01:26:57 +07:00
Myssal
ced25dec87 feat: tooltip button in previewpanel localize 2025-04-28 01:23:22 +07:00
Myssal
60d5f3361a feat: main form localize 2025-04-28 01:15:10 +07:00
Myssal
c8ee4cf0c9 feat: spine exporter localize 2025-04-28 01:03:18 +07:00
Myssal
177434e503 feat: spineview localize 2025-04-28 00:08:25 +07:00
Myssal
58b45cde31 feat: spineview localize 2025-04-27 23:48:36 +07:00
Myssal
ff87030894 fix: parse constructor parameter to field 2025-04-27 23:18:49 +07:00
Myssal
7635adf637 feat: messagebox title localize 2025-04-27 22:06:45 +07:00
Myssal
ca7a40044c feat: more controls localize 2025-04-27 21:57:53 +07:00
Myssal
ce5be30f1d feat: localize model parameters 2025-04-27 21:01:54 +07:00
Myssal
1cb8f077f5 feat: localize propertygrid class 2025-04-27 21:01:31 +07:00
Myssal
61794cf784 feat: localize forms, controls, dialogs. 2025-04-27 19:52:56 +07:00
Myssal
045b191e4d feat: correct culture and set message box based on localize 2025-04-27 18:42:57 +07:00
Myssal
6116f6a4be feat: base function to switch language 2025-04-26 23:16:11 +07:00
ww-rm
ca7e94a306 update win32 2025-04-26 15:23:50 +08:00
92 changed files with 39230 additions and 2582 deletions

View File

@@ -1,46 +1,80 @@
name: Build & Release
on:
push:
tags:
- 'v*.*.*'
pull_request:
branches:
- release/wf
types:
- closed
jobs:
build-release:
if: ${{ github.event.pull_request.merged == true }}
runs-on: windows-latest
env:
PROJECT_NAME: SpineViewer
VERSION: ${{ github.ref_name }}
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
fetch-tags: true
- name: Setup .NET SDK
uses: actions/setup-dotnet@v3
with:
dotnet-version: '8.0.x'
dotnet-version: "8.0.x"
- name: Extract version from csproj
shell: pwsh
run: |
[xml]$proj = Get-Content "$env:PROJECT_NAME\$env:PROJECT_NAME.csproj"
$VERSION_NUM = $proj.Project.PropertyGroup.Version
$VERSION_TAG = "v$VERSION_NUM"
"VERSION=$VERSION_TAG" >> $env:GITHUB_ENV
- name: Check Version Tag
shell: pwsh
run: |
if (-not $env:VERSION) {
Write-Error "Version tag not found in csproj file."
exit 1
}
Write-Host "Version tag found: $env:VERSION"
- name: Tag merge commit
shell: pwsh
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag $env:VERSION
git push --tags
- name: Publish FrameworkDependent version
shell: pwsh
run: |
dotnet publish ${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}.csproj -c Release -r win-x64 --sc false -p:PublishSingleFile=true -o publish/${{ env.PROJECT_NAME }}-${{ env.VERSION }}
dotnet publish "$env:PROJECT_NAME\$env:PROJECT_NAME.csproj" -c Release -r win-x64 --sc false -o "publish\$env:PROJECT_NAME-$env:VERSION"
- name: Publish SelfContained version
shell: pwsh
run: |
dotnet publish ${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}.csproj -c Release -r win-x64 --sc true -p:PublishSingleFile=true -o publish/${{ env.PROJECT_NAME }}-${{ env.VERSION }}-SelfContained
dotnet publish "$env:PROJECT_NAME\$env:PROJECT_NAME.csproj" -c Release -r win-x64 --sc true -o "publish\$env:PROJECT_NAME-$env:VERSION-SelfContained"
- name: Create release directory
run: mkdir release
shell: pwsh
run: |
New-Item -ItemType Directory -Path release -Force | Out-Null
- name: Compress FrameworkDependent version
shell: pwsh
run: |
Compress-Archive -Path "publish/${env:PROJECT_NAME}-${env:VERSION}" -DestinationPath "release/${env:PROJECT_NAME}-${env:VERSION}.zip" -Force
Compress-Archive -Path "publish\$env:PROJECT_NAME-$env:VERSION\*" -DestinationPath "release\$env:PROJECT_NAME-$env:VERSION.zip" -Force
- name: Compress SelfContained version
shell: pwsh
run: |
Compress-Archive -Path "publish/${env:PROJECT_NAME}-${env:VERSION}-SelfContained" -DestinationPath "release/${env:PROJECT_NAME}-${env:VERSION}-SelfContained.zip" -Force
Compress-Archive -Path "publish\$env:PROJECT_NAME-$env:VERSION-SelfContained\*" -DestinationPath "release\$env:PROJECT_NAME-$env:VERSION-SelfContained.zip" -Force
- name: Create GitHub Release
id: create_release
uses: actions/create-release@v1
@@ -51,7 +85,7 @@ jobs:
release_name: Release ${{ env.VERSION }}
draft: false
prerelease: false
- name: Upload FrameworkDependent zip
uses: actions/upload-release-asset@v1
env:
@@ -61,7 +95,7 @@ jobs:
asset_path: release/${{ env.PROJECT_NAME }}-${{ env.VERSION }}.zip
asset_name: ${{ env.PROJECT_NAME }}-${{ env.VERSION }}.zip
asset_content_type: application/zip
- name: Upload SelfContained zip
uses: actions/upload-release-asset@v1
env:

View File

@@ -1,5 +1,47 @@
# CHANGELOG
## v0.12.17
- 动画边界检测的帧率提高到100帧每秒
## v0.12.16
- 导出多个时允许自动时长
## v0.12.15
- 修复附件类型枚举量字符串大小写问题
## v0.12.14
- 修复 v38 文件读取的小 bug
## v0.12.13
- 导出文件名增加额外的随机字符串
## v0.12.12
- 修复 2.1 版本遗漏的 SkinnedMeshAttachment 附件渲染
## v0.12.11
- 修复可能的闪退错误
## v0.12.10
- 增加纹理全局加载选项
## v0.12.9
- 修复由于未调用 UpdateCache 导致的约束 bug
## v0.12.8
- 增加英语界面文本
- 增加 4.2 版本格式转换
- 修改格式转换中一些问题和编码范式
## v0.12.7
- 修复一些问题

View File

@@ -32,10 +32,10 @@ A *WYSIWYG* Spine file viewer & exporter.
| `2.1.x` | :white_check_mark: | | |
| `3.6.x` | :white_check_mark: | | |
| `3.7.x` | :white_check_mark: | | |
| `3.8.x` | :white_check_mark: | :white_check_mark: | |
| `3.8.x` | :white_check_mark: | :white_check_mark: | |
| `4.0.x` | :white_check_mark: | | |
| `4.1.x` | :white_check_mark: | | |
| `4.2.x` | :white_check_mark: | | |
| `4.2.x` | :white_check_mark: | :white_check_mark: | |
| `4.3.x` | | | |
More versions coming soon 🚀🚀🚀

View File

@@ -35,7 +35,7 @@
| `3.8.x` | :white_check_mark: | :white_check_mark: | |
| `4.0.x` | :white_check_mark: | | |
| `4.1.x` | :white_check_mark: | | |
| `4.2.x` | :white_check_mark: | | |
| `4.2.x` | :white_check_mark: | :white_check_mark: | |
| `4.3.x` | | | |
更多版本正在施工 :rocket: :rocket: :rocket:

6
SpineViewer/App.config Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="localize" value="zh-CN"/>
</appSettings>
</configuration>

View File

@@ -29,6 +29,7 @@
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SkelFileListBox));
tableLayoutPanel1 = new TableLayoutPanel();
flowLayoutPanel1 = new FlowLayoutPanel();
button_AddFolder = new Button();
@@ -48,129 +49,91 @@
//
// tableLayoutPanel1
//
tableLayoutPanel1.ColumnCount = 1;
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
resources.ApplyResources(tableLayoutPanel1, "tableLayoutPanel1");
tableLayoutPanel1.Controls.Add(flowLayoutPanel1, 0, 0);
tableLayoutPanel1.Controls.Add(listBox, 0, 1);
tableLayoutPanel1.Dock = DockStyle.Fill;
tableLayoutPanel1.Location = new Point(0, 0);
tableLayoutPanel1.Name = "tableLayoutPanel1";
tableLayoutPanel1.RowCount = 2;
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
tableLayoutPanel1.Size = new Size(801, 394);
tableLayoutPanel1.TabIndex = 0;
//
// flowLayoutPanel1
//
flowLayoutPanel1.AutoSize = true;
flowLayoutPanel1.AutoSizeMode = AutoSizeMode.GrowAndShrink;
resources.ApplyResources(flowLayoutPanel1, "flowLayoutPanel1");
flowLayoutPanel1.Controls.Add(button_AddFolder);
flowLayoutPanel1.Controls.Add(button_AddFile);
flowLayoutPanel1.Controls.Add(label_Tip);
flowLayoutPanel1.Dock = DockStyle.Fill;
flowLayoutPanel1.Location = new Point(3, 3);
flowLayoutPanel1.Name = "flowLayoutPanel1";
flowLayoutPanel1.Size = new Size(795, 40);
flowLayoutPanel1.TabIndex = 1;
//
// button_AddFolder
//
button_AddFolder.AutoSize = true;
button_AddFolder.AutoSizeMode = AutoSizeMode.GrowAndShrink;
button_AddFolder.Location = new Point(3, 3);
resources.ApplyResources(button_AddFolder, "button_AddFolder");
button_AddFolder.Name = "button_AddFolder";
button_AddFolder.Size = new Size(122, 34);
button_AddFolder.TabIndex = 0;
button_AddFolder.Text = "添加文件夹...";
button_AddFolder.UseVisualStyleBackColor = true;
button_AddFolder.Click += button_AddFolder_Click;
//
// button_AddFile
//
button_AddFile.AutoSize = true;
button_AddFile.AutoSizeMode = AutoSizeMode.GrowAndShrink;
button_AddFile.Location = new Point(131, 3);
resources.ApplyResources(button_AddFile, "button_AddFile");
button_AddFile.Name = "button_AddFile";
button_AddFile.Size = new Size(104, 34);
button_AddFile.TabIndex = 1;
button_AddFile.Text = "添加文件...";
button_AddFile.UseVisualStyleBackColor = true;
button_AddFile.Click += button_AddFile_Click;
//
// label_Tip
//
label_Tip.Anchor = AnchorStyles.Left;
label_Tip.AutoSize = true;
label_Tip.Location = new Point(241, 8);
resources.ApplyResources(label_Tip, "label_Tip");
label_Tip.Name = "label_Tip";
label_Tip.Size = new Size(139, 24);
label_Tip.TabIndex = 3;
label_Tip.Text = "已添加 0 个文件";
label_Tip.TextAlign = ContentAlignment.MiddleCenter;
//
// listBox
//
resources.ApplyResources(listBox, "listBox");
listBox.AllowDrop = true;
listBox.ContextMenuStrip = contextMenuStrip;
listBox.Dock = DockStyle.Fill;
listBox.FormattingEnabled = true;
listBox.HorizontalScrollbar = true;
listBox.ItemHeight = 24;
listBox.Location = new Point(3, 49);
listBox.Name = "listBox";
listBox.SelectionMode = SelectionMode.MultiExtended;
listBox.Size = new Size(795, 342);
listBox.TabIndex = 0;
listBox.DragDrop += listBox_DragDrop;
listBox.DragEnter += listBox_DragEnter;
//
// contextMenuStrip
//
resources.ApplyResources(contextMenuStrip, "contextMenuStrip");
contextMenuStrip.ImageScalingSize = new Size(24, 24);
contextMenuStrip.Items.AddRange(new ToolStripItem[] { toolStripMenuItem_SelectAll, toolStripMenuItem_Paste, toolStripMenuItem_Remove });
contextMenuStrip.Name = "contextMenuStrip";
contextMenuStrip.Size = new Size(184, 94);
//
// toolStripMenuItem_SelectAll
//
resources.ApplyResources(toolStripMenuItem_SelectAll, "toolStripMenuItem_SelectAll");
toolStripMenuItem_SelectAll.Name = "toolStripMenuItem_SelectAll";
toolStripMenuItem_SelectAll.ShortcutKeys = Keys.Control | Keys.A;
toolStripMenuItem_SelectAll.Size = new Size(183, 30);
toolStripMenuItem_SelectAll.Text = "全选";
toolStripMenuItem_SelectAll.Click += toolStripMenuItem_SelectAll_Click;
//
// toolStripMenuItem_Paste
//
resources.ApplyResources(toolStripMenuItem_Paste, "toolStripMenuItem_Paste");
toolStripMenuItem_Paste.Name = "toolStripMenuItem_Paste";
toolStripMenuItem_Paste.ShortcutKeys = Keys.Control | Keys.V;
toolStripMenuItem_Paste.Size = new Size(183, 30);
toolStripMenuItem_Paste.Text = "粘贴";
toolStripMenuItem_Paste.Click += toolStripMenuItem_Paste_Click;
//
// toolStripMenuItem_Remove
//
resources.ApplyResources(toolStripMenuItem_Remove, "toolStripMenuItem_Remove");
toolStripMenuItem_Remove.Name = "toolStripMenuItem_Remove";
toolStripMenuItem_Remove.ShortcutKeys = Keys.Delete;
toolStripMenuItem_Remove.Size = new Size(183, 30);
toolStripMenuItem_Remove.Text = "移除";
toolStripMenuItem_Remove.Click += toolStripMenuItem_Remove_Click;
//
// folderBrowserDialog
//
resources.ApplyResources(folderBrowserDialog, "folderBrowserDialog");
//
// openFileDialog_Skel
//
openFileDialog_Skel.AddExtension = false;
openFileDialog_Skel.AddToRecent = false;
openFileDialog_Skel.Filter = "所有文件 (*.*)|*.*|skel 文件 (*.skel; *.json)|*.skel;*.json";
resources.ApplyResources(openFileDialog_Skel, "openFileDialog_Skel");
openFileDialog_Skel.Multiselect = true;
openFileDialog_Skel.Title = "批量选择skel文件";
//
// SkelFileListBox
//
AutoScaleDimensions = new SizeF(11F, 24F);
resources.ApplyResources(this, "$this");
AutoScaleMode = AutoScaleMode.Font;
Controls.Add(tableLayoutPanel1);
Name = "SkelFileListBox";
Size = new Size(801, 394);
tableLayoutPanel1.ResumeLayout(false);
tableLayoutPanel1.PerformLayout();
flowLayoutPanel1.ResumeLayout(false);

View File

@@ -64,7 +64,7 @@ namespace SpineViewer.Controls
}
}
label_Tip.Text = $"已选择 {listBox.Items.Count} 个文件";
label_Tip.Text = $"{Properties.Resources.itemCountPrefix}{listBox.Items.Count}{Properties.Resources.itemCountSuffix}";
}
private void button_AddFile_Click(object sender, EventArgs e)
@@ -75,7 +75,7 @@ namespace SpineViewer.Controls
foreach (var p in openFileDialog_Skel.FileNames)
listBox.Items.Add(Path.GetFullPath(p));
label_Tip.Text = $"已选择 {listBox.Items.Count} 个文件";
label_Tip.Text = $"{Properties.Resources.itemCountPrefix}{listBox.Items.Count}{Properties.Resources.itemCountSuffix}";
}
private void listBox_DragEnter(object sender, DragEventArgs e)
@@ -92,7 +92,7 @@ namespace SpineViewer.Controls
return;
AddFromFileDrop((string[])e.Data.GetData(DataFormats.FileDrop));
label_Tip.Text = $"已选择 {listBox.Items.Count} 个文件";
label_Tip.Text = $"{Properties.Resources.itemCountPrefix}{listBox.Items.Count}{Properties.Resources.itemCountSuffix}";
}
private void toolStripMenuItem_SelectAll_Click(object sender, EventArgs e)
@@ -110,7 +110,7 @@ namespace SpineViewer.Controls
var paths = new string[fileDropList.Count];
fileDropList.CopyTo(paths, 0);
AddFromFileDrop(paths);
label_Tip.Text = $"已选择 {listBox.Items.Count} 个文件";
label_Tip.Text = $"{Properties.Resources.itemCountPrefix}{listBox.Items.Count}{Properties.Resources.itemCountSuffix}";
}
private void toolStripMenuItem_Remove_Click(object sender, EventArgs e)
@@ -119,7 +119,7 @@ namespace SpineViewer.Controls
listBox.SelectedIndices.CopyTo(indices, 0);
for (int i = indices.Length - 1; i >= 0; i--)
listBox.Items.RemoveAt(indices[i]);
label_Tip.Text = $"已选择 {listBox.Items.Count} 个文件";
label_Tip.Text = $"{Properties.Resources.itemCountPrefix}{listBox.Items.Count}{Properties.Resources.itemCountSuffix}";
}
}
}

View File

@@ -0,0 +1,219 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="flowLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 2</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="flowLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="flowLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>796, 38</value>
</data>
<data name="contextMenuStrip.Size" type="System.Drawing.Size, System.Drawing">
<value>224, 94</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="listBox.ItemHeight" type="System.Int32, mscorlib">
<value>24</value>
</data>
<data name="listBox.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 44</value>
</data>
<data name="listBox.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="listBox.Size" type="System.Drawing.Size, System.Drawing">
<value>796, 348</value>
</data>
<data name="tableLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>802, 394</value>
</data>
<data name="button_AddFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 2</value>
</data>
<data name="button_AddFolder.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="button_AddFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 34</value>
</data>
<data name="button_AddFolder.Text" xml:space="preserve">
<value>Add Folder...</value>
</data>
<data name="button_AddFile.Location" type="System.Drawing.Point, System.Drawing">
<value>138, 2</value>
</data>
<data name="button_AddFile.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="button_AddFile.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 34</value>
</data>
<data name="button_AddFile.Text" xml:space="preserve">
<value>Add Files...</value>
</data>
<data name="label_Tip.Location" type="System.Drawing.Point, System.Drawing">
<value>256, 7</value>
</data>
<data name="label_Tip.Size" type="System.Drawing.Size, System.Drawing">
<value>117, 24</value>
</data>
<data name="label_Tip.Text" xml:space="preserve">
<value>0 file added.</value>
</data>
<data name="toolStripMenuItem_SelectAll.Size" type="System.Drawing.Size, System.Drawing">
<value>223, 30</value>
</data>
<data name="toolStripMenuItem_SelectAll.Text" xml:space="preserve">
<value>Select all</value>
</data>
<data name="toolStripMenuItem_Paste.Size" type="System.Drawing.Size, System.Drawing">
<value>223, 30</value>
</data>
<data name="toolStripMenuItem_Paste.Text" xml:space="preserve">
<value>Paste</value>
</data>
<data name="toolStripMenuItem_Remove.Size" type="System.Drawing.Size, System.Drawing">
<value>223, 30</value>
</data>
<data name="toolStripMenuItem_Remove.Text" xml:space="preserve">
<value>Remove</value>
</data>
<data name="openFileDialog_Skel.Filter" xml:space="preserve">
<value>All files (*.*)|*.*|Skel files (*.skel; *.json)|*.skel;*.json</value>
</data>
<data name="openFileDialog_Skel.Title" xml:space="preserve">
<value>Select .skel files</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>11, 24</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>802, 394</value>
</data>
</root>

View File

@@ -117,13 +117,308 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>556, 18</value>
</metadata>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="openFileDialog_Skel.Filter" xml:space="preserve">
<value>所有文件 (*.*)|*.*|skel 文件 (*.skel; *.json)|*.skel;*.json</value>
</data>
<data name="&gt;&gt;flowLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="button_AddFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>104, 30</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="listBox.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;label_Tip.Name" xml:space="preserve">
<value>label_Tip</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>8, 20</value>
</data>
<data name="button_AddFile.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;button_AddFile.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="toolStripMenuItem_Remove.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Del</value>
</data>
<data name="button_AddFile.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="button_AddFolder.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;button_AddFolder.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
</data>
<data name="listBox.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="listBox.HorizontalScrollbar" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_SelectAll.Name" xml:space="preserve">
<value>toolStripMenuItem_SelectAll</value>
</data>
<data name="&gt;&gt;listBox.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="flowLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 2</value>
</data>
<data name="&gt;&gt;label_Tip.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_AddFile.Text" xml:space="preserve">
<value>添加文件...</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_SelectAll.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label_Tip.Location" type="System.Drawing.Point, System.Drawing">
<value>202, 7</value>
</data>
<data name="&gt;&gt;button_AddFolder.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="toolStripMenuItem_Paste.Size" type="System.Drawing.Size, System.Drawing">
<value>161, 24</value>
</data>
<data name="button_AddFile.Location" type="System.Drawing.Point, System.Drawing">
<value>110, 2</value>
</data>
<data name="&gt;&gt;flowLayoutPanel1.Name" xml:space="preserve">
<value>flowLayoutPanel1</value>
</data>
<data name="toolStripMenuItem_SelectAll.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Ctrl+A</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_Paste.Name" xml:space="preserve">
<value>toolStripMenuItem_Paste</value>
</data>
<data name="button_AddFolder.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;button_AddFolder.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="contextMenuStrip.Size" type="System.Drawing.Size, System.Drawing">
<value>162, 76</value>
</data>
<data name="flowLayoutPanel1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;listBox.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="label_Tip.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleCenter</value>
</data>
<data name="label_Tip.Size" type="System.Drawing.Size, System.Drawing">
<value>115, 20</value>
</data>
<data name="flowLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;label_Tip.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="toolStripMenuItem_SelectAll.Text" xml:space="preserve">
<value>全选</value>
</data>
<data name="flowLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="button_AddFolder.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;folderBrowserDialog.Name" xml:space="preserve">
<value>folderBrowserDialog</value>
</data>
<data name="label_Tip.Text" xml:space="preserve">
<value>已添加 0 个文件</value>
</data>
<data name="&gt;&gt;contextMenuStrip.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="listBox.Size" type="System.Drawing.Size, System.Drawing">
<value>579, 286</value>
</data>
<data name="toolStripMenuItem_Paste.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Ctrl+V</value>
</data>
<data name="button_AddFolder.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="tableLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_Remove.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="flowLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;listBox.Name" xml:space="preserve">
<value>listBox</value>
</data>
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="listBox.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;listBox.Type" xml:space="preserve">
<value>System.Windows.Forms.ListBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="toolStripMenuItem_Paste.Text" xml:space="preserve">
<value>粘贴</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>583, 328</value>
</data>
<data name="button_AddFile.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 30</value>
</data>
<data name="flowLayoutPanel1.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="&gt;&gt;button_AddFile.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="openFileDialog_Skel.Title" xml:space="preserve">
<value>批量选择skel文件</value>
</data>
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;button_AddFile.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
</data>
<data name="&gt;&gt;button_AddFile.Name" xml:space="preserve">
<value>button_AddFile</value>
</data>
<data name="toolStripMenuItem_Remove.Text" xml:space="preserve">
<value>移除</value>
</data>
<data name="button_AddFile.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;flowLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_Paste.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;button_AddFolder.Name" xml:space="preserve">
<value>button_AddFolder</value>
</data>
<data name="&gt;&gt;openFileDialog_Skel.Name" xml:space="preserve">
<value>openFileDialog_Skel</value>
</data>
<data name="&gt;&gt;label_Tip.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="button_AddFolder.Text" xml:space="preserve">
<value>添加文件夹...</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Name" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="label_Tip.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>583, 328</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>SkelFileListBox</value>
</data>
<data name="&gt;&gt;flowLayoutPanel1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="listBox.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 40</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="button_AddFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 2</value>
</data>
<data name="&gt;&gt;contextMenuStrip.Name" xml:space="preserve">
<value>contextMenuStrip</value>
</data>
<data name="flowLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>579, 34</value>
</data>
<data name="label_Tip.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;openFileDialog_Skel.Type" xml:space="preserve">
<value>System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_Remove.Name" xml:space="preserve">
<value>toolStripMenuItem_Remove</value>
</data>
<data name="toolStripMenuItem_Remove.Size" type="System.Drawing.Size, System.Drawing">
<value>161, 24</value>
</data>
<data name="label_Tip.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 0, 2, 0</value>
</data>
<data name="button_AddFile.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="toolStripMenuItem_SelectAll.Size" type="System.Drawing.Size, System.Drawing">
<value>161, 24</value>
</data>
<data name="&gt;&gt;folderBrowserDialog.Type" xml:space="preserve">
<value>System.Windows.Forms.FolderBrowserDialog, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label_Tip.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="flowLayoutPanel1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="listBox" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<metadata name="folderBrowserDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>286, 21</value>
</metadata>
<metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>556, 18</value>
</metadata>
<metadata name="openFileDialog_Skel.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>31, 27</value>
<value>30, 21</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -29,6 +29,7 @@
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SpineListView));
listView = new ListView();
columnHeader_Name = new ColumnHeader();
contextMenuStrip = new ContextMenuStrip(components);
@@ -65,21 +66,16 @@
//
// listView
//
listView.Alignment = ListViewAlignment.Left;
resources.ApplyResources(listView, "listView");
listView.AllowDrop = true;
listView.Columns.AddRange(new ColumnHeader[] { columnHeader_Name });
listView.ContextMenuStrip = contextMenuStrip;
listView.Dock = DockStyle.Fill;
listView.FullRowSelect = true;
listView.GridLines = true;
listView.LargeImageList = imageList_LargeIcon;
listView.Location = new Point(0, 0);
listView.Margin = new Padding(0);
listView.Name = "listView";
listView.ShowItemToolTips = true;
listView.Size = new Size(336, 414);
listView.SmallImageList = imageList_SmallIcon;
listView.TabIndex = 1;
listView.UseCompatibleStateImageBehavior = false;
listView.View = View.Details;
listView.ItemDrag += listView_ItemDrag;
@@ -90,171 +86,143 @@
//
// columnHeader_Name
//
columnHeader_Name.Text = "名称";
columnHeader_Name.Width = 300;
resources.ApplyResources(columnHeader_Name, "columnHeader_Name");
//
// contextMenuStrip
//
resources.ApplyResources(contextMenuStrip, "contextMenuStrip");
contextMenuStrip.ImageScalingSize = new Size(24, 24);
contextMenuStrip.Items.AddRange(new ToolStripItem[] { toolStripMenuItem_Add, toolStripMenuItem_Insert, toolStripMenuItem_Remove, toolStripSeparator1, toolStripMenuItem_BatchAdd, toolStripMenuItem_RemoveAll, toolStripSeparator2, toolStripMenuItem_MoveUp, toolStripMenuItem_MoveDown, toolStripMenuItem_MoveTop, toolStripMenuItem_MoveBottom, toolStripSeparator3, toolStripMenuItem_CopyPreview, toolStripMenuItem_AddFromClipboard, toolStripMenuItem_SelectAll, toolStripSeparator4, toolStripMenuItem_ChangeView });
contextMenuStrip.Name = "contextMenuStrip";
contextMenuStrip.Size = new Size(255, 451);
contextMenuStrip.Closed += contextMenuStrip_Closed;
contextMenuStrip.Opening += contextMenuStrip_Opening;
//
// toolStripMenuItem_Add
//
resources.ApplyResources(toolStripMenuItem_Add, "toolStripMenuItem_Add");
toolStripMenuItem_Add.Name = "toolStripMenuItem_Add";
toolStripMenuItem_Add.Size = new Size(254, 30);
toolStripMenuItem_Add.Text = "添加...";
toolStripMenuItem_Add.Click += toolStripMenuItem_Add_Click;
//
// toolStripMenuItem_Insert
//
resources.ApplyResources(toolStripMenuItem_Insert, "toolStripMenuItem_Insert");
toolStripMenuItem_Insert.Name = "toolStripMenuItem_Insert";
toolStripMenuItem_Insert.Size = new Size(254, 30);
toolStripMenuItem_Insert.Text = "插入...";
toolStripMenuItem_Insert.Click += toolStripMenuItem_Insert_Click;
//
// toolStripMenuItem_Remove
//
resources.ApplyResources(toolStripMenuItem_Remove, "toolStripMenuItem_Remove");
toolStripMenuItem_Remove.Name = "toolStripMenuItem_Remove";
toolStripMenuItem_Remove.ShortcutKeys = Keys.Delete;
toolStripMenuItem_Remove.Size = new Size(254, 30);
toolStripMenuItem_Remove.Text = "移除";
toolStripMenuItem_Remove.Click += toolStripMenuItem_Remove_Click;
//
// toolStripSeparator1
//
resources.ApplyResources(toolStripSeparator1, "toolStripSeparator1");
toolStripSeparator1.Name = "toolStripSeparator1";
toolStripSeparator1.Size = new Size(251, 6);
//
// toolStripMenuItem_BatchAdd
//
resources.ApplyResources(toolStripMenuItem_BatchAdd, "toolStripMenuItem_BatchAdd");
toolStripMenuItem_BatchAdd.Name = "toolStripMenuItem_BatchAdd";
toolStripMenuItem_BatchAdd.Size = new Size(254, 30);
toolStripMenuItem_BatchAdd.Text = "批量添加...";
toolStripMenuItem_BatchAdd.Click += toolStripMenuItem_BatchAdd_Click;
//
// toolStripMenuItem_RemoveAll
//
resources.ApplyResources(toolStripMenuItem_RemoveAll, "toolStripMenuItem_RemoveAll");
toolStripMenuItem_RemoveAll.Name = "toolStripMenuItem_RemoveAll";
toolStripMenuItem_RemoveAll.Size = new Size(254, 30);
toolStripMenuItem_RemoveAll.Text = "移除全部";
toolStripMenuItem_RemoveAll.Click += toolStripMenuItem_RemoveAll_Click;
//
// toolStripSeparator2
//
resources.ApplyResources(toolStripSeparator2, "toolStripSeparator2");
toolStripSeparator2.Name = "toolStripSeparator2";
toolStripSeparator2.Size = new Size(251, 6);
//
// toolStripMenuItem_MoveUp
//
resources.ApplyResources(toolStripMenuItem_MoveUp, "toolStripMenuItem_MoveUp");
toolStripMenuItem_MoveUp.Name = "toolStripMenuItem_MoveUp";
toolStripMenuItem_MoveUp.ShortcutKeys = Keys.Alt | Keys.W;
toolStripMenuItem_MoveUp.Size = new Size(254, 30);
toolStripMenuItem_MoveUp.Text = "上移";
toolStripMenuItem_MoveUp.Click += toolStripMenuItem_MoveUp_Click;
//
// toolStripMenuItem_MoveDown
//
resources.ApplyResources(toolStripMenuItem_MoveDown, "toolStripMenuItem_MoveDown");
toolStripMenuItem_MoveDown.Name = "toolStripMenuItem_MoveDown";
toolStripMenuItem_MoveDown.ShortcutKeys = Keys.Alt | Keys.S;
toolStripMenuItem_MoveDown.Size = new Size(254, 30);
toolStripMenuItem_MoveDown.Text = "下移";
toolStripMenuItem_MoveDown.Click += toolStripMenuItem_MoveDown_Click;
//
// toolStripMenuItem_MoveTop
//
resources.ApplyResources(toolStripMenuItem_MoveTop, "toolStripMenuItem_MoveTop");
toolStripMenuItem_MoveTop.Name = "toolStripMenuItem_MoveTop";
toolStripMenuItem_MoveTop.ShortcutKeys = Keys.Alt | Keys.Shift | Keys.W;
toolStripMenuItem_MoveTop.Size = new Size(254, 30);
toolStripMenuItem_MoveTop.Text = "置顶";
toolStripMenuItem_MoveTop.Click += toolStripMenuItem_MoveTop_Click;
//
// toolStripMenuItem_MoveBottom
//
resources.ApplyResources(toolStripMenuItem_MoveBottom, "toolStripMenuItem_MoveBottom");
toolStripMenuItem_MoveBottom.Name = "toolStripMenuItem_MoveBottom";
toolStripMenuItem_MoveBottom.ShortcutKeys = Keys.Alt | Keys.Shift | Keys.S;
toolStripMenuItem_MoveBottom.Size = new Size(254, 30);
toolStripMenuItem_MoveBottom.Text = "置底";
toolStripMenuItem_MoveBottom.Click += toolStripMenuItem_MoveBottom_Click;
//
// toolStripSeparator3
//
resources.ApplyResources(toolStripSeparator3, "toolStripSeparator3");
toolStripSeparator3.Name = "toolStripSeparator3";
toolStripSeparator3.Size = new Size(251, 6);
//
// toolStripMenuItem_CopyPreview
//
resources.ApplyResources(toolStripMenuItem_CopyPreview, "toolStripMenuItem_CopyPreview");
toolStripMenuItem_CopyPreview.Name = "toolStripMenuItem_CopyPreview";
toolStripMenuItem_CopyPreview.ShortcutKeys = Keys.Control | Keys.C;
toolStripMenuItem_CopyPreview.Size = new Size(254, 30);
toolStripMenuItem_CopyPreview.Text = "复制预览图";
toolStripMenuItem_CopyPreview.Click += toolStripMenuItem_CopyPreview_Click;
//
// toolStripMenuItem_AddFromClipboard
//
resources.ApplyResources(toolStripMenuItem_AddFromClipboard, "toolStripMenuItem_AddFromClipboard");
toolStripMenuItem_AddFromClipboard.Name = "toolStripMenuItem_AddFromClipboard";
toolStripMenuItem_AddFromClipboard.ShortcutKeys = Keys.Control | Keys.V;
toolStripMenuItem_AddFromClipboard.Size = new Size(254, 30);
toolStripMenuItem_AddFromClipboard.Text = "从剪贴板添加";
toolStripMenuItem_AddFromClipboard.Click += toolStripMenuItem_AddFromClipboard_Click;
//
// toolStripMenuItem_SelectAll
//
resources.ApplyResources(toolStripMenuItem_SelectAll, "toolStripMenuItem_SelectAll");
toolStripMenuItem_SelectAll.Name = "toolStripMenuItem_SelectAll";
toolStripMenuItem_SelectAll.ShortcutKeys = Keys.Control | Keys.A;
toolStripMenuItem_SelectAll.Size = new Size(254, 30);
toolStripMenuItem_SelectAll.Text = "全选";
toolStripMenuItem_SelectAll.Click += toolStripMenuItem_SelectAll_Click;
//
// toolStripSeparator4
//
resources.ApplyResources(toolStripSeparator4, "toolStripSeparator4");
toolStripSeparator4.Name = "toolStripSeparator4";
toolStripSeparator4.Size = new Size(251, 6);
//
// toolStripMenuItem_ChangeView
//
resources.ApplyResources(toolStripMenuItem_ChangeView, "toolStripMenuItem_ChangeView");
toolStripMenuItem_ChangeView.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_LargeIconView, toolStripMenuItem_ListView, toolStripMenuItem_DetailsView });
toolStripMenuItem_ChangeView.Name = "toolStripMenuItem_ChangeView";
toolStripMenuItem_ChangeView.Size = new Size(254, 30);
toolStripMenuItem_ChangeView.Text = "切换视图";
//
// toolStripMenuItem_LargeIconView
//
resources.ApplyResources(toolStripMenuItem_LargeIconView, "toolStripMenuItem_LargeIconView");
toolStripMenuItem_LargeIconView.Name = "toolStripMenuItem_LargeIconView";
toolStripMenuItem_LargeIconView.ShortcutKeys = Keys.Alt | Keys.D1;
toolStripMenuItem_LargeIconView.Size = new Size(241, 34);
toolStripMenuItem_LargeIconView.Text = "大图标";
toolStripMenuItem_LargeIconView.Click += toolStripMenuItem_LargeIconView_Click;
//
// toolStripMenuItem_ListView
//
resources.ApplyResources(toolStripMenuItem_ListView, "toolStripMenuItem_ListView");
toolStripMenuItem_ListView.Name = "toolStripMenuItem_ListView";
toolStripMenuItem_ListView.ShortcutKeys = Keys.Alt | Keys.D2;
toolStripMenuItem_ListView.Size = new Size(241, 34);
toolStripMenuItem_ListView.Text = "列表";
toolStripMenuItem_ListView.Click += toolStripMenuItem_ListView_Click;
//
// toolStripMenuItem_DetailsView
//
resources.ApplyResources(toolStripMenuItem_DetailsView, "toolStripMenuItem_DetailsView");
toolStripMenuItem_DetailsView.Name = "toolStripMenuItem_DetailsView";
toolStripMenuItem_DetailsView.ShortcutKeys = Keys.Alt | Keys.D3;
toolStripMenuItem_DetailsView.Size = new Size(241, 34);
toolStripMenuItem_DetailsView.Text = "详细信息";
toolStripMenuItem_DetailsView.Click += toolStripMenuItem_DetailsView_Click;
//
// imageList_LargeIcon
//
imageList_LargeIcon.ColorDepth = ColorDepth.Depth32Bit;
imageList_LargeIcon.ImageSize = new Size(96, 96);
resources.ApplyResources(imageList_LargeIcon, "imageList_LargeIcon");
imageList_LargeIcon.TransparentColor = Color.Transparent;
//
// imageList_SmallIcon
//
imageList_SmallIcon.ColorDepth = ColorDepth.Depth32Bit;
imageList_SmallIcon.ImageSize = new Size(48, 48);
resources.ApplyResources(imageList_SmallIcon, "imageList_SmallIcon");
imageList_SmallIcon.TransparentColor = Color.Transparent;
//
// timer_SelectedIndexChangedDebounce
@@ -264,44 +232,30 @@
//
// statusStrip
//
statusStrip.Dock = DockStyle.Fill;
resources.ApplyResources(statusStrip, "statusStrip");
statusStrip.ImageScalingSize = new Size(24, 24);
statusStrip.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel_CountInfo });
statusStrip.Location = new Point(0, 414);
statusStrip.Name = "statusStrip";
statusStrip.Size = new Size(336, 31);
statusStrip.SizingGrip = false;
statusStrip.TabIndex = 2;
statusStrip.Text = "statusStrip1";
//
// toolStripStatusLabel_CountInfo
//
resources.ApplyResources(toolStripStatusLabel_CountInfo, "toolStripStatusLabel_CountInfo");
toolStripStatusLabel_CountInfo.Name = "toolStripStatusLabel_CountInfo";
toolStripStatusLabel_CountInfo.Size = new Size(178, 24);
toolStripStatusLabel_CountInfo.Text = "已选择 0 项,共 0 项";
//
// tableLayoutPanel
//
tableLayoutPanel.ColumnCount = 1;
tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
resources.ApplyResources(tableLayoutPanel, "tableLayoutPanel");
tableLayoutPanel.Controls.Add(listView, 0, 0);
tableLayoutPanel.Controls.Add(statusStrip, 0, 1);
tableLayoutPanel.Dock = DockStyle.Fill;
tableLayoutPanel.Location = new Point(0, 0);
tableLayoutPanel.Name = "tableLayoutPanel";
tableLayoutPanel.RowCount = 2;
tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
tableLayoutPanel.RowStyles.Add(new RowStyle());
tableLayoutPanel.Size = new Size(336, 445);
tableLayoutPanel.TabIndex = 3;
//
// SpineListView
//
AutoScaleDimensions = new SizeF(11F, 24F);
resources.ApplyResources(this, "$this");
AutoScaleMode = AutoScaleMode.Font;
Controls.Add(tableLayoutPanel);
Name = "SpineListView";
Size = new Size(336, 445);
contextMenuStrip.ResumeLayout(false);
statusStrip.ResumeLayout(false);
statusStrip.PerformLayout();

View File

@@ -16,6 +16,7 @@ using NLog;
using SpineViewer.Extensions;
using SpineViewer.Utils;
using SpineViewer.Spine.SpineView;
using SpineViewer.Utils.Localize;
namespace SpineViewer.Controls
{
@@ -47,11 +48,12 @@ namespace SpineViewer.Controls
Spines = spines.AsReadOnly();
}
/// <summary>
/// 显示骨骼信息的属性面板
/// </summary>
[Category("自定义"), Description("用于显示模型属性的组合属性页")]
public SpineViewPropertyGrid? SpinePropertyGrid { get; set; }
/// <summary>
/// 显示骨骼信息的属性面板
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryCustom")]
[LocalizedDescription(typeof(Properties.Resources), "descModelAttributes")]
public SpineViewPropertyGrid? SpinePropertyGrid { get; set; }
/// <summary>
/// 选中的索引
@@ -101,7 +103,7 @@ namespace SpineViewer.Controls
{
logger.Error(ex.ToString());
logger.Error("Failed to load {} {}", result.SkelPath, result.AtlasPath);
MessagePopup.Error(ex.ToString(), "骨骼加载失败");
MessagePopup.Error(ex.ToString(), Properties.Resources.errorLoadSkeleton);
}
logger.LogCurrentProcessMemoryUsage();
@@ -142,7 +144,7 @@ namespace SpineViewer.Controls
int success = 0;
int error = 0;
worker.ReportProgress(0, $"已处理 0/{totalCount}");
worker.ReportProgress(0, $"{Properties.Resources.process} 0/{totalCount}");
for (int i = 0; i < totalCount; i++)
{
if (worker.CancellationPending)
@@ -174,7 +176,7 @@ namespace SpineViewer.Controls
error++;
}
worker.ReportProgress((int)((i + 1) * 100.0) / totalCount, $"已处理 {i + 1}/{totalCount}");
worker.ReportProgress((int)((i + 1) * 100.0) / totalCount, $"{Properties.Resources.process} {i + 1}/{totalCount}");
}
// 选中最后一项
@@ -222,7 +224,7 @@ namespace SpineViewer.Controls
{
if (validPaths.Count > 100)
{
if (MessagePopup.Quest($"共发现 {validPaths.Count} 个可加载骨骼,数量较多,是否一次性全部加载?") == DialogResult.Cancel)
if (MessagePopup.Quest($"{Properties.Resources.loadAllSkeletonPrefix}{validPaths.Count}{Properties.Resources.loadAllSkeletonSuffix}", Properties.Resources.msgBoxQuest) == DialogResult.Cancel)
return;
}
BatchAdd(new Dialogs.BatchOpenSpineDialogResult(SpineVersion.Auto, validPaths.ToArray()));
@@ -276,7 +278,7 @@ namespace SpineViewer.Controls
if (listView.SelectedItems.Count > 0)
listView.SelectedItems[0].EnsureVisible();
toolStripStatusLabel_CountInfo.Text = $"已选择 {listView.SelectedItems.Count} 项,共 {listView.Items.Count} 项";
toolStripStatusLabel_CountInfo.Text = $"{Properties.Resources.countInfoStatusPrefix} {listView.SelectedItems.Count} {Properties.Resources.countInfoStatusMidfix} {listView.Items.Count} {Properties.Resources.countInfoStatusSuffix}";
}
private void listView_ItemDrag(object sender, ItemDragEventArgs e)
@@ -411,7 +413,7 @@ namespace SpineViewer.Controls
if (listView.SelectedIndices.Count > 1)
{
if (MessagePopup.Quest($"确定移除所选 {listView.SelectedIndices.Count} 项吗?") != DialogResult.OK)
if (MessagePopup.Quest($"{Properties.Resources.removeItemConfirmPrefix} {listView.SelectedIndices.Count} {Properties.Resources.removeItemConfirmSuffix}", Properties.Resources.msgBoxQuest) != DialogResult.OK)
return;
}
@@ -511,7 +513,7 @@ namespace SpineViewer.Controls
if (listView.Items.Count <= 0)
return;
if (MessagePopup.Quest($"确认移除所有 {listView.Items.Count} 项吗?") != DialogResult.OK)
if (MessagePopup.Quest($"{Properties.Resources.removeAllItemPrefix} {listView.Items.Count} {Properties.Resources.removeItemConfirmSuffix}", Properties.Resources.msgBoxQuest) != DialogResult.OK)
return;
listView.Items.Clear();

View File

@@ -0,0 +1,241 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="columnHeader_Name.Text" xml:space="preserve">
<value>Name</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="contextMenuStrip.Size" type="System.Drawing.Size, System.Drawing">
<value>298, 418</value>
</data>
<data name="toolStripMenuItem_Add.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 30</value>
</data>
<data name="toolStripMenuItem_Add.Text" xml:space="preserve">
<value>Add to...</value>
</data>
<data name="toolStripMenuItem_Insert.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 30</value>
</data>
<data name="toolStripMenuItem_Insert.Text" xml:space="preserve">
<value>Insert...</value>
</data>
<data name="toolStripMenuItem_Remove.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 30</value>
</data>
<data name="toolStripMenuItem_Remove.Text" xml:space="preserve">
<value>Remove</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>294, 6</value>
</data>
<data name="toolStripMenuItem_BatchAdd.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 30</value>
</data>
<data name="toolStripMenuItem_BatchAdd.Text" xml:space="preserve">
<value>Bulk add...</value>
</data>
<data name="toolStripMenuItem_RemoveAll.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 30</value>
</data>
<data name="toolStripMenuItem_RemoveAll.Text" xml:space="preserve">
<value>Remove all</value>
</data>
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
<value>294, 6</value>
</data>
<data name="toolStripMenuItem_MoveUp.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 30</value>
</data>
<data name="toolStripMenuItem_MoveUp.Text" xml:space="preserve">
<value>Up</value>
</data>
<data name="toolStripMenuItem_MoveDown.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 30</value>
</data>
<data name="toolStripMenuItem_MoveDown.Text" xml:space="preserve">
<value>Down</value>
</data>
<data name="toolStripMenuItem_MoveTop.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 30</value>
</data>
<data name="toolStripMenuItem_MoveTop.Text" xml:space="preserve">
<value>Stick to top</value>
</data>
<data name="toolStripMenuItem_MoveBottom.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 30</value>
</data>
<data name="toolStripMenuItem_MoveBottom.Text" xml:space="preserve">
<value>Bottom</value>
</data>
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
<value>294, 6</value>
</data>
<data name="toolStripMenuItem_CopyPreview.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 30</value>
</data>
<data name="toolStripMenuItem_CopyPreview.Text" xml:space="preserve">
<value>Copy preview</value>
</data>
<data name="toolStripMenuItem_AddFromClipboard.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 30</value>
</data>
<data name="toolStripMenuItem_AddFromClipboard.Text" xml:space="preserve">
<value>Add to clipboard</value>
</data>
<data name="toolStripMenuItem_SelectAll.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 30</value>
</data>
<data name="toolStripMenuItem_SelectAll.Text" xml:space="preserve">
<value>Select all</value>
</data>
<data name="toolStripSeparator4.Size" type="System.Drawing.Size, System.Drawing">
<value>294, 6</value>
</data>
<data name="toolStripMenuItem_ChangeView.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 30</value>
</data>
<data name="toolStripMenuItem_ChangeView.Text" xml:space="preserve">
<value>Switch view</value>
</data>
<data name="toolStripMenuItem_LargeIconView.Size" type="System.Drawing.Size, System.Drawing">
<value>258, 34</value>
</data>
<data name="toolStripMenuItem_LargeIconView.Text" xml:space="preserve">
<value>Large icon</value>
</data>
<data name="toolStripMenuItem_ListView.Size" type="System.Drawing.Size, System.Drawing">
<value>258, 34</value>
</data>
<data name="toolStripMenuItem_ListView.Text" xml:space="preserve">
<value>List</value>
</data>
<data name="toolStripMenuItem_DetailsView.Size" type="System.Drawing.Size, System.Drawing">
<value>258, 34</value>
</data>
<data name="toolStripMenuItem_DetailsView.Text" xml:space="preserve">
<value>Details</value>
</data>
<data name="toolStripStatusLabel_CountInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>266, 24</value>
</data>
<data name="toolStripStatusLabel_CountInfo.Text" xml:space="preserve">
<value>0 items selected, 0 items total</value>
</data>
</root>

View File

@@ -117,19 +117,452 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="imageList_LargeIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>511, 20</value>
</metadata>
<metadata name="imageList_SmallIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>252, 19</value>
</metadata>
<data name="&gt;&gt;imageList_LargeIcon.Name" xml:space="preserve">
<value>imageList_LargeIcon</value>
</data>
<data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="toolStripMenuItem_AddFromClipboard.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 30</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_MoveDown.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;imageList_SmallIcon.Name" xml:space="preserve">
<value>imageList_SmallIcon</value>
</data>
<data name="toolStripSeparator4.Size" type="System.Drawing.Size, System.Drawing">
<value>251, 6</value>
</data>
<data name="toolStripStatusLabel_CountInfo.Text" xml:space="preserve">
<value>已选择 0 项,共 0 项</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_Insert.Name" xml:space="preserve">
<value>toolStripMenuItem_Insert</value>
</data>
<data name="toolStripMenuItem_Add.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 30</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_DetailsView.Name" xml:space="preserve">
<value>toolStripMenuItem_DetailsView</value>
</data>
<data name="toolStripMenuItem_LargeIconView.Size" type="System.Drawing.Size, System.Drawing">
<value>241, 34</value>
</data>
<data name="&gt;&gt;imageList_SmallIcon.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
<value>251, 6</value>
</data>
<data name="statusStrip.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 414</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_AddFromClipboard.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>336, 445</value>
</data>
<data name="statusStrip.Text" xml:space="preserve">
<value>statusStrip1</value>
</data>
<data name="&gt;&gt;tableLayoutPanel.Name" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="toolStripMenuItem_MoveBottom.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 30</value>
</data>
<data name="columnHeader_Name.Text" xml:space="preserve">
<value>名称</value>
</data>
<data name="&gt;&gt;toolStripSeparator2.Name" xml:space="preserve">
<value>toolStripSeparator2</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_MoveTop.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="toolStripMenuItem_MoveBottom.Text" xml:space="preserve">
<value>置底</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_BatchAdd.Name" xml:space="preserve">
<value>toolStripMenuItem_BatchAdd</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="&gt;&gt;columnHeader_Name.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;contextMenuStrip.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="toolStripMenuItem_RemoveAll.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 30</value>
</data>
<data name="toolStripMenuItem_RemoveAll.Text" xml:space="preserve">
<value>移除全部</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_Add.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;listView.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;statusStrip.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_Remove.Name" xml:space="preserve">
<value>toolStripMenuItem_Remove</value>
</data>
<data name="&gt;&gt;statusStrip.Type" xml:space="preserve">
<value>System.Windows.Forms.StatusStrip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_Remove.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>251, 6</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>SpineListView</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="tableLayoutPanel.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_MoveUp.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="toolStripMenuItem_ListView.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Alt+2</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_LargeIconView.Name" xml:space="preserve">
<value>toolStripMenuItem_LargeIconView</value>
</data>
<data name="toolStripMenuItem_LargeIconView.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Alt+1</value>
</data>
<data name="tableLayoutPanel.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="listView" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="statusStrip" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="Percent,100,AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="&gt;&gt;timer_SelectedIndexChangedDebounce.Type" xml:space="preserve">
<value>System.Windows.Forms.Timer, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;listView.Name" xml:space="preserve">
<value>listView</value>
</data>
<data name="toolStripMenuItem_MoveUp.Text" xml:space="preserve">
<value>上移</value>
</data>
<data name="toolStripMenuItem_Remove.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 30</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_Insert.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripSeparator3.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="toolStripMenuItem_DetailsView.Text" xml:space="preserve">
<value>详细信息</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_MoveTop.Name" xml:space="preserve">
<value>toolStripMenuItem_MoveTop</value>
</data>
<data name="statusStrip.Size" type="System.Drawing.Size, System.Drawing">
<value>336, 31</value>
</data>
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
<value>251, 6</value>
</data>
<data name="&gt;&gt;statusStrip.Name" xml:space="preserve">
<value>statusStrip</value>
</data>
<data name="toolStripMenuItem_MoveBottom.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Alt+Shift+S</value>
</data>
<data name="&gt;&gt;toolStripSeparator4.Name" xml:space="preserve">
<value>toolStripSeparator4</value>
</data>
<data name="toolStripMenuItem_SelectAll.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 30</value>
</data>
<data name="toolStripMenuItem_AddFromClipboard.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Ctrl+V</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_MoveBottom.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="toolStripMenuItem_MoveDown.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 30</value>
</data>
<data name="toolStripMenuItem_BatchAdd.Text" xml:space="preserve">
<value>批量添加...</value>
</data>
<data name="&gt;&gt;imageList_LargeIcon.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="toolStripMenuItem_ChangeView.Text" xml:space="preserve">
<value>切换视图</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_ListView.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;listView.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_MoveBottom.Name" xml:space="preserve">
<value>toolStripMenuItem_MoveBottom</value>
</data>
<data name="listView.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_AddFromClipboard.Name" xml:space="preserve">
<value>toolStripMenuItem_AddFromClipboard</value>
</data>
<data name="columnHeader_Name.Width" type="System.Int32, mscorlib">
<value>300</value>
</data>
<data name="&gt;&gt;toolStripSeparator1.Name" xml:space="preserve">
<value>toolStripSeparator1</value>
</data>
<data name="toolStripMenuItem_Remove.Text" xml:space="preserve">
<value>移除</value>
</data>
<data name="&gt;&gt;tableLayoutPanel.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_BatchAdd.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_RemoveAll.Name" xml:space="preserve">
<value>toolStripMenuItem_RemoveAll</value>
</data>
<data name="toolStripMenuItem_MoveTop.Text" xml:space="preserve">
<value>置顶</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_DetailsView.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_ListView.Name" xml:space="preserve">
<value>toolStripMenuItem_ListView</value>
</data>
<data name="toolStripMenuItem_ListView.Size" type="System.Drawing.Size, System.Drawing">
<value>241, 34</value>
</data>
<data name="toolStripMenuItem_MoveDown.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Alt+S</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripStatusLabel_CountInfo.Name" xml:space="preserve">
<value>toolStripStatusLabel_CountInfo</value>
</data>
<data name="tableLayoutPanel.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tableLayoutPanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="toolStripMenuItem_MoveUp.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 30</value>
</data>
<data name="&gt;&gt;listView.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;statusStrip.Parent" xml:space="preserve">
<value>tableLayoutPanel</value>
</data>
<data name="listView.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_CopyPreview.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_MoveUp.Name" xml:space="preserve">
<value>toolStripMenuItem_MoveUp</value>
</data>
<data name="listView.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="toolStripMenuItem_Insert.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 30</value>
</data>
<data name="toolStripMenuItem_Remove.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Del</value>
</data>
<data name="toolStripMenuItem_MoveUp.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Alt+W</value>
</data>
<data name="&gt;&gt;tableLayoutPanel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="toolStripMenuItem_ChangeView.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 30</value>
</data>
<data name="&gt;&gt;timer_SelectedIndexChangedDebounce.Name" xml:space="preserve">
<value>timer_SelectedIndexChangedDebounce</value>
</data>
<data name="toolStripMenuItem_CopyPreview.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 30</value>
</data>
<data name="toolStripMenuItem_CopyPreview.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Ctrl+C</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_SelectAll.Name" xml:space="preserve">
<value>toolStripMenuItem_SelectAll</value>
</data>
<data name="&gt;&gt;toolStripSeparator3.Name" xml:space="preserve">
<value>toolStripSeparator3</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_Add.Name" xml:space="preserve">
<value>toolStripMenuItem_Add</value>
</data>
<data name="listView.Alignment" type="System.Windows.Forms.ListViewAlignment, System.Windows.Forms">
<value>Left</value>
</data>
<data name="toolStripMenuItem_ListView.Text" xml:space="preserve">
<value>列表</value>
</data>
<data name="toolStripMenuItem_AddFromClipboard.Text" xml:space="preserve">
<value>从剪贴板添加</value>
</data>
<data name="toolStripMenuItem_LargeIconView.Text" xml:space="preserve">
<value>大图标</value>
</data>
<data name="tableLayoutPanel.RowCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="toolStripMenuItem_DetailsView.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Alt+3</value>
</data>
<data name="toolStripMenuItem_SelectAll.Text" xml:space="preserve">
<value>全选</value>
</data>
<data name="toolStripMenuItem_BatchAdd.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 30</value>
</data>
<data name="contextMenuStrip.Size" type="System.Drawing.Size, System.Drawing">
<value>255, 418</value>
</data>
<data name="statusStrip.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_LargeIconView.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="toolStripStatusLabel_CountInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>178, 24</value>
</data>
<data name="toolStripMenuItem_MoveDown.Text" xml:space="preserve">
<value>下移</value>
</data>
<data name="imageList_SmallIcon.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>48, 48</value>
</data>
<data name="&gt;&gt;toolStripSeparator2.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="tableLayoutPanel.ColumnCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_ChangeView.Name" xml:space="preserve">
<value>toolStripMenuItem_ChangeView</value>
</data>
<data name="&gt;&gt;columnHeader_Name.Name" xml:space="preserve">
<value>columnHeader_Name</value>
</data>
<data name="listView.Size" type="System.Drawing.Size, System.Drawing">
<value>336, 414</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_CopyPreview.Name" xml:space="preserve">
<value>toolStripMenuItem_CopyPreview</value>
</data>
<data name="imageList_LargeIcon.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>96, 96</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_RemoveAll.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="listView.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;contextMenuStrip.Name" xml:space="preserve">
<value>contextMenuStrip</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_MoveDown.Name" xml:space="preserve">
<value>toolStripMenuItem_MoveDown</value>
</data>
<data name="toolStripMenuItem_SelectAll.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Ctrl+A</value>
</data>
<data name="&gt;&gt;toolStripSeparator4.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="statusStrip.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="toolStripMenuItem_DetailsView.Size" type="System.Drawing.Size, System.Drawing">
<value>241, 34</value>
</data>
<data name="toolStripMenuItem_MoveTop.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 30</value>
</data>
<data name="toolStripMenuItem_CopyPreview.Text" xml:space="preserve">
<value>复制预览图</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>11, 24</value>
</data>
<data name="toolStripMenuItem_MoveTop.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Alt+Shift+W</value>
</data>
<data name="toolStripMenuItem_Insert.Text" xml:space="preserve">
<value>插入...</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_ChangeView.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_SelectAll.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripStatusLabel_CountInfo.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="toolStripMenuItem_Add.Text" xml:space="preserve">
<value>添加...</value>
</data>
<data name="tableLayoutPanel.Size" type="System.Drawing.Size, System.Drawing">
<value>336, 445</value>
</data>
<metadata name="timer_SelectedIndexChangedDebounce.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>771, 24</value>
</metadata>
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1176, 24</value>
</metadata>
<metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>30, 22</value>
</metadata>
<metadata name="imageList_LargeIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>511, 20</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="imageList_SmallIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>252, 19</value>
</metadata>
</root>

View File

@@ -53,12 +53,10 @@
//
// panel_Render
//
resources.ApplyResources(panel_Render, "panel_Render");
panel_Render.BackColor = SystemColors.ControlDarkDark;
panel_Render.Location = new Point(157, 136);
panel_Render.Margin = new Padding(0);
panel_Render.Name = "panel_Render";
panel_Render.Size = new Size(320, 320);
panel_Render.TabIndex = 1;
toolTip.SetToolTip(panel_Render, resources.GetString("panel_Render.ToolTip"));
panel_Render.MouseDown += panel_Render_MouseDown;
panel_Render.MouseMove += panel_Render_MouseMove;
panel_Render.MouseUp += panel_Render_MouseUp;
@@ -66,49 +64,30 @@
//
// tableLayoutPanel1
//
tableLayoutPanel1.ColumnCount = 1;
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
resources.ApplyResources(tableLayoutPanel1, "tableLayoutPanel1");
tableLayoutPanel1.Controls.Add(flowLayoutPanel1, 0, 1);
tableLayoutPanel1.Controls.Add(panel_ViewContainer, 0, 0);
tableLayoutPanel1.Dock = DockStyle.Fill;
tableLayoutPanel1.Location = new Point(0, 0);
tableLayoutPanel1.Margin = new Padding(0);
tableLayoutPanel1.Name = "tableLayoutPanel1";
tableLayoutPanel1.RowCount = 2;
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.Size = new Size(641, 636);
tableLayoutPanel1.TabIndex = 2;
toolTip.SetToolTip(tableLayoutPanel1, resources.GetString("tableLayoutPanel1.ToolTip"));
//
// flowLayoutPanel1
//
flowLayoutPanel1.Anchor = AnchorStyles.None;
flowLayoutPanel1.AutoSize = true;
flowLayoutPanel1.AutoSizeMode = AutoSizeMode.GrowAndShrink;
resources.ApplyResources(flowLayoutPanel1, "flowLayoutPanel1");
flowLayoutPanel1.Controls.Add(button_Stop);
flowLayoutPanel1.Controls.Add(button_Restart);
flowLayoutPanel1.Controls.Add(button_Start);
flowLayoutPanel1.Controls.Add(button_ForwardStep);
flowLayoutPanel1.Controls.Add(button_ForwardFast);
flowLayoutPanel1.Controls.Add(button_FullScreen);
flowLayoutPanel1.Location = new Point(101, 594);
flowLayoutPanel1.Margin = new Padding(0);
flowLayoutPanel1.Name = "flowLayoutPanel1";
flowLayoutPanel1.Size = new Size(438, 42);
flowLayoutPanel1.TabIndex = 1;
toolTip.SetToolTip(flowLayoutPanel1, resources.GetString("flowLayoutPanel1.ToolTip"));
//
// button_Stop
//
button_Stop.AutoSize = true;
button_Stop.AutoSizeMode = AutoSizeMode.GrowAndShrink;
button_Stop.ImageKey = "stop";
resources.ApplyResources(button_Stop, "button_Stop");
button_Stop.ImageList = imageList;
button_Stop.Location = new Point(3, 3);
button_Stop.Name = "button_Stop";
button_Stop.Padding = new Padding(15, 3, 15, 3);
button_Stop.Size = new Size(67, 36);
button_Stop.TabIndex = 0;
toolTip.SetToolTip(button_Stop, "停止播放并重置时间到初始");
toolTip.SetToolTip(button_Stop, resources.GetString("button_Stop.ToolTip"));
button_Stop.UseVisualStyleBackColor = true;
button_Stop.Click += button_Stop_Click;
//
@@ -127,105 +106,68 @@
//
// button_Restart
//
button_Restart.AutoSize = true;
button_Restart.AutoSizeMode = AutoSizeMode.GrowAndShrink;
button_Restart.ImageKey = "rotate-left";
resources.ApplyResources(button_Restart, "button_Restart");
button_Restart.ImageList = imageList;
button_Restart.Location = new Point(76, 3);
button_Restart.Name = "button_Restart";
button_Restart.Padding = new Padding(15, 3, 15, 3);
button_Restart.Size = new Size(67, 36);
button_Restart.TabIndex = 1;
toolTip.SetToolTip(button_Restart, "从头开始播放");
toolTip.SetToolTip(button_Restart, resources.GetString("button_Restart.ToolTip"));
button_Restart.UseVisualStyleBackColor = true;
button_Restart.Click += button_Restart_Click;
//
// button_Start
//
button_Start.AutoSize = true;
button_Start.AutoSizeMode = AutoSizeMode.GrowAndShrink;
button_Start.BackgroundImageLayout = ImageLayout.Center;
button_Start.ImageKey = "pause";
resources.ApplyResources(button_Start, "button_Start");
button_Start.ImageList = imageList;
button_Start.Location = new Point(149, 3);
button_Start.Name = "button_Start";
button_Start.Padding = new Padding(15, 3, 15, 3);
button_Start.Size = new Size(67, 36);
button_Start.TabIndex = 2;
toolTip.SetToolTip(button_Start, "开始/暂停");
toolTip.SetToolTip(button_Start, resources.GetString("button_Start.ToolTip"));
button_Start.UseVisualStyleBackColor = true;
button_Start.Click += button_Start_Click;
//
// button_ForwardStep
//
button_ForwardStep.AutoSize = true;
button_ForwardStep.AutoSizeMode = AutoSizeMode.GrowAndShrink;
button_ForwardStep.ImageKey = "forward-step";
resources.ApplyResources(button_ForwardStep, "button_ForwardStep");
button_ForwardStep.ImageList = imageList;
button_ForwardStep.Location = new Point(222, 3);
button_ForwardStep.Name = "button_ForwardStep";
button_ForwardStep.Padding = new Padding(15, 3, 15, 3);
button_ForwardStep.Size = new Size(67, 36);
button_ForwardStep.TabIndex = 3;
toolTip.SetToolTip(button_ForwardStep, "快进 1 帧");
toolTip.SetToolTip(button_ForwardStep, resources.GetString("button_ForwardStep.ToolTip"));
button_ForwardStep.UseVisualStyleBackColor = true;
button_ForwardStep.Click += button_ForwardStep_Click;
//
// button_ForwardFast
//
button_ForwardFast.AutoSize = true;
button_ForwardFast.AutoSizeMode = AutoSizeMode.GrowAndShrink;
button_ForwardFast.ImageKey = "forward-fast";
resources.ApplyResources(button_ForwardFast, "button_ForwardFast");
button_ForwardFast.ImageList = imageList;
button_ForwardFast.Location = new Point(295, 3);
button_ForwardFast.Name = "button_ForwardFast";
button_ForwardFast.Padding = new Padding(15, 3, 15, 3);
button_ForwardFast.Size = new Size(67, 36);
button_ForwardFast.TabIndex = 4;
toolTip.SetToolTip(button_ForwardFast, "快进 10 帧");
toolTip.SetToolTip(button_ForwardFast, resources.GetString("button_ForwardFast.ToolTip"));
button_ForwardFast.UseVisualStyleBackColor = true;
button_ForwardFast.Click += button_ForwardFast_Click;
//
// button_FullScreen
//
button_FullScreen.AutoSize = true;
button_FullScreen.AutoSizeMode = AutoSizeMode.GrowAndShrink;
button_FullScreen.ImageKey = "arrows-maximize";
resources.ApplyResources(button_FullScreen, "button_FullScreen");
button_FullScreen.ImageList = imageList;
button_FullScreen.Location = new Point(368, 3);
button_FullScreen.Name = "button_FullScreen";
button_FullScreen.Padding = new Padding(15, 3, 15, 3);
button_FullScreen.Size = new Size(67, 36);
button_FullScreen.TabIndex = 5;
toolTip.SetToolTip(button_FullScreen, "全屏预览");
toolTip.SetToolTip(button_FullScreen, resources.GetString("button_FullScreen.ToolTip"));
button_FullScreen.UseVisualStyleBackColor = true;
button_FullScreen.Click += button_FullScreen_Click;
//
// panel_ViewContainer
//
resources.ApplyResources(panel_ViewContainer, "panel_ViewContainer");
panel_ViewContainer.Controls.Add(panel_RenderContainer);
panel_ViewContainer.Dock = DockStyle.Fill;
panel_ViewContainer.Location = new Point(0, 0);
panel_ViewContainer.Margin = new Padding(0);
panel_ViewContainer.Name = "panel_ViewContainer";
panel_ViewContainer.Size = new Size(641, 594);
panel_ViewContainer.TabIndex = 6;
toolTip.SetToolTip(panel_ViewContainer, resources.GetString("panel_ViewContainer.ToolTip"));
//
// panel_RenderContainer
//
resources.ApplyResources(panel_RenderContainer, "panel_RenderContainer");
panel_RenderContainer.BackColor = SystemColors.ControlDark;
panel_RenderContainer.Controls.Add(panel_Render);
panel_RenderContainer.Dock = DockStyle.Fill;
panel_RenderContainer.Location = new Point(0, 0);
panel_RenderContainer.Margin = new Padding(0);
panel_RenderContainer.Name = "panel_RenderContainer";
panel_RenderContainer.Size = new Size(641, 594);
panel_RenderContainer.TabIndex = 0;
toolTip.SetToolTip(panel_RenderContainer, resources.GetString("panel_RenderContainer.ToolTip"));
panel_RenderContainer.SizeChanged += panel_RenderContainer_SizeChanged;
//
// spinePreviewFullScreenForm
//
spinePreviewFullScreenForm.ClientSize = new Size(2560, 1440);
resources.ApplyResources(spinePreviewFullScreenForm, "spinePreviewFullScreenForm");
spinePreviewFullScreenForm.ControlBox = false;
spinePreviewFullScreenForm.FormBorderStyle = FormBorderStyle.None;
spinePreviewFullScreenForm.MaximizeBox = false;
@@ -233,15 +175,14 @@
spinePreviewFullScreenForm.Name = "SpinePreviewFullScreenForm";
spinePreviewFullScreenForm.ShowIcon = false;
spinePreviewFullScreenForm.ShowInTaskbar = false;
spinePreviewFullScreenForm.StartPosition = FormStartPosition.Manual;
toolTip.SetToolTip(spinePreviewFullScreenForm, resources.GetString("spinePreviewFullScreenForm.ToolTip"));
spinePreviewFullScreenForm.TopMost = true;
spinePreviewFullScreenForm.Visible = false;
spinePreviewFullScreenForm.FormClosing += spinePreviewFullScreenForm_FormClosing;
spinePreviewFullScreenForm.KeyDown += spinePreviewFullScreenForm_KeyDown;
//
// wallpaperForm
//
wallpaperForm.ClientSize = new Size(0, 0);
resources.ApplyResources(wallpaperForm, "wallpaperForm");
wallpaperForm.ControlBox = false;
wallpaperForm.FormBorderStyle = FormBorderStyle.None;
wallpaperForm.MaximizeBox = false;
@@ -249,18 +190,17 @@
wallpaperForm.Name = "WallpaperForm";
wallpaperForm.ShowIcon = false;
wallpaperForm.ShowInTaskbar = false;
wallpaperForm.StartPosition = FormStartPosition.Manual;
wallpaperForm.Visible = false;
toolTip.SetToolTip(wallpaperForm, resources.GetString("wallpaperForm.ToolTip"));
wallpaperForm.WindowState = FormWindowState.Minimized;
wallpaperForm.FormClosing += wallpaperForm_FormClosing;
//
// SpinePreviewPanel
//
AutoScaleDimensions = new SizeF(11F, 24F);
resources.ApplyResources(this, "$this");
AutoScaleMode = AutoScaleMode.Font;
Controls.Add(tableLayoutPanel1);
Name = "SpinePreviewPanel";
Size = new Size(641, 636);
toolTip.SetToolTip(this, resources.GetString("$this.ToolTip"));
tableLayoutPanel1.ResumeLayout(false);
tableLayoutPanel1.PerformLayout();
flowLayoutPanel1.ResumeLayout(false);

View File

@@ -12,6 +12,9 @@ using System.Diagnostics;
using NLog;
using SpineViewer.Utils;
using System.Drawing.Design;
using System.Reflection;
using System.Resources;
using SpineViewer.Utils.Localize;
namespace SpineViewer.Controls
{
@@ -30,15 +33,17 @@ namespace SpineViewer.Controls
/// <summary>
/// 要绑定的 Spine 列表控件
/// </summary>
[Category("自定义"), Description("相关联的 SpineListView")]
[LocalizedCategory(typeof(Properties.Resources), "categoryCustom")]
[LocalizedDescription(typeof(Properties.Resources), "descAssociatedSpineListView")]
public SpineListView? SpineListView { get; set; }
/// <summary>
/// 属性信息面板
/// </summary>
[Category("自定义"), Description("用于显示画面属性的属性页")]
public PropertyGrid? PropertyGrid
{
/// <summary>
/// 属性信息面板
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryCustom")]
[LocalizedDescription(typeof(Properties.Resources), "descDisplayImageProperties")]
public PropertyGrid? PropertyGrid
{
get => propertyGrid;
set
{
@@ -489,7 +494,7 @@ namespace SpineViewer.Controls
{
logger.Fatal(ex.ToString());
logger.Fatal("Render task stopped");
MessagePopup.Error(ex.ToString(), "预览画面已停止渲染");
MessagePopup.Error(ex.ToString(), Properties.Resources.previewRenderStopped);
}
finally
{
@@ -507,6 +512,7 @@ namespace SpineViewer.Controls
private void panel_RenderContainer_SizeChanged(object sender, EventArgs e)
{
if (renderWindow is null) return;
float parentW = panel_Render.Parent.Width;
@@ -785,37 +791,47 @@ namespace SpineViewer.Controls
[RefreshProperties(RefreshProperties.All)]
[TypeConverter(typeof(ResolutionConverter))]
[Category("[0] "), DisplayName("")]
[LocalizedCategory(typeof(Properties.Resources), "categoryCustom")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayResolution")]
public Size Resolution { get => PreviewPanel.Resolution; set => PreviewPanel.Resolution = value; }
[TypeConverter(typeof(PointFConverter))]
[Category("[0] "), DisplayName("")]
public PointF Center { get => PreviewPanel.Center; set => PreviewPanel.Center = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryCustom")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayCenter")]
public PointF Center { get => PreviewPanel.Center; set => PreviewPanel.Center = value; }
[Category("[0] "), DisplayName("")]
public float Zoom { get => PreviewPanel.Zoom; set => PreviewPanel.Zoom = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryCustom")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayZoom")]
public float Zoom { get => PreviewPanel.Zoom; set => PreviewPanel.Zoom = value; }
[Category("[0] "), DisplayName("")]
public float Rotation { get => PreviewPanel.Rotation; set => PreviewPanel.Rotation = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryCustom")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayRotation")]
public float Rotation { get => PreviewPanel.Rotation; set => PreviewPanel.Rotation = value; }
[Category("[0] "), DisplayName("")]
public bool FlipX { get => PreviewPanel.FlipX; set => PreviewPanel.FlipX = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryCustom")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayFlipHorizontal")]
public bool FlipX { get => PreviewPanel.FlipX; set => PreviewPanel.FlipX = value; }
[Category("[0] "), DisplayName("")]
public bool FlipY { get => PreviewPanel.FlipY; set => PreviewPanel.FlipY = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryCustom")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayFlipVertical")]
public bool FlipY { get => PreviewPanel.FlipY; set => PreviewPanel.FlipY = value; }
[Category("[0] "), DisplayName("")]
public bool RenderSelectedOnly { get => PreviewPanel.RenderSelectedOnly; set => PreviewPanel.RenderSelectedOnly = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryCustom")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayRenderSelected")]
public bool RenderSelectedOnly { get => PreviewPanel.RenderSelectedOnly; set => PreviewPanel.RenderSelectedOnly = value; }
[Category("[1] "), DisplayName("")]
public bool ShowAxis { get => PreviewPanel.ShowAxis; set => PreviewPanel.ShowAxis = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayShowAxis")]
public bool ShowAxis { get => PreviewPanel.ShowAxis; set => PreviewPanel.ShowAxis = value; }
[Category("[1] "), DisplayName("")]
public uint MaxFps { get => PreviewPanel.MaxFps; set => PreviewPanel.MaxFps = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayMaximumFrameRate")]
public uint MaxFps { get => PreviewPanel.MaxFps; set => PreviewPanel.MaxFps = value; }
[Editor(typeof(SFMLColorEditor), typeof(UITypeEditor))]
[TypeConverter(typeof(SFMLColorConverter))]
[Category("[1] "), DisplayName("")]
public SFML.Graphics.Color BackgroundColor { get => PreviewPanel.BackgroundColor; set => PreviewPanel.BackgroundColor = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayBackgroundColor")]
public SFML.Graphics.Color BackgroundColor { get => PreviewPanel.BackgroundColor; set => PreviewPanel.BackgroundColor = value; }
}
}

View File

@@ -0,0 +1,403 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="panel_Render.Location" type="System.Drawing.Point, System.Drawing">
<value>157, 136</value>
</data>
<data name="panel_Render.Size" type="System.Drawing.Size, System.Drawing">
<value>320, 320</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>641, 636</value>
</data>
<data name="flowLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>101, 598</value>
</data>
<data name="flowLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>438, 38</value>
</data>
<data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA8iMAAAJNU0Z0AUkBTAIBAQcB
AAG4AQABuAEAAR8BAAEYAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABfAMAATADAAEBAQABIAYAAV0+
AAMEAQUDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf9DAAH/AwAB/wMAAf8DAAH/A1UB
sWQAA1kB7wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/Ay0BRbcAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf87AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf9cAANEAXgDAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/swAB/wMAAf8DAAH/AwAB/wMAAf8XAAH/AwAB/wMAAf8DAAH/AwAB
/zcAAf8DAAH/BwAB/wMAAf8DAAH/AwAB/wMAAf9XAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/wMAAf+vAAH/AwAB/wNRAaQnAAH/AwAB/wMAAf8DAAH/MwAB/wMAAf8IAANOAZcDAAH/AwAB/wMAAf8D
AAH/Ay4BSE8AAf8DAAH/AwAB/0sAAf8DAAH/AwAB/+AAAxUBHQMAAf8DAAH/AwAB/y8AAf8DAAH/EwAB
/wMAAf8DAAH/AwAB/wMAAf9LAAH/AwAB/wMAAf9LAAH/AwAB/wMAAf/kAAMmATgDAAH/AwAB/wMAAf8r
AAH/AwAB/xsAAf8DAAH/AwAB/wMAAf8DAAH/QwAB/wMAAf8DAAH/SwAB/wMAAf8DAAH/6wAB/wMAAf8D
AAH/KwAB/wMAAf8cAANIAfYDAAH/AwAB/wMAAf8DAAH/AwQBBTsAAf8DAAH/AwAB/0sAAf8DAAH/AwAB
/+8AAf8DAAH/AwAB/ycAAf8DAAH/JwAB/wMAAf8DAAH/AwAB/wMAAf83AAH/AwAB/wMAAf9LAAH/AwAB
/wMAAf/vAAH/AwAB/wMAAf8nAAH/AwAB/ygAAwcBCQMAAf8DAAH/AwAB/wMAAf8DYAHjLwAB/wMAAf8D
AAH/SwAB/wMAAf8DAAH/7AADIAEtAwAB/wMAAf8nAAH/AwAB/zMAAf8DAAH/AwAB/wMAAf8DAAH/KwAB
/wMAAf8DAAH/SwAB/wMAAf8DAAH/8wAB/wMAAf8nAAH/AwAB/zsAAf8DAAH/AwAB/wMAAf8nAAH/AwAB
/wMAAf9LAAH/AwAB/wMAAf/zAAH/AwAB/ycAAf8DAAH/PAADPwFsAwAB/wMAAf8nAAH/AwAB/wMAAf9L
AAH/AwAB/wMAAf/zAAH/AwAB/ycAAf8DAAH/OwAB/wMAAf8DAAH/AwAB/ycAAf8DAAH/AwAB/0sAAf8D
AAH/AwAB/5sAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/NAADCAEKAwAB/wMAAf8nAAH/AwAB
/zAAA10BzgMAAf8DAAH/AwAB/wMAAf8EAScAAf8DAAH/AwAB/0sAAf8DAAH/AwAB/5QAAwUBBgMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/zMAAf8DAAH/AwAB/ycAAf8DAAH/LwAB/wMAAf8D
AAH/AwAB/wMAAf8vAAH/AwAB/wMAAf9LAAH/AwAB/wMAAf+UAAMFAQYDAAH/AwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8zAAH/AwAB/wMAAf8nAAH/AwAB/ycAAf8DAAH/AwAB/wMAAf8DAAH/NwAB
/wMAAf8DAAH/SwAB/wMAAf8DAAH/lAADBQEGAwAB/wMAAf8PAAH/AwAB/wMAAf8DFQEcLwAB/wMAAf8D
AAH/KwAB/wMAAf8cAAM9AWkDAAH/AwAB/wMAAf8DAAH/A0MBdjsAAf8DAAH/AwAB/0sAAf8DAAH/AwAB
/5QAAwUBBgMAAf8DAAH/CwAB/wMAAf8DAAH/AxMBGjMAAf8DAAH/AwAB/ysAAf8DAAH/GwAB/wMAAf8D
AAH/AwAB/wMAAf9DAAH/AwAB/wMAAf9LAAH/AwAB/wMAAf+UAAMFAQYDAAH/AwAB/wcAAf8DAAH/AwAB
/wMbASYzAAH/AwAB/wMAAf8vAAH/AwAB/xMAAf8DAAH/AwAB/wMAAf8DAAH/SwAB/wMAAf8DAAH/SwAB
/wMAAf8DAAH/lAADBQEGAwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMdASgkAANcAe4DAAH/AwAB
/wMAAf8EAS8AAf8DAAH/CAADGAEhAwAB/wMAAf8DAAH/AwAB/wNcActPAAH/AwAB/wMAAf9LAAH/AwAB
/wMAAf+UAAMFAQYDAAH/AwAB/wMAAf8DAAH/A2AB4wMAAf8DAAH/AwAB/wMAAf8DUAGfFwAB/wMAAf8D
AAH/AwAB/wMAAf83AAH/AwAB/wcAAf8DAAH/AwAB/wMAAf8DAAH/VwAB/wMAAf8DAAH/AwAB/wMqAUAD
KgFAAyoBQAMqAUADKgFAAyoBQAMqAUADKgFAAyoBQAMqAUADKgFAAyoBQAMqAUADKgFAAyoBQAMqAUAD
AAH/AwAB/wMAAf8DAAH/mwAB/wMAAf8DAAH/Ax0BKQQAAwIBAwMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf87AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DBwEJWAAD
WQHDAwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/5wAAxIBFwMAAf8UAANKAYkDAAH/AwAB/wMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf9DAAH/AwAB/wMAAf8DAAH/AyEB+2cAAf8DAAH/AwAB/wMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8D
AAH/AwAB/wNbAcXIAANGAYADWgG/Ay4BSFQAA1oBv3QAA0YBgANaAb8DWgG/A1oBvwNaAb8DWgG/A1oB
vwNaAb8DWgG/A1oBvwNaAb8DWgG/A1oBvwNaAb8DWgG/A1oBvwNaAb8DLgFIpwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/FAADPQFpAwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8D
AAH/EwAB/wMAAf8DAAH/LwAB/wMAAf8DAAH/KAADGQEiAwAB/wMAAf8jAAH/AwAB/wMAAf8oAAM/AW0D
AAH/AwAB/zsAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8TAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8D
AAH/KwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/FAADAwEEAwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/DAADVAGrAwAB/wMAAf8DAAH/AwAB/yQAA1YBtgMAAf8DAAH/AwAB
/wMAAf8kAAM+AfkDAAH/AwAB/xwAA1oB8QMAAf8DAAH/AwAB/wMAAf8DPwH4IwAB/wMAAf8DAAH/NwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/JwAB/wMAAf8DAAH/AwAB/wMAAf87AAH/AwAB/wMAAf8DAAH/AwAB/wwAA1QBqwMAAf8D
AAH/AwAB/wMAAf8DAAH/IAADVgG1AwAB/wMAAf8DAAH/AwAB/wMAAf8gAAM+AfkDAAH/AwAB/xwAA1oB
8QMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/x8AAf8DAAH/AwAB/zcAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/wsAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/ycAAf8DAAH/AwAB
/wMAAf8DAAH/AxUB/jMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wwAA1QBqwMAAf8DAAH/AwAB/wMAAf8D
AAH/AwAB/wNZAbsYAANWAbUDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DUQGeGAADPgH5AwAB/wMAAf8c
AANaAfEDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A1ABnRcAAf8DAAH/AwAB/zcAAf8DAAH/AwAB
/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/ycAAf8DAAH/A1YBswMAAf8DAAH/AwAB
/wMAAf8rAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/DAADVAGrAwAB/wMAAf8DPQFoAwAB/wMAAf8D
AAH/AwAB/wMAAf8UAANWAbUDAAH/AwAB/wMzAVADAAH/AwAB/wMAAf8DAAH/AwAB/xQAAz4B+QMAAf8D
AAH/HAADWgHxAwAB/wMAAf8DEQEWBAEDAAH/AwAB/wMAAf8DAAH/AwAB/xMAAf8DAAH/AwAB/zcAAf8D
AAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/ycAAf8DAAH/A1YBswcAAf8D
AAH/AwAB/wMAAf8jAAH/AwAB/wMAAf8DAAH/BwAB/wMAAf8DAAH/DAADVAGrAwAB/wMAAf8DPQFoBwAB
/wMAAf8DAAH/AwAB/wMAAf8QAANWAbUDAAH/AwAB/wMzAVAHAAH/AwAB/wMAAf8DAAH/AwAB/xAAAz4B
+QMAAf8DAAH/HAADWgHxAwAB/wMAAf8DEQEWCwAB/wMAAf8DAAH/AwAB/wMAAf8PAAH/AwAB/wMAAf83
AAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8nAAH/AwAB/wNWAbML
AAH/AwAB/wMAAf8DFQH+GwAB/wMAAf8DAAH/AwAB/wsAAf8DAAH/AwAB/wwAA1QBqwMAAf8DAAH/Az0B
aAgAA2AB2wMAAf8DAAH/AwAB/wMAAf8MAANWAbUDAAH/AwAB/wMzAVAIAANgAeMDAAH/AwAB/wMAAf8D
AAH/DAADPgH5AwAB/wMAAf8cAANaAfEDAAH/AwAB/wMRARYMAAMzAVIDAAH/AwAB/wMAAf8DAAH/AwAB
/wcAAf8DAAH/AwAB/zcAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB/w8AAf8DAAH/AwAB
/ycAAf8DAAH/A1YBsw8AAf8DAAH/AwAB/wMAAf8TAAH/AwAB/wMAAf8DAAH/DwAB/wMAAf8DAAH/DAAD
VAGrAwAB/wMAAf8DPQFoDAADJQE3AwAB/wMAAf8DAAH/AwAB/wgAA1YBtQMAAf8DAAH/AzMBUAwAAzIB
TwMAAf8DAAH/AwAB/wMAAf8IAAM+AfkDAAH/AwAB/xwAA1oB8QMAAf8DAAH/AxEBFhcAAf8DAAH/AwAB
/wMAAf8DAAH/AxUB/gMAAf8DAAH/NwAB/wMAAf8DAAH/DwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/DwAB
/wMAAf8DAAH/JwAB/wMAAf8XAAH/AwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/AwAB/xAAAwwBDwMAAf8D
SAH2DAADVAGrAwAB/wMAAf8DPQFoFwAB/wMAAf8DAAH/AwAB/wQAA1YBtQMAAf8DAAH/AzMBUBcAAf8D
AAH/AwAB/wMAAf8EAAM+AfkDAAH/AwAB/xwAA1oB8QMAAf8DAAH/AxEBFhgAA1oB6QMAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/zcAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB/w8AAf8DAAH/AwAB
/0cAAf8DAAH/AwAB/wMVAf4DAAH/AwAB/wMAAf8DAAH/LAADVAGrAwAB/wMAAf8DPQFoGwAB/wMAAf8D
AAH/AwAB/wNdAc4DAAH/AwAB/wMzAVAbAAH/AwAB/wMAAf8DAAH/AykB+gMAAf8DAAH/HAADWgHxAwAB
/wMAAf8DEQEWIwAB/wMAAf8DAAH/AwAB/wMAAf83AAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8LAAH/AwAB
/wMAAf8PAAH/AwAB/wMAAf9LAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8wAANUAasDAAH/AwAB/wM9AWgf
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DMwFQHwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/HAADWgHxAwAB
/wMAAf8DEQEWJwAB/wMAAf8DAAH/AwAB/zcAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB
/w8AAf8DAAH/AwAB/08AAf8DAAH/AwAB/wMAAf80AANUAasDAAH/AwAB/wM9AWgjAAH/AwAB/wMAAf8D
AAH/AwAB/wMzAVAjAAH/AwAB/wMAAf8DAAH/AwAB/xwAA1oB8QMAAf8DAAH/AxEBFisAAf8DAAH/AwAB
/zcAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/0sAAf8DAAH/AwAB
/wMAAf8DAAH/AxUB/jAAA1QBqwMAAf8DAAH/Az0BaB8AAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMzAVAf
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8cAANaAfEDAAH/AwAB/wMRARYkAANcAdkDAAH/AwAB/wMAAf83
AAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8PAAH/AwAB/wMAAf9HAAH/AwAB/wMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/ywAA1QBqwMAAf8DAAH/Az0BaBsAAf8DAAH/AwAB/wMAAf8DWgHxAwAB
/wMAAf8DMwFQGwAB/wMAAf8DAAH/AwAB/wMVAf4DAAH/AwAB/xwAA1oB8QMAAf8DAAH/AxEBFiMAAf8D
AAH/AwAB/wMAAf8DAAH/NwAB/wMAAf8DAAH/DwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/DwAB/wMAAf8D
AAH/JwAB/wMAAf8XAAH/AwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/AwAB/xcAAf8DWAG4DAADVAGrAwAB
/wMAAf8DPQFoFwAB/wMAAf8DAAH/AwAB/wQAA1YBtQMAAf8DAAH/AzMBUBcAAf8DAAH/AwAB/wMAAf8E
AAM+AfkDAAH/AwAB/xwAA1oB8QMAAf8DAAH/AxEBFhgAAzABSgMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/zcAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/ycAAf8DAAH/A1YB
sw8AAf8DAAH/AwAB/wMAAf8TAAH/AwAB/wMAAf8DFQH+DwAB/wMAAf8DAAH/DAADVAGrAwAB/wMAAf8D
PQFoEwAB/wMAAf8DAAH/AwAB/wgAA1YBtQMAAf8DAAH/AzMBUAwAAwkBDAMAAf8DAAH/AwAB/wMAAf8I
AAM+AfkDAAH/AwAB/xwAA1oB8QMAAf8DAAH/AxEBFhcAAf8DAAH/AwAB/wMAAf8DAAH/AyoB/QMAAf8D
AAH/NwAB/wMAAf8DAAH/DwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/DwAB/wMAAf8DAAH/JwAB/wMAAf8D
VgGzCwAB/wMAAf8DAAH/AwAB/xsAAf8DAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8MAANUAasDAAH/AwAB
/wM9AWgIAAM6AWADAAH/AwAB/wMAAf8DAAH/DAADVgG1AwAB/wMAAf8DMwFQCAADSwGMAwAB/wMAAf8D
AAH/AwAB/wwAAz4B+QMAAf8DAAH/HAADWgHxAwAB/wMAAf8DEQEWDAADBwEJAwAB/wMAAf8DAAH/AwAB
/wMAAf8HAAH/AwAB/wMAAf83AAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8PAAH/AwAB
/wMAAf8nAAH/AwAB/wNWAbMHAAH/AwAB/wMAAf8DAAH/IwAB/wMAAf8DAAH/AwAB/wcAAf8DAAH/AwAB
/wwAA1QBqwMAAf8DAAH/Az0BaAcAAf8DAAH/AwAB/wMAAf8DAAH/EAADVgG1AwAB/wMAAf8DMwFQBwAB
/wMAAf8DAAH/AwAB/wMAAf8QAAM+AfkDAAH/AwAB/xwAA1oB8QMAAf8DAAH/AxEBFgsAAf8DAAH/AwAB
/wMAAf8DAAH/A08BmQsAAf8DAAH/AwAB/zcAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB
/w8AAf8DAAH/AwAB/ycAAf8DAAH/A1YBswMAAf8DAAH/AwAB/wMAAf8rAAH/AwAB/wMAAf8DFQH+AwAB
/wMAAf8DAAH/DAADVAGrAwAB/wMAAf8DPQFoAwAB/wMAAf8DAAH/AwAB/wMAAf8UAANWAbUDAAH/AwAB
/wMzAVADAAH/AwAB/wMAAf8DAAH/AwAB/xQAAz4B+QMAAf8DAAH/HAADWgHxAwAB/wMAAf8DEQEWBwAB
/wMAAf8DAAH/AwAB/wMAAf8TAAH/AwAB/wMAAf83AAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8LAAH/AwAB
/wMAAf8PAAH/AwAB/wMAAf8nAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8zAAH/AwAB/wMAAf8DAAH/AwAB
/wMAAf8MAANUAasDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DUwH0GAADVgG1AwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/A10B7BgAAz4B+QMAAf8DAAH/HAADWgHxAwAB/wMAAf8DYQHrAwAB/wMAAf8DAAH/AwAB
/wNTAfQXAAH/AwAB/wMAAf83AAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8PAAH/AwAB
/wMAAf8nAAH/AwAB/wMAAf8DAAH/AwAB/zsAAf8DAAH/AwAB/wMAAf8DAAH/DAADVAGrAwAB/wMAAf8D
AAH/AwAB/wMAAf8DQwF3HAADVgG1AwAB/wMAAf8DAAH/AwAB/wMAAf8DMAFMHAADPgH5AwAB/wMAAf8c
AANaAfEDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8fAAH/AwAB/wMAAf83AAH/AwAB/wMAAf8DKgFAAyoB
QAMqAUADAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8DKgFAAyoBQAMqAUADAAH/AwAB/wMAAf8nAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8bAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/wMAAf8MAANUAasDAAH/AwAB/wMAAf8DAAH/AwYBCCAAA1YBtgMAAf8DAAH/AwAB/wMAAf8DAgEDIAAD
PgH5AwAB/wMAAf8cAANaAfEDAAH/AwAB/wMAAf8DAAH/AwAB/yMAAf8DAAH/AwAB/zcAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wsAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/ycAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/xQAA0wBkAMAAf8DAAH/AwAB/wMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/xMAAf8DAAH/AwAB/y8AAf8DAAH/AwAB/ygAAzYBWAMAAf8DAAH/IwAB
/wMAAf8DAAH/Aw0BESQAA1UBrQMAAf8DAAH/OwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/xMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8sAANaAb8DWgG/A1oBvwNaAb8DWgG/A1oBvwNaAb8DFQEcGAAD
TwGZA1oBvwNaAb8DWgG/A1oBvwNaAb8DWgG/A1oBvxgAA04BlzQAA0sBjTAAAwwBDygAA1ABmjAAAygB
PEAAAzgBWwNaAb8DWgG/A1oBvwMwAUwYAANEAXoDWgG/A1oBvwNaAb8DIAEtHAABQgFNAT4HAAE+AwAB
KAMAAXwDAAEwAwABAQEAAQEGAAEDFgAD/wEAAf8B4AEHAf8B+AE/Av8B4AIAAXgEAAH/AcABAQH/AfgB
HwL/AcACAAF4BAAB/wGDAeAB/wH5AQcC/wHAAgABOAQAAf8BjwH4AX8B+QGBAv8BxwH/Af4BOAQAAv8B
/AE/AfkB4AL/AccB/wH+ATgEAAL/Af4BHwH5AfgBPwH/AccB/wH+ATgEAAP/AR8B+QH8AQ8B/wHHAf8B
/gE4BAAD/wGPAfkB/wEHAf8BxwH/Af4BOAQAA/8BjwH5Af8BgQH/AccB/wH+ATgEAAP/AY8B+QH/AeAB
/wHHAf8B/gE4BAAD/wHPAfkB/wH4AX8BxwH/Af4BOAQAA/8BzwH5Af8B/AF/AccB/wH+ATgEAAP/Ac8B
+QH/AfgBfwHHAf8B/gE4BAAB8AEPAf8BjwH5Af8B4AF/AccB/wH+ATgEAAHgAQcB/wGPAfkB/wHBAf8B
xwH/Af4BOAQAAeABBwH/AY8B+QH/AQcB/wHHAf8B/gE4BAAB4wGHAf8BHwH5AfwBDwH/AccB/wH+ATgE
AAHjAQ8B/wEfAfkB+AE/Af8BxwH/Af4BOAQAAeIBHwH+AT8B+QHgAv8BxwH/Af4BOAQAAeABDwH4AT8B
+QGBAv8BxwH/Af4BOAQAAeABAwHgAf8B+QEHAv8BwAIAATgEAAHwAYABAQH/AfgBDwL/AcACAAF4BAAB
8wHgAQcB/wH4AT8C/wHgAgABeAQAAf8B/gE/Af8B/gP/AfgBAAEBAfgEAAHwAQcBwAEPAR8B/AF/AeMB
/AF/AeMB/wHwAR4BAwLwAQcBwAEOAQ8B+AE/AeMB+AEfAeMB/wHgAQwBAQLwAX8B/gEOAQcB+AEfAeMB
+AEPAeMB/wHgAQwBAQLwAT8B/AEOAQEB+AEHAeMB+AEDAeMB/wHjAYwBcQLwAR8B+AEOAQAB+AEDAeMB
+AEBAeMB/wHjAYwBcQHwAfEBDwHwAY4BEAF4AUEB4wH4AWAB4wH/AeMBjAFxAfAB8QGHAeEBjgEYATgB
YAHjAfgBcAEjAf8B4wGMAXEB8AHxAsMBjgEcARgBcAFjAfgBfAEDAf8B4wGMAXEB8AHzAeEBhwGOAR8B
CAF8ASMB+AF+AQMB/wHjAYwBcQHwAf8B8AEPAf4BHwGAAX4BAwH4AX8BgwH/AeMBjAFxAfAB/wH4AR8B
/gEfAcABfwEDAfgBfwHDAf8B4wGMAXEB8AH/AfwBPwH+AR8B4AF/AYMB+AF/AeMB/wHjAYwBcQHwAf8B
+AEfAf4BHwHAAX8BAwH4AX8BwwH/AeMBjAFxAfAB/wHwAQ8B/gEfAYABfgEDAfgBfwGDAf8B4wGMAXEB
8AHzAeEBhwHOAR8BCAF8ASMB+AF+AQMB/wHjAYwBcQHwAfECwwGOAR4BGAFwAWMB+AF8AQMB/wHjAYwB
cQHwAfEBhwHhAY4BGAE4AWAB4wH4AXABIwH/AeMBjAFxAfAB8QEPAfABjgEQAXgBQQHjAfgBYAFjAf8B
4wGMAXEC8AEfAfgBDgEAAfgBAwHjAfgBQQHjAf8B4wGMAXEC8AE/AfwBDgEBAfgBBwHjAfgBAwHjAf8B
4wGMAXEC8AF/Af4BDgEDAfgBDwHjAfgBDwHjAf8B4AEMAQEC8AEHAeABDgEHAfgBHwHjAfgBHwHjAf8B
4AEMAQEC8AEHAcABDwEfAfwBfwHjAfwBPwHjAf8B8AEeAQMB8AH4AQcB4AEfAb8B/gH/AfcB/gH/AfcB
/wH4AT8BBwHwCw==
</value>
</data>
<data name="button_Stop.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 2</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="button_Stop.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="button_Stop.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>15, 2, 15, 2</value>
</data>
<data name="button_Stop.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 34</value>
</data>
<data name="button_Stop.ToolTip" xml:space="preserve">
<value>Stop playback and reset time.</value>
</data>
<data name="button_Restart.Location" type="System.Drawing.Point, System.Drawing">
<value>76, 2</value>
</data>
<data name="button_Restart.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="button_Restart.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>15, 2, 15, 2</value>
</data>
<data name="button_Restart.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 34</value>
</data>
<data name="button_Restart.ToolTip" xml:space="preserve">
<value>Play from the beginning.</value>
</data>
<data name="button_Start.Location" type="System.Drawing.Point, System.Drawing">
<value>149, 2</value>
</data>
<data name="button_Start.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="button_Start.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>15, 2, 15, 2</value>
</data>
<data name="button_Start.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 34</value>
</data>
<data name="button_Start.ToolTip" xml:space="preserve">
<value>Play/Pause</value>
</data>
<data name="button_ForwardStep.Location" type="System.Drawing.Point, System.Drawing">
<value>222, 2</value>
</data>
<data name="button_ForwardStep.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="button_ForwardStep.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>15, 2, 15, 2</value>
</data>
<data name="button_ForwardStep.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 34</value>
</data>
<data name="button_ForwardStep.ToolTip" xml:space="preserve">
<value>Fast forward 1 frame</value>
</data>
<data name="button_ForwardFast.Location" type="System.Drawing.Point, System.Drawing">
<value>295, 2</value>
</data>
<data name="button_ForwardFast.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="button_ForwardFast.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>15, 2, 15, 2</value>
</data>
<data name="button_ForwardFast.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 34</value>
</data>
<data name="button_ForwardFast.ToolTip" xml:space="preserve">
<value>Fast forward 10 frames.</value>
</data>
<data name="button_FullScreen.Location" type="System.Drawing.Point, System.Drawing">
<value>368, 2</value>
</data>
<data name="button_FullScreen.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="button_FullScreen.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>15, 2, 15, 2</value>
</data>
<data name="button_FullScreen.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 34</value>
</data>
<data name="button_FullScreen.ToolTip" xml:space="preserve">
<value>Fullscreen preview.</value>
</data>
<data name="panel_ViewContainer.Size" type="System.Drawing.Size, System.Drawing">
<value>641, 598</value>
</data>
<data name="panel_RenderContainer.Size" type="System.Drawing.Size, System.Drawing">
<value>641, 598</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>11, 24</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>641, 636</value>
</data>
</root>

View File

@@ -117,17 +117,381 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="button_ForwardStep.ImageKey" xml:space="preserve">
<value>forward-step</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="spinePreviewFullScreenForm.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;button_ForwardFast.Name" xml:space="preserve">
<value>button_ForwardFast</value>
</data>
<data name="&gt;&gt;button_ForwardFast.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="&gt;&gt;panel_ViewContainer.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Restart.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="button_Start.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 34</value>
</data>
<data name="&gt;&gt;toolTip.Name" xml:space="preserve">
<value>toolTip</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="button_Start.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;button_Start.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="button_FullScreen.ImageKey" xml:space="preserve">
<value>arrows-maximize</value>
</data>
<data name="&gt;&gt;spinePreviewFullScreenForm.Type" xml:space="preserve">
<value>SpineViewer.Forms.SpinePreviewFullScreenForm, SpineViewer, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;wallpaperForm.Name" xml:space="preserve">
<value>wallpaperForm</value>
</data>
<data name="button_Restart.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;flowLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>466, 530</value>
</data>
<data name="&gt;&gt;button_Restart.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="button_Restart.Location" type="System.Drawing.Point, System.Drawing">
<value>65, 2</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="button_ForwardStep.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>11, 2, 11, 2</value>
</data>
<data name="button_ForwardFast.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="button_Start.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>11, 2, 11, 2</value>
</data>
<data name="&gt;&gt;panel_RenderContainer.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;flowLayoutPanel1.Name" xml:space="preserve">
<value>flowLayoutPanel1</value>
</data>
<data name="button_FullScreen.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="button_ForwardStep.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 34</value>
</data>
<data name="button_Start.ImageKey" xml:space="preserve">
<value>pause</value>
</data>
<data name="panel_Render.Location" type="System.Drawing.Point, System.Drawing">
<value>114, 113</value>
</data>
<data name="button_Start.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;panel_ViewContainer.Name" xml:space="preserve">
<value>panel_ViewContainer</value>
</data>
<data name="button_Stop.ToolTip" xml:space="preserve">
<value>停止播放并重置时间到初始</value>
</data>
<data name="button_Restart.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>11, 2, 11, 2</value>
</data>
<data name="&gt;&gt;panel_Render.Name" xml:space="preserve">
<value>panel_Render</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>SpinePreviewPanel</value>
</data>
<data name="&gt;&gt;button_Stop.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;button_ForwardFast.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
</data>
<data name="&gt;&gt;panel_Render.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="spinePreviewFullScreenForm.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>2560, 1440</value>
</data>
<data name="&gt;&gt;panel_Render.Parent" xml:space="preserve">
<value>panel_RenderContainer</value>
</data>
<data name="panel_ViewContainer.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;panel_RenderContainer.Parent" xml:space="preserve">
<value>panel_ViewContainer</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="wallpaperForm.ToolTip" xml:space="preserve">
<value />
</data>
<data name="&gt;&gt;button_ForwardStep.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="button_ForwardStep.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="panel_Render.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;button_Stop.Name" xml:space="preserve">
<value>button_Stop</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;button_FullScreen.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
</data>
<data name="flowLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;imageList.Name" xml:space="preserve">
<value>imageList</value>
</data>
<data name="&gt;&gt;button_ForwardFast.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Stop.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 34</value>
</data>
<data name="panel_RenderContainer.Size" type="System.Drawing.Size, System.Drawing">
<value>466, 492</value>
</data>
<data name="button_Restart.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="button_ForwardFast.Location" type="System.Drawing.Point, System.Drawing">
<value>254, 2</value>
</data>
<data name="&gt;&gt;button_Start.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_ForwardStep.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="flowLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>378, 38</value>
</data>
<data name="flowLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="panel_Render.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="&gt;&gt;button_ForwardStep.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="panel_ViewContainer.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="panel_RenderContainer.ToolTip" xml:space="preserve">
<value />
</data>
<data name="&gt;&gt;imageList.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="button_Restart.ToolTip" xml:space="preserve">
<value>从头开始播放</value>
</data>
<data name="&gt;&gt;button_FullScreen.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="panel_Render.ToolTip" xml:space="preserve">
<value />
</data>
<data name="button_ForwardFast.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="button_Start.Location" type="System.Drawing.Point, System.Drawing">
<value>128, 2</value>
</data>
<data name="spinePreviewFullScreenForm.ToolTip" xml:space="preserve">
<value />
</data>
<data name="&gt;&gt;button_Start.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
</data>
<data name="panel_RenderContainer.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="button_FullScreen.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>11, 2, 11, 2</value>
</data>
<data name="&gt;&gt;button_Restart.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
</data>
<data name="panel_ViewContainer.Size" type="System.Drawing.Size, System.Drawing">
<value>466, 492</value>
</data>
<data name="button_ForwardStep.ToolTip" xml:space="preserve">
<value>快进 1 帧</value>
</data>
<data name="&gt;&gt;button_Stop.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_ForwardFast.ToolTip" xml:space="preserve">
<value>快进 10 帧</value>
</data>
<data name="flowLayoutPanel1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>None</value>
</data>
<data name="button_FullScreen.Location" type="System.Drawing.Point, System.Drawing">
<value>317, 2</value>
</data>
<data name="&gt;&gt;button_ForwardStep.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="flowLayoutPanel1.ToolTip" xml:space="preserve">
<value />
</data>
<data name="button_ForwardFast.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="button_FullScreen.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;button_Restart.Name" xml:space="preserve">
<value>button_Restart</value>
</data>
<data name="button_Stop.ImageKey" xml:space="preserve">
<value>stop</value>
</data>
<data name="panel_Render.Size" type="System.Drawing.Size, System.Drawing">
<value>233, 267</value>
</data>
<data name="panel_RenderContainer.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="wallpaperForm.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>Manual</value>
</data>
<data name="button_ForwardStep.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;panel_ViewContainer.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="button_Stop.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="panel_ViewContainer.ToolTip" xml:space="preserve">
<value />
</data>
<data name="&gt;&gt;wallpaperForm.Type" xml:space="preserve">
<value>SpineViewer.WallpaperForm, SpineViewer, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="button_Stop.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 2</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_FullScreen.ToolTip" xml:space="preserve">
<value>全屏预览</value>
</data>
<data name="button_FullScreen.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="button_Stop.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="flowLayoutPanel1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;panel_RenderContainer.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Stop.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="flowLayoutPanel1" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="panel_ViewContainer" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="Percent,100,AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="button_FullScreen.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="&gt;&gt;button_FullScreen.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="button_Stop.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tableLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Name" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;button_Restart.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Stop.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>11, 2, 11, 2</value>
</data>
<data name="&gt;&gt;button_ForwardStep.Name" xml:space="preserve">
<value>button_ForwardStep</value>
</data>
<data name="panel_RenderContainer.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="button_ForwardStep.Location" type="System.Drawing.Point, System.Drawing">
<value>191, 2</value>
</data>
<data name="flowLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>44, 492</value>
</data>
<data name="$this.ToolTip" xml:space="preserve">
<value />
</data>
<data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA8iMAAAJNU0Z0AUkBTAIBAQcB
AAGQAQABkAEAAR8BAAEYAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABfAMAATADAAEBAQABIAYAAV0+
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA9CMAAAJNU0Z0AUkBTAIBAQcB
AAGkAQABrAEAAR8BAAEYAQAE/wEhARAI/wFCAU0BNgcAATYDAAEoAwABfAMAATADAAEBAQABIAYAAV0+
AAMEAQUDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf9DAAH/AwAB/wMAAf8DAAH/A1UB
sWQAA1gB7wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8D
sWQAA1kB7wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/Ay0BRbcAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf87AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf9cAANEAXgDAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
@@ -138,7 +502,7 @@
AAH/Ay4BSE8AAf8DAAH/AwAB/0sAAf8DAAH/AwAB/+AAAxUBHQMAAf8DAAH/AwAB/y8AAf8DAAH/EwAB
/wMAAf8DAAH/AwAB/wMAAf9LAAH/AwAB/wMAAf9LAAH/AwAB/wMAAf/kAAMmATgDAAH/AwAB/wMAAf8r
AAH/AwAB/xsAAf8DAAH/AwAB/wMAAf8DAAH/QwAB/wMAAf8DAAH/SwAB/wMAAf8DAAH/6wAB/wMAAf8D
AAH/KwAB/wMAAf8cAANCAfYDAAH/AwAB/wMAAf8DAAH/AwQBBTsAAf8DAAH/AwAB/0sAAf8DAAH/AwAB
AAH/KwAB/wMAAf8cAANEAfYDAAH/AwAB/wMAAf8DAAH/AwQBBTsAAf8DAAH/AwAB/0sAAf8DAAH/AwAB
/+8AAf8DAAH/AwAB/ycAAf8DAAH/JwAB/wMAAf8DAAH/AwAB/wMAAf83AAH/AwAB/wMAAf9LAAH/AwAB
/wMAAf/vAAH/AwAB/wMAAf8nAAH/AwAB/ygAAwcBCQMAAf8DAAH/AwAB/wMAAf8DYAHjLwAB/wMAAf8D
AAH/SwAB/wMAAf8DAAH/7AADIAEtAwAB/wMAAf8nAAH/AwAB/zMAAf8DAAH/AwAB/wMAAf8DAAH/KwAB
@@ -155,7 +519,7 @@
/5QAAwUBBgMAAf8DAAH/CwAB/wMAAf8DAAH/AxMBGjMAAf8DAAH/AwAB/ysAAf8DAAH/GwAB/wMAAf8D
AAH/AwAB/wMAAf9DAAH/AwAB/wMAAf9LAAH/AwAB/wMAAf+UAAMFAQYDAAH/AwAB/wcAAf8DAAH/AwAB
/wMbASYzAAH/AwAB/wMAAf8vAAH/AwAB/xMAAf8DAAH/AwAB/wMAAf8DAAH/SwAB/wMAAf8DAAH/SwAB
/wMAAf8DAAH/lAADBQEGAwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMdASgkAANZAe4DAAH/AwAB
/wMAAf8DAAH/lAADBQEGAwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMdASgkAANaAe4DAAH/AwAB
/wMAAf8EAS8AAf8DAAH/CAADGAEhAwAB/wMAAf8DAAH/AwAB/wNcActPAAH/AwAB/wMAAf9LAAH/AwAB
/wMAAf+UAAMFAQYDAAH/AwAB/wMAAf8DAAH/A2AB4wMAAf8DAAH/AwAB/wMAAf8DUAGfFwAB/wMAAf8D
AAH/AwAB/wMAAf83AAH/AwAB/wcAAf8DAAH/AwAB/wMAAf8DAAH/VwAB/wMAAf8DAAH/AwAB/wMqAUAD
@@ -173,82 +537,82 @@
AAH/AwAB/zsAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8TAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8D
AAH/KwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/FAADAwEEAwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/DAADVAGrAwAB/wMAAf8DAAH/AwAB/yQAA1YBtgMAAf8DAAH/AwAB
/wMAAf8kAAM1AfkDAAH/AwAB/xwAA1cB8QMAAf8DAAH/AwAB/wMAAf8DPAH4IwAB/wMAAf8DAAH/NwAB
/wMAAf8kAAM4AfkDAAH/AwAB/xwAA1gB8QMAAf8DAAH/AwAB/wMAAf8DPQH4IwAB/wMAAf8DAAH/NwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/JwAB/wMAAf8DAAH/AwAB/wMAAf87AAH/AwAB/wMAAf8DAAH/AwAB/wwAA1QBqwMAAf8D
AAH/AwAB/wMAAf8DAAH/IAADVgG1AwAB/wMAAf8DAAH/AwAB/wMAAf8gAAM1AfkDAAH/AwAB/xwAA1cB
AAH/AwAB/wMAAf8DAAH/IAADVgG1AwAB/wMAAf8DAAH/AwAB/wMAAf8gAAM4AfkDAAH/AwAB/xwAA1gB
8QMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/x8AAf8DAAH/AwAB/zcAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/wsAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/ycAAf8DAAH/AwAB
/wMAAf8DAAH/AxIB/jMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wwAA1QBqwMAAf8DAAH/AwAB/wMAAf8D
AAH/AwAB/wNZAbsYAANWAbUDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DUQGeGAADNQH5AwAB/wMAAf8c
AANXAfEDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A1ABnRcAAf8DAAH/AwAB/zcAAf8DAAH/AwAB
/wMAAf8DAAH/AxMB/jMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wwAA1QBqwMAAf8DAAH/AwAB/wMAAf8D
AAH/AwAB/wNZAbsYAANWAbUDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DUQGeGAADOAH5AwAB/wMAAf8c
AANYAfEDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A1ABnRcAAf8DAAH/AwAB/zcAAf8DAAH/AwAB
/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/ycAAf8DAAH/A1YBswMAAf8DAAH/AwAB
/wMAAf8rAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/DAADVAGrAwAB/wMAAf8DPQFoAwAB/wMAAf8D
AAH/AwAB/wMAAf8UAANWAbUDAAH/AwAB/wMzAVADAAH/AwAB/wMAAf8DAAH/AwAB/xQAAzUB+QMAAf8D
AAH/HAADVwHxAwAB/wMAAf8DEQEWBAEDAAH/AwAB/wMAAf8DAAH/AwAB/xMAAf8DAAH/AwAB/zcAAf8D
AAH/AwAB/wMAAf8UAANWAbUDAAH/AwAB/wMzAVADAAH/AwAB/wMAAf8DAAH/AwAB/xQAAzgB+QMAAf8D
AAH/HAADWAHxAwAB/wMAAf8DEQEWBAEDAAH/AwAB/wMAAf8DAAH/AwAB/xMAAf8DAAH/AwAB/zcAAf8D
AAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/ycAAf8DAAH/A1YBswcAAf8D
AAH/AwAB/wMAAf8jAAH/AwAB/wMAAf8DAAH/BwAB/wMAAf8DAAH/DAADVAGrAwAB/wMAAf8DPQFoBwAB
/wMAAf8DAAH/AwAB/wMAAf8QAANWAbUDAAH/AwAB/wMzAVAHAAH/AwAB/wMAAf8DAAH/AwAB/xAAAzUB
+QMAAf8DAAH/HAADVwHxAwAB/wMAAf8DEQEWCwAB/wMAAf8DAAH/AwAB/wMAAf8PAAH/AwAB/wMAAf83
/wMAAf8DAAH/AwAB/wMAAf8QAANWAbUDAAH/AwAB/wMzAVAHAAH/AwAB/wMAAf8DAAH/AwAB/xAAAzgB
+QMAAf8DAAH/HAADWAHxAwAB/wMAAf8DEQEWCwAB/wMAAf8DAAH/AwAB/wMAAf8PAAH/AwAB/wMAAf83
AAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8nAAH/AwAB/wNWAbML
AAH/AwAB/wMAAf8DEgH+GwAB/wMAAf8DAAH/AwAB/wsAAf8DAAH/AwAB/wwAA1QBqwMAAf8DAAH/Az0B
AAH/AwAB/wMAAf8DEwH+GwAB/wMAAf8DAAH/AwAB/wsAAf8DAAH/AwAB/wwAA1QBqwMAAf8DAAH/Az0B
aAgAA2AB2wMAAf8DAAH/AwAB/wMAAf8MAANWAbUDAAH/AwAB/wMzAVAIAANgAeMDAAH/AwAB/wMAAf8D
AAH/DAADNQH5AwAB/wMAAf8cAANXAfEDAAH/AwAB/wMRARYMAAMzAVIDAAH/AwAB/wMAAf8DAAH/AwAB
AAH/DAADOAH5AwAB/wMAAf8cAANYAfEDAAH/AwAB/wMRARYMAAMzAVIDAAH/AwAB/wMAAf8DAAH/AwAB
/wcAAf8DAAH/AwAB/zcAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB/w8AAf8DAAH/AwAB
/ycAAf8DAAH/A1YBsw8AAf8DAAH/AwAB/wMAAf8TAAH/AwAB/wMAAf8DAAH/DwAB/wMAAf8DAAH/DAAD
VAGrAwAB/wMAAf8DPQFoDAADJQE3AwAB/wMAAf8DAAH/AwAB/wgAA1YBtQMAAf8DAAH/AzMBUAwAAzIB
TwMAAf8DAAH/AwAB/wMAAf8IAAM1AfkDAAH/AwAB/xwAA1cB8QMAAf8DAAH/AxEBFhcAAf8DAAH/AwAB
/wMAAf8DAAH/AxIB/gMAAf8DAAH/NwAB/wMAAf8DAAH/DwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/DwAB
TwMAAf8DAAH/AwAB/wMAAf8IAAM4AfkDAAH/AwAB/xwAA1gB8QMAAf8DAAH/AxEBFhcAAf8DAAH/AwAB
/wMAAf8DAAH/AxMB/gMAAf8DAAH/NwAB/wMAAf8DAAH/DwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/DwAB
/wMAAf8DAAH/JwAB/wMAAf8XAAH/AwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/AwAB/xAAAwwBDwMAAf8D
QgH2DAADVAGrAwAB/wMAAf8DPQFoFwAB/wMAAf8DAAH/AwAB/wQAA1YBtQMAAf8DAAH/AzMBUBcAAf8D
AAH/AwAB/wMAAf8EAAM1AfkDAAH/AwAB/xwAA1cB8QMAAf8DAAH/AxEBFhgAA1oB6QMAAf8DAAH/AwAB
RAH2DAADVAGrAwAB/wMAAf8DPQFoFwAB/wMAAf8DAAH/AwAB/wQAA1YBtQMAAf8DAAH/AzMBUBcAAf8D
AAH/AwAB/wMAAf8EAAM4AfkDAAH/AwAB/xwAA1gB8QMAAf8DAAH/AxEBFhgAA1oB6QMAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/zcAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB/w8AAf8DAAH/AwAB
/0cAAf8DAAH/AwAB/wMSAf4DAAH/AwAB/wMAAf8DAAH/LAADVAGrAwAB/wMAAf8DPQFoGwAB/wMAAf8D
AAH/AwAB/wNdAc4DAAH/AwAB/wMzAVAbAAH/AwAB/wMAAf8DAAH/AyYB+gMAAf8DAAH/HAADVwHxAwAB
/0cAAf8DAAH/AwAB/wMTAf4DAAH/AwAB/wMAAf8DAAH/LAADVAGrAwAB/wMAAf8DPQFoGwAB/wMAAf8D
AAH/AwAB/wNdAc4DAAH/AwAB/wMzAVAbAAH/AwAB/wMAAf8DAAH/AycB+gMAAf8DAAH/HAADWAHxAwAB
/wMAAf8DEQEWIwAB/wMAAf8DAAH/AwAB/wMAAf83AAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8LAAH/AwAB
/wMAAf8PAAH/AwAB/wMAAf9LAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8wAANUAasDAAH/AwAB/wM9AWgf
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DMwFQHwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/HAADVwHxAwAB
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DMwFQHwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/HAADWAHxAwAB
/wMAAf8DEQEWJwAB/wMAAf8DAAH/AwAB/zcAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB
/w8AAf8DAAH/AwAB/08AAf8DAAH/AwAB/wMAAf80AANUAasDAAH/AwAB/wM9AWgjAAH/AwAB/wMAAf8D
AAH/AwAB/wMzAVAjAAH/AwAB/wMAAf8DAAH/AwAB/xwAA1cB8QMAAf8DAAH/AxEBFisAAf8DAAH/AwAB
AAH/AwAB/wMzAVAjAAH/AwAB/wMAAf8DAAH/AwAB/xwAA1gB8QMAAf8DAAH/AxEBFisAAf8DAAH/AwAB
/zcAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/0sAAf8DAAH/AwAB
/wMAAf8DAAH/AxIB/jAAA1QBqwMAAf8DAAH/Az0BaB8AAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMzAVAf
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8cAANXAfEDAAH/AwAB/wMRARYkAANcAdkDAAH/AwAB/wMAAf83
/wMAAf8DAAH/AxMB/jAAA1QBqwMAAf8DAAH/Az0BaB8AAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMzAVAf
AAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8cAANYAfEDAAH/AwAB/wMRARYkAANcAdkDAAH/AwAB/wMAAf83
AAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8PAAH/AwAB/wMAAf9HAAH/AwAB/wMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/ywAA1QBqwMAAf8DAAH/Az0BaBsAAf8DAAH/AwAB/wMAAf8DVwHxAwAB
/wMAAf8DMwFQGwAB/wMAAf8DAAH/AwAB/wMSAf4DAAH/AwAB/xwAA1cB8QMAAf8DAAH/AxEBFiMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/ywAA1QBqwMAAf8DAAH/Az0BaBsAAf8DAAH/AwAB/wMAAf8DWAHxAwAB
/wMAAf8DMwFQGwAB/wMAAf8DAAH/AwAB/wMTAf4DAAH/AwAB/xwAA1gB8QMAAf8DAAH/AxEBFiMAAf8D
AAH/AwAB/wMAAf8DAAH/NwAB/wMAAf8DAAH/DwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/DwAB/wMAAf8D
AAH/JwAB/wMAAf8XAAH/AwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/AwAB/xcAAf8DWAG4DAADVAGrAwAB
/wMAAf8DPQFoFwAB/wMAAf8DAAH/AwAB/wQAA1YBtQMAAf8DAAH/AzMBUBcAAf8DAAH/AwAB/wMAAf8E
AAM1AfkDAAH/AwAB/xwAA1cB8QMAAf8DAAH/AxEBFhgAAzABSgMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
AAM4AfkDAAH/AwAB/xwAA1gB8QMAAf8DAAH/AxEBFhgAAzABSgMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/zcAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/ycAAf8DAAH/A1YB
sw8AAf8DAAH/AwAB/wMAAf8TAAH/AwAB/wMAAf8DEgH+DwAB/wMAAf8DAAH/DAADVAGrAwAB/wMAAf8D
sw8AAf8DAAH/AwAB/wMAAf8TAAH/AwAB/wMAAf8DEwH+DwAB/wMAAf8DAAH/DAADVAGrAwAB/wMAAf8D
PQFoEwAB/wMAAf8DAAH/AwAB/wgAA1YBtQMAAf8DAAH/AzMBUAwAAwkBDAMAAf8DAAH/AwAB/wMAAf8I
AAM1AfkDAAH/AwAB/xwAA1cB8QMAAf8DAAH/AxEBFhcAAf8DAAH/AwAB/wMAAf8DAAH/AyQB/QMAAf8D
AAM4AfkDAAH/AwAB/xwAA1gB8QMAAf8DAAH/AxEBFhcAAf8DAAH/AwAB/wMAAf8DAAH/AyYB/QMAAf8D
AAH/NwAB/wMAAf8DAAH/DwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/DwAB/wMAAf8DAAH/JwAB/wMAAf8D
VgGzCwAB/wMAAf8DAAH/AwAB/xsAAf8DAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8MAANUAasDAAH/AwAB
/wM9AWgIAAM6AWADAAH/AwAB/wMAAf8DAAH/DAADVgG1AwAB/wMAAf8DMwFQCAADSwGMAwAB/wMAAf8D
AAH/AwAB/wwAAzUB+QMAAf8DAAH/HAADVwHxAwAB/wMAAf8DEQEWDAADBwEJAwAB/wMAAf8DAAH/AwAB
AAH/AwAB/wwAAzgB+QMAAf8DAAH/HAADWAHxAwAB/wMAAf8DEQEWDAADBwEJAwAB/wMAAf8DAAH/AwAB
/wMAAf8HAAH/AwAB/wMAAf83AAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8PAAH/AwAB
/wMAAf8nAAH/AwAB/wNWAbMHAAH/AwAB/wMAAf8DAAH/IwAB/wMAAf8DAAH/AwAB/wcAAf8DAAH/AwAB
/wwAA1QBqwMAAf8DAAH/Az0BaAcAAf8DAAH/AwAB/wMAAf8DAAH/EAADVgG1AwAB/wMAAf8DMwFQBwAB
/wMAAf8DAAH/AwAB/wMAAf8QAAM1AfkDAAH/AwAB/xwAA1cB8QMAAf8DAAH/AxEBFgsAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8QAAM4AfkDAAH/AwAB/xwAA1gB8QMAAf8DAAH/AxEBFgsAAf8DAAH/AwAB
/wMAAf8DAAH/A08BmQsAAf8DAAH/AwAB/zcAAf8DAAH/AwAB/w8AAf8DAAH/AwAB/wsAAf8DAAH/AwAB
/w8AAf8DAAH/AwAB/ycAAf8DAAH/A1YBswMAAf8DAAH/AwAB/wMAAf8rAAH/AwAB/wMAAf8DEgH+AwAB
/w8AAf8DAAH/AwAB/ycAAf8DAAH/A1YBswMAAf8DAAH/AwAB/wMAAf8rAAH/AwAB/wMAAf8DEwH+AwAB
/wMAAf8DAAH/DAADVAGrAwAB/wMAAf8DPQFoAwAB/wMAAf8DAAH/AwAB/wMAAf8UAANWAbUDAAH/AwAB
/wMzAVADAAH/AwAB/wMAAf8DAAH/AwAB/xQAAzUB+QMAAf8DAAH/HAADVwHxAwAB/wMAAf8DEQEWBwAB
/wMzAVADAAH/AwAB/wMAAf8DAAH/AwAB/xQAAzgB+QMAAf8DAAH/HAADWAHxAwAB/wMAAf8DEQEWBwAB
/wMAAf8DAAH/AwAB/wMAAf8TAAH/AwAB/wMAAf83AAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8LAAH/AwAB
/wMAAf8PAAH/AwAB/wMAAf8nAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8zAAH/AwAB/wMAAf8DAAH/AwAB
/wMAAf8MAANUAasDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DTQH0GAADVgG1AwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/A10B7BgAAzUB+QMAAf8DAAH/HAADVwHxAwAB/wMAAf8DYQHrAwAB/wMAAf8DAAH/AwAB
/wNNAfQXAAH/AwAB/wMAAf83AAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8PAAH/AwAB
/wMAAf8MAANUAasDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DTwH0GAADVgG1AwAB/wMAAf8DAAH/AwAB
/wMAAf8DAAH/A10B7BgAAzgB+QMAAf8DAAH/HAADWAHxAwAB/wMAAf8DYQHrAwAB/wMAAf8DAAH/AwAB
/wNPAfQXAAH/AwAB/wMAAf83AAH/AwAB/wMAAf8PAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8PAAH/AwAB
/wMAAf8nAAH/AwAB/wMAAf8DAAH/AwAB/zsAAf8DAAH/AwAB/wMAAf8DAAH/DAADVAGrAwAB/wMAAf8D
AAH/AwAB/wMAAf8DQwF3HAADVgG1AwAB/wMAAf8DAAH/AwAB/wMAAf8DMAFMHAADNQH5AwAB/wMAAf8c
AANXAfEDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8fAAH/AwAB/wMAAf83AAH/AwAB/wMAAf8DKgFAAyoB
AAH/AwAB/wMAAf8DQwF3HAADVgG1AwAB/wMAAf8DAAH/AwAB/wMAAf8DMAFMHAADOAH5AwAB/wMAAf8c
AANYAfEDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8fAAH/AwAB/wMAAf83AAH/AwAB/wMAAf8DKgFAAyoB
QAMqAUADAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8DKgFAAyoBQAMqAUADAAH/AwAB/wMAAf8nAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8bAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/wMAAf8MAANUAasDAAH/AwAB/wMAAf8DAAH/AwYBCCAAA1YBtgMAAf8DAAH/AwAB/wMAAf8DAgEDIAAD
NQH5AwAB/wMAAf8cAANXAfEDAAH/AwAB/wMAAf8DAAH/AwAB/yMAAf8DAAH/AwAB/zcAAf8DAAH/AwAB
OAH5AwAB/wMAAf8cAANYAfEDAAH/AwAB/wMAAf8DAAH/AwAB/yMAAf8DAAH/AwAB/zcAAf8DAAH/AwAB
/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wsAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
/ycAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/xQAA0wBkAMAAf8DAAH/AwAB/wMAAf8D
AAH/AwAB/wMAAf8DAAH/AwAB/xMAAf8DAAH/AwAB/y8AAf8DAAH/AwAB/ygAAzYBWAMAAf8DAAH/IwAB
@@ -278,16 +642,124 @@
4wGMAXEC8AEfAfgBDgEAAfgBAwHjAfgBQQHjAf8B4wGMAXEC8AE/AfwBDgEBAfgBBwHjAfgBAwHjAf8B
4wGMAXEC8AF/Af4BDgEDAfgBDwHjAfgBDwHjAf8B4AEMAQEC8AEHAeABDgEHAfgBHwHjAfgBHwHjAf8B
4AEMAQEC8AEHAcABDwEfAfwBfwHjAfwBPwHjAf8B8AEeAQMB8AH4AQcB4AEfAb8B/gH/AfcB/gH/AfcB
/wH4AT8BBwHwCw==
/wH4AT8BBwHwFgAL
</value>
</data>
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>165, 17</value>
</metadata>
<data name="spinePreviewFullScreenForm.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>Manual</value>
</data>
<data name="button_Restart.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;panel_Render.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;button_Stop.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
</data>
<data name="&gt;&gt;button_FullScreen.Name" xml:space="preserve">
<value>button_FullScreen</value>
</data>
<data name="&gt;&gt;button_Start.Name" xml:space="preserve">
<value>button_Start</value>
</data>
<data name="button_Start.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="&gt;&gt;flowLayoutPanel1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="button_Start.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;panel_ViewContainer.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="panel_RenderContainer.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="button_Restart.ImageKey" xml:space="preserve">
<value>rotate-left</value>
</data>
<data name="button_Restart.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 34</value>
</data>
<data name="wallpaperForm.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>0, 0</value>
</data>
<data name="button_ForwardFast.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 34</value>
</data>
<data name="&gt;&gt;panel_RenderContainer.Name" xml:space="preserve">
<value>panel_RenderContainer</value>
</data>
<data name="panel_ViewContainer.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;flowLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="wallpaperForm.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="button_Start.ToolTip" xml:space="preserve">
<value>开始/暂停</value>
</data>
<data name="button_Start.BackgroundImageLayout" type="System.Windows.Forms.ImageLayout, System.Windows.Forms">
<value>Center</value>
</data>
<data name="tableLayoutPanel1.ToolTip" xml:space="preserve">
<value />
</data>
<data name="button_ForwardFast.ImageKey" xml:space="preserve">
<value>forward-fast</value>
</data>
<data name="&gt;&gt;toolTip.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolTip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_FullScreen.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 34</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>466, 530</value>
</data>
<data name="button_ForwardFast.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>11, 2, 11, 2</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>8, 20</value>
</data>
<data name="button_ForwardFast.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="button_ForwardStep.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="flowLayoutPanel1.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="&gt;&gt;spinePreviewFullScreenForm.Name" xml:space="preserve">
<value>spinePreviewFullScreenForm</value>
</data>
<data name="panel_ViewContainer.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<metadata name="spinePreviewFullScreenForm.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>307, 18</value>
</metadata>
<metadata name="wallpaperForm.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>618, 18</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>165, 17</value>
</metadata>
</root>

View File

@@ -20,282 +20,218 @@
base.Dispose(disposing);
}
#region
#region
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
tabControl = new TabControl();
tabPage_BaseInfo = new TabPage();
propertyGrid_BaseInfo = new PropertyGrid();
tabPage_Render = new TabPage();
propertyGrid_Render = new PropertyGrid();
tabPage_Transform = new TabPage();
propertyGrid_Transform = new PropertyGrid();
tabPage_Skin = new TabPage();
propertyGrid_Skin = new PropertyGrid();
contextMenuStrip_Skin = new ContextMenuStrip(components);
toolStripMenuItem_ReloadSkins = new ToolStripMenuItem();
tabPage_Slot = new TabPage();
propertyGrid_Slot = new PropertyGrid();
tabPage_Animation = new TabPage();
propertyGrid_Animation = new PropertyGrid();
contextMenuStrip_Animation = new ContextMenuStrip(components);
toolStripMenuItem_AddAnimation = new ToolStripMenuItem();
toolStripMenuItem_RemoveAnimation = new ToolStripMenuItem();
tabPage_Debug = new TabPage();
propertyGrid_Debug = new PropertyGrid();
tabControl.SuspendLayout();
tabPage_BaseInfo.SuspendLayout();
tabPage_Render.SuspendLayout();
tabPage_Transform.SuspendLayout();
tabPage_Skin.SuspendLayout();
contextMenuStrip_Skin.SuspendLayout();
tabPage_Slot.SuspendLayout();
tabPage_Animation.SuspendLayout();
contextMenuStrip_Animation.SuspendLayout();
tabPage_Debug.SuspendLayout();
SuspendLayout();
//
// tabControl
//
tabControl.Alignment = TabAlignment.Bottom;
tabControl.Controls.Add(tabPage_BaseInfo);
tabControl.Controls.Add(tabPage_Render);
tabControl.Controls.Add(tabPage_Transform);
tabControl.Controls.Add(tabPage_Skin);
tabControl.Controls.Add(tabPage_Slot);
tabControl.Controls.Add(tabPage_Animation);
tabControl.Controls.Add(tabPage_Debug);
tabControl.Dock = DockStyle.Fill;
tabControl.ItemSize = new Size(90, 35);
tabControl.Location = new Point(0, 0);
tabControl.Multiline = true;
tabControl.Name = "tabControl";
tabControl.Padding = new Point(0, 0);
tabControl.SelectedIndex = 0;
tabControl.Size = new Size(372, 448);
tabControl.SizeMode = TabSizeMode.FillToRight;
tabControl.TabIndex = 0;
//
// tabPage_BaseInfo
//
tabPage_BaseInfo.BackColor = SystemColors.Control;
tabPage_BaseInfo.Controls.Add(propertyGrid_BaseInfo);
tabPage_BaseInfo.Location = new Point(4, 4);
tabPage_BaseInfo.Margin = new Padding(0);
tabPage_BaseInfo.Name = "tabPage_BaseInfo";
tabPage_BaseInfo.Size = new Size(364, 370);
tabPage_BaseInfo.TabIndex = 0;
tabPage_BaseInfo.Text = "基本信息";
//
// propertyGrid_BaseInfo
//
propertyGrid_BaseInfo.Dock = DockStyle.Fill;
propertyGrid_BaseInfo.HelpVisible = false;
propertyGrid_BaseInfo.Location = new Point(0, 0);
propertyGrid_BaseInfo.Name = "propertyGrid_BaseInfo";
propertyGrid_BaseInfo.PropertySort = PropertySort.Alphabetical;
propertyGrid_BaseInfo.Size = new Size(364, 370);
propertyGrid_BaseInfo.TabIndex = 0;
propertyGrid_BaseInfo.ToolbarVisible = false;
//
// tabPage_Render
//
tabPage_Render.BackColor = SystemColors.Control;
tabPage_Render.Controls.Add(propertyGrid_Render);
tabPage_Render.Location = new Point(4, 4);
tabPage_Render.Margin = new Padding(0);
tabPage_Render.Name = "tabPage_Render";
tabPage_Render.Size = new Size(364, 370);
tabPage_Render.TabIndex = 1;
tabPage_Render.Text = "渲染";
//
// propertyGrid_Render
//
propertyGrid_Render.Dock = DockStyle.Fill;
propertyGrid_Render.HelpVisible = false;
propertyGrid_Render.Location = new Point(0, 0);
propertyGrid_Render.Name = "propertyGrid_Render";
propertyGrid_Render.PropertySort = PropertySort.Alphabetical;
propertyGrid_Render.Size = new Size(364, 370);
propertyGrid_Render.TabIndex = 1;
propertyGrid_Render.ToolbarVisible = false;
//
// tabPage_Transform
//
tabPage_Transform.BackColor = SystemColors.Control;
tabPage_Transform.Controls.Add(propertyGrid_Transform);
tabPage_Transform.Location = new Point(4, 4);
tabPage_Transform.Margin = new Padding(0);
tabPage_Transform.Name = "tabPage_Transform";
tabPage_Transform.Size = new Size(364, 370);
tabPage_Transform.TabIndex = 2;
tabPage_Transform.Text = "变换";
//
// propertyGrid_Transform
//
propertyGrid_Transform.Dock = DockStyle.Fill;
propertyGrid_Transform.HelpVisible = false;
propertyGrid_Transform.Location = new Point(0, 0);
propertyGrid_Transform.Name = "propertyGrid_Transform";
propertyGrid_Transform.PropertySort = PropertySort.Alphabetical;
propertyGrid_Transform.Size = new Size(364, 370);
propertyGrid_Transform.TabIndex = 1;
propertyGrid_Transform.ToolbarVisible = false;
//
// tabPage_Skin
//
tabPage_Skin.BackColor = SystemColors.Control;
tabPage_Skin.Controls.Add(propertyGrid_Skin);
tabPage_Skin.Location = new Point(4, 4);
tabPage_Skin.Margin = new Padding(0);
tabPage_Skin.Name = "tabPage_Skin";
tabPage_Skin.Size = new Size(364, 370);
tabPage_Skin.TabIndex = 3;
tabPage_Skin.Text = "皮肤";
//
// propertyGrid_Skin
//
propertyGrid_Skin.ContextMenuStrip = contextMenuStrip_Skin;
propertyGrid_Skin.Dock = DockStyle.Fill;
propertyGrid_Skin.HelpVisible = false;
propertyGrid_Skin.Location = new Point(0, 0);
propertyGrid_Skin.Name = "propertyGrid_Skin";
propertyGrid_Skin.PropertySort = PropertySort.NoSort;
propertyGrid_Skin.Size = new Size(364, 370);
propertyGrid_Skin.TabIndex = 1;
propertyGrid_Skin.ToolbarVisible = false;
//
// contextMenuStrip_Skin
//
contextMenuStrip_Skin.ImageScalingSize = new Size(24, 24);
contextMenuStrip_Skin.Items.AddRange(new ToolStripItem[] { toolStripMenuItem_ReloadSkins });
contextMenuStrip_Skin.Name = "contextMenuStrip1";
contextMenuStrip_Skin.Size = new Size(241, 67);
//
// toolStripMenuItem_ReloadSkins
//
toolStripMenuItem_ReloadSkins.Name = "toolStripMenuItem_ReloadSkins";
toolStripMenuItem_ReloadSkins.Size = new Size(240, 30);
toolStripMenuItem_ReloadSkins.Text = "重新加载皮肤";
toolStripMenuItem_ReloadSkins.Click += toolStripMenuItem_ReloadSkins_Click;
//
// tabPage_Slot
//
tabPage_Slot.BackColor = SystemColors.Control;
tabPage_Slot.Controls.Add(propertyGrid_Slot);
tabPage_Slot.Location = new Point(4, 4);
tabPage_Slot.Margin = new Padding(0);
tabPage_Slot.Name = "tabPage_Slot";
tabPage_Slot.Size = new Size(364, 370);
tabPage_Slot.TabIndex = 6;
tabPage_Slot.Text = "插槽";
//
// propertyGrid_Slot
//
propertyGrid_Slot.Dock = DockStyle.Fill;
propertyGrid_Slot.HelpVisible = false;
propertyGrid_Slot.Location = new Point(0, 0);
propertyGrid_Slot.Name = "propertyGrid_Slot";
propertyGrid_Slot.PropertySort = PropertySort.Alphabetical;
propertyGrid_Slot.Size = new Size(364, 370);
propertyGrid_Slot.TabIndex = 2;
propertyGrid_Slot.ToolbarVisible = false;
//
// tabPage_Animation
//
tabPage_Animation.BackColor = SystemColors.Control;
tabPage_Animation.Controls.Add(propertyGrid_Animation);
tabPage_Animation.Location = new Point(4, 4);
tabPage_Animation.Margin = new Padding(0);
tabPage_Animation.Name = "tabPage_Animation";
tabPage_Animation.Size = new Size(364, 370);
tabPage_Animation.TabIndex = 4;
tabPage_Animation.Text = "动画";
//
// propertyGrid_Animation
//
propertyGrid_Animation.ContextMenuStrip = contextMenuStrip_Animation;
propertyGrid_Animation.Dock = DockStyle.Fill;
propertyGrid_Animation.HelpVisible = false;
propertyGrid_Animation.Location = new Point(0, 0);
propertyGrid_Animation.Name = "propertyGrid_Animation";
propertyGrid_Animation.PropertySort = PropertySort.NoSort;
propertyGrid_Animation.Size = new Size(364, 370);
propertyGrid_Animation.TabIndex = 1;
propertyGrid_Animation.ToolbarVisible = false;
//
// contextMenuStrip_Animation
//
contextMenuStrip_Animation.ImageScalingSize = new Size(24, 24);
contextMenuStrip_Animation.Items.AddRange(new ToolStripItem[] { toolStripMenuItem_AddAnimation, toolStripMenuItem_RemoveAnimation });
contextMenuStrip_Animation.Name = "contextMenuStrip1";
contextMenuStrip_Animation.Size = new Size(117, 64);
contextMenuStrip_Animation.Opening += contextMenuStrip_Animation_Opening;
//
// toolStripMenuItem_AddAnimation
//
toolStripMenuItem_AddAnimation.Name = "toolStripMenuItem_AddAnimation";
toolStripMenuItem_AddAnimation.Size = new Size(116, 30);
toolStripMenuItem_AddAnimation.Text = "添加";
toolStripMenuItem_AddAnimation.Click += toolStripMenuItem_AddAnimation_Click;
//
// toolStripMenuItem_RemoveAnimation
//
toolStripMenuItem_RemoveAnimation.Name = "toolStripMenuItem_RemoveAnimation";
toolStripMenuItem_RemoveAnimation.Size = new Size(116, 30);
toolStripMenuItem_RemoveAnimation.Text = "移除";
toolStripMenuItem_RemoveAnimation.Click += toolStripMenuItem_RemoveAnimation_Click;
//
// tabPage_Debug
//
tabPage_Debug.BackColor = SystemColors.Control;
tabPage_Debug.Controls.Add(propertyGrid_Debug);
tabPage_Debug.Location = new Point(4, 4);
tabPage_Debug.Name = "tabPage_Debug";
tabPage_Debug.Size = new Size(364, 370);
tabPage_Debug.TabIndex = 5;
tabPage_Debug.Text = "调试";
//
// propertyGrid_Debug
//
propertyGrid_Debug.Dock = DockStyle.Fill;
propertyGrid_Debug.HelpVisible = false;
propertyGrid_Debug.Location = new Point(0, 0);
propertyGrid_Debug.Name = "propertyGrid_Debug";
propertyGrid_Debug.PropertySort = PropertySort.NoSort;
propertyGrid_Debug.Size = new Size(364, 370);
propertyGrid_Debug.TabIndex = 2;
propertyGrid_Debug.ToolbarVisible = false;
//
// SpineViewPropertyGrid
//
AutoScaleDimensions = new SizeF(11F, 24F);
AutoScaleMode = AutoScaleMode.Font;
Controls.Add(tabControl);
Name = "SpineViewPropertyGrid";
Size = new Size(372, 448);
tabControl.ResumeLayout(false);
tabPage_BaseInfo.ResumeLayout(false);
tabPage_Render.ResumeLayout(false);
tabPage_Transform.ResumeLayout(false);
tabPage_Skin.ResumeLayout(false);
contextMenuStrip_Skin.ResumeLayout(false);
tabPage_Slot.ResumeLayout(false);
tabPage_Animation.ResumeLayout(false);
contextMenuStrip_Animation.ResumeLayout(false);
tabPage_Debug.ResumeLayout(false);
ResumeLayout(false);
}
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SpineViewPropertyGrid));
tabControl = new TabControl();
tabPage_BaseInfo = new TabPage();
propertyGrid_BaseInfo = new PropertyGrid();
tabPage_Render = new TabPage();
propertyGrid_Render = new PropertyGrid();
tabPage_Transform = new TabPage();
propertyGrid_Transform = new PropertyGrid();
tabPage_Skin = new TabPage();
propertyGrid_Skin = new PropertyGrid();
contextMenuStrip_Skin = new ContextMenuStrip(components);
toolStripMenuItem_ReloadSkins = new ToolStripMenuItem();
tabPage_Slot = new TabPage();
propertyGrid_Slot = new PropertyGrid();
tabPage_Animation = new TabPage();
propertyGrid_Animation = new PropertyGrid();
contextMenuStrip_Animation = new ContextMenuStrip(components);
toolStripMenuItem_AddAnimation = new ToolStripMenuItem();
toolStripMenuItem_RemoveAnimation = new ToolStripMenuItem();
tabPage_Debug = new TabPage();
propertyGrid_Debug = new PropertyGrid();
tabControl.SuspendLayout();
tabPage_BaseInfo.SuspendLayout();
tabPage_Render.SuspendLayout();
tabPage_Transform.SuspendLayout();
tabPage_Skin.SuspendLayout();
contextMenuStrip_Skin.SuspendLayout();
tabPage_Slot.SuspendLayout();
tabPage_Animation.SuspendLayout();
contextMenuStrip_Animation.SuspendLayout();
tabPage_Debug.SuspendLayout();
SuspendLayout();
//
// tabControl
//
resources.ApplyResources(tabControl, "tabControl");
tabControl.Controls.Add(tabPage_BaseInfo);
tabControl.Controls.Add(tabPage_Render);
tabControl.Controls.Add(tabPage_Transform);
tabControl.Controls.Add(tabPage_Skin);
tabControl.Controls.Add(tabPage_Slot);
tabControl.Controls.Add(tabPage_Animation);
tabControl.Controls.Add(tabPage_Debug);
tabControl.Multiline = true;
tabControl.Name = "tabControl";
tabControl.SelectedIndex = 0;
tabControl.SizeMode = TabSizeMode.FillToRight;
//
// tabPage_BaseInfo
//
resources.ApplyResources(tabPage_BaseInfo, "tabPage_BaseInfo");
tabPage_BaseInfo.BackColor = SystemColors.Control;
tabPage_BaseInfo.Controls.Add(propertyGrid_BaseInfo);
tabPage_BaseInfo.Name = "tabPage_BaseInfo";
//
// propertyGrid_BaseInfo
//
resources.ApplyResources(propertyGrid_BaseInfo, "propertyGrid_BaseInfo");
propertyGrid_BaseInfo.Name = "propertyGrid_BaseInfo";
propertyGrid_BaseInfo.PropertySort = PropertySort.Alphabetical;
propertyGrid_BaseInfo.ToolbarVisible = false;
//
// tabPage_Render
//
resources.ApplyResources(tabPage_Render, "tabPage_Render");
tabPage_Render.BackColor = SystemColors.Control;
tabPage_Render.Controls.Add(propertyGrid_Render);
tabPage_Render.Name = "tabPage_Render";
//
// propertyGrid_Render
//
resources.ApplyResources(propertyGrid_Render, "propertyGrid_Render");
propertyGrid_Render.Name = "propertyGrid_Render";
propertyGrid_Render.PropertySort = PropertySort.Alphabetical;
propertyGrid_Render.ToolbarVisible = false;
//
// tabPage_Transform
//
resources.ApplyResources(tabPage_Transform, "tabPage_Transform");
tabPage_Transform.BackColor = SystemColors.Control;
tabPage_Transform.Controls.Add(propertyGrid_Transform);
tabPage_Transform.Name = "tabPage_Transform";
//
// propertyGrid_Transform
//
resources.ApplyResources(propertyGrid_Transform, "propertyGrid_Transform");
propertyGrid_Transform.Name = "propertyGrid_Transform";
propertyGrid_Transform.PropertySort = PropertySort.Alphabetical;
propertyGrid_Transform.ToolbarVisible = false;
//
// tabPage_Skin
//
resources.ApplyResources(tabPage_Skin, "tabPage_Skin");
tabPage_Skin.BackColor = SystemColors.Control;
tabPage_Skin.Controls.Add(propertyGrid_Skin);
tabPage_Skin.Name = "tabPage_Skin";
//
// propertyGrid_Skin
//
resources.ApplyResources(propertyGrid_Skin, "propertyGrid_Skin");
propertyGrid_Skin.ContextMenuStrip = contextMenuStrip_Skin;
propertyGrid_Skin.Name = "propertyGrid_Skin";
propertyGrid_Skin.PropertySort = PropertySort.NoSort;
propertyGrid_Skin.ToolbarVisible = false;
//
// contextMenuStrip_Skin
//
resources.ApplyResources(contextMenuStrip_Skin, "contextMenuStrip_Skin");
contextMenuStrip_Skin.ImageScalingSize = new Size(24, 24);
contextMenuStrip_Skin.Items.AddRange(new ToolStripItem[] { toolStripMenuItem_ReloadSkins });
contextMenuStrip_Skin.Name = "contextMenuStrip1";
//
// toolStripMenuItem_ReloadSkins
//
resources.ApplyResources(toolStripMenuItem_ReloadSkins, "toolStripMenuItem_ReloadSkins");
toolStripMenuItem_ReloadSkins.Name = "toolStripMenuItem_ReloadSkins";
toolStripMenuItem_ReloadSkins.Click += toolStripMenuItem_ReloadSkins_Click;
//
// tabPage_Slot
//
resources.ApplyResources(tabPage_Slot, "tabPage_Slot");
tabPage_Slot.BackColor = SystemColors.Control;
tabPage_Slot.Controls.Add(propertyGrid_Slot);
tabPage_Slot.Name = "tabPage_Slot";
//
// propertyGrid_Slot
//
resources.ApplyResources(propertyGrid_Slot, "propertyGrid_Slot");
propertyGrid_Slot.Name = "propertyGrid_Slot";
propertyGrid_Slot.PropertySort = PropertySort.Alphabetical;
propertyGrid_Slot.ToolbarVisible = false;
//
// tabPage_Animation
//
resources.ApplyResources(tabPage_Animation, "tabPage_Animation");
tabPage_Animation.BackColor = SystemColors.Control;
tabPage_Animation.Controls.Add(propertyGrid_Animation);
tabPage_Animation.Name = "tabPage_Animation";
//
// propertyGrid_Animation
//
resources.ApplyResources(propertyGrid_Animation, "propertyGrid_Animation");
propertyGrid_Animation.ContextMenuStrip = contextMenuStrip_Animation;
propertyGrid_Animation.Name = "propertyGrid_Animation";
propertyGrid_Animation.PropertySort = PropertySort.NoSort;
propertyGrid_Animation.ToolbarVisible = false;
//
// contextMenuStrip_Animation
//
resources.ApplyResources(contextMenuStrip_Animation, "contextMenuStrip_Animation");
contextMenuStrip_Animation.ImageScalingSize = new Size(24, 24);
contextMenuStrip_Animation.Items.AddRange(new ToolStripItem[] { toolStripMenuItem_AddAnimation, toolStripMenuItem_RemoveAnimation });
contextMenuStrip_Animation.Name = "contextMenuStrip1";
contextMenuStrip_Animation.Opening += contextMenuStrip_Animation_Opening;
//
// toolStripMenuItem_AddAnimation
//
resources.ApplyResources(toolStripMenuItem_AddAnimation, "toolStripMenuItem_AddAnimation");
toolStripMenuItem_AddAnimation.Name = "toolStripMenuItem_AddAnimation";
toolStripMenuItem_AddAnimation.Click += toolStripMenuItem_AddAnimation_Click;
//
// toolStripMenuItem_RemoveAnimation
//
resources.ApplyResources(toolStripMenuItem_RemoveAnimation, "toolStripMenuItem_RemoveAnimation");
toolStripMenuItem_RemoveAnimation.Name = "toolStripMenuItem_RemoveAnimation";
toolStripMenuItem_RemoveAnimation.Click += toolStripMenuItem_RemoveAnimation_Click;
//
// tabPage_Debug
//
resources.ApplyResources(tabPage_Debug, "tabPage_Debug");
tabPage_Debug.BackColor = SystemColors.Control;
tabPage_Debug.Controls.Add(propertyGrid_Debug);
tabPage_Debug.Name = "tabPage_Debug";
//
// propertyGrid_Debug
//
resources.ApplyResources(propertyGrid_Debug, "propertyGrid_Debug");
propertyGrid_Debug.Name = "propertyGrid_Debug";
propertyGrid_Debug.PropertySort = PropertySort.NoSort;
propertyGrid_Debug.ToolbarVisible = false;
//
// SpineViewPropertyGrid
//
resources.ApplyResources(this, "$this");
AutoScaleMode = AutoScaleMode.Font;
Controls.Add(tabControl);
Name = "SpineViewPropertyGrid";
tabControl.ResumeLayout(false);
tabPage_BaseInfo.ResumeLayout(false);
tabPage_Render.ResumeLayout(false);
tabPage_Transform.ResumeLayout(false);
tabPage_Skin.ResumeLayout(false);
contextMenuStrip_Skin.ResumeLayout(false);
tabPage_Slot.ResumeLayout(false);
tabPage_Animation.ResumeLayout(false);
contextMenuStrip_Animation.ResumeLayout(false);
tabPage_Debug.ResumeLayout(false);
ResumeLayout(false);
}
#endregion
#endregion
private TabControl tabControl;
private TabControl tabControl;
private TabPage tabPage_BaseInfo;
private TabPage tabPage_Render;
private TabPage tabPage_Transform;

View File

@@ -0,0 +1,164 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="tabPage_Animation.Text" xml:space="preserve">
<value>Animation</value>
</data>
<data name="toolStripMenuItem_RemoveAnimation.Text" xml:space="preserve">
<value>Remove</value>
</data>
<data name="tabPage_Render.Text" xml:space="preserve">
<value>Render</value>
</data>
<data name="tabPage_Slot.Text" xml:space="preserve">
<value>Slot</value>
</data>
<data name="tabPage_Skin.Text" xml:space="preserve">
<value>Skin</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="tabPage_Render.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 330</value>
</data>
<data name="tabPage_Transform.Text" xml:space="preserve">
<value>Transform</value>
</data>
<data name="tabPage_Transform.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 330</value>
</data>
<data name="tabPage_Debug.Text" xml:space="preserve">
<value>Debug</value>
</data>
<data name="toolStripMenuItem_ReloadSkins.Text" xml:space="preserve">
<value>Reload skin</value>
</data>
<data name="propertyGrid_Render.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 330</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="toolStripMenuItem_RemoveAnimation.Size" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="propertyGrid_Transform.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 330</value>
</data>
<data name="tabPage_BaseInfo.Text" xml:space="preserve">
<value>Basic Information</value>
</data>
</root>

View File

@@ -117,6 +117,517 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="propertyGrid_Slot.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tabControl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;propertyGrid_Animation.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;contextMenuStrip_Skin.Name" xml:space="preserve">
<value>contextMenuStrip_Skin</value>
</data>
<data name="&gt;&gt;propertyGrid_Animation.Name" xml:space="preserve">
<value>propertyGrid_Animation</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="tabPage_Slot.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 4</value>
</data>
<data name="contextMenuStrip_Skin.Size" type="System.Drawing.Size, System.Drawing">
<value>170, 28</value>
</data>
<data name="&gt;&gt;tabPage_Skin.Name" xml:space="preserve">
<value>tabPage_Skin</value>
</data>
<data name="&gt;&gt;tabPage_Debug.Name" xml:space="preserve">
<value>tabPage_Debug</value>
</data>
<data name="&gt;&gt;propertyGrid_BaseInfo.Type" xml:space="preserve">
<value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;propertyGrid_Transform.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="propertyGrid_Render.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="tabPage_BaseInfo.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;propertyGrid_Render.Type" xml:space="preserve">
<value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tabControl.ItemSize" type="System.Drawing.Size, System.Drawing">
<value>90, 35</value>
</data>
<data name="tabControl.Size" type="System.Drawing.Size, System.Drawing">
<value>271, 373</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="propertyGrid_Debug.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="tabPage_Animation.Text" xml:space="preserve">
<value>动画</value>
</data>
<data name="propertyGrid_Slot.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;tabPage_Animation.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tabPage_BaseInfo.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 4</value>
</data>
<data name="&gt;&gt;propertyGrid_BaseInfo.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="propertyGrid_Animation.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;tabControl.Name" xml:space="preserve">
<value>tabControl</value>
</data>
<data name="propertyGrid_Animation.HelpVisible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="propertyGrid_Animation.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="&gt;&gt;tabControl.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="contextMenuStrip_Animation.Size" type="System.Drawing.Size, System.Drawing">
<value>109, 52</value>
</data>
<data name="propertyGrid_BaseInfo.HelpVisible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="propertyGrid_Skin.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tabPage_Animation.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="&gt;&gt;contextMenuStrip_Animation.Name" xml:space="preserve">
<value>contextMenuStrip_Animation</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_RemoveAnimation.Name" xml:space="preserve">
<value>toolStripMenuItem_RemoveAnimation</value>
</data>
<data name="propertyGrid_BaseInfo.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;tabPage_Debug.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>271, 373</value>
</data>
<data name="&gt;&gt;propertyGrid_Debug.Name" xml:space="preserve">
<value>propertyGrid_Debug</value>
</data>
<data name="&gt;&gt;propertyGrid_BaseInfo.Name" xml:space="preserve">
<value>propertyGrid_BaseInfo</value>
</data>
<data name="propertyGrid_Debug.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;propertyGrid_Transform.Name" xml:space="preserve">
<value>propertyGrid_Transform</value>
</data>
<data name="toolStripMenuItem_RemoveAnimation.Text" xml:space="preserve">
<value>移除</value>
</data>
<data name="&gt;&gt;propertyGrid_Skin.Parent" xml:space="preserve">
<value>tabPage_Skin</value>
</data>
<data name="propertyGrid_Slot.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_ReloadSkins.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;propertyGrid_Render.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tabControl.Alignment" type="System.Windows.Forms.TabAlignment, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="propertyGrid_Animation.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;contextMenuStrip_Skin.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tabPage_Transform.Name" xml:space="preserve">
<value>tabPage_Transform</value>
</data>
<data name="tabPage_Render.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="&gt;&gt;tabPage_Render.Parent" xml:space="preserve">
<value>tabControl</value>
</data>
<data name="tabPage_Render.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 4</value>
</data>
<data name="tabPage_Animation.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="tabPage_Animation.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 4</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="propertyGrid_Debug.HelpVisible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="propertyGrid_Transform.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;tabPage_Render.Name" xml:space="preserve">
<value>tabPage_Render</value>
</data>
<data name="propertyGrid_Slot.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="&gt;&gt;propertyGrid_Slot.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="propertyGrid_Debug.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="&gt;&gt;tabPage_BaseInfo.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tabPage_Transform.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 4</value>
</data>
<data name="propertyGrid_Transform.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="tabPage_Render.Text" xml:space="preserve">
<value>渲染</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_AddAnimation.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="propertyGrid_Skin.HelpVisible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="tabPage_Slot.Text" xml:space="preserve">
<value>插槽</value>
</data>
<data name="&gt;&gt;propertyGrid_Render.Parent" xml:space="preserve">
<value>tabPage_Render</value>
</data>
<data name="propertyGrid_Transform.HelpVisible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="propertyGrid_Transform.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tabPage_Skin.Text" xml:space="preserve">
<value>皮肤</value>
</data>
<data name="&gt;&gt;tabPage_Skin.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="propertyGrid_Slot.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;tabPage_Slot.Parent" xml:space="preserve">
<value>tabControl</value>
</data>
<data name="propertyGrid_Skin.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tabPage_Render.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="propertyGrid_Skin.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="tabPage_Render.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="tabPage_Skin.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="tabControl.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="tabPage_Debug.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="propertyGrid_Debug.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;tabPage_Slot.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tabControl.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tabPage_Debug.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 4</value>
</data>
<data name="&gt;&gt;tabControl.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;propertyGrid_Skin.Type" xml:space="preserve">
<value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;propertyGrid_Debug.Type" xml:space="preserve">
<value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tabPage_Skin.Parent" xml:space="preserve">
<value>tabControl</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="propertyGrid_Render.HelpVisible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="tabPage_Skin.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="&gt;&gt;propertyGrid_Skin.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tabPage_Transform.Text" xml:space="preserve">
<value>变换</value>
</data>
<data name="tabPage_Transform.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="tabPage_Transform.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="propertyGrid_Debug.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;propertyGrid_Slot.Parent" xml:space="preserve">
<value>tabPage_Slot</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>8, 20</value>
</data>
<data name="propertyGrid_Animation.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;tabPage_Transform.Parent" xml:space="preserve">
<value>tabControl</value>
</data>
<data name="&gt;&gt;tabPage_Render.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;tabPage_BaseInfo.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="toolStripMenuItem_AddAnimation.Size" type="System.Drawing.Size, System.Drawing">
<value>108, 24</value>
</data>
<data name="&gt;&gt;tabPage_Slot.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="&gt;&gt;tabPage_Skin.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="tabPage_Debug.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="tabPage_BaseInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="tabPage_Slot.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;tabPage_Animation.Name" xml:space="preserve">
<value>tabPage_Animation</value>
</data>
<data name="&gt;&gt;propertyGrid_Transform.Type" xml:space="preserve">
<value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tabControl.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="toolStripMenuItem_AddAnimation.Text" xml:space="preserve">
<value>添加</value>
</data>
<data name="toolStripMenuItem_ReloadSkins.Size" type="System.Drawing.Size, System.Drawing">
<value>169, 24</value>
</data>
<data name="tabPage_Debug.Text" xml:space="preserve">
<value>调试</value>
</data>
<data name="propertyGrid_Render.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;propertyGrid_Animation.Type" xml:space="preserve">
<value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="toolStripMenuItem_ReloadSkins.Text" xml:space="preserve">
<value>重新加载皮肤</value>
</data>
<data name="&gt;&gt;propertyGrid_Slot.Name" xml:space="preserve">
<value>propertyGrid_Slot</value>
</data>
<data name="propertyGrid_Transform.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="propertyGrid_BaseInfo.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="propertyGrid_Skin.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;tabPage_BaseInfo.Parent" xml:space="preserve">
<value>tabControl</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>SpineViewPropertyGrid</value>
</data>
<data name="&gt;&gt;tabControl.Type" xml:space="preserve">
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;contextMenuStrip_Animation.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="propertyGrid_Slot.HelpVisible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="tabPage_Animation.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;tabPage_Debug.Parent" xml:space="preserve">
<value>tabControl</value>
</data>
<data name="&gt;&gt;tabPage_Slot.Name" xml:space="preserve">
<value>tabPage_Slot</value>
</data>
<data name="&gt;&gt;propertyGrid_Animation.Parent" xml:space="preserve">
<value>tabPage_Animation</value>
</data>
<data name="tabPage_Transform.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="propertyGrid_BaseInfo.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="propertyGrid_Render.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="&gt;&gt;tabPage_BaseInfo.Name" xml:space="preserve">
<value>tabPage_BaseInfo</value>
</data>
<data name="&gt;&gt;propertyGrid_BaseInfo.Parent" xml:space="preserve">
<value>tabPage_BaseInfo</value>
</data>
<data name="&gt;&gt;tabPage_Transform.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="propertyGrid_Skin.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="tabPage_Debug.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;propertyGrid_Debug.Parent" xml:space="preserve">
<value>tabPage_Debug</value>
</data>
<data name="&gt;&gt;tabPage_Transform.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;propertyGrid_Slot.Type" xml:space="preserve">
<value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tabPage_Slot.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="tabControl.Padding" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="propertyGrid_BaseInfo.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="toolStripMenuItem_RemoveAnimation.Size" type="System.Drawing.Size, System.Drawing">
<value>108, 24</value>
</data>
<data name="&gt;&gt;tabPage_Debug.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="&gt;&gt;propertyGrid_Transform.Parent" xml:space="preserve">
<value>tabPage_Transform</value>
</data>
<data name="propertyGrid_Render.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tabPage_Slot.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="tabPage_Skin.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 4</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_AddAnimation.Name" xml:space="preserve">
<value>toolStripMenuItem_AddAnimation</value>
</data>
<data name="&gt;&gt;tabPage_Animation.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="&gt;&gt;propertyGrid_Render.Name" xml:space="preserve">
<value>propertyGrid_Render</value>
</data>
<data name="&gt;&gt;propertyGrid_Debug.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="propertyGrid_BaseInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="propertyGrid_Transform.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 295</value>
</data>
<data name="tabPage_Skin.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="&gt;&gt;tabPage_Animation.Parent" xml:space="preserve">
<value>tabControl</value>
</data>
<data name="propertyGrid_Animation.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;tabPage_Render.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_ReloadSkins.Name" xml:space="preserve">
<value>toolStripMenuItem_ReloadSkins</value>
</data>
<data name="&gt;&gt;propertyGrid_Skin.Name" xml:space="preserve">
<value>propertyGrid_Skin</value>
</data>
<data name="tabPage_BaseInfo.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="propertyGrid_Render.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_RemoveAnimation.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tabPage_BaseInfo.Text" xml:space="preserve">
<value>基本信息</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="contextMenuStrip_Skin.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>29, 26</value>
</metadata>

View File

@@ -19,130 +19,82 @@
base.Dispose(disposing);
}
#region Windows
#region Windows
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutDialog));
tableLayoutPanel_About = new TableLayoutPanel();
label3 = new Label();
label1 = new Label();
label_Version = new Label();
linkLabel_RepoUrl = new LinkLabel();
panel1 = new Panel();
tableLayoutPanel_About.SuspendLayout();
panel1.SuspendLayout();
SuspendLayout();
//
// tableLayoutPanel_About
//
tableLayoutPanel_About.BackColor = Color.Transparent;
tableLayoutPanel_About.ColumnCount = 2;
tableLayoutPanel_About.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 28.5714283F));
tableLayoutPanel_About.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 71.42857F));
tableLayoutPanel_About.Controls.Add(label3, 0, 1);
tableLayoutPanel_About.Controls.Add(label1, 0, 0);
tableLayoutPanel_About.Controls.Add(label_Version, 1, 0);
tableLayoutPanel_About.Controls.Add(linkLabel_RepoUrl, 1, 1);
tableLayoutPanel_About.Dock = DockStyle.Fill;
tableLayoutPanel_About.Location = new Point(50, 15);
tableLayoutPanel_About.Margin = new Padding(0);
tableLayoutPanel_About.Name = "tableLayoutPanel_About";
tableLayoutPanel_About.RowCount = 3;
tableLayoutPanel_About.RowStyles.Add(new RowStyle());
tableLayoutPanel_About.RowStyles.Add(new RowStyle());
tableLayoutPanel_About.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
tableLayoutPanel_About.Size = new Size(604, 254);
tableLayoutPanel_About.TabIndex = 1;
//
// label3
//
label3.AutoSize = true;
label3.Dock = DockStyle.Fill;
label3.Location = new Point(3, 54);
label3.Margin = new Padding(3, 10, 3, 10);
label3.Name = "label3";
label3.Size = new Size(166, 24);
label3.TabIndex = 2;
label3.Text = "项目地址:";
label3.TextAlign = ContentAlignment.MiddleRight;
//
// label1
//
label1.AutoSize = true;
label1.Dock = DockStyle.Fill;
label1.Location = new Point(3, 10);
label1.Margin = new Padding(3, 10, 3, 10);
label1.Name = "label1";
label1.Size = new Size(166, 24);
label1.TabIndex = 0;
label1.Text = "程序版本:";
label1.TextAlign = ContentAlignment.MiddleRight;
//
// label_Version
//
label_Version.Anchor = AnchorStyles.Left;
label_Version.AutoSize = true;
label_Version.Location = new Point(175, 10);
label_Version.Name = "label_Version";
label_Version.Size = new Size(61, 24);
label_Version.TabIndex = 1;
label_Version.Text = "vX.Y.Z";
label_Version.TextAlign = ContentAlignment.MiddleLeft;
//
// linkLabel_RepoUrl
//
linkLabel_RepoUrl.Anchor = AnchorStyles.Left;
linkLabel_RepoUrl.AutoSize = true;
linkLabel_RepoUrl.Location = new Point(175, 54);
linkLabel_RepoUrl.Name = "linkLabel_RepoUrl";
linkLabel_RepoUrl.Size = new Size(356, 24);
linkLabel_RepoUrl.TabIndex = 3;
linkLabel_RepoUrl.TabStop = true;
linkLabel_RepoUrl.Text = "https://github.com/ww-rm/SpineViewer";
linkLabel_RepoUrl.LinkClicked += linkLabel_RepoUrl_LinkClicked;
//
// panel1
//
panel1.BackgroundImageLayout = ImageLayout.Center;
panel1.Controls.Add(tableLayoutPanel_About);
panel1.Dock = DockStyle.Fill;
panel1.Location = new Point(16, 17);
panel1.Name = "panel1";
panel1.Padding = new Padding(50, 15, 50, 10);
panel1.Size = new Size(704, 279);
panel1.TabIndex = 2;
//
// AboutDialog
//
AutoScaleDimensions = new SizeF(11F, 24F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(736, 313);
Controls.Add(panel1);
FormBorderStyle = FormBorderStyle.FixedDialog;
Icon = (Icon)resources.GetObject("$this.Icon");
Margin = new Padding(6);
MaximizeBox = false;
MinimizeBox = false;
Name = "AboutDialog";
Padding = new Padding(16, 17, 16, 17);
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterParent;
Text = "关于 SpineViewer";
tableLayoutPanel_About.ResumeLayout(false);
tableLayoutPanel_About.PerformLayout();
panel1.ResumeLayout(false);
ResumeLayout(false);
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutDialog));
tableLayoutPanel_About = new TableLayoutPanel();
label3 = new Label();
label1 = new Label();
label_Version = new Label();
linkLabel_RepoUrl = new LinkLabel();
panel1 = new Panel();
tableLayoutPanel_About.SuspendLayout();
panel1.SuspendLayout();
SuspendLayout();
//
// tableLayoutPanel_About
//
resources.ApplyResources(tableLayoutPanel_About, "tableLayoutPanel_About");
tableLayoutPanel_About.BackColor = Color.Transparent;
tableLayoutPanel_About.Controls.Add(label3, 0, 1);
tableLayoutPanel_About.Controls.Add(label1, 0, 0);
tableLayoutPanel_About.Controls.Add(label_Version, 1, 0);
tableLayoutPanel_About.Controls.Add(linkLabel_RepoUrl, 1, 1);
tableLayoutPanel_About.Name = "tableLayoutPanel_About";
//
// label3
//
resources.ApplyResources(label3, "label3");
label3.Name = "label3";
//
// label1
//
resources.ApplyResources(label1, "label1");
label1.Name = "label1";
//
// label_Version
//
resources.ApplyResources(label_Version, "label_Version");
label_Version.Name = "label_Version";
//
// linkLabel_RepoUrl
//
resources.ApplyResources(linkLabel_RepoUrl, "linkLabel_RepoUrl");
linkLabel_RepoUrl.Name = "linkLabel_RepoUrl";
linkLabel_RepoUrl.TabStop = true;
linkLabel_RepoUrl.LinkClicked += linkLabel_RepoUrl_LinkClicked;
//
// panel1
//
resources.ApplyResources(panel1, "panel1");
panel1.Controls.Add(tableLayoutPanel_About);
panel1.Name = "panel1";
//
// AboutDialog
//
resources.ApplyResources(this, "$this");
AutoScaleMode = AutoScaleMode.Font;
Controls.Add(panel1);
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
Name = "AboutDialog";
ShowInTaskbar = false;
tableLayoutPanel_About.ResumeLayout(false);
tableLayoutPanel_About.PerformLayout();
panel1.ResumeLayout(false);
ResumeLayout(false);
}
}
#endregion
#endregion
private TableLayoutPanel tableLayoutPanel_About;
private TableLayoutPanel tableLayoutPanel_About;
private Label label3;
private Label label1;
private Label label_Version;

View File

@@ -16,7 +16,7 @@ namespace SpineViewer.Dialogs
public AboutDialog()
{
InitializeComponent();
Text = $"关于 {ProgramName}";
Text = $"{Properties.Resources.about} {ProgramName}";
label_Version.Text = $"v{InformationalVersion}";
}
@@ -41,7 +41,7 @@ namespace SpineViewer.Dialogs
else
{
Clipboard.SetText(url);
MessagePopup.Info("链接已复制到剪贴板,请前往浏览器进行访问");
MessagePopup.Info(Properties.Resources.notifyCopyGithubLink, Properties.Resources.msgBoxInfo);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -117,7 +117,82 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label_Version.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>tableLayoutPanel_About</value>
</data>
<data name="label3.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label_Version.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="label_Version.Size" type="System.Drawing.Size, System.Drawing">
<value>48, 20</value>
</data>
<data name="tableLayoutPanel_About.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="label_Version.Text" xml:space="preserve">
<value>vX.Y.Z</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;linkLabel_RepoUrl.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="linkLabel_RepoUrl.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 0, 2, 0</value>
</data>
<data name="label3.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleRight</value>
</data>
<data name="label3.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 8, 2, 8</value>
</data>
<data name="tableLayoutPanel_About.RowCount" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 8</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>tableLayoutPanel_About</value>
</data>
<data name="&gt;&gt;linkLabel_RepoUrl.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="tableLayoutPanel_About.Location" type="System.Drawing.Point, System.Drawing">
<value>36, 12</value>
</data>
<data name="linkLabel_RepoUrl.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 44</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>AboutDialog</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>关于 SpineViewer</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAkAEBAAAAEAIABoBAAAlgAAABgYAAABACAAiAkAAP4EAAAgIAAAAQAgAKgQAACGDgAAMDAAAAEA
@@ -3264,4 +3339,169 @@
////////wAAAAAAAB///////
</value>
</data>
<data name="label1.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleRight</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="linkLabel_RepoUrl.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="label_Version.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 20</value>
</data>
<data name="&gt;&gt;panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label_Version.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>8, 20</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="linkLabel_RepoUrl.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="linkLabel_RepoUrl.Text" xml:space="preserve">
<value>https://github.com/ww-rm/SpineViewer</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="&gt;&gt;label_Version.Parent" xml:space="preserve">
<value>tableLayoutPanel_About</value>
</data>
<data name="&gt;&gt;tableLayoutPanel_About.Parent" xml:space="preserve">
<value>panel1</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 5, 4, 5</value>
</data>
<data name="tableLayoutPanel_About.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="linkLabel_RepoUrl.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;panel1.Name" xml:space="preserve">
<value>panel1</value>
</data>
<data name="label1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 8, 2, 8</value>
</data>
<data name="tableLayoutPanel_About.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="label3" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="label1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="label_Version" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="linkLabel_RepoUrl" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,28.571428,Percent,71.42857" /&gt;&lt;Rows Styles="AutoSize,0,AutoSize,0,Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="&gt;&gt;label_Version.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 44</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 20</value>
</data>
<data name="tableLayoutPanel_About.Size" type="System.Drawing.Size, System.Drawing">
<value>439, 213</value>
</data>
<data name="label_Version.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 0, 2, 0</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="panel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;tableLayoutPanel_About.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel_About.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="&gt;&gt;label_Version.Name" xml:space="preserve">
<value>label_Version</value>
</data>
<data name="linkLabel_RepoUrl.Size" type="System.Drawing.Size, System.Drawing">
<value>272, 20</value>
</data>
<data name="&gt;&gt;linkLabel_RepoUrl.Name" xml:space="preserve">
<value>linkLabel_RepoUrl</value>
</data>
<data name="label_Version.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 8</value>
</data>
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 14</value>
</data>
<data name="&gt;&gt;tableLayoutPanel_About.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="label1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel_About.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>511, 233</value>
</data>
<data name="$this.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>12, 14, 12, 14</value>
</data>
<data name="&gt;&gt;linkLabel_RepoUrl.Parent" xml:space="preserve">
<value>tableLayoutPanel_About</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>程序版本:</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
</data>
<data name="panel1.BackgroundImageLayout" type="System.Windows.Forms.ImageLayout, System.Windows.Forms">
<value>Center</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>项目地址:</value>
</data>
<data name="&gt;&gt;tableLayoutPanel_About.Name" xml:space="preserve">
<value>tableLayoutPanel_About</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>535, 261</value>
</data>
<data name="panel1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>36, 12, 36, 8</value>
</data>
<data name="label_Version.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -20,171 +20,113 @@
base.Dispose(disposing);
}
#region Windows Form Designer generated code
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BatchOpenSpineDialog));
panel = new Panel();
tableLayoutPanel1 = new TableLayoutPanel();
label4 = new Label();
label3 = new Label();
comboBox_Version = new ComboBox();
tableLayoutPanel2 = new TableLayoutPanel();
button_Ok = new Button();
button_Cancel = new Button();
skelFileListBox = new SpineViewer.Controls.SkelFileListBox();
panel.SuspendLayout();
tableLayoutPanel1.SuspendLayout();
tableLayoutPanel2.SuspendLayout();
SuspendLayout();
//
// panel
//
panel.Controls.Add(tableLayoutPanel1);
panel.Dock = DockStyle.Fill;
panel.Location = new Point(0, 0);
panel.Name = "panel";
panel.Padding = new Padding(50, 15, 50, 10);
panel.Size = new Size(1042, 472);
panel.TabIndex = 1;
//
// tableLayoutPanel1
//
tableLayoutPanel1.ColumnCount = 2;
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle());
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
tableLayoutPanel1.Controls.Add(label4, 0, 0);
tableLayoutPanel1.Controls.Add(label3, 0, 2);
tableLayoutPanel1.Controls.Add(comboBox_Version, 1, 2);
tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 0, 3);
tableLayoutPanel1.Controls.Add(skelFileListBox, 0, 1);
tableLayoutPanel1.Dock = DockStyle.Fill;
tableLayoutPanel1.Location = new Point(50, 15);
tableLayoutPanel1.Name = "tableLayoutPanel1";
tableLayoutPanel1.RowCount = 3;
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.Size = new Size(942, 447);
tableLayoutPanel1.TabIndex = 1;
//
// label4
//
label4.AutoSize = true;
tableLayoutPanel1.SetColumnSpan(label4, 4);
label4.Dock = DockStyle.Fill;
label4.Location = new Point(15, 15);
label4.Margin = new Padding(15);
label4.Name = "label4";
label4.Size = new Size(912, 24);
label4.TabIndex = 14;
label4.Text = "说明批量导入只需要选择skel文件atlas文件需要在同目录下并且与skel文件名相同";
label4.TextAlign = ContentAlignment.MiddleCenter;
//
// label3
//
label3.Anchor = AnchorStyles.Right;
label3.AutoSize = true;
label3.Location = new Point(3, 343);
label3.Name = "label3";
label3.Size = new Size(50, 24);
label3.TabIndex = 12;
label3.Text = "版本:";
//
// comboBox_Version
//
comboBox_Version.Anchor = AnchorStyles.Left;
comboBox_Version.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox_Version.FormattingEnabled = true;
comboBox_Version.Location = new Point(59, 339);
comboBox_Version.Name = "comboBox_Version";
comboBox_Version.Size = new Size(182, 32);
comboBox_Version.Sorted = true;
comboBox_Version.TabIndex = 13;
//
// tableLayoutPanel2
//
tableLayoutPanel2.AutoSize = true;
tableLayoutPanel2.AutoSizeMode = AutoSizeMode.GrowAndShrink;
tableLayoutPanel2.ColumnCount = 2;
tableLayoutPanel1.SetColumnSpan(tableLayoutPanel2, 4);
tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
tableLayoutPanel2.Controls.Add(button_Ok, 0, 0);
tableLayoutPanel2.Controls.Add(button_Cancel, 1, 0);
tableLayoutPanel2.Dock = DockStyle.Fill;
tableLayoutPanel2.Location = new Point(3, 404);
tableLayoutPanel2.Margin = new Padding(3, 30, 3, 3);
tableLayoutPanel2.Name = "tableLayoutPanel2";
tableLayoutPanel2.RowCount = 1;
tableLayoutPanel2.RowStyles.Add(new RowStyle());
tableLayoutPanel2.Size = new Size(936, 40);
tableLayoutPanel2.TabIndex = 11;
//
// button_Ok
//
button_Ok.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
button_Ok.Location = new Point(326, 3);
button_Ok.Margin = new Padding(3, 3, 30, 3);
button_Ok.Name = "button_Ok";
button_Ok.Size = new Size(112, 34);
button_Ok.TabIndex = 7;
button_Ok.Text = "确认";
button_Ok.UseVisualStyleBackColor = true;
button_Ok.Click += button_Ok_Click;
//
// button_Cancel
//
button_Cancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
button_Cancel.Location = new Point(498, 3);
button_Cancel.Margin = new Padding(30, 3, 3, 3);
button_Cancel.Name = "button_Cancel";
button_Cancel.Size = new Size(112, 34);
button_Cancel.TabIndex = 8;
button_Cancel.Text = "取消";
button_Cancel.UseVisualStyleBackColor = true;
button_Cancel.Click += button_Cancel_Click;
//
// skelFileListBox
//
tableLayoutPanel1.SetColumnSpan(skelFileListBox, 2);
skelFileListBox.Dock = DockStyle.Fill;
skelFileListBox.Location = new Point(3, 57);
skelFileListBox.Name = "skelFileListBox";
skelFileListBox.Size = new Size(936, 276);
skelFileListBox.TabIndex = 15;
//
// BatchOpenSpineDialog
//
AcceptButton = button_Ok;
AutoScaleDimensions = new SizeF(11F, 24F);
AutoScaleMode = AutoScaleMode.Font;
CancelButton = button_Cancel;
ClientSize = new Size(1042, 472);
Controls.Add(panel);
FormBorderStyle = FormBorderStyle.FixedDialog;
Icon = (Icon)resources.GetObject("$this.Icon");
MaximizeBox = false;
MinimizeBox = false;
Name = "BatchOpenSpineDialog";
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterScreen;
Text = "批量打开骨骼";
panel.ResumeLayout(false);
tableLayoutPanel1.ResumeLayout(false);
tableLayoutPanel1.PerformLayout();
tableLayoutPanel2.ResumeLayout(false);
ResumeLayout(false);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BatchOpenSpineDialog));
panel = new Panel();
tableLayoutPanel1 = new TableLayoutPanel();
label4 = new Label();
label3 = new Label();
comboBox_Version = new ComboBox();
tableLayoutPanel2 = new TableLayoutPanel();
button_Ok = new Button();
button_Cancel = new Button();
skelFileListBox = new Controls.SkelFileListBox();
panel.SuspendLayout();
tableLayoutPanel1.SuspendLayout();
tableLayoutPanel2.SuspendLayout();
SuspendLayout();
//
// panel
//
resources.ApplyResources(panel, "panel");
panel.Controls.Add(tableLayoutPanel1);
panel.Name = "panel";
//
// tableLayoutPanel1
//
resources.ApplyResources(tableLayoutPanel1, "tableLayoutPanel1");
tableLayoutPanel1.Controls.Add(label4, 0, 0);
tableLayoutPanel1.Controls.Add(label3, 0, 2);
tableLayoutPanel1.Controls.Add(comboBox_Version, 1, 2);
tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 0, 3);
tableLayoutPanel1.Controls.Add(skelFileListBox, 0, 1);
tableLayoutPanel1.Name = "tableLayoutPanel1";
//
// label4
//
resources.ApplyResources(label4, "label4");
tableLayoutPanel1.SetColumnSpan(label4, 4);
label4.Name = "label4";
//
// label3
//
resources.ApplyResources(label3, "label3");
label3.Name = "label3";
//
// comboBox_Version
//
resources.ApplyResources(comboBox_Version, "comboBox_Version");
comboBox_Version.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox_Version.FormattingEnabled = true;
comboBox_Version.Name = "comboBox_Version";
comboBox_Version.Sorted = true;
//
// tableLayoutPanel2
//
resources.ApplyResources(tableLayoutPanel2, "tableLayoutPanel2");
tableLayoutPanel1.SetColumnSpan(tableLayoutPanel2, 4);
tableLayoutPanel2.Controls.Add(button_Ok, 0, 0);
tableLayoutPanel2.Controls.Add(button_Cancel, 1, 0);
tableLayoutPanel2.Name = "tableLayoutPanel2";
//
// button_Ok
//
resources.ApplyResources(button_Ok, "button_Ok");
button_Ok.Name = "button_Ok";
button_Ok.UseVisualStyleBackColor = true;
button_Ok.Click += button_Ok_Click;
//
// button_Cancel
//
resources.ApplyResources(button_Cancel, "button_Cancel");
button_Cancel.Name = "button_Cancel";
button_Cancel.UseVisualStyleBackColor = true;
button_Cancel.Click += button_Cancel_Click;
//
// skelFileListBox
//
resources.ApplyResources(skelFileListBox, "skelFileListBox");
tableLayoutPanel1.SetColumnSpan(skelFileListBox, 2);
skelFileListBox.Name = "skelFileListBox";
//
// BatchOpenSpineDialog
//
AcceptButton = button_Ok;
resources.ApplyResources(this, "$this");
AutoScaleMode = AutoScaleMode.Font;
CancelButton = button_Cancel;
Controls.Add(panel);
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
Name = "BatchOpenSpineDialog";
ShowInTaskbar = false;
panel.ResumeLayout(false);
tableLayoutPanel1.ResumeLayout(false);
tableLayoutPanel1.PerformLayout();
tableLayoutPanel2.ResumeLayout(false);
ResumeLayout(false);
}
#endregion
private Panel panel;
#endregion
private Panel panel;
private TableLayoutPanel tableLayoutPanel1;
private TableLayoutPanel tableLayoutPanel2;
private Button button_Ok;

View File

@@ -36,7 +36,7 @@ namespace SpineViewer.Dialogs
if (items.Count <= 0)
{
MessagePopup.Info("未选择任何文件");
MessagePopup.Info("未选择任何文件", Properties.Resources.msgBoxInfo);
return;
}
@@ -44,14 +44,14 @@ namespace SpineViewer.Dialogs
{
if (!File.Exists(p))
{
MessagePopup.Info($"{p}", "skel文件不存在");
MessagePopup.Info($"{p}", Properties.Resources.skelNotExist);
return;
}
}
if (version != SpineVersion.Auto && !Spine.SpineObject.HasImplementation(version))
{
MessagePopup.Info($"{version.GetName()} 版本尚未实现(咕咕咕~");
MessagePopup.Info($"{version.GetName()} 版本尚未实现(咕咕咕~", Properties.Resources.msgBoxInfo);
return;
}

File diff suppressed because it is too large Load Diff

View File

@@ -118,6 +118,102 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="skelFileListBox.Size" type="System.Drawing.Size, System.Drawing">
<value>684, 234</value>
</data>
<data name="&gt;&gt;panel.Name" xml:space="preserve">
<value>panel</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Name" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="comboBox_Version.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 28</value>
</data>
<data name="tableLayoutPanel2.Size" type="System.Drawing.Size, System.Drawing">
<value>682, 32</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="button_Ok.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>说明批量导入只需要选择skel文件atlas文件需要在同目录下并且与skel文件名相同</value>
</data>
<data name="skelFileListBox.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 46</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Cancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="&gt;&gt;skelFileListBox.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="&gt;&gt;label4.Name" xml:space="preserve">
<value>label4</value>
</data>
<data name="&gt;&gt;panel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel2.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 339</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label3.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 0, 2, 0</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;comboBox_Version.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="panel.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>36, 12, 36, 8</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Cancel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>22, 2, 2, 2</value>
</data>
<data name="button_Ok.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;label4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="button_Ok.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 22, 2</value>
</data>
<data name="panel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;button_Ok.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;comboBox_Version.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="panel.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAkAEBAAAAEAIABoBAAAlgAAABgYAAABACAAiAkAAP4EAAAgIAAAAQAgAKgQAACGDgAAMDAAAAEA
@@ -3264,4 +3360,226 @@
////////wAAAAAAAB///////
</value>
</data>
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
<value>11, 12</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="skelFileListBox.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>1, 2, 1, 2</value>
</data>
<data name="label4.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleCenter</value>
</data>
<data name="button_Cancel.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 28</value>
</data>
<data name="&gt;&gt;button_Ok.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="&gt;&gt;button_Ok.Name" xml:space="preserve">
<value>button_Ok</value>
</data>
<data name="comboBox_Version.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>批量打开骨骼</value>
</data>
<data name="&gt;&gt;label4.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>8, 20</value>
</data>
<data name="button_Ok.Location" type="System.Drawing.Point, System.Drawing">
<value>238, 2</value>
</data>
<data name="comboBox_Version.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="&gt;&gt;button_Ok.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>686, 373</value>
</data>
<data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="comboBox_Version.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="button_Ok.Text" xml:space="preserve">
<value>确认</value>
</data>
<data name="&gt;&gt;button_Cancel.Name" xml:space="preserve">
<value>button_Cancel</value>
</data>
<data name="tableLayoutPanel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="button_Cancel.Location" type="System.Drawing.Point, System.Drawing">
<value>363, 2</value>
</data>
<data name="&gt;&gt;skelFileListBox.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;button_Cancel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>BatchOpenSpineDialog</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 288</value>
</data>
<data name="panel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label4.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="&gt;&gt;button_Cancel.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Cancel.Text" xml:space="preserve">
<value>取消</value>
</data>
<data name="label4.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>11, 12, 11, 12</value>
</data>
<data name="label4.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Name" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="skelFileListBox.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;skelFileListBox.Name" xml:space="preserve">
<value>skelFileListBox</value>
</data>
<data name="panel.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>664, 20</value>
</data>
<data name="tableLayoutPanel2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 25, 2, 2</value>
</data>
<data name="label3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Right</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>758, 393</value>
</data>
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>42, 20</value>
</data>
<data name="&gt;&gt;button_Cancel.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="tableLayoutPanel2.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="comboBox_Version.Location" type="System.Drawing.Point, System.Drawing">
<value>48, 284</value>
</data>
<data name="button_Cancel.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="tableLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;comboBox_Version.Name" xml:space="preserve">
<value>comboBox_Version</value>
</data>
<data name="tableLayoutPanel2.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="panel.Size" type="System.Drawing.Size, System.Drawing">
<value>758, 393</value>
</data>
<data name="button_Ok.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 28</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="skelFileListBox.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="label4" Row="0" RowSpan="1" Column="0" ColumnSpan="4" /&gt;&lt;Control Name="label3" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="comboBox_Version" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="tableLayoutPanel2" Row="3" RowSpan="1" Column="0" ColumnSpan="4" /&gt;&lt;Control Name="skelFileListBox" Row="1" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,Percent,100,AutoSize,0,AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="tableLayoutPanel2.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="&gt;&gt;comboBox_Version.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel2.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="button_Ok" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="button_Cancel" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,50,Percent,50" /&gt;&lt;Rows Styles="AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="tableLayoutPanel2.RowCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>版本:</value>
</data>
<data name="&gt;&gt;panel.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>panel</value>
</data>
<data name="&gt;&gt;skelFileListBox.Type" xml:space="preserve">
<value>SpineViewer.Controls.SkelFileListBox, SpineViewer, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>36, 12</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -58,19 +58,13 @@
//
// panel
//
resources.ApplyResources(panel, "panel");
panel.Controls.Add(tableLayoutPanel1);
panel.Dock = DockStyle.Fill;
panel.Location = new Point(0, 0);
panel.Name = "panel";
panel.Padding = new Padding(50, 15, 50, 10);
panel.Size = new Size(1051, 702);
panel.TabIndex = 2;
//
// tableLayoutPanel1
//
tableLayoutPanel1.ColumnCount = 2;
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle());
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
resources.ApplyResources(tableLayoutPanel1, "tableLayoutPanel1");
tableLayoutPanel1.Controls.Add(label5, 0, 2);
tableLayoutPanel1.Controls.Add(comboBox_TargetVersion, 1, 4);
tableLayoutPanel1.Controls.Add(flowLayoutPanel_TargetFormat, 1, 5);
@@ -82,238 +76,134 @@
tableLayoutPanel1.Controls.Add(label2, 0, 5);
tableLayoutPanel1.Controls.Add(skelFileListBox, 0, 1);
tableLayoutPanel1.Controls.Add(tableLayoutPanel3, 1, 2);
tableLayoutPanel1.Dock = DockStyle.Fill;
tableLayoutPanel1.Location = new Point(50, 15);
tableLayoutPanel1.Name = "tableLayoutPanel1";
tableLayoutPanel1.RowCount = 7;
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
tableLayoutPanel1.Size = new Size(951, 677);
tableLayoutPanel1.TabIndex = 1;
//
// label5
//
label5.Anchor = AnchorStyles.Left | AnchorStyles.Right;
label5.AutoSize = true;
label5.Location = new Point(3, 462);
resources.ApplyResources(label5, "label5");
label5.Name = "label5";
label5.Size = new Size(104, 24);
label5.TabIndex = 23;
label5.Text = "输出文件夹:";
//
// comboBox_TargetVersion
//
comboBox_TargetVersion.Anchor = AnchorStyles.Left;
resources.ApplyResources(comboBox_TargetVersion, "comboBox_TargetVersion");
comboBox_TargetVersion.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox_TargetVersion.FormattingEnabled = true;
comboBox_TargetVersion.Location = new Point(113, 535);
comboBox_TargetVersion.Name = "comboBox_TargetVersion";
comboBox_TargetVersion.Size = new Size(182, 32);
comboBox_TargetVersion.Sorted = true;
comboBox_TargetVersion.TabIndex = 21;
//
// flowLayoutPanel_TargetFormat
//
flowLayoutPanel_TargetFormat.AutoSize = true;
resources.ApplyResources(flowLayoutPanel_TargetFormat, "flowLayoutPanel_TargetFormat");
flowLayoutPanel_TargetFormat.Controls.Add(radioButton_BinaryTarget);
flowLayoutPanel_TargetFormat.Controls.Add(radioButton_JsonTarget);
flowLayoutPanel_TargetFormat.Dock = DockStyle.Fill;
flowLayoutPanel_TargetFormat.Location = new Point(110, 570);
flowLayoutPanel_TargetFormat.Margin = new Padding(0);
flowLayoutPanel_TargetFormat.Name = "flowLayoutPanel_TargetFormat";
flowLayoutPanel_TargetFormat.Size = new Size(841, 34);
flowLayoutPanel_TargetFormat.TabIndex = 19;
//
// radioButton_BinaryTarget
//
radioButton_BinaryTarget.AutoSize = true;
radioButton_BinaryTarget.Location = new Point(3, 3);
resources.ApplyResources(radioButton_BinaryTarget, "radioButton_BinaryTarget");
radioButton_BinaryTarget.Name = "radioButton_BinaryTarget";
radioButton_BinaryTarget.Size = new Size(151, 28);
radioButton_BinaryTarget.TabIndex = 17;
radioButton_BinaryTarget.Text = "二进制 (*.skel)";
radioButton_BinaryTarget.UseVisualStyleBackColor = true;
//
// radioButton_JsonTarget
//
radioButton_JsonTarget.AutoSize = true;
resources.ApplyResources(radioButton_JsonTarget, "radioButton_JsonTarget");
radioButton_JsonTarget.Checked = true;
radioButton_JsonTarget.Location = new Point(160, 3);
radioButton_JsonTarget.Name = "radioButton_JsonTarget";
radioButton_JsonTarget.Size = new Size(135, 28);
radioButton_JsonTarget.TabIndex = 18;
radioButton_JsonTarget.TabStop = true;
radioButton_JsonTarget.Text = "文本 (*.json)";
radioButton_JsonTarget.UseVisualStyleBackColor = true;
//
// label1
//
label1.Anchor = AnchorStyles.Right;
label1.AutoSize = true;
label1.Location = new Point(21, 539);
resources.ApplyResources(label1, "label1");
label1.Name = "label1";
label1.Size = new Size(86, 24);
label1.TabIndex = 15;
label1.Text = "目标版本:";
//
// label4
//
label4.AutoSize = true;
resources.ApplyResources(label4, "label4");
tableLayoutPanel1.SetColumnSpan(label4, 4);
label4.Dock = DockStyle.Fill;
label4.Location = new Point(15, 15);
label4.Margin = new Padding(15);
label4.Name = "label4";
label4.Size = new Size(921, 24);
label4.TabIndex = 14;
label4.Text = "说明:输出文件夹留空则在每个文件同级目录下生成目标格式后缀的文件,视情况会覆盖已存在文件";
label4.TextAlign = ContentAlignment.MiddleCenter;
//
// label3
//
label3.Anchor = AnchorStyles.Right;
label3.AutoSize = true;
label3.Location = new Point(39, 501);
resources.ApplyResources(label3, "label3");
label3.Name = "label3";
label3.Size = new Size(68, 24);
label3.TabIndex = 12;
label3.Text = "源版本:";
//
// comboBox_SourceVersion
//
comboBox_SourceVersion.Anchor = AnchorStyles.Left;
resources.ApplyResources(comboBox_SourceVersion, "comboBox_SourceVersion");
comboBox_SourceVersion.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox_SourceVersion.FormattingEnabled = true;
comboBox_SourceVersion.Location = new Point(113, 497);
comboBox_SourceVersion.Name = "comboBox_SourceVersion";
comboBox_SourceVersion.Size = new Size(182, 32);
comboBox_SourceVersion.Sorted = true;
comboBox_SourceVersion.TabIndex = 13;
//
// tableLayoutPanel2
//
tableLayoutPanel2.AutoSize = true;
tableLayoutPanel2.AutoSizeMode = AutoSizeMode.GrowAndShrink;
tableLayoutPanel2.ColumnCount = 2;
resources.ApplyResources(tableLayoutPanel2, "tableLayoutPanel2");
tableLayoutPanel1.SetColumnSpan(tableLayoutPanel2, 4);
tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
tableLayoutPanel2.Controls.Add(button_Ok, 0, 0);
tableLayoutPanel2.Controls.Add(button_Cancel, 1, 0);
tableLayoutPanel2.Dock = DockStyle.Fill;
tableLayoutPanel2.Location = new Point(3, 634);
tableLayoutPanel2.Margin = new Padding(3, 30, 3, 3);
tableLayoutPanel2.Name = "tableLayoutPanel2";
tableLayoutPanel2.RowCount = 1;
tableLayoutPanel2.RowStyles.Add(new RowStyle());
tableLayoutPanel2.Size = new Size(945, 40);
tableLayoutPanel2.TabIndex = 11;
//
// button_Ok
//
button_Ok.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
button_Ok.Location = new Point(330, 3);
button_Ok.Margin = new Padding(3, 3, 30, 3);
resources.ApplyResources(button_Ok, "button_Ok");
button_Ok.Name = "button_Ok";
button_Ok.Size = new Size(112, 34);
button_Ok.TabIndex = 7;
button_Ok.Text = "确认";
button_Ok.UseVisualStyleBackColor = true;
button_Ok.Click += button_Ok_Click;
//
// button_Cancel
//
button_Cancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
button_Cancel.Location = new Point(502, 3);
button_Cancel.Margin = new Padding(30, 3, 3, 3);
resources.ApplyResources(button_Cancel, "button_Cancel");
button_Cancel.Name = "button_Cancel";
button_Cancel.Size = new Size(112, 34);
button_Cancel.TabIndex = 8;
button_Cancel.Text = "取消";
button_Cancel.UseVisualStyleBackColor = true;
button_Cancel.Click += button_Cancel_Click;
//
// label2
//
label2.Anchor = AnchorStyles.Right;
label2.AutoSize = true;
label2.Location = new Point(21, 575);
resources.ApplyResources(label2, "label2");
label2.Name = "label2";
label2.Size = new Size(86, 24);
label2.TabIndex = 16;
label2.Text = "目标格式:";
//
// skelFileListBox
//
resources.ApplyResources(skelFileListBox, "skelFileListBox");
tableLayoutPanel1.SetColumnSpan(skelFileListBox, 2);
skelFileListBox.Dock = DockStyle.Fill;
skelFileListBox.Location = new Point(3, 57);
skelFileListBox.Name = "skelFileListBox";
skelFileListBox.Size = new Size(945, 394);
skelFileListBox.TabIndex = 20;
//
// tableLayoutPanel3
//
tableLayoutPanel3.AutoSize = true;
tableLayoutPanel3.AutoSizeMode = AutoSizeMode.GrowAndShrink;
tableLayoutPanel3.ColumnCount = 3;
tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle());
tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle());
resources.ApplyResources(tableLayoutPanel3, "tableLayoutPanel3");
tableLayoutPanel3.Controls.Add(textBox_OutputDir, 1, 0);
tableLayoutPanel3.Controls.Add(button_SelectOutputDir, 2, 0);
tableLayoutPanel3.Dock = DockStyle.Fill;
tableLayoutPanel3.Location = new Point(110, 454);
tableLayoutPanel3.Margin = new Padding(0);
tableLayoutPanel3.Name = "tableLayoutPanel3";
tableLayoutPanel3.RowCount = 1;
tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
tableLayoutPanel3.Size = new Size(841, 40);
tableLayoutPanel3.TabIndex = 22;
//
// textBox_OutputDir
//
textBox_OutputDir.Anchor = AnchorStyles.Left | AnchorStyles.Right;
textBox_OutputDir.Location = new Point(3, 5);
resources.ApplyResources(textBox_OutputDir, "textBox_OutputDir");
textBox_OutputDir.Name = "textBox_OutputDir";
textBox_OutputDir.Size = new Size(797, 30);
textBox_OutputDir.TabIndex = 1;
//
// button_SelectOutputDir
//
button_SelectOutputDir.Anchor = AnchorStyles.Left | AnchorStyles.Right;
button_SelectOutputDir.AutoSize = true;
button_SelectOutputDir.AutoSizeMode = AutoSizeMode.GrowAndShrink;
button_SelectOutputDir.Location = new Point(806, 3);
resources.ApplyResources(button_SelectOutputDir, "button_SelectOutputDir");
button_SelectOutputDir.Name = "button_SelectOutputDir";
button_SelectOutputDir.Size = new Size(32, 34);
button_SelectOutputDir.TabIndex = 2;
button_SelectOutputDir.Text = "...";
button_SelectOutputDir.UseVisualStyleBackColor = true;
button_SelectOutputDir.Click += button_SelectOutputDir_Click;
//
// folderBrowserDialog_Output
//
resources.ApplyResources(folderBrowserDialog_Output, "folderBrowserDialog_Output");
//
// ConvertFileFormatDialog
//
AcceptButton = button_Ok;
AutoScaleDimensions = new SizeF(11F, 24F);
resources.ApplyResources(this, "$this");
AutoScaleMode = AutoScaleMode.Font;
CancelButton = button_Cancel;
ClientSize = new Size(1051, 702);
Controls.Add(panel);
FormBorderStyle = FormBorderStyle.FixedDialog;
Icon = (Icon)resources.GetObject("$this.Icon");
MaximizeBox = false;
MinimizeBox = false;
Name = "ConvertFileFormatDialog";
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterScreen;
Text = "骨骼文件格式转换";
panel.ResumeLayout(false);
tableLayoutPanel1.ResumeLayout(false);
tableLayoutPanel1.PerformLayout();

View File

@@ -59,7 +59,7 @@ namespace SpineViewer.Dialogs
if (items.Count <= 0)
{
MessagePopup.Info("未选择任何文件");
MessagePopup.Info("未选择任何文件", Properties.Resources.msgBoxInfo);
return;
}
@@ -72,7 +72,7 @@ namespace SpineViewer.Dialogs
outputDir = Path.GetFullPath(outputDir);
if (!Directory.Exists(outputDir))
{
if (MessagePopup.Quest("输出文件夹不存在,是否创建?") == DialogResult.OK)
if (MessagePopup.Quest("输出文件夹不存在,是否创建?", Properties.Resources.msgBoxQuest) == DialogResult.OK)
{
try
{
@@ -82,7 +82,7 @@ namespace SpineViewer.Dialogs
{
logger.Error(ex.ToString());
logger.Error("Failed to create output dir {}", outputDir);
MessagePopup.Error(ex.ToString());
MessagePopup.Error(ex.ToString(), Properties.Resources.msgBoxError);
return;
}
}
@@ -97,20 +97,20 @@ namespace SpineViewer.Dialogs
{
if (!File.Exists(p))
{
MessagePopup.Info($"{p}", "skel文件不存在");
MessagePopup.Info($"{p}", Properties.Resources.skelNotExist);
return;
}
}
if (sourceVersion != SpineVersion.Auto && !SkeletonConverter.HasImplementation(sourceVersion))
{
MessagePopup.Info($"{sourceVersion.GetName()} 版本尚未实现(咕咕咕~");
MessagePopup.Info($"{sourceVersion.GetName()} 版本尚未实现(咕咕咕~", Properties.Resources.msgBoxInfo);
return;
}
if (!SkeletonConverter.HasImplementation(targetVersion))
{
MessagePopup.Info($"{targetVersion.GetName()} 版本尚未实现(咕咕咕~");
MessagePopup.Info($"{targetVersion.GetName()} 版本尚未实现(咕咕咕~", Properties.Resources.msgBoxInfo);
return;
}

File diff suppressed because it is too large Load Diff

View File

@@ -117,10 +117,553 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="folderBrowserDialog_Output.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>36, 22</value>
</metadata>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="skelFileListBox.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>1, 2, 1, 2</value>
</data>
<data name="&gt;&gt;skelFileListBox.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="button_SelectOutputDir.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="button_Cancel.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;flowLayoutPanel_TargetFormat.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="button_Ok.Text" xml:space="preserve">
<value>确认</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;textBox_OutputDir.Name" xml:space="preserve">
<value>textBox_OutputDir</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="panel.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="button_Cancel.Text" xml:space="preserve">
<value>取消</value>
</data>
<data name="&gt;&gt;radioButton_JsonTarget.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;folderBrowserDialog_Output.Type" xml:space="preserve">
<value>System.Windows.Forms.FolderBrowserDialog, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Ok.Size" type="System.Drawing.Size, System.Drawing">
<value>111, 34</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="&gt;&gt;button_SelectOutputDir.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="comboBox_SourceVersion.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="&gt;&gt;textBox_OutputDir.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="panel.Size" type="System.Drawing.Size, System.Drawing">
<value>1050, 702</value>
</data>
<data name="&gt;&gt;panel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="textBox_OutputDir.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;comboBox_TargetVersion.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="radioButton_JsonTarget.Size" type="System.Drawing.Size, System.Drawing">
<value>135, 28</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="button_Cancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="label5.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 473</value>
</data>
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
<value>15, 14</value>
</data>
<data name="&gt;&gt;radioButton_JsonTarget.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="button_SelectOutputDir.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left, Right</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>950, 678</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="comboBox_TargetVersion.Location" type="System.Drawing.Point, System.Drawing">
<value>113, 542</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
</data>
<data name="&gt;&gt;button_Cancel.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="panel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="label3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Right</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>panel</value>
</data>
<data name="&gt;&gt;radioButton_BinaryTarget.Name" xml:space="preserve">
<value>radioButton_BinaryTarget</value>
</data>
<data name="label5.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="textBox_OutputDir.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 4</value>
</data>
<data name="&gt;&gt;button_Ok.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;comboBox_SourceVersion.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="comboBox_SourceVersion.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="comboBox_SourceVersion.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="&gt;&gt;folderBrowserDialog_Output.Name" xml:space="preserve">
<value>folderBrowserDialog_Output</value>
</data>
<data name="label5.TabIndex" type="System.Int32, mscorlib">
<value>23</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="&gt;&gt;skelFileListBox.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="button_Ok.Location" type="System.Drawing.Point, System.Drawing">
<value>331, 2</value>
</data>
<data name="radioButton_BinaryTarget.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="button_Ok.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 30, 2</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>39, 510</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="textBox_OutputDir.Size" type="System.Drawing.Size, System.Drawing">
<value>796, 30</value>
</data>
<data name="&gt;&gt;radioButton_BinaryTarget.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;button_Cancel.Name" xml:space="preserve">
<value>button_Cancel</value>
</data>
<data name="tableLayoutPanel3.Location" type="System.Drawing.Point, System.Drawing">
<value>110, 466</value>
</data>
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;panel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="radioButton_JsonTarget.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="label4.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleCenter</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>源版本:</value>
</data>
<data name="tableLayoutPanel3.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="button_SelectOutputDir.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="panel.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="label4.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="&gt;&gt;radioButton_JsonTarget.Name" xml:space="preserve">
<value>radioButton_JsonTarget</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="skelFileListBox.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 54</value>
</data>
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;label4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="comboBox_TargetVersion.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="radioButton_JsonTarget.TabIndex" type="System.Int32, mscorlib">
<value>18</value>
</data>
<data name="label4.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="button_SelectOutputDir.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="comboBox_SourceVersion.Size" type="System.Drawing.Size, System.Drawing">
<value>181, 32</value>
</data>
<data name="&gt;&gt;button_SelectOutputDir.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="radioButton_BinaryTarget.Text" xml:space="preserve">
<value>二进制 (*.skel)</value>
</data>
<data name="&gt;&gt;button_Ok.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>920, 24</value>
</data>
<data name="tableLayoutPanel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;comboBox_SourceVersion.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="flowLayoutPanel_TargetFormat.TabIndex" type="System.Int32, mscorlib">
<value>19</value>
</data>
<data name="&gt;&gt;flowLayoutPanel_TargetFormat.Type" xml:space="preserve">
<value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label5.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="tableLayoutPanel3.ColumnCount" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="skelFileListBox.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;button_Ok.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel3.RowCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="label5.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left, Right</value>
</data>
<data name="tableLayoutPanel3.Size" type="System.Drawing.Size, System.Drawing">
<value>840, 38</value>
</data>
<data name="&gt;&gt;button_Ok.Name" xml:space="preserve">
<value>button_Ok</value>
</data>
<data name="&gt;&gt;textBox_OutputDir.Parent" xml:space="preserve">
<value>tableLayoutPanel3</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="skelFileListBox.TabIndex" type="System.Int32, mscorlib">
<value>20</value>
</data>
<data name="&gt;&gt;flowLayoutPanel_TargetFormat.Name" xml:space="preserve">
<value>flowLayoutPanel_TargetFormat</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="button_Cancel.Location" type="System.Drawing.Point, System.Drawing">
<value>502, 2</value>
</data>
<data name="&gt;&gt;comboBox_SourceVersion.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="radioButton_BinaryTarget.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 2</value>
</data>
<data name="button_SelectOutputDir.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 34</value>
</data>
<data name="comboBox_SourceVersion.Location" type="System.Drawing.Point, System.Drawing">
<value>113, 506</value>
</data>
<data name="textBox_OutputDir.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left, Right</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>ConvertFileFormatDialog</value>
</data>
<data name="tableLayoutPanel2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;label5.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="flowLayoutPanel_TargetFormat.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>说明:输出文件夹留空则在每个文件同级目录下生成目标格式后缀的文件,视情况会覆盖已存在文件</value>
</data>
<data name="&gt;&gt;comboBox_SourceVersion.Name" xml:space="preserve">
<value>comboBox_SourceVersion</value>
</data>
<data name="&gt;&gt;radioButton_BinaryTarget.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Ok.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>骨骼文件格式转换</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="flowLayoutPanel_TargetFormat.Location" type="System.Drawing.Point, System.Drawing">
<value>110, 576</value>
</data>
<data name="comboBox_TargetVersion.Size" type="System.Drawing.Size, System.Drawing">
<value>181, 32</value>
</data>
<data name="&gt;&gt;label5.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="label2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Right</value>
</data>
<data name="radioButton_JsonTarget.Location" type="System.Drawing.Point, System.Drawing">
<value>160, 2</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="label5" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="comboBox_TargetVersion" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="flowLayoutPanel_TargetFormat" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="label1" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="label4" Row="0" RowSpan="1" Column="0" ColumnSpan="4" /&gt;&lt;Control Name="label3" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="comboBox_SourceVersion" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="tableLayoutPanel2" Row="6" RowSpan="1" Column="0" ColumnSpan="4" /&gt;&lt;Control Name="label2" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="skelFileListBox" Row="1" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;Control Name="tableLayoutPanel3" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,Percent,100,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,24" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="tableLayoutPanel2.RowCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="panel.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>50, 14, 50, 10</value>
</data>
<data name="radioButton_BinaryTarget.Size" type="System.Drawing.Size, System.Drawing">
<value>151, 28</value>
</data>
<data name="&gt;&gt;tableLayoutPanel3.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="flowLayoutPanel_TargetFormat.Size" type="System.Drawing.Size, System.Drawing">
<value>840, 32</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 580</value>
</data>
<data name="tableLayoutPanel2.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="button_Ok" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="button_Cancel" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,50,Percent,50" /&gt;&lt;Rows Styles="AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="&gt;&gt;tableLayoutPanel3.Name" xml:space="preserve">
<value>tableLayoutPanel3</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>86, 24</value>
</data>
<data name="flowLayoutPanel_TargetFormat.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;tableLayoutPanel3.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="tableLayoutPanel3.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="&gt;&gt;flowLayoutPanel_TargetFormat.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="label1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Right</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Name" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;tableLayoutPanel3.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;skelFileListBox.Name" xml:space="preserve">
<value>skelFileListBox</value>
</data>
<data name="button_Cancel.Size" type="System.Drawing.Size, System.Drawing">
<value>111, 34</value>
</data>
<data name="flowLayoutPanel_TargetFormat.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="tableLayoutPanel2.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="tableLayoutPanel2.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 638</value>
</data>
<data name="radioButton_BinaryTarget.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="&gt;&gt;label5.Name" xml:space="preserve">
<value>label5</value>
</data>
<data name="tableLayoutPanel3.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="textBox_OutputDir" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="button_SelectOutputDir" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,Percent,100,AutoSize,0" /&gt;&lt;Rows Styles="Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="&gt;&gt;radioButton_JsonTarget.Parent" xml:space="preserve">
<value>flowLayoutPanel_TargetFormat</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>11, 24</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 546</value>
</data>
<data name="tableLayoutPanel3.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="textBox_OutputDir.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="skelFileListBox.Size" type="System.Drawing.Size, System.Drawing">
<value>948, 410</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="&gt;&gt;button_Cancel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
<value>104, 24</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>1050, 702</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>86, 24</value>
</data>
<data name="&gt;&gt;label4.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;button_SelectOutputDir.Name" xml:space="preserve">
<value>button_SelectOutputDir</value>
</data>
<data name="panel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;label4.Name" xml:space="preserve">
<value>label4</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="&gt;&gt;comboBox_TargetVersion.Name" xml:space="preserve">
<value>comboBox_TargetVersion</value>
</data>
<data name="&gt;&gt;button_SelectOutputDir.Parent" xml:space="preserve">
<value>tableLayoutPanel3</value>
</data>
<data name="radioButton_JsonTarget.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tableLayoutPanel2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 30, 3, 2</value>
</data>
<data name="tableLayoutPanel2.Size" type="System.Drawing.Size, System.Drawing">
<value>944, 38</value>
</data>
<data name="button_SelectOutputDir.Location" type="System.Drawing.Point, System.Drawing">
<value>805, 2</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAkAEBAAAAEAIABoBAAAlgAAABgYAAABACAAiAkAAP4EAAAgIAAAAQAgAKgQAACGDgAAMDAAAAEA
@@ -3267,4 +3810,94 @@
////////wAAAAAAAB///////
</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>68, 24</value>
</data>
<data name="label5.Text" xml:space="preserve">
<value>输出文件夹:</value>
</data>
<data name="tableLayoutPanel2.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Name" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="tableLayoutPanel2.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>50, 14</value>
</data>
<data name="comboBox_TargetVersion.TabIndex" type="System.Int32, mscorlib">
<value>21</value>
</data>
<data name="button_SelectOutputDir.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value>
</data>
<data name="&gt;&gt;comboBox_TargetVersion.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="button_Ok.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="&gt;&gt;panel.Name" xml:space="preserve">
<value>panel</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="label4.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>15, 14, 15, 14</value>
</data>
<data name="button_Cancel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>30, 2, 3, 2</value>
</data>
<data name="radioButton_JsonTarget.Text" xml:space="preserve">
<value>文本 (*.json)</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>目标格式:</value>
</data>
<data name="&gt;&gt;radioButton_BinaryTarget.Parent" xml:space="preserve">
<value>flowLayoutPanel_TargetFormat</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="&gt;&gt;button_Cancel.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="comboBox_TargetVersion.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="&gt;&gt;panel.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;comboBox_TargetVersion.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>目标版本:</value>
</data>
<data name="&gt;&gt;skelFileListBox.Type" xml:space="preserve">
<value>SpineViewer.Controls.SkelFileListBox, SpineViewer, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="radioButton_BinaryTarget.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;textBox_OutputDir.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel3.TabIndex" type="System.Int32, mscorlib">
<value>22</value>
</data>
<data name="button_SelectOutputDir.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<metadata name="folderBrowserDialog_Output.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>36, 22</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -20,96 +20,68 @@
base.Dispose(disposing);
}
#region Windows Form Designer generated code
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DiagnosticsDialog));
panel1 = new Panel();
tableLayoutPanel1 = new TableLayoutPanel();
button_Copy = new Button();
propertyGrid = new PropertyGrid();
panel1.SuspendLayout();
tableLayoutPanel1.SuspendLayout();
SuspendLayout();
//
// panel1
//
panel1.Controls.Add(tableLayoutPanel1);
panel1.Dock = DockStyle.Fill;
panel1.Location = new Point(0, 0);
panel1.Name = "panel1";
panel1.Padding = new Padding(50, 15, 50, 10);
panel1.Size = new Size(901, 452);
panel1.TabIndex = 1;
//
// tableLayoutPanel1
//
tableLayoutPanel1.AutoSize = true;
tableLayoutPanel1.ColumnCount = 1;
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
tableLayoutPanel1.Controls.Add(button_Copy, 0, 1);
tableLayoutPanel1.Controls.Add(propertyGrid, 0, 0);
tableLayoutPanel1.Dock = DockStyle.Fill;
tableLayoutPanel1.Location = new Point(50, 15);
tableLayoutPanel1.Name = "tableLayoutPanel1";
tableLayoutPanel1.RowCount = 2;
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.Size = new Size(801, 427);
tableLayoutPanel1.TabIndex = 0;
//
// button_Copy
//
button_Copy.Anchor = AnchorStyles.None;
button_Copy.AutoSize = true;
button_Copy.Location = new Point(326, 390);
button_Copy.Margin = new Padding(3, 10, 3, 3);
button_Copy.Name = "button_Copy";
button_Copy.Padding = new Padding(10, 0, 10, 0);
button_Copy.Size = new Size(148, 34);
button_Copy.TabIndex = 12;
button_Copy.Text = "复制到剪贴板";
button_Copy.UseVisualStyleBackColor = true;
button_Copy.Click += button_Copy_Click;
//
// propertyGrid
//
propertyGrid.Dock = DockStyle.Fill;
propertyGrid.HelpVisible = false;
propertyGrid.Location = new Point(3, 3);
propertyGrid.Name = "propertyGrid";
propertyGrid.Size = new Size(795, 374);
propertyGrid.TabIndex = 13;
propertyGrid.ToolbarVisible = false;
//
// DiagnosticsDialog
//
AutoScaleDimensions = new SizeF(11F, 24F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(901, 452);
Controls.Add(panel1);
Icon = (Icon)resources.GetObject("$this.Icon");
MaximizeBox = false;
MinimizeBox = false;
Name = "DiagnosticsDialog";
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterScreen;
Text = "诊断信息";
panel1.ResumeLayout(false);
panel1.PerformLayout();
tableLayoutPanel1.ResumeLayout(false);
tableLayoutPanel1.PerformLayout();
ResumeLayout(false);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DiagnosticsDialog));
panel1 = new Panel();
tableLayoutPanel1 = new TableLayoutPanel();
button_Copy = new Button();
propertyGrid = new PropertyGrid();
panel1.SuspendLayout();
tableLayoutPanel1.SuspendLayout();
SuspendLayout();
//
// panel1
//
resources.ApplyResources(panel1, "panel1");
panel1.Controls.Add(tableLayoutPanel1);
panel1.Name = "panel1";
//
// tableLayoutPanel1
//
resources.ApplyResources(tableLayoutPanel1, "tableLayoutPanel1");
tableLayoutPanel1.Controls.Add(button_Copy, 0, 1);
tableLayoutPanel1.Controls.Add(propertyGrid, 0, 0);
tableLayoutPanel1.Name = "tableLayoutPanel1";
//
// button_Copy
//
resources.ApplyResources(button_Copy, "button_Copy");
button_Copy.Name = "button_Copy";
button_Copy.UseVisualStyleBackColor = true;
button_Copy.Click += button_Copy_Click;
//
// propertyGrid
//
resources.ApplyResources(propertyGrid, "propertyGrid");
propertyGrid.Name = "propertyGrid";
propertyGrid.ToolbarVisible = false;
//
// DiagnosticsDialog
//
resources.ApplyResources(this, "$this");
AutoScaleMode = AutoScaleMode.Font;
Controls.Add(panel1);
MaximizeBox = false;
MinimizeBox = false;
Name = "DiagnosticsDialog";
ShowInTaskbar = false;
panel1.ResumeLayout(false);
panel1.PerformLayout();
tableLayoutPanel1.ResumeLayout(false);
tableLayoutPanel1.PerformLayout();
ResumeLayout(false);
}
#endregion
#endregion
private Panel panel1;
private Panel panel1;
private TableLayoutPanel tableLayoutPanel1;
private Button button_Copy;
private PropertyGrid propertyGrid;

View File

@@ -93,7 +93,7 @@ namespace SpineViewer.Dialogs
var properties = selectedObject.GetType().GetProperties();
var result = string.Join(Environment.NewLine, properties.Select(p => $"{p.Name}\t{p.GetValue(selectedObject)?.ToString()}"));
Clipboard.SetText(result);
MessagePopup.Info("已复制");
MessagePopup.Info("已复制", Properties.Resources.msgBoxInfo);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -117,7 +117,36 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="button_Copy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>None</value>
</data>
<data name="&gt;&gt;button_Copy.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="button_Copy.Size" type="System.Drawing.Size, System.Drawing">
<value>124, 30</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>8, 20</value>
</data>
<data name="propertyGrid.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 2</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>panel1</value>
</data>
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAkAEBAAAAEAIABoBAAAlgAAABgYAAABACAAiAkAAP4EAAAgIAAAAQAgAKgQAACGDgAAMDAAAAEA
@@ -3264,4 +3293,140 @@
////////wAAAAAAAB///////
</value>
</data>
<data name="&gt;&gt;panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;button_Copy.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="button_Copy.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 8, 2, 2</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>诊断信息</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="button_Copy.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;propertyGrid.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="tableLayoutPanel1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="button_Copy" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="propertyGrid" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="Percent,100,AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Copy.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Name" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;propertyGrid.Name" xml:space="preserve">
<value>propertyGrid</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel1.Name" xml:space="preserve">
<value>panel1</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>655, 377</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>DiagnosticsDialog</value>
</data>
<data name="propertyGrid.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="button_Copy.Text" xml:space="preserve">
<value>复制到剪贴板</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>655, 377</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="propertyGrid.Size" type="System.Drawing.Size, System.Drawing">
<value>579, 313</value>
</data>
<data name="&gt;&gt;button_Copy.Name" xml:space="preserve">
<value>button_Copy</value>
</data>
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;button_Copy.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="propertyGrid.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="button_Copy.Location" type="System.Drawing.Point, System.Drawing">
<value>229, 325</value>
</data>
<data name="&gt;&gt;propertyGrid.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;propertyGrid.Type" xml:space="preserve">
<value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Copy.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>7, 0, 7, 0</value>
</data>
<data name="propertyGrid.HelpVisible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="tableLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="panel1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>36, 12, 36, 8</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>583, 357</value>
</data>
<data name="panel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="propertyGrid.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>36, 12</value>
</data>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, System.Private.CoreLib, Culture=neutral, PublicKeyToken=7cec85d7bea7798e">
<value>en</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -20,132 +20,89 @@
base.Dispose(disposing);
}
#region Windows Form Designer generated code
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ExportDialog));
panel1 = new Panel();
tableLayoutPanel1 = new TableLayoutPanel();
propertyGrid_ExportArgs = new PropertyGrid();
tableLayoutPanel2 = new TableLayoutPanel();
button_Ok = new Button();
button_Cancel = new Button();
panel1.SuspendLayout();
tableLayoutPanel1.SuspendLayout();
tableLayoutPanel2.SuspendLayout();
SuspendLayout();
//
// panel1
//
panel1.Controls.Add(tableLayoutPanel1);
panel1.Dock = DockStyle.Fill;
panel1.Location = new Point(0, 0);
panel1.Name = "panel1";
panel1.Padding = new Padding(50, 15, 50, 10);
panel1.Size = new Size(793, 841);
panel1.TabIndex = 2;
//
// tableLayoutPanel1
//
tableLayoutPanel1.AutoSize = true;
tableLayoutPanel1.ColumnCount = 1;
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
tableLayoutPanel1.Controls.Add(propertyGrid_ExportArgs, 0, 0);
tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 0, 1);
tableLayoutPanel1.Dock = DockStyle.Fill;
tableLayoutPanel1.Location = new Point(50, 15);
tableLayoutPanel1.Name = "tableLayoutPanel1";
tableLayoutPanel1.RowCount = 2;
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
tableLayoutPanel1.Size = new Size(693, 816);
tableLayoutPanel1.TabIndex = 0;
//
// propertyGrid_ExportArgs
//
propertyGrid_ExportArgs.Dock = DockStyle.Fill;
propertyGrid_ExportArgs.Location = new Point(3, 3);
propertyGrid_ExportArgs.Name = "propertyGrid_ExportArgs";
propertyGrid_ExportArgs.PropertySort = PropertySort.Categorized;
propertyGrid_ExportArgs.Size = new Size(687, 737);
propertyGrid_ExportArgs.TabIndex = 1;
propertyGrid_ExportArgs.ToolbarVisible = false;
//
// tableLayoutPanel2
//
tableLayoutPanel2.AutoSize = true;
tableLayoutPanel2.AutoSizeMode = AutoSizeMode.GrowAndShrink;
tableLayoutPanel2.ColumnCount = 2;
tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
tableLayoutPanel2.Controls.Add(button_Ok, 0, 0);
tableLayoutPanel2.Controls.Add(button_Cancel, 1, 0);
tableLayoutPanel2.Dock = DockStyle.Bottom;
tableLayoutPanel2.Location = new Point(3, 773);
tableLayoutPanel2.Margin = new Padding(3, 30, 3, 3);
tableLayoutPanel2.Name = "tableLayoutPanel2";
tableLayoutPanel2.RowCount = 1;
tableLayoutPanel2.RowStyles.Add(new RowStyle());
tableLayoutPanel2.Size = new Size(687, 40);
tableLayoutPanel2.TabIndex = 10;
//
// button_Ok
//
button_Ok.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
button_Ok.Location = new Point(201, 3);
button_Ok.Margin = new Padding(3, 3, 30, 3);
button_Ok.Name = "button_Ok";
button_Ok.Size = new Size(112, 34);
button_Ok.TabIndex = 7;
button_Ok.Text = "确认";
button_Ok.UseVisualStyleBackColor = true;
button_Ok.Click += button_Ok_Click;
//
// button_Cancel
//
button_Cancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
button_Cancel.Location = new Point(373, 3);
button_Cancel.Margin = new Padding(30, 3, 3, 3);
button_Cancel.Name = "button_Cancel";
button_Cancel.Size = new Size(112, 34);
button_Cancel.TabIndex = 8;
button_Cancel.Text = "取消";
button_Cancel.UseVisualStyleBackColor = true;
button_Cancel.Click += button_Cancel_Click;
//
// ExportDialog
//
AcceptButton = button_Ok;
AutoScaleDimensions = new SizeF(11F, 24F);
AutoScaleMode = AutoScaleMode.Font;
CancelButton = button_Cancel;
ClientSize = new Size(793, 841);
Controls.Add(panel1);
Icon = (Icon)resources.GetObject("$this.Icon");
MaximizeBox = false;
MinimizeBox = false;
Name = "ExportDialog";
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterScreen;
Text = "导出参数";
panel1.ResumeLayout(false);
panel1.PerformLayout();
tableLayoutPanel1.ResumeLayout(false);
tableLayoutPanel1.PerformLayout();
tableLayoutPanel2.ResumeLayout(false);
ResumeLayout(false);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ExportDialog));
panel1 = new Panel();
tableLayoutPanel1 = new TableLayoutPanel();
propertyGrid_ExportArgs = new PropertyGrid();
tableLayoutPanel2 = new TableLayoutPanel();
button_Ok = new Button();
button_Cancel = new Button();
panel1.SuspendLayout();
tableLayoutPanel1.SuspendLayout();
tableLayoutPanel2.SuspendLayout();
SuspendLayout();
//
// panel1
//
resources.ApplyResources(panel1, "panel1");
panel1.Controls.Add(tableLayoutPanel1);
panel1.Name = "panel1";
//
// tableLayoutPanel1
//
resources.ApplyResources(tableLayoutPanel1, "tableLayoutPanel1");
tableLayoutPanel1.Controls.Add(propertyGrid_ExportArgs, 0, 0);
tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 0, 1);
tableLayoutPanel1.Name = "tableLayoutPanel1";
//
// propertyGrid_ExportArgs
//
resources.ApplyResources(propertyGrid_ExportArgs, "propertyGrid_ExportArgs");
propertyGrid_ExportArgs.Name = "propertyGrid_ExportArgs";
propertyGrid_ExportArgs.PropertySort = PropertySort.Categorized;
propertyGrid_ExportArgs.ToolbarVisible = false;
//
// tableLayoutPanel2
//
resources.ApplyResources(tableLayoutPanel2, "tableLayoutPanel2");
tableLayoutPanel2.Controls.Add(button_Ok, 0, 0);
tableLayoutPanel2.Controls.Add(button_Cancel, 1, 0);
tableLayoutPanel2.Name = "tableLayoutPanel2";
//
// button_Ok
//
resources.ApplyResources(button_Ok, "button_Ok");
button_Ok.Name = "button_Ok";
button_Ok.UseVisualStyleBackColor = true;
button_Ok.Click += button_Ok_Click;
//
// button_Cancel
//
resources.ApplyResources(button_Cancel, "button_Cancel");
button_Cancel.Name = "button_Cancel";
button_Cancel.UseVisualStyleBackColor = true;
button_Cancel.Click += button_Cancel_Click;
//
// ExportDialog
//
AcceptButton = button_Ok;
resources.ApplyResources(this, "$this");
AutoScaleMode = AutoScaleMode.Font;
CancelButton = button_Cancel;
Controls.Add(panel1);
MaximizeBox = false;
MinimizeBox = false;
Name = "ExportDialog";
ShowInTaskbar = false;
panel1.ResumeLayout(false);
panel1.PerformLayout();
tableLayoutPanel1.ResumeLayout(false);
tableLayoutPanel1.PerformLayout();
tableLayoutPanel2.ResumeLayout(false);
ResumeLayout(false);
}
#endregion
#endregion
private Panel panel1;
private Panel panel1;
private TableLayoutPanel tableLayoutPanel1;
private TableLayoutPanel tableLayoutPanel2;
private Button button_Ok;

View File

@@ -65,7 +65,7 @@ namespace SpineViewer.Dialogs
{
if (wrapper.Exporter.Validate() is string error)
{
MessagePopup.Info(error, "参数错误");
MessagePopup.Info(error, Properties.Resources.parameterError);
return;
}
DialogResult = DialogResult.OK;

File diff suppressed because it is too large Load Diff

View File

@@ -117,7 +117,100 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="button_Ok.Text" xml:space="preserve">
<value>确认</value>
</data>
<data name="&gt;&gt;panel1.Name" xml:space="preserve">
<value>panel1</value>
</data>
<data name="button_Cancel.Text" xml:space="preserve">
<value>取消</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="button_Ok.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="&gt;&gt;propertyGrid_ExportArgs.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>导出参数</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="propertyGrid_ExportArgs.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 2</value>
</data>
<data name="button_Ok.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 28</value>
</data>
<data name="&gt;&gt;propertyGrid_ExportArgs.Type" xml:space="preserve">
<value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>8, 20</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>577, 701</value>
</data>
<data name="&gt;&gt;propertyGrid_ExportArgs.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel2.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>ExportDialog</value>
</data>
<data name="propertyGrid_ExportArgs.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="tableLayoutPanel2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 25, 2, 2</value>
</data>
<data name="tableLayoutPanel2.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="&gt;&gt;panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="propertyGrid_ExportArgs.Size" type="System.Drawing.Size, System.Drawing">
<value>501, 618</value>
</data>
<data name="&gt;&gt;button_Ok.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>505, 681</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Name" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tableLayoutPanel2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;button_Cancel.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAkAEBAAAAEAIABoBAAAlgAAABgYAAABACAAiAkAAP4EAAAgIAAAAQAgAKgQAACGDgAAMDAAAAEA
@@ -3264,4 +3357,139 @@
////////wAAAAAAAB///////
</value>
</data>
<data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel2.Size" type="System.Drawing.Size, System.Drawing">
<value>501, 32</value>
</data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>577, 701</value>
</data>
<data name="button_Cancel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>22, 2, 2, 2</value>
</data>
<data name="button_Ok.Location" type="System.Drawing.Point, System.Drawing">
<value>147, 2</value>
</data>
<data name="tableLayoutPanel2.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 647</value>
</data>
<data name="button_Cancel.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 28</value>
</data>
<data name="panel1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>36, 12, 36, 8</value>
</data>
<data name="&gt;&gt;button_Cancel.Name" xml:space="preserve">
<value>button_Cancel</value>
</data>
<data name="&gt;&gt;propertyGrid_ExportArgs.Name" xml:space="preserve">
<value>propertyGrid_ExportArgs</value>
</data>
<data name="button_Cancel.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="button_Cancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Name" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="tableLayoutPanel1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;button_Ok.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>panel1</value>
</data>
<data name="tableLayoutPanel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="button_Cancel.Location" type="System.Drawing.Point, System.Drawing">
<value>272, 2</value>
</data>
<data name="&gt;&gt;button_Cancel.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="propertyGrid_ExportArgs" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="tableLayoutPanel2" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="Percent,100,AutoSize,0,Absolute,17,Absolute,17" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>36, 12</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="button_Ok.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 22, 2</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="propertyGrid_ExportArgs.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="panel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="button_Ok.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="tableLayoutPanel2.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;button_Ok.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="tableLayoutPanel2.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="button_Ok" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="button_Cancel" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,50,Percent,50" /&gt;&lt;Rows Styles="AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="&gt;&gt;button_Cancel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="tableLayoutPanel2.RowCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;button_Ok.Name" xml:space="preserve">
<value>button_Ok</value>
</data>
<data name="propertyGrid_ExportArgs.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, System.Private.CoreLib, Culture=neutral, PublicKeyToken=7cec85d7bea7798e">
<value>en</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -20,256 +20,170 @@
base.Dispose(disposing);
}
#region Windows Form Designer generated code
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OpenSpineDialog));
panel1 = new Panel();
tableLayoutPanel1 = new TableLayoutPanel();
label4 = new Label();
label1 = new Label();
label2 = new Label();
label3 = new Label();
textBox_SkelPath = new TextBox();
button_SelectSkel = new Button();
button_SelectAtlas = new Button();
comboBox_Version = new ComboBox();
textBox_AtlasPath = new TextBox();
tableLayoutPanel2 = new TableLayoutPanel();
button_Ok = new Button();
button_Cancel = new Button();
openFileDialog_Skel = new OpenFileDialog();
openFileDialog_Atlas = new OpenFileDialog();
panel1.SuspendLayout();
tableLayoutPanel1.SuspendLayout();
tableLayoutPanel2.SuspendLayout();
SuspendLayout();
//
// panel1
//
panel1.Controls.Add(tableLayoutPanel1);
panel1.Dock = DockStyle.Fill;
panel1.Location = new Point(0, 0);
panel1.Name = "panel1";
panel1.Padding = new Padding(50, 15, 50, 10);
panel1.Size = new Size(907, 286);
panel1.TabIndex = 0;
//
// tableLayoutPanel1
//
tableLayoutPanel1.AutoSize = true;
tableLayoutPanel1.ColumnCount = 4;
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle());
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle());
tableLayoutPanel1.Controls.Add(label4, 0, 0);
tableLayoutPanel1.Controls.Add(label1, 0, 1);
tableLayoutPanel1.Controls.Add(label2, 0, 2);
tableLayoutPanel1.Controls.Add(label3, 0, 3);
tableLayoutPanel1.Controls.Add(textBox_SkelPath, 1, 1);
tableLayoutPanel1.Controls.Add(button_SelectSkel, 3, 1);
tableLayoutPanel1.Controls.Add(button_SelectAtlas, 3, 2);
tableLayoutPanel1.Controls.Add(comboBox_Version, 1, 3);
tableLayoutPanel1.Controls.Add(textBox_AtlasPath, 1, 2);
tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 0, 4);
tableLayoutPanel1.Dock = DockStyle.Fill;
tableLayoutPanel1.Location = new Point(50, 15);
tableLayoutPanel1.Name = "tableLayoutPanel1";
tableLayoutPanel1.RowCount = 5;
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.Size = new Size(807, 261);
tableLayoutPanel1.TabIndex = 0;
//
// label4
//
label4.AutoSize = true;
tableLayoutPanel1.SetColumnSpan(label4, 4);
label4.Dock = DockStyle.Fill;
label4.Location = new Point(15, 15);
label4.Margin = new Padding(15);
label4.Name = "label4";
label4.Size = new Size(777, 24);
label4.TabIndex = 11;
label4.Text = "说明如果没有选择atlas则会自动读取与skel同目录下同名的atlas文件";
label4.TextAlign = ContentAlignment.MiddleCenter;
//
// label1
//
label1.Anchor = AnchorStyles.Right;
label1.AutoSize = true;
label1.Location = new Point(10, 62);
label1.Name = "label1";
label1.Size = new Size(119, 24);
label1.TabIndex = 0;
label1.Text = "skel文件路径:";
//
// label2
//
label2.Anchor = AnchorStyles.Right;
label2.AutoSize = true;
label2.Location = new Point(3, 102);
label2.Name = "label2";
label2.Size = new Size(126, 24);
label2.TabIndex = 1;
label2.Text = "atlas文件路径:";
//
// label3
//
label3.Anchor = AnchorStyles.Right;
label3.AutoSize = true;
label3.Location = new Point(79, 141);
label3.Name = "label3";
label3.Size = new Size(50, 24);
label3.TabIndex = 2;
label3.Text = "版本:";
//
// textBox_SkelPath
//
tableLayoutPanel1.SetColumnSpan(textBox_SkelPath, 2);
textBox_SkelPath.Dock = DockStyle.Fill;
textBox_SkelPath.Location = new Point(135, 57);
textBox_SkelPath.Name = "textBox_SkelPath";
textBox_SkelPath.Size = new Size(630, 30);
textBox_SkelPath.TabIndex = 3;
//
// button_SelectSkel
//
button_SelectSkel.AutoSize = true;
button_SelectSkel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
button_SelectSkel.Location = new Point(771, 57);
button_SelectSkel.Name = "button_SelectSkel";
button_SelectSkel.Size = new Size(32, 34);
button_SelectSkel.TabIndex = 5;
button_SelectSkel.Text = "...";
button_SelectSkel.UseVisualStyleBackColor = true;
button_SelectSkel.Click += button_SelectSkel_Click;
//
// button_SelectAtlas
//
button_SelectAtlas.AutoSize = true;
button_SelectAtlas.AutoSizeMode = AutoSizeMode.GrowAndShrink;
button_SelectAtlas.Location = new Point(771, 97);
button_SelectAtlas.Name = "button_SelectAtlas";
button_SelectAtlas.Size = new Size(32, 34);
button_SelectAtlas.TabIndex = 6;
button_SelectAtlas.Text = "...";
button_SelectAtlas.UseVisualStyleBackColor = true;
button_SelectAtlas.Click += button_SelectAtlas_Click;
//
// comboBox_Version
//
comboBox_Version.Anchor = AnchorStyles.Left;
comboBox_Version.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox_Version.FormattingEnabled = true;
comboBox_Version.Location = new Point(135, 137);
comboBox_Version.Name = "comboBox_Version";
comboBox_Version.Size = new Size(182, 32);
comboBox_Version.Sorted = true;
comboBox_Version.TabIndex = 9;
//
// textBox_AtlasPath
//
tableLayoutPanel1.SetColumnSpan(textBox_AtlasPath, 2);
textBox_AtlasPath.Dock = DockStyle.Fill;
textBox_AtlasPath.Location = new Point(135, 97);
textBox_AtlasPath.Name = "textBox_AtlasPath";
textBox_AtlasPath.Size = new Size(630, 30);
textBox_AtlasPath.TabIndex = 4;
//
// tableLayoutPanel2
//
tableLayoutPanel2.AutoSize = true;
tableLayoutPanel2.AutoSizeMode = AutoSizeMode.GrowAndShrink;
tableLayoutPanel2.ColumnCount = 2;
tableLayoutPanel1.SetColumnSpan(tableLayoutPanel2, 4);
tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
tableLayoutPanel2.Controls.Add(button_Ok, 0, 0);
tableLayoutPanel2.Controls.Add(button_Cancel, 1, 0);
tableLayoutPanel2.Dock = DockStyle.Bottom;
tableLayoutPanel2.Location = new Point(3, 218);
tableLayoutPanel2.Name = "tableLayoutPanel2";
tableLayoutPanel2.RowCount = 1;
tableLayoutPanel2.RowStyles.Add(new RowStyle());
tableLayoutPanel2.Size = new Size(801, 40);
tableLayoutPanel2.TabIndex = 10;
//
// button_Ok
//
button_Ok.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
button_Ok.Location = new Point(258, 3);
button_Ok.Margin = new Padding(3, 3, 30, 3);
button_Ok.Name = "button_Ok";
button_Ok.Size = new Size(112, 34);
button_Ok.TabIndex = 7;
button_Ok.Text = "确认";
button_Ok.UseVisualStyleBackColor = true;
button_Ok.Click += button_Ok_Click;
//
// button_Cancel
//
button_Cancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
button_Cancel.Location = new Point(430, 3);
button_Cancel.Margin = new Padding(30, 3, 3, 3);
button_Cancel.Name = "button_Cancel";
button_Cancel.Size = new Size(112, 34);
button_Cancel.TabIndex = 8;
button_Cancel.Text = "取消";
button_Cancel.UseVisualStyleBackColor = true;
button_Cancel.Click += button_Cancel_Click;
//
// openFileDialog_Skel
//
openFileDialog_Skel.AddExtension = false;
openFileDialog_Skel.AddToRecent = false;
openFileDialog_Skel.Filter = "所有文件 (*.*)|*.*|skel 文件 (*.skel; *.json)|*.skel;*.json";
openFileDialog_Skel.Title = "选择skel文件";
//
// openFileDialog_Atlas
//
openFileDialog_Atlas.AddExtension = false;
openFileDialog_Atlas.AddToRecent = false;
openFileDialog_Atlas.Filter = "所有文件 (*.*)|*.*|atlas 文件 (*.atlas)|*.atlas";
openFileDialog_Atlas.Title = "选择atlas文件";
//
// OpenSpineDialog
//
AcceptButton = button_Ok;
AutoScaleDimensions = new SizeF(11F, 24F);
AutoScaleMode = AutoScaleMode.Font;
CancelButton = button_Cancel;
ClientSize = new Size(907, 286);
Controls.Add(panel1);
FormBorderStyle = FormBorderStyle.FixedDialog;
Icon = (Icon)resources.GetObject("$this.Icon");
MaximizeBox = false;
MinimizeBox = false;
Name = "OpenSpineDialog";
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterScreen;
Text = "打开骨骼";
Load += OpenSpineDialog_Load;
panel1.ResumeLayout(false);
panel1.PerformLayout();
tableLayoutPanel1.ResumeLayout(false);
tableLayoutPanel1.PerformLayout();
tableLayoutPanel2.ResumeLayout(false);
ResumeLayout(false);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OpenSpineDialog));
panel1 = new Panel();
tableLayoutPanel1 = new TableLayoutPanel();
label4 = new Label();
label1 = new Label();
label2 = new Label();
label3 = new Label();
textBox_SkelPath = new TextBox();
button_SelectSkel = new Button();
button_SelectAtlas = new Button();
comboBox_Version = new ComboBox();
textBox_AtlasPath = new TextBox();
tableLayoutPanel2 = new TableLayoutPanel();
button_Ok = new Button();
button_Cancel = new Button();
openFileDialog_Skel = new OpenFileDialog();
openFileDialog_Atlas = new OpenFileDialog();
panel1.SuspendLayout();
tableLayoutPanel1.SuspendLayout();
tableLayoutPanel2.SuspendLayout();
SuspendLayout();
//
// panel1
//
resources.ApplyResources(panel1, "panel1");
panel1.Controls.Add(tableLayoutPanel1);
panel1.Name = "panel1";
//
// tableLayoutPanel1
//
resources.ApplyResources(tableLayoutPanel1, "tableLayoutPanel1");
tableLayoutPanel1.Controls.Add(label4, 0, 0);
tableLayoutPanel1.Controls.Add(label1, 0, 1);
tableLayoutPanel1.Controls.Add(label2, 0, 2);
tableLayoutPanel1.Controls.Add(label3, 0, 3);
tableLayoutPanel1.Controls.Add(textBox_SkelPath, 1, 1);
tableLayoutPanel1.Controls.Add(button_SelectSkel, 3, 1);
tableLayoutPanel1.Controls.Add(button_SelectAtlas, 3, 2);
tableLayoutPanel1.Controls.Add(comboBox_Version, 1, 3);
tableLayoutPanel1.Controls.Add(textBox_AtlasPath, 1, 2);
tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 0, 4);
tableLayoutPanel1.Name = "tableLayoutPanel1";
//
// label4
//
resources.ApplyResources(label4, "label4");
tableLayoutPanel1.SetColumnSpan(label4, 4);
label4.Name = "label4";
//
// label1
//
resources.ApplyResources(label1, "label1");
label1.Name = "label1";
//
// label2
//
resources.ApplyResources(label2, "label2");
label2.Name = "label2";
//
// label3
//
resources.ApplyResources(label3, "label3");
label3.Name = "label3";
//
// textBox_SkelPath
//
resources.ApplyResources(textBox_SkelPath, "textBox_SkelPath");
tableLayoutPanel1.SetColumnSpan(textBox_SkelPath, 2);
textBox_SkelPath.Name = "textBox_SkelPath";
//
// button_SelectSkel
//
resources.ApplyResources(button_SelectSkel, "button_SelectSkel");
button_SelectSkel.Name = "button_SelectSkel";
button_SelectSkel.UseVisualStyleBackColor = true;
button_SelectSkel.Click += button_SelectSkel_Click;
//
// button_SelectAtlas
//
resources.ApplyResources(button_SelectAtlas, "button_SelectAtlas");
button_SelectAtlas.Name = "button_SelectAtlas";
button_SelectAtlas.UseVisualStyleBackColor = true;
button_SelectAtlas.Click += button_SelectAtlas_Click;
//
// comboBox_Version
//
resources.ApplyResources(comboBox_Version, "comboBox_Version");
comboBox_Version.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox_Version.FormattingEnabled = true;
comboBox_Version.Name = "comboBox_Version";
comboBox_Version.Sorted = true;
//
// textBox_AtlasPath
//
resources.ApplyResources(textBox_AtlasPath, "textBox_AtlasPath");
tableLayoutPanel1.SetColumnSpan(textBox_AtlasPath, 2);
textBox_AtlasPath.Name = "textBox_AtlasPath";
//
// tableLayoutPanel2
//
resources.ApplyResources(tableLayoutPanel2, "tableLayoutPanel2");
tableLayoutPanel1.SetColumnSpan(tableLayoutPanel2, 4);
tableLayoutPanel2.Controls.Add(button_Ok, 0, 0);
tableLayoutPanel2.Controls.Add(button_Cancel, 1, 0);
tableLayoutPanel2.Name = "tableLayoutPanel2";
//
// button_Ok
//
resources.ApplyResources(button_Ok, "button_Ok");
button_Ok.Name = "button_Ok";
button_Ok.UseVisualStyleBackColor = true;
button_Ok.Click += button_Ok_Click;
//
// button_Cancel
//
resources.ApplyResources(button_Cancel, "button_Cancel");
button_Cancel.Name = "button_Cancel";
button_Cancel.UseVisualStyleBackColor = true;
button_Cancel.Click += button_Cancel_Click;
//
// openFileDialog_Skel
//
openFileDialog_Skel.AddExtension = false;
openFileDialog_Skel.AddToRecent = false;
resources.ApplyResources(openFileDialog_Skel, "openFileDialog_Skel");
//
// openFileDialog_Atlas
//
openFileDialog_Atlas.AddExtension = false;
openFileDialog_Atlas.AddToRecent = false;
resources.ApplyResources(openFileDialog_Atlas, "openFileDialog_Atlas");
//
// OpenSpineDialog
//
AcceptButton = button_Ok;
resources.ApplyResources(this, "$this");
AutoScaleMode = AutoScaleMode.Font;
CancelButton = button_Cancel;
Controls.Add(panel1);
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
Name = "OpenSpineDialog";
ShowInTaskbar = false;
Load += OpenSpineDialog_Load;
panel1.ResumeLayout(false);
panel1.PerformLayout();
tableLayoutPanel1.ResumeLayout(false);
tableLayoutPanel1.PerformLayout();
tableLayoutPanel2.ResumeLayout(false);
ResumeLayout(false);
}
#endregion
#endregion
private Panel panel1;
private Panel panel1;
private TableLayoutPanel tableLayoutPanel1;
private Label label1;
private Label label2;

View File

@@ -58,7 +58,7 @@ namespace SpineViewer.Dialogs
if (!File.Exists(skelPath))
{
MessagePopup.Info($"{skelPath}", "skel文件不存在");
MessagePopup.Info($"{skelPath}", Properties.Resources.skelNotExist);
return;
}
else
@@ -72,7 +72,7 @@ namespace SpineViewer.Dialogs
}
else if (!File.Exists(atlasPath))
{
MessagePopup.Info($"{atlasPath}", "atlas文件不存在");
MessagePopup.Info($"{atlasPath}", Properties.Resources.atlasNotExist);
return;
}
else
@@ -82,7 +82,7 @@ namespace SpineViewer.Dialogs
if (version != SpineVersion.Auto && !Spine.SpineObject.HasImplementation(version))
{
MessagePopup.Info($"{version.GetName()} 版本尚未实现(咕咕咕~");
MessagePopup.Info($"{version.GetName()} 版本尚未实现(咕咕咕~", Properties.Resources.msgBoxInfo);
return;
}

File diff suppressed because it is too large Load Diff

View File

@@ -117,13 +117,232 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="openFileDialog_Skel.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>58, 25</value>
</metadata>
<metadata name="openFileDialog_Atlas.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>349, 29</value>
</metadata>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="button_SelectSkel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="button_Cancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="&gt;&gt;button_SelectAtlas.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;textBox_AtlasPath.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="label4" Row="0" RowSpan="1" Column="0" ColumnSpan="4" /&gt;&lt;Control Name="label1" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="label2" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="label3" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="textBox_SkelPath" Row="1" RowSpan="1" Column="1" ColumnSpan="2" /&gt;&lt;Control Name="button_SelectSkel" Row="1" RowSpan="1" Column="3" ColumnSpan="1" /&gt;&lt;Control Name="button_SelectAtlas" Row="2" RowSpan="1" Column="3" ColumnSpan="1" /&gt;&lt;Control Name="comboBox_Version" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="textBox_AtlasPath" Row="2" RowSpan="1" Column="1" ColumnSpan="2" /&gt;&lt;Control Name="tableLayoutPanel2" Row="4" RowSpan="1" Column="0" ColumnSpan="4" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,Percent,50,Percent,50,AutoSize,0" /&gt;&lt;Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>atlas文件路径:</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="tableLayoutPanel2.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>skel文件路径:</value>
</data>
<data name="&gt;&gt;button_SelectSkel.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="comboBox_Version.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="button_Ok.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 22, 2</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="textBox_SkelPath.Location" type="System.Drawing.Point, System.Drawing">
<value>109, 46</value>
</data>
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;button_SelectAtlas.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="panel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;label4.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="textBox_SkelPath.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;textBox_AtlasPath.Name" xml:space="preserve">
<value>textBox_AtlasPath</value>
</data>
<data name="button_Cancel.Location" type="System.Drawing.Point, System.Drawing">
<value>314, 2</value>
</data>
<data name="comboBox_Version.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 28</value>
</data>
<data name="openFileDialog_Atlas.Filter" xml:space="preserve">
<value>所有文件 (*.*)|*.*|atlas 文件 (*.atlas)|*.atlas</value>
</data>
<data name="tableLayoutPanel2.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="button_SelectSkel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tableLayoutPanel1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;button_SelectSkel.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;button_Cancel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="button_SelectAtlas.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="&gt;&gt;panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel1.Name" xml:space="preserve">
<value>panel1</value>
</data>
<data name="&gt;&gt;openFileDialog_Skel.Type" xml:space="preserve">
<value>System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 85</value>
</data>
<data name="&gt;&gt;textBox_SkelPath.Name" xml:space="preserve">
<value>textBox_SkelPath</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 0, 2, 0</value>
</data>
<data name="&gt;&gt;openFileDialog_Atlas.Name" xml:space="preserve">
<value>openFileDialog_Atlas</value>
</data>
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>566, 20</value>
</data>
<data name="tableLayoutPanel2.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 184</value>
</data>
<data name="textBox_AtlasPath.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;label4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;button_Cancel.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="button_SelectAtlas.Location" type="System.Drawing.Point, System.Drawing">
<value>557, 80</value>
</data>
<data name="button_Ok.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="label3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Right</value>
</data>
<data name="&gt;&gt;panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;button_Cancel.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;button_Ok.Name" xml:space="preserve">
<value>button_Ok</value>
</data>
<data name="button_SelectSkel.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="label1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 0, 2, 0</value>
</data>
<data name="openFileDialog_Skel.Title" xml:space="preserve">
<value>选择skel文件</value>
</data>
<data name="tableLayoutPanel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="textBox_SkelPath.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;button_SelectSkel.Name" xml:space="preserve">
<value>button_SelectSkel</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="tableLayoutPanel2.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="panel1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>36, 12, 36, 8</value>
</data>
<data name="&gt;&gt;textBox_SkelPath.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="textBox_AtlasPath.Size" type="System.Drawing.Size, System.Drawing">
<value>444, 27</value>
</data>
<data name="&gt;&gt;comboBox_Version.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel2.RowCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;textBox_SkelPath.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="&gt;&gt;button_Ok.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;textBox_SkelPath.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="button_SelectAtlas.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>588, 218</value>
</data>
<data name="button_Ok.Location" type="System.Drawing.Point, System.Drawing">
<value>189, 2</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAkAEBAAAAEAIABoBAAAlgAAABgYAAABACAAiAkAAP4EAAAgIAAAAQAgAKgQAACGDgAAMDAAAAEA
@@ -3270,4 +3489,292 @@
////////wAAAAAAAB///////
</value>
</data>
<data name="button_SelectAtlas.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="button_SelectAtlas.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="tableLayoutPanel2.Size" type="System.Drawing.Size, System.Drawing">
<value>584, 32</value>
</data>
<data name="button_Cancel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>22, 2, 2, 2</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>版本:</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="button_Ok.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 28</value>
</data>
<data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;textBox_AtlasPath.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>103, 20</value>
</data>
<data name="tableLayoutPanel2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="button_Ok.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="textBox_SkelPath.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="button_SelectSkel.Location" type="System.Drawing.Point, System.Drawing">
<value>557, 46</value>
</data>
<data name="textBox_AtlasPath.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;label4.Name" xml:space="preserve">
<value>label4</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>OpenSpineDialog</value>
</data>
<data name="&gt;&gt;button_SelectAtlas.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Ok.Text" xml:space="preserve">
<value>确认</value>
</data>
<data name="button_SelectSkel.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;button_SelectSkel.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>说明如果没有选择atlas则会自动读取与skel同目录下同名的atlas文件</value>
</data>
<data name="label4.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>11, 12, 11, 12</value>
</data>
<data name="button_Cancel.Text" xml:space="preserve">
<value>取消</value>
</data>
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
<value>11, 12</value>
</data>
<data name="button_SelectAtlas.Size" type="System.Drawing.Size, System.Drawing">
<value>28, 30</value>
</data>
<data name="button_SelectAtlas.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="tableLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="label1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Right</value>
</data>
<data name="openFileDialog_Atlas.Title" xml:space="preserve">
<value>选择atlas文件</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tableLayoutPanel2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;openFileDialog_Atlas.Type" xml:space="preserve">
<value>System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="&gt;&gt;comboBox_Version.Name" xml:space="preserve">
<value>comboBox_Version</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>63, 118</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>660, 238</value>
</data>
<data name="comboBox_Version.Location" type="System.Drawing.Point, System.Drawing">
<value>109, 114</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>97, 20</value>
</data>
<data name="label4.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="label4.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleCenter</value>
</data>
<data name="&gt;&gt;comboBox_Version.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="button_Cancel.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Name" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="tableLayoutPanel2.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="button_Ok" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="button_Cancel" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,50,Percent,50" /&gt;&lt;Rows Styles="AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Name" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="textBox_AtlasPath.Location" type="System.Drawing.Point, System.Drawing">
<value>109, 80</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;button_Cancel.Name" xml:space="preserve">
<value>button_Cancel</value>
</data>
<data name="button_SelectSkel.Size" type="System.Drawing.Size, System.Drawing">
<value>28, 30</value>
</data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="comboBox_Version.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;button_Ok.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;comboBox_Version.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="label2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Right</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="textBox_SkelPath.Size" type="System.Drawing.Size, System.Drawing">
<value>444, 27</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>42, 20</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>8, 20</value>
</data>
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="button_Cancel.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 28</value>
</data>
<data name="&gt;&gt;button_SelectAtlas.Name" xml:space="preserve">
<value>button_SelectAtlas</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>打开骨骼</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 51</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>36, 12</value>
</data>
<data name="&gt;&gt;openFileDialog_Skel.Name" xml:space="preserve">
<value>openFileDialog_Skel</value>
</data>
<data name="openFileDialog_Skel.Filter" xml:space="preserve">
<value>所有文件 (*.*)|*.*|skel 文件 (*.skel; *.json)|*.skel;*.json</value>
</data>
<data name="label3.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 0, 2, 0</value>
</data>
<data name="label4.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>660, 238</value>
</data>
<data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;button_Ok.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="&gt;&gt;textBox_AtlasPath.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="textBox_AtlasPath.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="button_SelectSkel.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="comboBox_Version.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>panel1</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, System.Private.CoreLib, Culture=neutral, PublicKeyToken=7cec85d7bea7798e">
<value>en</value>
</metadata>
<metadata name="openFileDialog_Atlas.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>349, 29</value>
</metadata>
<metadata name="openFileDialog_Skel.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>58, 25</value>
</metadata>
</root>

View File

@@ -20,114 +20,85 @@
base.Dispose(disposing);
}
#region Windows Form Designer generated code
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
progressBar = new ProgressBar();
panel1 = new Panel();
tableLayoutPanel1 = new TableLayoutPanel();
button_Cancel = new Button();
label_Tip = new Label();
backgroundWorker = new System.ComponentModel.BackgroundWorker();
panel1.SuspendLayout();
tableLayoutPanel1.SuspendLayout();
SuspendLayout();
//
// progressBar
//
progressBar.Dock = DockStyle.Fill;
progressBar.Location = new Point(3, 57);
progressBar.Name = "progressBar";
progressBar.Size = new Size(552, 34);
progressBar.Style = ProgressBarStyle.Continuous;
progressBar.TabIndex = 0;
//
// panel1
//
panel1.Controls.Add(tableLayoutPanel1);
panel1.Dock = DockStyle.Fill;
panel1.Location = new Point(0, 0);
panel1.Name = "panel1";
panel1.Padding = new Padding(30);
panel1.Size = new Size(618, 206);
panel1.TabIndex = 1;
//
// tableLayoutPanel1
//
tableLayoutPanel1.ColumnCount = 1;
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
tableLayoutPanel1.Controls.Add(progressBar, 0, 1);
tableLayoutPanel1.Controls.Add(button_Cancel, 0, 2);
tableLayoutPanel1.Controls.Add(label_Tip, 0, 0);
tableLayoutPanel1.Dock = DockStyle.Fill;
tableLayoutPanel1.Location = new Point(30, 30);
tableLayoutPanel1.Name = "tableLayoutPanel1";
tableLayoutPanel1.RowCount = 3;
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.Size = new Size(558, 146);
tableLayoutPanel1.TabIndex = 1;
//
// button_Cancel
//
button_Cancel.Anchor = AnchorStyles.Bottom;
button_Cancel.Location = new Point(223, 109);
button_Cancel.Margin = new Padding(3, 15, 3, 3);
button_Cancel.Name = "button_Cancel";
button_Cancel.Size = new Size(112, 34);
button_Cancel.TabIndex = 9;
button_Cancel.Text = "取消";
button_Cancel.UseVisualStyleBackColor = true;
button_Cancel.Click += button_Cancel_Click;
//
// label_Tip
//
label_Tip.AutoSize = true;
label_Tip.Dock = DockStyle.Fill;
label_Tip.Location = new Point(3, 10);
label_Tip.Margin = new Padding(3, 10, 3, 10);
label_Tip.Name = "label_Tip";
label_Tip.Size = new Size(552, 34);
label_Tip.TabIndex = 10;
label_Tip.Text = "初始化...";
//
// backgroundWorker
//
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.WorkerSupportsCancellation = true;
backgroundWorker.ProgressChanged += backgroundWorker_ProgressChanged;
backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted;
//
// ProgressDialog
//
AutoScaleDimensions = new SizeF(11F, 24F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(618, 206);
ControlBox = false;
Controls.Add(panel1);
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
Name = "ProgressDialog";
ShowIcon = false;
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterScreen;
Text = "进度";
panel1.ResumeLayout(false);
tableLayoutPanel1.ResumeLayout(false);
tableLayoutPanel1.PerformLayout();
ResumeLayout(false);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProgressDialog));
progressBar = new ProgressBar();
panel1 = new Panel();
tableLayoutPanel1 = new TableLayoutPanel();
button_Cancel = new Button();
label_Tip = new Label();
backgroundWorker = new System.ComponentModel.BackgroundWorker();
panel1.SuspendLayout();
tableLayoutPanel1.SuspendLayout();
SuspendLayout();
//
// progressBar
//
resources.ApplyResources(progressBar, "progressBar");
progressBar.Name = "progressBar";
progressBar.Style = ProgressBarStyle.Continuous;
//
// panel1
//
resources.ApplyResources(panel1, "panel1");
panel1.Controls.Add(tableLayoutPanel1);
panel1.Name = "panel1";
//
// tableLayoutPanel1
//
resources.ApplyResources(tableLayoutPanel1, "tableLayoutPanel1");
tableLayoutPanel1.Controls.Add(progressBar, 0, 1);
tableLayoutPanel1.Controls.Add(button_Cancel, 0, 2);
tableLayoutPanel1.Controls.Add(label_Tip, 0, 0);
tableLayoutPanel1.Name = "tableLayoutPanel1";
//
// button_Cancel
//
resources.ApplyResources(button_Cancel, "button_Cancel");
button_Cancel.Name = "button_Cancel";
button_Cancel.UseVisualStyleBackColor = true;
button_Cancel.Click += button_Cancel_Click;
//
// label_Tip
//
resources.ApplyResources(label_Tip, "label_Tip");
label_Tip.Name = "label_Tip";
//
// backgroundWorker
//
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.WorkerSupportsCancellation = true;
backgroundWorker.ProgressChanged += backgroundWorker_ProgressChanged;
backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted;
//
// ProgressDialog
//
resources.ApplyResources(this, "$this");
AutoScaleMode = AutoScaleMode.Font;
ControlBox = false;
Controls.Add(panel1);
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
Name = "ProgressDialog";
ShowIcon = false;
ShowInTaskbar = false;
panel1.ResumeLayout(false);
tableLayoutPanel1.ResumeLayout(false);
tableLayoutPanel1.PerformLayout();
ResumeLayout(false);
}
#endregion
#endregion
private ProgressBar progressBar;
private ProgressBar progressBar;
private Panel panel1;
private TableLayoutPanel tableLayoutPanel1;
private System.ComponentModel.BackgroundWorker backgroundWorker;

View File

@@ -52,7 +52,7 @@ namespace SpineViewer.Dialogs
if (e.Error != null)
{
logger.Error(e.Error.ToString());
MessagePopup.Error(e.Error.ToString(), "执行出错");
MessagePopup.Error(e.Error.ToString(), Properties.Resources.runtimeError);
DialogResult = DialogResult.Abort;
}
else if (e.Cancelled)

View File

@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="button_Cancel.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="label_Tip.Text" xml:space="preserve">
<value>Initializing...</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Progress</value>
</data>
</root>

View File

@@ -117,6 +117,199 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="&gt;&gt;button_Cancel.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;label_Tip.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="button_Cancel.Text" xml:space="preserve">
<value>取消</value>
</data>
<data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="button_Cancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="&gt;&gt;progressBar.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>panel1</value>
</data>
<data name="&gt;&gt;panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="button_Cancel.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>22, 25</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label_Tip.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 8, 2, 8</value>
</data>
<data name="panel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="&gt;&gt;label_Tip.Name" xml:space="preserve">
<value>label_Tip</value>
</data>
<data name="&gt;&gt;button_Cancel.Name" xml:space="preserve">
<value>button_Cancel</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>8, 20</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="progressBar.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 50</value>
</data>
<data name="label_Tip.Text" xml:space="preserve">
<value>初始化...</value>
</data>
<data name="label_Tip.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="&gt;&gt;backgroundWorker.Type" xml:space="preserve">
<value>System.ComponentModel.BackgroundWorker, System.ComponentModel.EventBasedAsync, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="progressBar" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="button_Cancel" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="label_Tip" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="Percent,100,AutoSize,0,AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Cancel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 12, 2, 2</value>
</data>
<data name="&gt;&gt;button_Cancel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Name" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;progressBar.Type" xml:space="preserve">
<value>System.Windows.Forms.ProgressBar, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Cancel.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 28</value>
</data>
<data name="label_Tip.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="progressBar.Size" type="System.Drawing.Size, System.Drawing">
<value>401, 28</value>
</data>
<data name="label_Tip.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;progressBar.Name" xml:space="preserve">
<value>progressBar</value>
</data>
<data name="&gt;&gt;panel1.Name" xml:space="preserve">
<value>panel1</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>449, 172</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>ProgressDialog</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="progressBar.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="label_Tip.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 8</value>
</data>
<data name="&gt;&gt;backgroundWorker.Name" xml:space="preserve">
<value>backgroundWorker</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;label_Tip.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>449, 172</value>
</data>
<data name="label_Tip.Size" type="System.Drawing.Size, System.Drawing">
<value>401, 32</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button_Cancel.Location" type="System.Drawing.Point, System.Drawing">
<value>162, 92</value>
</data>
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>进度</value>
</data>
<data name="&gt;&gt;label_Tip.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="tableLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="panel1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>22, 25, 22, 25</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>405, 122</value>
</data>
<data name="progressBar.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;button_Cancel.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;progressBar.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="progressBar.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, System.Private.CoreLib, Culture=neutral, PublicKeyToken=7cec85d7bea7798e">
<value>en</value>
</metadata>
<metadata name="backgroundWorker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>

View File

@@ -30,6 +30,19 @@
{
components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SpineViewerForm));
splitContainer_MainForm = new SplitContainer();
splitContainer_Functional = new SplitContainer();
splitContainer_Information = new SplitContainer();
groupBox_SkelList = new GroupBox();
spineListView = new SpineViewer.Controls.SpineListView();
spineViewPropertyGrid = new SpineViewer.Controls.SpineViewPropertyGrid();
splitContainer_Config = new SplitContainer();
groupBox_PreviewConfig = new GroupBox();
propertyGrid_Previewer = new PropertyGrid();
groupBox_SkelConfig = new GroupBox();
groupBox_Preview = new GroupBox();
spinePreviewPanel = new SpineViewer.Controls.SpinePreviewPanel();
rtbLog = new RichTextBox();
menuStrip = new MenuStrip();
toolStripMenuItem_File = new ToolStripMenuItem();
toolStripMenuItem_Open = new ToolStripMenuItem();
@@ -51,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();
@@ -62,22 +79,11 @@
toolStripMenuItem_Debug = new ToolStripMenuItem();
toolStripMenuItem_Experiment = new ToolStripMenuItem();
toolStripMenuItem_DesktopProjection = new ToolStripMenuItem();
rtbLog = new RichTextBox();
splitContainer_MainForm = new SplitContainer();
splitContainer_Functional = new SplitContainer();
splitContainer_Information = new SplitContainer();
groupBox_SkelList = new GroupBox();
spineListView = new SpineViewer.Controls.SpineListView();
spineViewPropertyGrid = new SpineViewer.Controls.SpineViewPropertyGrid();
splitContainer_Config = new SplitContainer();
groupBox_PreviewConfig = new GroupBox();
propertyGrid_Previewer = new PropertyGrid();
groupBox_SkelConfig = new GroupBox();
groupBox_Preview = new GroupBox();
spinePreviewPanel = new SpineViewer.Controls.SpinePreviewPanel();
ToolStripMenuItem_Language = new ToolStripMenuItem();
ToolStripMenuItem_English = new ToolStripMenuItem();
ToolStripMenuItem_Chinese = new ToolStripMenuItem();
panel_MainForm = new Panel();
toolTip = new ToolTip(components);
menuStrip.SuspendLayout();
((System.ComponentModel.ISupportInitialize)splitContainer_MainForm).BeginInit();
splitContainer_MainForm.Panel1.SuspendLayout();
splitContainer_MainForm.Panel2.SuspendLayout();
@@ -98,251 +104,16 @@
groupBox_PreviewConfig.SuspendLayout();
groupBox_SkelConfig.SuspendLayout();
groupBox_Preview.SuspendLayout();
menuStrip.SuspendLayout();
panel_MainForm.SuspendLayout();
SuspendLayout();
//
// 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 });
menuStrip.Location = new Point(0, 0);
menuStrip.Name = "menuStrip";
menuStrip.Size = new Size(1778, 36);
menuStrip.TabIndex = 0;
menuStrip.Text = "菜单";
//
// toolStripMenuItem_File
//
toolStripMenuItem_File.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_Open, toolStripMenuItem_BatchOpen, toolStripSeparator1, toolStripMenuItem_Export, toolStripSeparator2, toolStripMenuItem_Exit });
toolStripMenuItem_File.Name = "toolStripMenuItem_File";
toolStripMenuItem_File.Size = new Size(84, 30);
toolStripMenuItem_File.Text = "文件(&F)";
//
// toolStripMenuItem_Open
//
toolStripMenuItem_Open.Name = "toolStripMenuItem_Open";
toolStripMenuItem_Open.ShortcutKeys = Keys.Control | Keys.O;
toolStripMenuItem_Open.Size = new Size(254, 34);
toolStripMenuItem_Open.Text = "打开(&O)...";
toolStripMenuItem_Open.Click += toolStripMenuItem_Open_Click;
//
// toolStripMenuItem_BatchOpen
//
toolStripMenuItem_BatchOpen.Name = "toolStripMenuItem_BatchOpen";
toolStripMenuItem_BatchOpen.Size = new Size(254, 34);
toolStripMenuItem_BatchOpen.Text = "批量打开(&B)...";
toolStripMenuItem_BatchOpen.Click += toolStripMenuItem_BatchOpen_Click;
//
// toolStripSeparator1
//
toolStripSeparator1.Name = "toolStripSeparator1";
toolStripSeparator1.Size = new Size(251, 6);
//
// 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";
toolStripMenuItem_Export.Size = new Size(254, 34);
toolStripMenuItem_Export.Text = "导出(&E)";
//
// toolStripMenuItem_ExportFrame
//
toolStripMenuItem_ExportFrame.Name = "toolStripMenuItem_ExportFrame";
toolStripMenuItem_ExportFrame.Size = new Size(288, 34);
toolStripMenuItem_ExportFrame.Text = "单帧画面...";
toolStripMenuItem_ExportFrame.Click += toolStripMenuItem_ExportFrame_Click;
//
// toolStripMenuItem_ExportFrameSequence
//
toolStripMenuItem_ExportFrameSequence.Name = "toolStripMenuItem_ExportFrameSequence";
toolStripMenuItem_ExportFrameSequence.Size = new Size(288, 34);
toolStripMenuItem_ExportFrameSequence.Text = "帧序列...";
toolStripMenuItem_ExportFrameSequence.Click += toolStripMenuItem_ExportFrameSequence_Click;
//
// toolStripSeparator4
//
toolStripSeparator4.Name = "toolStripSeparator4";
toolStripSeparator4.Size = new Size(285, 6);
//
// toolStripMenuItem_ExportGif
//
toolStripMenuItem_ExportGif.Name = "toolStripMenuItem_ExportGif";
toolStripMenuItem_ExportGif.Size = new Size(288, 34);
toolStripMenuItem_ExportGif.Text = "GIF...";
toolStripMenuItem_ExportGif.Click += toolStripMenuItem_ExportGif_Click;
//
// toolStripMenuItem_ExportWebp
//
toolStripMenuItem_ExportWebp.Name = "toolStripMenuItem_ExportWebp";
toolStripMenuItem_ExportWebp.Size = new Size(288, 34);
toolStripMenuItem_ExportWebp.Text = "WebP...";
toolStripMenuItem_ExportWebp.Click += toolStripMenuItem_ExportWebp_Click;
//
// toolStripMenuItem_ExportAvif
//
toolStripMenuItem_ExportAvif.Name = "toolStripMenuItem_ExportAvif";
toolStripMenuItem_ExportAvif.Size = new Size(288, 34);
toolStripMenuItem_ExportAvif.Text = "AVIF...";
toolStripMenuItem_ExportAvif.Click += toolStripMenuItem_ExportAvif_Click;
//
// toolStripSeparator5
//
toolStripSeparator5.Name = "toolStripSeparator5";
toolStripSeparator5.Size = new Size(285, 6);
//
// toolStripMenuItem_ExportMp4
//
toolStripMenuItem_ExportMp4.Name = "toolStripMenuItem_ExportMp4";
toolStripMenuItem_ExportMp4.Size = new Size(288, 34);
toolStripMenuItem_ExportMp4.Text = "MP4...";
toolStripMenuItem_ExportMp4.Click += toolStripMenuItem_ExportMp4_Click;
//
// toolStripMenuItem_ExportWebm
//
toolStripMenuItem_ExportWebm.Name = "toolStripMenuItem_ExportWebm";
toolStripMenuItem_ExportWebm.Size = new Size(288, 34);
toolStripMenuItem_ExportWebm.Text = "WebM...";
toolStripMenuItem_ExportWebm.Click += toolStripMenuItem_ExportWebm_Click;
//
// toolStripMenuItem_ExportMkv
//
toolStripMenuItem_ExportMkv.Name = "toolStripMenuItem_ExportMkv";
toolStripMenuItem_ExportMkv.Size = new Size(288, 34);
toolStripMenuItem_ExportMkv.Text = "MKV...";
toolStripMenuItem_ExportMkv.Click += toolStripMenuItem_ExportMkv_Click;
//
// toolStripMenuItem_ExportMov
//
toolStripMenuItem_ExportMov.Name = "toolStripMenuItem_ExportMov";
toolStripMenuItem_ExportMov.Size = new Size(288, 34);
toolStripMenuItem_ExportMov.Text = "MOV...";
toolStripMenuItem_ExportMov.Click += toolStripMenuItem_ExportMov_Click;
//
// toolStripSeparator6
//
toolStripSeparator6.Name = "toolStripSeparator6";
toolStripSeparator6.Size = new Size(285, 6);
//
// toolStripMenuItem_ExportCustom
//
toolStripMenuItem_ExportCustom.Name = "toolStripMenuItem_ExportCustom";
toolStripMenuItem_ExportCustom.Size = new Size(288, 34);
toolStripMenuItem_ExportCustom.Text = "FFmpeg 自定义导出...";
toolStripMenuItem_ExportCustom.Click += toolStripMenuItem_ExportCustom_Click;
//
// toolStripSeparator2
//
toolStripSeparator2.Name = "toolStripSeparator2";
toolStripSeparator2.Size = new Size(251, 6);
//
// toolStripMenuItem_Exit
//
toolStripMenuItem_Exit.Name = "toolStripMenuItem_Exit";
toolStripMenuItem_Exit.ShortcutKeys = Keys.Alt | Keys.F4;
toolStripMenuItem_Exit.Size = new Size(254, 34);
toolStripMenuItem_Exit.Text = "退出(&X)";
toolStripMenuItem_Exit.Click += toolStripMenuItem_Exit_Click;
//
// toolStripMenuItem_Tool
//
toolStripMenuItem_Tool.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_ConvertFileFormat });
toolStripMenuItem_Tool.Name = "toolStripMenuItem_Tool";
toolStripMenuItem_Tool.Size = new Size(84, 30);
toolStripMenuItem_Tool.Text = "工具(&T)";
//
// toolStripMenuItem_ConvertFileFormat
//
toolStripMenuItem_ConvertFileFormat.Name = "toolStripMenuItem_ConvertFileFormat";
toolStripMenuItem_ConvertFileFormat.Size = new Size(254, 34);
toolStripMenuItem_ConvertFileFormat.Text = "转换文件格式(&C)...";
toolStripMenuItem_ConvertFileFormat.Click += toolStripMenuItem_ConvertFileFormat_Click;
//
// toolStripMenuItem_Download
//
toolStripMenuItem_Download.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_ManageResource });
toolStripMenuItem_Download.Name = "toolStripMenuItem_Download";
toolStripMenuItem_Download.Size = new Size(88, 30);
toolStripMenuItem_Download.Text = "下载(&D)";
//
// toolStripMenuItem_ManageResource
//
toolStripMenuItem_ManageResource.Name = "toolStripMenuItem_ManageResource";
toolStripMenuItem_ManageResource.Size = new Size(260, 34);
toolStripMenuItem_ManageResource.Text = "管理下载资源(&M)...";
toolStripMenuItem_ManageResource.Click += toolStripMenuItem_ManageResource_Click;
//
// toolStripMenuItem_Help
//
toolStripMenuItem_Help.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_Diagnostics, toolStripSeparator3, toolStripMenuItem_About, toolStripMenuItem_Debug });
toolStripMenuItem_Help.Name = "toolStripMenuItem_Help";
toolStripMenuItem_Help.Size = new Size(88, 30);
toolStripMenuItem_Help.Text = "帮助(&H)";
//
// toolStripMenuItem_Diagnostics
//
toolStripMenuItem_Diagnostics.Name = "toolStripMenuItem_Diagnostics";
toolStripMenuItem_Diagnostics.Size = new Size(270, 34);
toolStripMenuItem_Diagnostics.Text = "诊断信息(&D)";
toolStripMenuItem_Diagnostics.Click += toolStripMenuItem_Diagnostics_Click;
//
// toolStripSeparator3
//
toolStripSeparator3.Name = "toolStripSeparator3";
toolStripSeparator3.Size = new Size(267, 6);
//
// toolStripMenuItem_About
//
toolStripMenuItem_About.Name = "toolStripMenuItem_About";
toolStripMenuItem_About.Size = new Size(270, 34);
toolStripMenuItem_About.Text = "关于(&A)";
toolStripMenuItem_About.Click += toolStripMenuItem_About_Click;
//
// toolStripMenuItem_Debug
//
toolStripMenuItem_Debug.Name = "toolStripMenuItem_Debug";
toolStripMenuItem_Debug.Size = new Size(270, 34);
toolStripMenuItem_Debug.Text = "调试";
toolStripMenuItem_Debug.Visible = false;
toolStripMenuItem_Debug.Click += toolStripMenuItem_Debug_Click;
//
// toolStripMenuItem_Experiment
//
toolStripMenuItem_Experiment.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_DesktopProjection });
toolStripMenuItem_Experiment.Name = "toolStripMenuItem_Experiment";
toolStripMenuItem_Experiment.Size = new Size(138, 30);
toolStripMenuItem_Experiment.Text = "实验性功能(&E)";
//
// toolStripMenuItem_DesktopProjection
//
toolStripMenuItem_DesktopProjection.Name = "toolStripMenuItem_DesktopProjection";
toolStripMenuItem_DesktopProjection.Size = new Size(182, 34);
toolStripMenuItem_DesktopProjection.Text = "桌面投影";
toolStripMenuItem_DesktopProjection.Click += toolStripMenuItem_DesktopProjection_Click;
//
// rtbLog
//
rtbLog.BackColor = SystemColors.Window;
rtbLog.BorderStyle = BorderStyle.None;
rtbLog.Dock = DockStyle.Fill;
rtbLog.Font = new Font("Consolas", 9F);
rtbLog.Location = new Point(0, 0);
rtbLog.Margin = new Padding(3, 2, 3, 2);
rtbLog.Name = "rtbLog";
rtbLog.ReadOnly = true;
rtbLog.Size = new Size(1758, 158);
rtbLog.TabIndex = 0;
rtbLog.Text = "";
rtbLog.WordWrap = false;
//
// splitContainer_MainForm
//
splitContainer_MainForm.Cursor = Cursors.SizeNS;
splitContainer_MainForm.Dock = DockStyle.Fill;
resources.ApplyResources(splitContainer_MainForm, "splitContainer_MainForm");
splitContainer_MainForm.FixedPanel = FixedPanel.Panel2;
splitContainer_MainForm.Location = new Point(10, 5);
splitContainer_MainForm.Name = "splitContainer_MainForm";
splitContainer_MainForm.Orientation = Orientation.Horizontal;
//
// splitContainer_MainForm.Panel1
//
@@ -353,10 +124,6 @@
//
splitContainer_MainForm.Panel2.Controls.Add(rtbLog);
splitContainer_MainForm.Panel2.Cursor = Cursors.Default;
splitContainer_MainForm.Size = new Size(1758, 1093);
splitContainer_MainForm.SplitterDistance = 927;
splitContainer_MainForm.SplitterWidth = 8;
splitContainer_MainForm.TabIndex = 3;
splitContainer_MainForm.TabStop = false;
splitContainer_MainForm.SplitterMoved += splitContainer_SplitterMoved;
splitContainer_MainForm.MouseUp += splitContainer_MouseUp;
@@ -364,9 +131,8 @@
// splitContainer_Functional
//
splitContainer_Functional.Cursor = Cursors.SizeWE;
splitContainer_Functional.Dock = DockStyle.Fill;
resources.ApplyResources(splitContainer_Functional, "splitContainer_Functional");
splitContainer_Functional.FixedPanel = FixedPanel.Panel1;
splitContainer_Functional.Location = new Point(0, 0);
splitContainer_Functional.Name = "splitContainer_Functional";
//
// splitContainer_Functional.Panel1
@@ -378,10 +144,6 @@
//
splitContainer_Functional.Panel2.Controls.Add(groupBox_Preview);
splitContainer_Functional.Panel2.Cursor = Cursors.Default;
splitContainer_Functional.Size = new Size(1758, 927);
splitContainer_Functional.SplitterDistance = 788;
splitContainer_Functional.SplitterWidth = 8;
splitContainer_Functional.TabIndex = 2;
splitContainer_Functional.TabStop = false;
splitContainer_Functional.SplitterMoved += splitContainer_SplitterMoved;
splitContainer_Functional.MouseUp += splitContainer_MouseUp;
@@ -389,8 +151,7 @@
// splitContainer_Information
//
splitContainer_Information.Cursor = Cursors.SizeWE;
splitContainer_Information.Dock = DockStyle.Fill;
splitContainer_Information.Location = new Point(0, 0);
resources.ApplyResources(splitContainer_Information, "splitContainer_Information");
splitContainer_Information.Name = "splitContainer_Information";
//
// splitContainer_Information.Panel1
@@ -402,10 +163,6 @@
//
splitContainer_Information.Panel2.Controls.Add(splitContainer_Config);
splitContainer_Information.Panel2.Cursor = Cursors.Default;
splitContainer_Information.Size = new Size(788, 927);
splitContainer_Information.SplitterDistance = 351;
splitContainer_Information.SplitterWidth = 8;
splitContainer_Information.TabIndex = 1;
splitContainer_Information.TabStop = false;
splitContainer_Information.SplitterMoved += splitContainer_SplitterMoved;
splitContainer_Information.MouseUp += splitContainer_MouseUp;
@@ -413,37 +170,25 @@
// groupBox_SkelList
//
groupBox_SkelList.Controls.Add(spineListView);
groupBox_SkelList.Dock = DockStyle.Fill;
groupBox_SkelList.Location = new Point(0, 0);
resources.ApplyResources(groupBox_SkelList, "groupBox_SkelList");
groupBox_SkelList.Name = "groupBox_SkelList";
groupBox_SkelList.Size = new Size(351, 927);
groupBox_SkelList.TabIndex = 0;
groupBox_SkelList.TabStop = false;
groupBox_SkelList.Text = "模型列表";
//
// spineListView
//
spineListView.Dock = DockStyle.Fill;
spineListView.Location = new Point(3, 26);
resources.ApplyResources(spineListView, "spineListView");
spineListView.Name = "spineListView";
spineListView.Size = new Size(345, 898);
spineListView.SpinePropertyGrid = spineViewPropertyGrid;
spineListView.TabIndex = 0;
//
// spineViewPropertyGrid
//
spineViewPropertyGrid.Dock = DockStyle.Fill;
spineViewPropertyGrid.Location = new Point(3, 26);
resources.ApplyResources(spineViewPropertyGrid, "spineViewPropertyGrid");
spineViewPropertyGrid.Name = "spineViewPropertyGrid";
spineViewPropertyGrid.Size = new Size(423, 575);
spineViewPropertyGrid.TabIndex = 0;
//
// splitContainer_Config
//
splitContainer_Config.Dock = DockStyle.Fill;
splitContainer_Config.Location = new Point(0, 0);
resources.ApplyResources(splitContainer_Config, "splitContainer_Config");
splitContainer_Config.Name = "splitContainer_Config";
splitContainer_Config.Orientation = Orientation.Horizontal;
//
// splitContainer_Config.Panel1
//
@@ -452,75 +197,284 @@
// splitContainer_Config.Panel2
//
splitContainer_Config.Panel2.Controls.Add(groupBox_SkelConfig);
splitContainer_Config.Size = new Size(429, 927);
splitContainer_Config.SplitterDistance = 315;
splitContainer_Config.SplitterWidth = 8;
splitContainer_Config.TabIndex = 0;
//
// groupBox_PreviewConfig
//
groupBox_PreviewConfig.Controls.Add(propertyGrid_Previewer);
groupBox_PreviewConfig.Dock = DockStyle.Fill;
groupBox_PreviewConfig.Location = new Point(0, 0);
groupBox_PreviewConfig.Margin = new Padding(0);
resources.ApplyResources(groupBox_PreviewConfig, "groupBox_PreviewConfig");
groupBox_PreviewConfig.Name = "groupBox_PreviewConfig";
groupBox_PreviewConfig.Size = new Size(429, 315);
groupBox_PreviewConfig.TabIndex = 1;
groupBox_PreviewConfig.TabStop = false;
groupBox_PreviewConfig.Text = "画面参数";
//
// propertyGrid_Previewer
//
propertyGrid_Previewer.Dock = DockStyle.Fill;
propertyGrid_Previewer.HelpVisible = false;
propertyGrid_Previewer.Location = new Point(3, 26);
resources.ApplyResources(propertyGrid_Previewer, "propertyGrid_Previewer");
propertyGrid_Previewer.Name = "propertyGrid_Previewer";
propertyGrid_Previewer.Size = new Size(423, 286);
propertyGrid_Previewer.TabIndex = 1;
propertyGrid_Previewer.ToolbarVisible = false;
//
// groupBox_SkelConfig
//
groupBox_SkelConfig.Controls.Add(spineViewPropertyGrid);
groupBox_SkelConfig.Dock = DockStyle.Fill;
groupBox_SkelConfig.Location = new Point(0, 0);
groupBox_SkelConfig.Margin = new Padding(0);
resources.ApplyResources(groupBox_SkelConfig, "groupBox_SkelConfig");
groupBox_SkelConfig.Name = "groupBox_SkelConfig";
groupBox_SkelConfig.Size = new Size(429, 604);
groupBox_SkelConfig.TabIndex = 0;
groupBox_SkelConfig.TabStop = false;
groupBox_SkelConfig.Text = "模型参数";
//
// groupBox_Preview
//
groupBox_Preview.Controls.Add(spinePreviewPanel);
groupBox_Preview.Dock = DockStyle.Fill;
groupBox_Preview.Location = new Point(0, 0);
resources.ApplyResources(groupBox_Preview, "groupBox_Preview");
groupBox_Preview.Name = "groupBox_Preview";
groupBox_Preview.Size = new Size(962, 927);
groupBox_Preview.TabIndex = 1;
groupBox_Preview.TabStop = false;
groupBox_Preview.Text = "预览画面";
//
// spinePreviewPanel
//
spinePreviewPanel.Dock = DockStyle.Fill;
spinePreviewPanel.Location = new Point(3, 26);
resources.ApplyResources(spinePreviewPanel, "spinePreviewPanel");
spinePreviewPanel.Name = "spinePreviewPanel";
spinePreviewPanel.PropertyGrid = propertyGrid_Previewer;
spinePreviewPanel.Size = new Size(956, 898);
spinePreviewPanel.SpineListView = spineListView;
spinePreviewPanel.TabIndex = 0;
//
// rtbLog
//
rtbLog.BackColor = SystemColors.Window;
rtbLog.BorderStyle = BorderStyle.None;
resources.ApplyResources(rtbLog, "rtbLog");
rtbLog.Name = "rtbLog";
rtbLog.ReadOnly = true;
//
// menuStrip
//
menuStrip.BackColor = SystemColors.Control;
menuStrip.ImageScalingSize = new Size(24, 24);
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";
//
// 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
//
toolStripMenuItem_Open.Name = "toolStripMenuItem_Open";
resources.ApplyResources(toolStripMenuItem_Open, "toolStripMenuItem_Open");
toolStripMenuItem_Open.Click += toolStripMenuItem_Open_Click;
//
// toolStripMenuItem_BatchOpen
//
toolStripMenuItem_BatchOpen.Name = "toolStripMenuItem_BatchOpen";
resources.ApplyResources(toolStripMenuItem_BatchOpen, "toolStripMenuItem_BatchOpen");
toolStripMenuItem_BatchOpen.Click += toolStripMenuItem_BatchOpen_Click;
//
// toolStripSeparator1
//
toolStripSeparator1.Name = "toolStripSeparator1";
resources.ApplyResources(toolStripSeparator1, "toolStripSeparator1");
//
// 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
//
toolStripMenuItem_ExportFrame.Name = "toolStripMenuItem_ExportFrame";
resources.ApplyResources(toolStripMenuItem_ExportFrame, "toolStripMenuItem_ExportFrame");
toolStripMenuItem_ExportFrame.Click += toolStripMenuItem_ExportFrame_Click;
//
// toolStripMenuItem_ExportFrameSequence
//
toolStripMenuItem_ExportFrameSequence.Name = "toolStripMenuItem_ExportFrameSequence";
resources.ApplyResources(toolStripMenuItem_ExportFrameSequence, "toolStripMenuItem_ExportFrameSequence");
toolStripMenuItem_ExportFrameSequence.Click += toolStripMenuItem_ExportFrameSequence_Click;
//
// toolStripSeparator4
//
toolStripSeparator4.Name = "toolStripSeparator4";
resources.ApplyResources(toolStripSeparator4, "toolStripSeparator4");
//
// toolStripMenuItem_ExportGif
//
toolStripMenuItem_ExportGif.Name = "toolStripMenuItem_ExportGif";
resources.ApplyResources(toolStripMenuItem_ExportGif, "toolStripMenuItem_ExportGif");
toolStripMenuItem_ExportGif.Click += toolStripMenuItem_ExportGif_Click;
//
// toolStripMenuItem_ExportWebp
//
toolStripMenuItem_ExportWebp.Name = "toolStripMenuItem_ExportWebp";
resources.ApplyResources(toolStripMenuItem_ExportWebp, "toolStripMenuItem_ExportWebp");
toolStripMenuItem_ExportWebp.Click += toolStripMenuItem_ExportWebp_Click;
//
// toolStripMenuItem_ExportAvif
//
toolStripMenuItem_ExportAvif.Name = "toolStripMenuItem_ExportAvif";
resources.ApplyResources(toolStripMenuItem_ExportAvif, "toolStripMenuItem_ExportAvif");
toolStripMenuItem_ExportAvif.Click += toolStripMenuItem_ExportAvif_Click;
//
// toolStripSeparator5
//
toolStripSeparator5.Name = "toolStripSeparator5";
resources.ApplyResources(toolStripSeparator5, "toolStripSeparator5");
//
// toolStripMenuItem_ExportMp4
//
toolStripMenuItem_ExportMp4.Name = "toolStripMenuItem_ExportMp4";
resources.ApplyResources(toolStripMenuItem_ExportMp4, "toolStripMenuItem_ExportMp4");
toolStripMenuItem_ExportMp4.Click += toolStripMenuItem_ExportMp4_Click;
//
// toolStripMenuItem_ExportWebm
//
toolStripMenuItem_ExportWebm.Name = "toolStripMenuItem_ExportWebm";
resources.ApplyResources(toolStripMenuItem_ExportWebm, "toolStripMenuItem_ExportWebm");
toolStripMenuItem_ExportWebm.Click += toolStripMenuItem_ExportWebm_Click;
//
// toolStripMenuItem_ExportMkv
//
toolStripMenuItem_ExportMkv.Name = "toolStripMenuItem_ExportMkv";
resources.ApplyResources(toolStripMenuItem_ExportMkv, "toolStripMenuItem_ExportMkv");
toolStripMenuItem_ExportMkv.Click += toolStripMenuItem_ExportMkv_Click;
//
// toolStripMenuItem_ExportMov
//
toolStripMenuItem_ExportMov.Name = "toolStripMenuItem_ExportMov";
resources.ApplyResources(toolStripMenuItem_ExportMov, "toolStripMenuItem_ExportMov");
toolStripMenuItem_ExportMov.Click += toolStripMenuItem_ExportMov_Click;
//
// toolStripSeparator6
//
toolStripSeparator6.Name = "toolStripSeparator6";
resources.ApplyResources(toolStripSeparator6, "toolStripSeparator6");
//
// toolStripMenuItem_ExportCustom
//
toolStripMenuItem_ExportCustom.Name = "toolStripMenuItem_ExportCustom";
resources.ApplyResources(toolStripMenuItem_ExportCustom, "toolStripMenuItem_ExportCustom");
toolStripMenuItem_ExportCustom.Click += toolStripMenuItem_ExportCustom_Click;
//
// toolStripSeparator2
//
toolStripSeparator2.Name = "toolStripSeparator2";
resources.ApplyResources(toolStripSeparator2, "toolStripSeparator2");
//
// 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
//
toolStripMenuItem_Tool.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_ConvertFileFormat });
toolStripMenuItem_Tool.Name = "toolStripMenuItem_Tool";
resources.ApplyResources(toolStripMenuItem_Tool, "toolStripMenuItem_Tool");
//
// toolStripMenuItem_ConvertFileFormat
//
toolStripMenuItem_ConvertFileFormat.Name = "toolStripMenuItem_ConvertFileFormat";
resources.ApplyResources(toolStripMenuItem_ConvertFileFormat, "toolStripMenuItem_ConvertFileFormat");
toolStripMenuItem_ConvertFileFormat.Click += toolStripMenuItem_ConvertFileFormat_Click;
//
// toolStripMenuItem_Download
//
toolStripMenuItem_Download.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_ManageResource });
toolStripMenuItem_Download.Name = "toolStripMenuItem_Download";
resources.ApplyResources(toolStripMenuItem_Download, "toolStripMenuItem_Download");
//
// toolStripMenuItem_ManageResource
//
toolStripMenuItem_ManageResource.Name = "toolStripMenuItem_ManageResource";
resources.ApplyResources(toolStripMenuItem_ManageResource, "toolStripMenuItem_ManageResource");
toolStripMenuItem_ManageResource.Click += toolStripMenuItem_ManageResource_Click;
//
// 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
//
toolStripMenuItem_Diagnostics.Name = "toolStripMenuItem_Diagnostics";
resources.ApplyResources(toolStripMenuItem_Diagnostics, "toolStripMenuItem_Diagnostics");
toolStripMenuItem_Diagnostics.Click += toolStripMenuItem_Diagnostics_Click;
//
// toolStripSeparator3
//
toolStripSeparator3.Name = "toolStripSeparator3";
resources.ApplyResources(toolStripSeparator3, "toolStripSeparator3");
//
// toolStripMenuItem_About
//
toolStripMenuItem_About.Name = "toolStripMenuItem_About";
resources.ApplyResources(toolStripMenuItem_About, "toolStripMenuItem_About");
toolStripMenuItem_About.Click += toolStripMenuItem_About_Click;
//
// toolStripMenuItem_Debug
//
toolStripMenuItem_Debug.Name = "toolStripMenuItem_Debug";
resources.ApplyResources(toolStripMenuItem_Debug, "toolStripMenuItem_Debug");
toolStripMenuItem_Debug.Click += toolStripMenuItem_Debug_Click;
//
// toolStripMenuItem_Experiment
//
toolStripMenuItem_Experiment.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_DesktopProjection });
toolStripMenuItem_Experiment.Name = "toolStripMenuItem_Experiment";
resources.ApplyResources(toolStripMenuItem_Experiment, "toolStripMenuItem_Experiment");
//
// toolStripMenuItem_DesktopProjection
//
toolStripMenuItem_DesktopProjection.Name = "toolStripMenuItem_DesktopProjection";
resources.ApplyResources(toolStripMenuItem_DesktopProjection, "toolStripMenuItem_DesktopProjection");
toolStripMenuItem_DesktopProjection.Click += toolStripMenuItem_DesktopProjection_Click;
//
// 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
//
ToolStripMenuItem_English.Name = "ToolStripMenuItem_English";
resources.ApplyResources(ToolStripMenuItem_English, "ToolStripMenuItem_English");
ToolStripMenuItem_English.Click += ToolStripMenuItem_English_Click;
//
// ToolStripMenuItem_Chinese
//
ToolStripMenuItem_Chinese.Name = "ToolStripMenuItem_Chinese";
resources.ApplyResources(ToolStripMenuItem_Chinese, "ToolStripMenuItem_Chinese");
ToolStripMenuItem_Chinese.Click += ToolStripMenuItem_Chinese_Click;
//
// panel_MainForm
//
panel_MainForm.Controls.Add(splitContainer_MainForm);
panel_MainForm.Dock = DockStyle.Fill;
panel_MainForm.Location = new Point(0, 36);
resources.ApplyResources(panel_MainForm, "panel_MainForm");
panel_MainForm.Name = "panel_MainForm";
panel_MainForm.Padding = new Padding(10, 5, 10, 10);
panel_MainForm.Size = new Size(1778, 1108);
panel_MainForm.TabIndex = 4;
//
// toolTip
//
@@ -528,21 +482,14 @@
//
// SpineViewerForm
//
AutoScaleDimensions = new SizeF(144F, 144F);
resources.ApplyResources(this, "$this");
AutoScaleMode = AutoScaleMode.Dpi;
ClientSize = new Size(1778, 1144);
Controls.Add(panel_MainForm);
Controls.Add(menuStrip);
Icon = (Icon)resources.GetObject("$this.Icon");
MainMenuStrip = menuStrip;
Margin = new Padding(3, 2, 3, 2);
Name = "SpineViewerForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "SpineViewer";
FormClosing += MainForm_FormClosing;
Load += MainForm_Load;
menuStrip.ResumeLayout(false);
menuStrip.PerformLayout();
splitContainer_MainForm.Panel1.ResumeLayout(false);
splitContainer_MainForm.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)splitContainer_MainForm).EndInit();
@@ -563,6 +510,8 @@
groupBox_PreviewConfig.ResumeLayout(false);
groupBox_SkelConfig.ResumeLayout(false);
groupBox_Preview.ResumeLayout(false);
menuStrip.ResumeLayout(false);
menuStrip.PerformLayout();
panel_MainForm.ResumeLayout(false);
ResumeLayout(false);
PerformLayout();
@@ -617,5 +566,12 @@
private ToolStripMenuItem toolStripMenuItem_Experiment;
private ToolStripMenuItem toolStripMenuItem_DesktopProjection;
private ToolStripMenuItem toolStripMenuItem_Debug;
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;
}
}

View File

@@ -5,6 +5,8 @@ using System.Diagnostics;
using SpineViewer.Natives;
using SpineViewer.Utils;
using SpineViewer.Spine.SpineExporter;
using System.Configuration;
using SpineViewer.Utils.Localize;
namespace SpineViewer
{
@@ -28,7 +30,7 @@ namespace SpineViewer
{
logger.Error(ex.ToString());
logger.Error("Failed to load fragment shader");
MessagePopup.Warn("Fragment shader 加载失败预乘Alpha通道属性失效");
MessagePopup.Warn(Properties.Resources.failLoadingFragmentShader, Properties.Resources.msgBoxWarning);
}
#if DEBUG
@@ -67,6 +69,22 @@ namespace SpineViewer
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)
@@ -88,7 +106,7 @@ namespace SpineViewer
private void toolStripMenuItem_ExportFrame_Click(object sender, EventArgs e)
{
if (spinePreviewPanel.IsUpdating && MessagePopup.Quest("画面仍在更新,建议手动暂停画面后导出固定的一帧,是否继续?") != DialogResult.OK)
if (spinePreviewPanel.IsUpdating && MessagePopup.Quest(Properties.Resources.isUpdatingAndManuallyExportFrame, Properties.Resources.msgBoxQuest) != DialogResult.OK)
return;
var k = nameof(toolStripMenuItem_ExportFrame);
@@ -306,6 +324,24 @@ namespace SpineViewer
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();
@@ -364,7 +400,7 @@ namespace SpineViewer
SkeletonConverter srcCvter = args.SourceVersion != SpineVersion.Auto ? SkeletonConverter.New(args.SourceVersion) : null;
SkeletonConverter tgtCvter = SkeletonConverter.New(args.TargetVersion);
worker.ReportProgress(0, $"已处理 0/{totalCount}");
worker.ReportProgress(0, $"{Properties.Resources.process} 0/{totalCount}");
for (int i = 0; i < totalCount; i++)
{
if (worker.CancellationPending)
@@ -403,7 +439,7 @@ namespace SpineViewer
error++;
}
worker.ReportProgress((int)((i + 1) * 100.0) / totalCount, $"已处理 {i + 1}/{totalCount}");
worker.ReportProgress((int)((i + 1) * 100.0) / totalCount, $"{Properties.Resources.process} {i + 1}/{totalCount}");
}
if (error > 0)
@@ -441,6 +477,35 @@ namespace SpineViewer
#endif
}
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 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);
}
}
//private void spinePreviewer_KeyDown(object sender, KeyEventArgs e)
//{
// switch (e.KeyCode)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -57,8 +57,21 @@ namespace SpineViewer.Natives
public const uint SMTO_NOTIMEOUTIFNOTHUNG = 0x0008;
public const uint GA_PARENT = 1;
public const uint GW_OWNER = 4;
public const int SW_HIDE = 0;
public const int SW_SHOWNORMAL = 1;
public const int SW_SHOWMINIMIZED = 2;
public const int SW_SHOWMAXIMIZED = 3;
public const int SW_SHOWNOACTIVATE = 4;
public const int SW_SHOW = 5;
public const int SW_MINIMIZE = 6;
public const int SW_SHOWMINNOACTIVE = 7;
public const int SW_SHOWNA = 8;
public const int SW_RESTORE = 9;
public const int SW_SHOWDEFAULT = 10;
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
@@ -89,6 +102,15 @@ namespace SpineViewer.Natives
public uint dwTime;
}
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
[DllImport("user32.dll", SetLastError = true)]
public static extern nint GetDC(nint hWnd);
@@ -140,6 +162,9 @@ namespace SpineViewer.Natives
[DllImport("user32.dll", SetLastError = true)]
public static extern nint GetWindow(nint hWnd, uint uCmd);
[DllImport("user32.dll", SetLastError = true)]
public static extern bool ShowWindow(nint hWnd, int nCmdShow);
[DllImport("gdi32.dll", SetLastError = true)]
public static extern nint CreateCompatibleDC(nint hdc);

View File

@@ -1,11 +1,15 @@
using NLog;
using SpineViewer.Spine.Implementations.SkeletonConverter;
using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System.Configuration;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
namespace SpineViewer
{
internal static class Program
internal static class Program
{
///// <summary>
///// 程序路径
@@ -47,15 +51,16 @@ namespace SpineViewer
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
LocalizeConfiguration.SetCulture();
try
{
Application.Run(new SpineViewerForm() { Text = $"SpineViewer - v{Version}"});
Application.Run(new SpineViewerForm() { Text = $"SpineViewer - v{Version}" });
}
catch (Exception ex)
{
logger.Fatal(ex.ToString());
MessagePopup.Error(ex.ToString(), "程序已崩溃");
MessagePopup.Error(ex.ToString(), Properties.Resources.programCrashed);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,511 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="about" xml:space="preserve">
<value>About</value>
</data>
<data name="animation" xml:space="preserve">
<value>Animation</value>
</data>
<data name="atlasNotExist" xml:space="preserve">
<value>Atlas file doesn't exist.</value>
</data>
<data name="atlasPath" xml:space="preserve">
<value>Atlas file path</value>
</data>
<data name="basicInfo" xml:space="preserve">
<value>Basic info</value>
</data>
<data name="categoryCustom" xml:space="preserve">
<value>Custom</value>
</data>
<data name="categoryExport" xml:space="preserve">
<value>[0] Export</value>
</data>
<data name="categoryFormatParameters" xml:space="preserve">
<value>[3] Format parameters</value>
</data>
<data name="categoryPreview" xml:space="preserve">
<value>[1] Preview</value>
</data>
<data name="countInfoStatusMidfix" xml:space="preserve">
<value>item(s) selected,</value>
</data>
<data name="countInfoStatusPrefix" xml:space="preserve">
<value>.</value>
</data>
<data name="countInfoStatusSuffix" xml:space="preserve">
<value>in total.</value>
</data>
<data name="debug" xml:space="preserve">
<value>Debug</value>
</data>
<data name="descAssociatedSpineListView" xml:space="preserve">
<value>Associated SpineListView</value>
</data>
<data name="descDisplayImageProperties" xml:space="preserve">
<value>Property page for displaying image properties</value>
</data>
<data name="descAvifEncoder" xml:space="preserve">
<value>-c:v: Video encoder to use. Hardware acceleration is recommended. Note: libaom-av1 is extremely slow.</value>
</data>
<data name="descModelAttributes" xml:space="preserve">
<value>Model attributes display page.</value>
</data>
<data name="displayBackgroundColor" xml:space="preserve">
<value>Background color</value>
</data>
<data name="displayCenter" xml:space="preserve">
<value>Center point of screen</value>
</data>
<data name="displayEncoder" xml:space="preserve">
<value>Encoder</value>
</data>
<data name="displayFlipHorizontal" xml:space="preserve">
<value>Flip horizontal</value>
</data>
<data name="displayFlipVertical" xml:space="preserve">
<value>Flip vertical</value>
</data>
<data name="displayMaximumFrameRate" xml:space="preserve">
<value>Maximum frame rate</value>
</data>
<data name="displayRenderSelected" xml:space="preserve">
<value>Render selected only</value>
</data>
<data name="displayResolution" xml:space="preserve">
<value>Resolution</value>
</data>
<data name="displayRotation" xml:space="preserve">
<value>Rotation</value>
</data>
<data name="displayShowAxis" xml:space="preserve">
<value>Show axis</value>
</data>
<data name="displayZoom" xml:space="preserve">
<value>Zoom</value>
</data>
<data name="duration" xml:space="preserve">
<value>Duration</value>
</data>
<data name="errorLoadSkeleton" xml:space="preserve">
<value>Failed to load skeleton</value>
</data>
<data name="fileVersion" xml:space="preserve">
<value>File version</value>
</data>
<data name="flipX" xml:space="preserve">
<value>FlipX</value>
</data>
<data name="flipY" xml:space="preserve">
<value>FlipY</value>
</data>
<data name="formatExceptionParseColor" xml:space="preserve">
<value>Unable to parse color, please use #RRGGBBAA, #RRGGBB, #RGBA or #RGB format.</value>
</data>
<data name="formatExceptionParseColorError" xml:space="preserve">
<value>Color format is invalid. Please check the format.</value>
</data>
<data name="formatExceptionUnknownColor" xml:space="preserve">
<value>Color not recognized. Please use a valid color name.</value>
</data>
<data name="isHidden" xml:space="preserve">
<value>Is hidden</value>
</data>
<data name="itemCountPrefix" xml:space="preserve">
<value>.</value>
</data>
<data name="itemCountSuffix" xml:space="preserve">
<value> item(s) selected.</value>
</data>
<data name="loadAllSkeletonPrefix" xml:space="preserve">
<value>A total of </value>
</data>
<data name="loadAllSkeletonSuffix" xml:space="preserve">
<value>skeletons found. Do you want to load them all at once?</value>
</data>
<data name="maximumTrackLength" xml:space="preserve">
<value>Maximum Track Length</value>
</data>
<data name="msgBoxError" xml:space="preserve">
<value>Error</value>
</data>
<data name="msgBoxInfo" xml:space="preserve">
<value>Info</value>
</data>
<data name="msgBoxQuest" xml:space="preserve">
<value>Action Confirmation</value>
</data>
<data name="msgBoxWarning" xml:space="preserve">
<value>Warning</value>
</data>
<data name="name" xml:space="preserve">
<value>Name</value>
</data>
<data name="notifyCopyGithubLink" xml:space="preserve">
<value>Link copied to clipboard. Please open it in browser</value>
</data>
<data name="parameterError" xml:space="preserve">
<value>Invalid Parameters</value>
</data>
<data name="position" xml:space="preserve">
<value>Position</value>
</data>
<data name="previewRenderStopped" xml:space="preserve">
<value>Preview Render Stopped</value>
</data>
<data name="process" xml:space="preserve">
<value>Processed </value>
</data>
<data name="programCrashed" xml:space="preserve">
<value>Application has crashed</value>
</data>
<data name="removeAllItemPrefix" xml:space="preserve">
<value>Remove all </value>
</data>
<data name="removeItemConfirmPrefix" xml:space="preserve">
<value>Remove </value>
</data>
<data name="removeItemConfirmSuffix" xml:space="preserve">
<value> item(s)?</value>
</data>
<data name="render" xml:space="preserve">
<value>Render</value>
</data>
<data name="resourcesPath" xml:space="preserve">
<value>Resource Path</value>
</data>
<data name="restartPrompt" xml:space="preserve">
<value>Language set to Simplified Chinese. Restart application now?</value>
</data>
<data name="restartTitle" xml:space="preserve">
<value>Application restart required!</value>
</data>
<data name="runtimeError" xml:space="preserve">
<value>Runtime error</value>
</data>
<data name="runtimeVersion" xml:space="preserve">
<value>Runtime version</value>
</data>
<data name="scale" xml:space="preserve">
<value>Scale</value>
</data>
<data name="skelNotExist" xml:space="preserve">
<value>Skel file doesn't exist.</value>
</data>
<data name="skelPath" xml:space="preserve">
<value>Skel file path</value>
</data>
<data name="skin" xml:space="preserve">
<value>Skin</value>
</data>
<data name="slot" xml:space="preserve">
<value>Slot</value>
</data>
<data name="transform" xml:space="preserve">
<value>Transform</value>
</data>
<data name="usePremultipliedAlpha" xml:space="preserve">
<value>UsePremultipliedAlpha</value>
</data>
<data name="descCRF" xml:space="preserve">
<value>-crf: Accepts values from 0 to 63. Recommended range is 1828 (default is 23). Lower values result in higher output quality</value>
</data>
<data name="displayPixelFormat" xml:space="preserve">
<value>Pixel format</value>
</data>
<data name="descPixelFormat" xml:space="preserve">
<value>-pix_fmt: Pixel format to use.</value>
</data>
<data name="displayLoopCount" xml:space="preserve">
<value>Loop count</value>
</data>
<data name="descLoopCount" xml:space="preserve">
<value>-loop: Number of loops. 0 for infinite loops. Valid range: [0, 65535].</value>
</data>
<data name="invalidInputFolder" xml:space="preserve">
<value>Invalid output folder</value>
</data>
<data name="folderNotExistPrefix" xml:space="preserve">
<value>Folder </value>
</data>
<data name="folderNotExistSuffix" xml:space="preserve">
<value>doesn't exist.</value>
</data>
<data name="mustProvideOutputFolder" xml:space="preserve">
<value>An output folder must be provided when exporting a single file.</value>
</data>
<data name="categoryFFmpegParameter" xml:space="preserve">
<value>[2] FFmpeg Basic Parameters</value>
</data>
<data name="displayFileFormat" xml:space="preserve">
<value>File format</value>
</data>
<data name="descFileFormat" xml:space="preserve">
<value>-f: Specify the output file format</value>
</data>
<data name="displayFilenameSuffix" xml:space="preserve">
<value>File extension</value>
</data>
<data name="descFilenameSuffix" xml:space="preserve">
<value>File extension</value>
</data>
<data name="displayOutputFolder" xml:space="preserve">
<value>Output folder</value>
</data>
<data name="descOutputFolder" xml:space="preserve">
<value>Leave empty to export to each model's folder.</value>
</data>
<data name="displayExportSingle" xml:space="preserve">
<value>Export single</value>
</data>
<data name="descExportSingle" xml:space="preserve">
<value>Export all models in a single file, or export each model separately.</value>
</data>
<data name="descResolution" xml:space="preserve">
<value>Set pixel size in preview panel.</value>
</data>
<data name="displayPreviewViewport" xml:space="preserve">
<value>Preview viewport</value>
</data>
<data name="descPreviewViewport" xml:space="preserve">
<value>Preview viewport settings. Adjust in the preview panel.</value>
</data>
<data name="descRenderSelected" xml:space="preserve">
<value>Export selected models only. Adjust this in the preview settings panel.</value>
</data>
<data name="descBackgroundColor" xml:space="preserve">
<value>Background color to use, in #RRGGBBAA format.</value>
</data>
<data name="displayMargin" xml:space="preserve">
<value>Margin</value>
</data>
<data name="descMargin" xml:space="preserve">
<value>Outer canvas margin. This will be added to the final export resolution.</value>
</data>
<data name="displayPadding" xml:space="preserve">
<value>Padding</value>
</data>
<data name="descPadding" xml:space="preserve">
<value>Internal canvas padding. The export resolution remains unchanged, but space will be left around the edges.</value>
</data>
<data name="displayAllowContentOverflow" xml:space="preserve">
<value>Allow content overflow</value>
</data>
<data name="descAllowContentOverflow" xml:space="preserve">
<value>When using the preview resolution, allow content to overflow into the edges and padding areas.</value>
</data>
<data name="displayAutoResolution" xml:space="preserve">
<value>Auto resolution</value>
</data>
<data name="descAutoResolution" xml:space="preserve">
<value>Automatically set resolution based on export content. Edge padding and content overflow settings will be ignored.</value>
</data>
<data name="validFormatRequired" xml:space="preserve">
<value>Valid format required.</value>
</data>
<data name="validExtensionRequired" xml:space="preserve">
<value>Valie extension required.</value>
</data>
<data name="descCustomArgument" xml:space="preserve">
<value>Use "ffmpeg -h encoder=&lt;encoder&gt;" to view supported encoder parameters.
Use "ffmpeg -h muxer=&lt;file format&gt;" to view supported file format parameters.</value>
</data>
<data name="displayCustomArgument" xml:space="preserve">
<value>Custom arguments</value>
</data>
<data name="categorySingleFrame" xml:space="preserve">
<value>[1] Single Frame</value>
</data>
<data name="displayImageFormat" xml:space="preserve">
<value>Image format</value>
</data>
<data name="descFileNameExtension" xml:space="preserve">
<value>Filename extension matching the image format.</value>
</data>
<data name="descDPI" xml:space="preserve">
<value>Pixels per inch (PPI) for the exported image, used to adjust the physical size of the image.</value>
</data>
<data name="categoryFrameSequenceParameters" xml:space="preserve">
<value>[2] Frame Sequence Parameters</value>
</data>
<data name="descFrameFileExtension" xml:space="preserve">
<value>Frame file extension, which also defines the image format of each frame.</value>
</data>
<data name="displayMaxColor" xml:space="preserve">
<value>Max colors in palette</value>
</data>
<data name="descMaxColor" xml:space="preserve">
<value>Max colors in palette. Higher value = better color retention.</value>
</data>
<data name="displayAlphaThreshold" xml:space="preserve">
<value>Alpha threshold</value>
</data>
<data name="descAlphaThreshold" xml:space="preserve">
<value>Pixels below this value will be considered transparent.</value>
</data>
<data name="displayPreset" xml:space="preserve">
<value>Preset</value>
</data>
<data name="descPreset" xml:space="preserve">
<value>-profile: Preset configuration</value>
</data>
<data name="negativeDuration" xml:space="preserve">
<value>Export duration cannot be negative when exporting a single file.</value>
</data>
<data name="frame" xml:space="preserve">
<value>frame(s)</value>
</data>
<data name="categoryVideoParameters" xml:space="preserve">
<value>[1] Video Parameters</value>
</data>
<data name="descDuration" xml:space="preserve">
<value>Check animation duration in the model list. If less than 0, each model uses its longest track when exporting individually.</value>
</data>
<data name="displayFPS" xml:space="preserve">
<value>FPS</value>
</data>
<data name="descFPS" xml:space="preserve">
<value>Frames Per Second (FPS)</value>
</data>
<data name="displayKeepLastFrame" xml:space="preserve">
<value>Keep last frame</value>
</data>
<data name="descKeepLastFrame" xml:space="preserve">
<value>Keeping the last frame smooths the animation, but may add one extra frame.</value>
</data>
<data name="displayLoseless" xml:space="preserve">
<value>Loseless</value>
</data>
<data name="descLoseless" xml:space="preserve">
<value>-lossless: 0 for lossy, 1 for lossless.</value>
</data>
<data name="displayQuality" xml:space="preserve">
<value>Quality</value>
</data>
<data name="descQuality" xml:space="preserve">
<value>-quality: Range 0-100, default is 75.</value>
</data>
<data name="failLoadingFragmentShader" xml:space="preserve">
<value>Fragment shader failed to load, pre-multiplied alpha channel property disabled.</value>
</data>
<data name="isUpdatingAndManuallyExportFrame" xml:space="preserve">
<value>The screen is still updating. Its recommended to manually pause and export a fixed frame. Do you want to continue?</value>
</data>
</root>

View File

@@ -117,4 +117,394 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="about" xml:space="preserve">
<value>关于 </value>
</data>
<data name="animation" xml:space="preserve">
<value>动画</value>
</data>
<data name="atlasNotExist" xml:space="preserve">
<value>atlas文件不存在</value>
</data>
<data name="atlasPath" xml:space="preserve">
<value>atlas文件路径</value>
</data>
<data name="basicInfo" xml:space="preserve">
<value>基本信息</value>
</data>
<data name="categoryCustom" xml:space="preserve">
<value>自定义</value>
</data>
<data name="categoryExport" xml:space="preserve">
<value>[0] 导出</value>
</data>
<data name="categoryFormatParameters" xml:space="preserve">
<value>[3] 格式参数</value>
</data>
<data name="categoryPreview" xml:space="preserve">
<value>[1] 预览</value>
</data>
<data name="countInfoStatusMidfix" xml:space="preserve">
<value> 项,共 </value>
</data>
<data name="countInfoStatusPrefix" xml:space="preserve">
<value>已选择 </value>
</data>
<data name="countInfoStatusSuffix" xml:space="preserve">
<value> 项</value>
</data>
<data name="debug" xml:space="preserve">
<value>调试</value>
</data>
<data name="descAssociatedSpineListView" xml:space="preserve">
<value>相关联的 SpineListView</value>
</data>
<data name="descDisplayImageProperties" xml:space="preserve">
<value>用于显示画面属性的属性页</value>
</data>
<data name="descAvifEncoder" xml:space="preserve">
<value>-c:v, 要使用的编码器\n建议使用硬件加速, libaom-av1 速度非常非常非常慢</value>
</data>
<data name="descModelAttributes" xml:space="preserve">
<value>用于显示模型属性的组合属性页</value>
</data>
<data name="displayBackgroundColor" xml:space="preserve">
<value>背景颜色</value>
</data>
<data name="displayCenter" xml:space="preserve">
<value>画面中心点</value>
</data>
<data name="displayEncoder" xml:space="preserve">
<value>编码器</value>
</data>
<data name="displayFlipHorizontal" xml:space="preserve">
<value>水平翻转</value>
</data>
<data name="displayFlipVertical" xml:space="preserve">
<value>垂直翻转</value>
</data>
<data name="displayMaximumFrameRate" xml:space="preserve">
<value>最大帧率</value>
</data>
<data name="displayRenderSelected" xml:space="preserve">
<value>仅渲染选中</value>
</data>
<data name="displayResolution" xml:space="preserve">
<value>分辨率</value>
</data>
<data name="displayRotation" xml:space="preserve">
<value>旋转</value>
</data>
<data name="displayShowAxis" xml:space="preserve">
<value>显示坐标轴</value>
</data>
<data name="displayZoom" xml:space="preserve">
<value>缩放</value>
</data>
<data name="duration" xml:space="preserve">
<value>时长</value>
</data>
<data name="errorLoadSkeleton" xml:space="preserve">
<value>骨骼加载失败</value>
</data>
<data name="fileVersion" xml:space="preserve">
<value>文件版本</value>
</data>
<data name="flipX" xml:space="preserve">
<value>水平翻转</value>
</data>
<data name="flipY" xml:space="preserve">
<value>垂直翻转</value>
</data>
<data name="formatExceptionParseColor" xml:space="preserve">
<value>无法解析颜色,请使用 #RRGGBBAA、#RRGGBB、#RGBA 或 #RGB 格式</value>
</data>
<data name="formatExceptionParseColorError" xml:space="preserve">
<value>无法解析颜色,请检查格式</value>
</data>
<data name="formatExceptionUnknownColor" xml:space="preserve">
<value>无法解析颜色,请使用已知的颜色名称</value>
</data>
<data name="isHidden" xml:space="preserve">
<value>是否隐藏</value>
</data>
<data name="itemCountPrefix" xml:space="preserve">
<value>已选择 </value>
</data>
<data name="itemCountSuffix" xml:space="preserve">
<value> 个文件</value>
</data>
<data name="loadAllSkeletonPrefix" xml:space="preserve">
<value>共发现 </value>
</data>
<data name="loadAllSkeletonSuffix" xml:space="preserve">
<value> 个可加载骨骼,数量较多,是否一次性全部加载?</value>
</data>
<data name="maximumTrackLength" xml:space="preserve">
<value>全轨道最大时长</value>
</data>
<data name="msgBoxError" xml:space="preserve">
<value>错误信息</value>
</data>
<data name="msgBoxInfo" xml:space="preserve">
<value>提示信息</value>
</data>
<data name="msgBoxQuest" xml:space="preserve">
<value>操作确认</value>
</data>
<data name="msgBoxWarning" xml:space="preserve">
<value>警告信息</value>
</data>
<data name="name" xml:space="preserve">
<value>名称</value>
</data>
<data name="notifyCopyGithubLink" xml:space="preserve">
<value>链接已复制到剪贴板,请前往浏览器进行访问</value>
</data>
<data name="parameterError" xml:space="preserve">
<value>参数错误</value>
</data>
<data name="position" xml:space="preserve">
<value>位置</value>
</data>
<data name="previewRenderStopped" xml:space="preserve">
<value>预览画面已停止渲染</value>
</data>
<data name="process" xml:space="preserve">
<value>已处理 </value>
</data>
<data name="programCrashed" xml:space="preserve">
<value>程序已崩溃</value>
</data>
<data name="removeAllItemPrefix" xml:space="preserve">
<value>确认移除所有 </value>
</data>
<data name="removeItemConfirmPrefix" xml:space="preserve">
<value>确定移除所选 </value>
</data>
<data name="removeItemConfirmSuffix" xml:space="preserve">
<value> 项吗?</value>
</data>
<data name="render" xml:space="preserve">
<value>渲染</value>
</data>
<data name="resourcesPath" xml:space="preserve">
<value>资源目录</value>
</data>
<data name="restartPrompt" xml:space="preserve">
<value>语言已设为英语。立即重启应用程序吗?</value>
</data>
<data name="restartTitle" xml:space="preserve">
<value>需要重新启动应用程序!</value>
</data>
<data name="runtimeError" xml:space="preserve">
<value>执行出错</value>
</data>
<data name="runtimeVersion" xml:space="preserve">
<value>运行时版本</value>
</data>
<data name="scale" xml:space="preserve">
<value>缩放比例</value>
</data>
<data name="skelNotExist" xml:space="preserve">
<value>skel文件不存在</value>
</data>
<data name="skelPath" xml:space="preserve">
<value>skel文件路径</value>
</data>
<data name="skin" xml:space="preserve">
<value>皮肤</value>
</data>
<data name="slot" xml:space="preserve">
<value>插槽</value>
</data>
<data name="transform" xml:space="preserve">
<value>变换</value>
</data>
<data name="usePremultipliedAlpha" xml:space="preserve">
<value>预乘Alpha通道</value>
</data>
<data name="descCRF" xml:space="preserve">
<value>-crf, 取值范围 0-63, 建议范围 18-28, 默认取值 23, 数值越小则输出质量越高</value>
</data>
<data name="displayPixelFormat" xml:space="preserve">
<value>像素格式</value>
</data>
<data name="descPixelFormat" xml:space="preserve">
<value>-pix_fmt, 要使用的像素格式</value>
</data>
<data name="displayLoopCount" xml:space="preserve">
<value>循环次数</value>
</data>
<data name="descLoopCount" xml:space="preserve">
<value>-loop, 循环次数, 0 无限循环, 取值范围 [0, 65535]</value>
</data>
<data name="invalidInputFolder" xml:space="preserve">
<value>输出文件夹无效</value>
</data>
<data name="folderNotExistPrefix" xml:space="preserve">
<value>文件夹 </value>
</data>
<data name="folderNotExistSuffix" xml:space="preserve">
<value>不存在</value>
</data>
<data name="mustProvideOutputFolder" xml:space="preserve">
<value>导出单个时必须提供输出文件夹</value>
</data>
<data name="categoryFFmpegParameter" xml:space="preserve">
<value>[2] FFmpeg 基本参数</value>
</data>
<data name="displayFileFormat" xml:space="preserve">
<value>文件格式</value>
</data>
<data name="descFileFormat" xml:space="preserve">
<value>-f, 文件格式</value>
</data>
<data name="displayFilenameSuffix" xml:space="preserve">
<value>文件名后缀</value>
</data>
<data name="descFilenameSuffix" xml:space="preserve">
<value>文件名后缀</value>
</data>
<data name="displayOutputFolder" xml:space="preserve">
<value>输出文件夹</value>
</data>
<data name="descOutputFolder" xml:space="preserve">
<value>逐个导出时可以留空,将逐个导出到模型自身所在目录</value>
</data>
<data name="displayExportSingle" xml:space="preserve">
<value>导出单个</value>
</data>
<data name="descExportSingle" xml:space="preserve">
<value>是否将模型在同一个画面上导出单个文件,否则逐个导出模型</value>
</data>
<data name="descResolution" xml:space="preserve">
<value>是否将模型在同一个画面上导出单个文件,否则逐个导出模型</value>
</data>
<data name="displayPreviewViewport" xml:space="preserve">
<value>预览画面视区</value>
</data>
<data name="descPreviewViewport" xml:space="preserve">
<value>预览画面的视区参数,请在预览画面参数面板进行调整</value>
</data>
<data name="descRenderSelected" xml:space="preserve">
<value>是否仅导出选中的模型,请在预览画面参数面板进行调整</value>
</data>
<data name="descBackgroundColor" xml:space="preserve">
<value>要使用的背景色, 格式为 #RRGGBBAA</value>
</data>
<data name="displayMargin" xml:space="preserve">
<value>四周边缘距离</value>
</data>
<data name="descMargin" xml:space="preserve">
<value>画布外部的边缘距离 (Margin), 最终导出的分辨率需要加上这个边距</value>
</data>
<data name="displayPadding" xml:space="preserve">
<value>四周填充距离</value>
</data>
<data name="descPadding" xml:space="preserve">
<value>画布内部的填充距离 (Padding), 导出的分辨率大小不会发生变化, 但是会留有四周空间</value>
</data>
<data name="displayAllowContentOverflow" xml:space="preserve">
<value>允许内容溢出</value>
</data>
<data name="descAllowContentOverflow" xml:space="preserve">
<value>使用预览画面分辨率的情况下, 允许内容溢出到边缘和填充区域</value>
</data>
<data name="displayAutoResolution" xml:space="preserve">
<value>自动分辨率</value>
</data>
<data name="descAutoResolution" xml:space="preserve">
<value>根据导出内容自动设置分辨率, 四周填充距离和内容溢出参数将会被忽略</value>
</data>
<data name="validFormatRequired" xml:space="preserve">
<value>需要提供有效的格式</value>
</data>
<data name="validExtensionRequired" xml:space="preserve">
<value>需要提供有效的文件名后缀</value>
</data>
<data name="descCustomArgument" xml:space="preserve">
<value>使用 \"ffmpeg -h encoder=&lt;编码器&gt;\" 查看编码器支持的参数\n使用 \"ffmpeg -h muxer=&lt;文件格式&gt;\" 查看文件格式支持的参数</value>
</data>
<data name="displayCustomArgument" xml:space="preserve">
<value>自定义参数</value>
</data>
<data name="categorySingleFrame" xml:space="preserve">
<value>[1] 单帧画面</value>
</data>
<data name="displayImageFormat" xml:space="preserve">
<value>图像格式</value>
</data>
<data name="descFileNameExtension" xml:space="preserve">
<value>与图像格式匹配的文件名后缀</value>
</data>
<data name="descDPI" xml:space="preserve">
<value>导出图像的每英寸像素数,用于调整图像的物理尺寸</value>
</data>
<data name="categoryFrameSequenceParameters" xml:space="preserve">
<value>[2] 帧序列参数</value>
</data>
<data name="descFrameFileExtension" xml:space="preserve">
<value>帧文件的后缀,同时决定帧图像格式</value>
</data>
<data name="displayMaxColor" xml:space="preserve">
<value>调色板最大颜色数量</value>
</data>
<data name="descMaxColor" xml:space="preserve">
<value>设置调色板使用的最大颜色数量, 越多则色彩保留程度越高</value>
</data>
<data name="displayAlphaThreshold" xml:space="preserve">
<value>透明度阈值</value>
</data>
<data name="descAlphaThreshold" xml:space="preserve">
<value>小于该值的像素点会被认为是透明像素</value>
</data>
<data name="displayPreset" xml:space="preserve">
<value>预设</value>
</data>
<data name="descPreset" xml:space="preserve">
<value>-profile, 预设配置</value>
</data>
<data name="negativeDuration" xml:space="preserve">
<value>导出单个时导出时长不能为负数</value>
</data>
<data name="frame" xml:space="preserve">
<value>帧</value>
</data>
<data name="categoryVideoParameters" xml:space="preserve">
<value>[1] 视频参数</value>
</data>
<data name="descDuration" xml:space="preserve">
<value>可以从模型列表查看动画时长, 如果小于 0, 则在逐个导出时每个模型使用各自的所有轨道动画时长最大值</value>
</data>
<data name="displayFPS" xml:space="preserve">
<value>帧率</value>
</data>
<data name="descFPS" xml:space="preserve">
<value>每秒画面数</value>
</data>
<data name="displayKeepLastFrame" xml:space="preserve">
<value>保留最后一帧</value>
</data>
<data name="descKeepLastFrame" xml:space="preserve">
<value>当设置保留最后一帧时, 动图会更为连贯, 但是帧数可能比预期帧数多 1</value>
</data>
<data name="displayLoseless" xml:space="preserve">
<value>无损</value>
</data>
<data name="descLoseless" xml:space="preserve">
<value>-lossless, 0 表示有损, 1 表示无损</value>
</data>
<data name="displayQuality" xml:space="preserve">
<value>质量</value>
</data>
<data name="descQuality" xml:space="preserve">
<value>-quality, 取值范围 0-100, 默认值 75</value>
</data>
<data name="failLoadingFragmentShader" xml:space="preserve">
<value>Fragment shader 加载失败预乘Alpha通道属性失效</value>
</data>
<data name="isUpdatingAndManuallyExportFrame" xml:space="preserve">
<value>画面仍在更新,建议手动暂停画面后导出固定的一帧,是否继续?</value>
</data>
</root>

View File

@@ -51,6 +51,17 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
[RotateMode.ChainScale] = "chainScale",
};
private static readonly Dictionary<AttachmentType, string> AttachmentTypeJsonValue = new()
{
[AttachmentType.Region] = "region",
[AttachmentType.Boundingbox] = "bounding",
[AttachmentType.Mesh] = "mesh",
[AttachmentType.Linkedmesh] = "linkedmesh",
[AttachmentType.Path] = "path",
[AttachmentType.Point] = "point",
[AttachmentType.Clipping] = "clipping",
};
private BinaryReader reader = null;
private JsonObject root = null;
private bool nonessential = false;
@@ -110,7 +121,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
private void ReadStrings()
{
for (int n = reader.ReadVarInt(); n > 0; n--)
for (int i = 0, n = reader.ReadVarInt(); i < n; i++)
reader.StringTable.Add(reader.ReadString());
}
@@ -142,7 +153,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
{
JsonArray bones = root["bones"].AsArray();
JsonArray slots = [];
for (int n = reader.ReadVarInt(); n > 0; n--)
for (int i = 0, n = reader.ReadVarInt(); i < n; i++)
{
JsonObject data = [];
data["name"] = reader.ReadString();
@@ -151,7 +162,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
int dark = reader.ReadInt();
if (dark != -1) data["dark"] = dark.ToString("x6"); // 0x00rrggbb -> rrggbb
data["attachment"] = reader.ReadStringRef();
data["blend"] = BlendModeJsonValue[((BlendMode)reader.ReadVarInt())];
data["blend"] = BlendModeJsonValue[(BlendMode)reader.ReadVarInt()];
slots.Add(data);
}
root["slots"] = slots;
@@ -161,7 +172,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
{
JsonArray bones = root["bones"].AsArray();
JsonArray ik = [];
for (int n = reader.ReadVarInt(); n > 0; n--)
for (int i = 0, n = reader.ReadVarInt(); i < n; i++)
{
JsonObject data = [];
data["name"] = reader.ReadString();
@@ -184,7 +195,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
{
JsonArray bones = root["bones"].AsArray();
JsonArray transform = [];
for (int n = reader.ReadVarInt(); n > 0; n--)
for (int i = 0, n = reader.ReadVarInt(); i < n; i++)
{
JsonObject data = [];
data["name"] = reader.ReadString();
@@ -212,18 +223,19 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
private void ReadPath()
{
JsonArray bones = root["bones"].AsArray();
JsonArray slots = root["slots"].AsArray();
JsonArray path = [];
for (int n = reader.ReadVarInt(); n > 0; n--)
for (int i = 0, n = reader.ReadVarInt(); i < n; i++)
{
JsonObject data = [];
data["name"] = reader.ReadString();
data["order"] = reader.ReadVarInt();
data["skin"] = reader.ReadBoolean();
data["bones"] = ReadNames(bones);
data["target"] = (string)bones[reader.ReadVarInt()]["name"];
data["positionMode"] = PositionModeJsonValue[((PositionMode)reader.ReadVarInt())];
data["spacingMode"] = SpacingModeJsonValue[((SpacingMode)reader.ReadVarInt())];
data["rotateMode"] = RotateModeJsonValue[((RotateMode)reader.ReadVarInt())];
data["target"] = (string)slots[reader.ReadVarInt()]["name"];
data["positionMode"] = PositionModeJsonValue[(PositionMode)reader.ReadVarInt()];
data["spacingMode"] = SpacingModeJsonValue[(SpacingMode)reader.ReadVarInt()];
data["rotateMode"] = RotateModeJsonValue[(RotateMode)reader.ReadVarInt()];
data["rotation"] = reader.ReadFloat();
data["position"] = reader.ReadFloat();
data["spacing"] = reader.ReadFloat();
@@ -272,11 +284,11 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
JsonArray slots = root["slots"].AsArray();
JsonObject skinAttachments = [];
while (slotCount-- > 0)
for (int i = 0; i < slotCount; i++)
{
JsonObject slotAttachments = [];
skinAttachments[(string)slots[reader.ReadVarInt()]["name"]] = slotAttachments;
for (int attachmentCount = reader.ReadVarInt(); attachmentCount > 0; attachmentCount--)
for (int ii = 0, attachmentCount = reader.ReadVarInt(); ii < attachmentCount; ii++)
{
var attachmentKey = reader.ReadStringRef();
slotAttachments[attachmentKey] = ReadAttachment(attachmentKey);
@@ -294,10 +306,10 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
int vertexCount;
string path;
string name = reader.ReadStringRef() ?? keyName;
var name = reader.ReadStringRef() ?? keyName;
var type = (AttachmentType)reader.ReadByte();
attachment["name"] = name;
attachment["type"] = type.ToString();
attachment["type"] = AttachmentTypeJsonValue[type];
switch (type)
{
case AttachmentType.Region:
@@ -346,7 +358,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
attachment["width"] = reader.ReadFloat();
attachment["height"] = reader.ReadFloat();
}
// 补充缺失的必需 key
// 补充 Json 中的必需 key
attachment["uvs"] = new JsonArray();
attachment["triangles"] = new JsonArray();
attachment["vertices"] = new JsonArray();
@@ -383,7 +395,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
{
idx2event.Clear();
JsonObject events = [];
for (int n = reader.ReadVarInt(); n > 0; n--)
for (int i = 0, n = reader.ReadVarInt(); i < n; i++)
{
JsonObject data = [];
var name = reader.ReadStringRef();
@@ -406,7 +418,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
private void ReadAnimations()
{
JsonObject animations = [];
for (int n = reader.ReadVarInt(); n > 0; n--)
for (int i = 0, n = reader.ReadVarInt(); i < n; i++)
{
JsonObject data = [];
animations[reader.ReadString()] = data;
@@ -416,7 +428,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
if (ReadTransformTimelines() is JsonObject transform) data["transform"] = transform;
if (ReadPathTimelines() is JsonObject path) data["path"] = path;
if (ReadDeformTimelines() is JsonObject deform) data["deform"] = deform;
if (ReadDrawOrderTimelines() is JsonArray draworder) data["draworder"] = draworder;
if (ReadDrawOrderTimelines() is JsonArray draworder) data["drawOrder"] = draworder;
if (ReadEventTimelines() is JsonArray events) data["events"] = events;
}
root["animations"] = animations;
@@ -427,11 +439,11 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
JsonArray slots = root["slots"].AsArray();
JsonObject slotTimelines = [];
for (int slotCount = reader.ReadVarInt(); slotCount > 0; slotCount--)
for (int i = 0, slotCount = reader.ReadVarInt(); i < slotCount; i++)
{
JsonObject timeline = [];
slotTimelines[(string)slots[reader.ReadVarInt()]["name"]] = timeline;
for (int timelineCount = reader.ReadVarInt(); timelineCount > 0; timelineCount--)
for (int ii = 0, timelineCount = reader.ReadVarInt(); ii < timelineCount; ii++)
{
JsonArray frames = [];
var type = reader.ReadByte();
@@ -490,11 +502,11 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
JsonArray bones = root["bones"].AsArray();
JsonObject boneTimelines = [];
for (int boneCount = reader.ReadVarInt(); boneCount > 0; boneCount--)
for (int i = 0, boneCount = reader.ReadVarInt(); i < boneCount; i++)
{
JsonObject timeline = [];
boneTimelines[(string)bones[reader.ReadVarInt()]["name"]] = timeline;
for (int timelineCount = reader.ReadVarInt(); timelineCount > 0; timelineCount--)
for (int ii = 0, timelineCount = reader.ReadVarInt(); ii < timelineCount; ii++)
{
JsonArray frames = [];
var type = reader.ReadByte();
@@ -570,11 +582,11 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
JsonArray ik = root["ik"].AsArray();
JsonObject ikTimelines = [];
for (int ikCount = reader.ReadVarInt(); ikCount > 0; ikCount--)
for (int i = 0, ikCount = reader.ReadVarInt(); i < ikCount; i++)
{
JsonArray frames = [];
ikTimelines[(string)ik[reader.ReadVarInt()]["name"]] = frames;
for (int frameCount = reader.ReadVarInt(); frameCount > 0; frameCount--)
for (int frameIdx = 0, frameCount = reader.ReadVarInt(); frameIdx < frameCount; frameIdx ++)
{
var o = new JsonObject()
{
@@ -585,7 +597,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
["compress"] = reader.ReadBoolean(),
["stretch"] = reader.ReadBoolean(),
};
if (frameCount > 1) ReadCurve(o);
if (frameIdx < frameCount - 1) ReadCurve(o);
frames.Add(o);
}
}
@@ -598,11 +610,11 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
JsonArray transform = root["transform"].AsArray();
JsonObject transformTimelines = [];
for (int transformCount = reader.ReadVarInt(); transformCount > 0; transformCount--)
for (int i = 0, transformCount = reader.ReadVarInt(); i < transformCount; i++)
{
JsonArray frames = [];
transformTimelines[(string)transform[reader.ReadVarInt()]["name"]] = frames;
for (int frameCount = reader.ReadVarInt(); frameCount > 0; frameCount--)
for (int frameIdx = 0, frameCount = reader.ReadVarInt(); frameIdx < frameCount; frameIdx++)
{
var o = new JsonObject()
{
@@ -612,7 +624,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
["scaleMix"] = reader.ReadFloat(),
["shearMix"] = reader.ReadFloat(),
};
if (frameCount > 1) ReadCurve(o);
if (frameIdx < frameCount - 1) ReadCurve(o);
frames.Add(o);
}
}
@@ -625,11 +637,11 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
JsonArray path = root["path"].AsArray();
JsonObject pathTimelines = [];
for (int pathCount = reader.ReadVarInt(); pathCount > 0; pathCount--)
for (int i = 0, pathCount = reader.ReadVarInt(); i < pathCount; i++)
{
JsonObject timeline = [];
pathTimelines[(string)path[reader.ReadVarInt()]["name"]] = timeline;
for (int timelineCount = reader.ReadVarInt(); timelineCount > 0; timelineCount--)
for (int ii = 0, timelineCount = reader.ReadVarInt(); ii < timelineCount; ii++)
{
JsonArray frames = [];
var type = reader.ReadSByte();
@@ -691,15 +703,15 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
JsonArray skins = root["skins"].AsArray();
JsonObject deformTimelines = [];
for (int skinCount = reader.ReadVarInt(); skinCount > 0; skinCount--)
for (int i = 0, skinCount = reader.ReadVarInt(); i < skinCount; i++)
{
JsonObject skinValue = [];
deformTimelines[(string)skins[reader.ReadVarInt()]["name"]] = skinValue;
for (int slotCount = reader.ReadVarInt(); slotCount > 0; slotCount--)
for (int ii = 0, slotCount = reader.ReadVarInt(); ii < slotCount; ii++)
{
JsonObject slotValue = [];
skinValue[(string)slots[reader.ReadVarInt()]["name"]] = slotValue;
for (int attachmentCount = reader.ReadVarInt(); attachmentCount > 0; attachmentCount--)
for (int iii = 0, attachmentCount = reader.ReadVarInt(); iii < attachmentCount; iii++)
{
JsonArray frames = [];
slotValue[reader.ReadStringRef()] = frames;
@@ -730,7 +742,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
JsonArray slots = root["slots"].AsArray();
JsonArray drawOrderTimelines = [];
for (int drawOrderCount = reader.ReadVarInt(); drawOrderCount > 0; drawOrderCount--)
for (int i = 0, drawOrderCount = reader.ReadVarInt(); i < drawOrderCount; i++)
{
JsonObject data = new()
{
@@ -738,7 +750,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
};
JsonArray offsets = [];
data["offsets"] = offsets;
for (int offsetCount = reader.ReadVarInt(); offsetCount > 0; offsetCount--)
for (int ii = 0, offsetCount = reader.ReadVarInt(); ii < offsetCount; ii++)
{
offsets.Add(new JsonObject()
{
@@ -755,7 +767,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
private JsonArray? ReadEventTimelines()
{
JsonArray eventTimelines = [];
for (int eventCount = reader.ReadVarInt(); eventCount > 0; eventCount--)
for (int i = 0, eventCount = reader.ReadVarInt(); i < eventCount; i++)
{
JsonObject data = [];
data["time"] = reader.ReadFloat();
@@ -778,7 +790,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
private JsonArray ReadNames(JsonArray array)
{
JsonArray names = [];
for (int n = reader.ReadVarInt(); n > 0; n--)
for (int i = 0, n = reader.ReadVarInt(); i < n; i++)
names.Add((string)array[reader.ReadVarInt()]["name"]);
return names;
}
@@ -786,7 +798,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
private JsonArray ReadFloatArray(int n)
{
JsonArray array = [];
while (n-- > 0)
for (int i = 0; i < n; i++)
array.Add(reader.ReadFloat());
return array;
}
@@ -837,7 +849,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
obj["c4"] = reader.ReadFloat();
break;
default:
throw new ArgumentOutOfRangeException($"Invalid curve type: {type}"); ;
throw new ArgumentOutOfRangeException($"Invalid curve type: {type}");
}
}
@@ -897,16 +909,16 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
var version = (string)skeleton["spine"];
if (version == "3.8.75") version = "3.8.76"; // replace 3.8.75 to another version to avoid detection in official runtime
writer.WriteString(version);
if (skeleton["x"] is JsonValue x) writer.WriteFloat((float)x); else writer.WriteFloat(0);
if (skeleton["y"] is JsonValue y) writer.WriteFloat((float)y); else writer.WriteFloat(0);
if (skeleton["width"] is JsonValue width) writer.WriteFloat((float)width); else writer.WriteFloat(0);
if (skeleton["height"] is JsonValue height) writer.WriteFloat((float)height); else writer.WriteFloat(0);
writer.WriteFloat((float)(skeleton["x"] ?? 0f));
writer.WriteFloat((float)(skeleton["y"] ?? 0f));
writer.WriteFloat((float)(skeleton["width"] ?? 0f));
writer.WriteFloat((float)(skeleton["height"] ?? 0f));
writer.WriteBoolean(nonessential);
if (nonessential)
{
if (skeleton["fps"] is JsonValue fps) writer.WriteFloat((float)fps); else writer.WriteFloat(30);
if (skeleton["images"] is JsonValue images) writer.WriteString((string)images); else writer.WriteString(null);
if (skeleton["audio"] is JsonValue audio) writer.WriteString((string)audio); else writer.WriteString(null);
writer.WriteFloat((float)(skeleton["fps"] ?? 30f));
writer.WriteString((string)skeleton["images"]);
writer.WriteString((string)skeleton["audio"]);
}
}
@@ -932,16 +944,16 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
var name = (string)data["name"];
writer.WriteString(name);
if (i > 0) writer.WriteVarInt(bone2idx[(string)data["parent"]]);
if (data["rotation"] is JsonValue rotation) writer.WriteFloat((float)rotation); else writer.WriteFloat(0);
if (data["x"] is JsonValue x) writer.WriteFloat((float)x); else writer.WriteFloat(0);
if (data["y"] is JsonValue y) writer.WriteFloat((float)y); else writer.WriteFloat(0);
if (data["scaleX"] is JsonValue scaleX) writer.WriteFloat((float)scaleX); else writer.WriteFloat(1);
if (data["scaleY"] is JsonValue scaleY) writer.WriteFloat((float)scaleY); else writer.WriteFloat(1);
if (data["shearX"] is JsonValue shearX) writer.WriteFloat((float)shearX); else writer.WriteFloat(0);
if (data["shearY"] is JsonValue shearY) writer.WriteFloat((float)shearY); else writer.WriteFloat(0);
if (data["length"] is JsonValue length) writer.WriteFloat((float)length); else writer.WriteFloat(0);
if (data["transform"] is JsonValue transform) writer.WriteVarInt(Array.IndexOf(SkeletonBinary.TransformModeValues, Enum.Parse<TransformMode>((string)transform, true))); else writer.WriteVarInt(0);
if (data["skin"] is JsonValue skin) writer.WriteBoolean((bool)skin); else writer.WriteBoolean(false);
writer.WriteFloat((float)(data["rotation"] ?? 0f));
writer.WriteFloat((float)(data["x"] ?? 0f));
writer.WriteFloat((float)(data["y"] ?? 0f));
writer.WriteFloat((float)(data["scaleX"] ?? 1f));
writer.WriteFloat((float)(data["scaleY"] ?? 1f));
writer.WriteFloat((float)(data["shearX"] ?? 0f));
writer.WriteFloat((float)(data["shearY"] ?? 0f));
writer.WriteFloat((float)(data["length"] ?? 0f));
writer.WriteVarInt(Array.IndexOf(SkeletonBinary.TransformModeValues, Enum.Parse<TransformMode>((string)(data["transform"] ?? "normal"), true)));
writer.WriteBoolean((bool)(data["skin"] ?? false));
if (nonessential) writer.WriteInt(0);
bone2idx[name] = i;
}
@@ -962,10 +974,10 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
var name = (string)data["name"];
writer.WriteString(name);
writer.WriteVarInt(bone2idx[(string)data["bone"]]);
if (data["color"]is JsonValue color) writer.WriteInt(int.Parse((string)color, NumberStyles.HexNumber)); else writer.WriteInt(-1); // 默认值是全 255
if (data["dark"] is JsonValue dark) writer.WriteInt(int.Parse((string)dark, NumberStyles.HexNumber)); else writer.WriteInt(-1);
if (data["attachment"] is JsonValue attachment) writer.WriteStringRef((string)attachment); else writer.WriteStringRef(null);
if (data["blend"] is JsonValue blend) writer.WriteVarInt((int)Enum.Parse<BlendMode>((string)blend, true)); else writer.WriteVarInt((int)BlendMode.Normal);
writer.WriteInt(int.Parse((string)(data["color"] ?? "ffffffff"), NumberStyles.HexNumber));
writer.WriteInt(int.Parse((string)(data["dark"] ?? "ffffff"), NumberStyles.HexNumber));
writer.WriteStringRef((string)data["attachment"]);
writer.WriteVarInt((int)Enum.Parse<BlendMode>((string)(data["blend"] ?? "normal"), true));
slot2idx[name] = i;
}
}
@@ -984,16 +996,16 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
JsonObject data = ik[i].AsObject();
var name = (string)data["name"];
writer.WriteString(name);
if (data["order"] is JsonValue order) writer.WriteVarInt((int)order); else writer.WriteVarInt(0);
if (data["skin"] is JsonValue skin) writer.WriteBoolean((bool)skin); else writer.WriteBoolean(false);
writer.WriteVarInt((int)(data["order"] ?? 0));
writer.WriteBoolean((bool)(data["skin"] ?? false));
if (data["bones"] is JsonArray bones) WriteNames(bone2idx, bones); else writer.WriteVarInt(0);
writer.WriteVarInt(bone2idx[(string)data["target"]]);
if (data["mix"] is JsonValue mix) writer.WriteFloat((float)mix); else writer.WriteFloat(1);
if (data["softness"] is JsonValue softness) writer.WriteFloat((float)softness); else writer.WriteFloat(0);
if (data["bendPositive"] is JsonValue bendPositive) writer.WriteSByte((sbyte)((bool)bendPositive ? 1 : -1)); else writer.WriteSByte(1);
if (data["compress"] is JsonValue compress) writer.WriteBoolean((bool)compress); else writer.WriteBoolean(false);
if (data["stretch"] is JsonValue stretch) writer.WriteBoolean((bool)stretch); else writer.WriteBoolean(false);
if (data["uniform"] is JsonValue uniform) writer.WriteBoolean((bool)uniform); else writer.WriteBoolean(false);
writer.WriteFloat((float)(data["mix"] ?? 1f));
writer.WriteFloat((float)(data["softness"] ?? 0f));
writer.WriteSByte((sbyte)((bool)(data["bendPositive"] ?? true) ? 1 : -1));
writer.WriteBoolean((bool)(data["compress"] ?? false));
writer.WriteBoolean((bool)(data["stretch"] ?? false));
writer.WriteBoolean((bool)(data["uniform"] ?? false));
ik2idx[name] = i;
}
}
@@ -1012,22 +1024,22 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
JsonObject data = transform[i].AsObject();
var name = (string)data["name"];
writer.WriteString(name);
if (data["order"] is JsonValue order) writer.WriteVarInt((int)order); else writer.WriteVarInt(0);
if (data["skin"] is JsonValue skin) writer.WriteBoolean((bool)skin); else writer.WriteBoolean(false);
writer.WriteVarInt((int)(data["order"] ?? 0));
writer.WriteBoolean((bool)(data["skin"] ?? false));
if (data["bones"] is JsonArray bones) WriteNames(bone2idx, bones); else writer.WriteVarInt(0);
writer.WriteVarInt(bone2idx[(string)data["target"]]);
if (data["local"] is JsonValue local) writer.WriteBoolean((bool)local); else writer.WriteBoolean(false);
if (data["relative"] is JsonValue relative) writer.WriteBoolean((bool)relative); else writer.WriteBoolean(false);
if (data["rotation"] is JsonValue rotation) writer.WriteFloat((float)rotation); else writer.WriteFloat(0);
if (data["x"] is JsonValue x) writer.WriteFloat((float)x); else writer.WriteFloat(0);
if (data["y"] is JsonValue y) writer.WriteFloat((float)y); else writer.WriteFloat(0);
if (data["scaleX"] is JsonValue scaleX) writer.WriteFloat((float)scaleX); else writer.WriteFloat(0);
if (data["scaleY"] is JsonValue scaleY) writer.WriteFloat((float)scaleY); else writer.WriteFloat(0);
if (data["shearY"] is JsonValue shearY) writer.WriteFloat((float)shearY); else writer.WriteFloat(0);
if (data["rotateMix"] is JsonValue rotateMix) writer.WriteFloat((float)rotateMix); else writer.WriteFloat(1);
if (data["translateMix"] is JsonValue translateMix) writer.WriteFloat((float)translateMix); else writer.WriteFloat(1);
if (data["scaleMix"] is JsonValue scaleMix) writer.WriteFloat((float)scaleMix); else writer.WriteFloat(1);
if (data["shearMix"] is JsonValue shearMix) writer.WriteFloat((float)shearMix); else writer.WriteFloat(1);
writer.WriteBoolean((bool)(data["local"] ?? false));
writer.WriteBoolean((bool)(data["relative"] ?? false));
writer.WriteFloat((float)(data["rotation"] ?? 0f));
writer.WriteFloat((float)(data["x"] ?? 0f));
writer.WriteFloat((float)(data["y"] ?? 0f));
writer.WriteFloat((float)(data["scaleX"] ?? 0f));
writer.WriteFloat((float)(data["scaleY"] ?? 0f));
writer.WriteFloat((float)(data["shearY"] ?? 0f));
writer.WriteFloat((float)(data["rotateMix"] ?? 1f));
writer.WriteFloat((float)(data["translateMix"] ?? 1f));
writer.WriteFloat((float)(data["scaleMix"] ?? 1f));
writer.WriteFloat((float)(data["shearMix"] ?? 1f));
transform2idx[name] = i;
}
}
@@ -1046,18 +1058,18 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
JsonObject data = path[i].AsObject();
var name = (string)data["name"];
writer.WriteString(name);
if (data["order"] is JsonValue order) writer.WriteVarInt((int)order); else writer.WriteVarInt(0);
if (data["skin"] is JsonValue skin) writer.WriteBoolean((bool)skin); else writer.WriteBoolean(false);
writer.WriteVarInt((int)(data["order"] ?? 0));
writer.WriteBoolean((bool)(data["skin"] ?? false));
if (data["bones"] is JsonArray bones) WriteNames(bone2idx, bones); else writer.WriteVarInt(0);
writer.WriteVarInt(bone2idx[(string)data["target"]]);
if (data["positionMode"] is JsonValue positionMode) writer.WriteVarInt((int)Enum.Parse<PositionMode>((string)positionMode, true)); else writer.WriteVarInt((int)PositionMode.Percent);
if (data["spacingMode"] is JsonValue spacingMode) writer.WriteVarInt((int)Enum.Parse<SpacingMode>((string)spacingMode, true)); else writer.WriteVarInt((int)SpacingMode.Length);
if (data["rotateMode"] is JsonValue rotateMode) writer.WriteVarInt((int)Enum.Parse<RotateMode>((string)rotateMode, true)); else writer.WriteVarInt((int)RotateMode.Tangent);
if (data["rotation"] is JsonValue rotation) writer.WriteFloat((float)rotation); else writer.WriteFloat(0);
if (data["position"] is JsonValue position) writer.WriteFloat((float)position); else writer.WriteFloat(0);
if (data["spacing"] is JsonValue spacing) writer.WriteFloat((float)spacing); else writer.WriteFloat(0);
if (data["rotateMix"] is JsonValue rotateMix) writer.WriteFloat((float)rotateMix); else writer.WriteFloat(1);
if (data["translateMix"] is JsonValue translateMix) writer.WriteFloat((float)translateMix); else writer.WriteFloat(1);
writer.WriteVarInt(slot2idx[(string)data["target"]]);
writer.WriteVarInt((int)Enum.Parse<PositionMode>((string)(data["positionMode"] ?? "percent"), true));
writer.WriteVarInt((int)Enum.Parse<SpacingMode>((string)(data["spacingMode"] ?? "length"), true));
writer.WriteVarInt((int)Enum.Parse<RotateMode>((string)(data["rotateMode"] ?? "tangent"), true));
writer.WriteFloat((float)(data["rotation"] ?? 0f));
writer.WriteFloat((float)(data["position"] ?? 0f));
writer.WriteFloat((float)(data["spacing"] ?? 0f));
writer.WriteFloat((float)(data["rotateMix"] ?? 1f));
writer.WriteFloat((float)(data["translateMix"] ?? 1f));
path2idx[name] = i;
}
}
@@ -1068,7 +1080,6 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
{
writer.WriteVarInt(0); // default 的 slotCount
writer.WriteVarInt(0); // 其他皮肤数量
skin2idx["default"] = skin2idx.Count;
return;
}
@@ -1157,68 +1168,68 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
switch (type)
{
case AttachmentType.Region:
if (attachment["path"] is JsonValue path1) writer.WriteStringRef((string)path1); else writer.WriteStringRef(null);
if (attachment["rotation"] is JsonValue rotation1) writer.WriteFloat((float)rotation1); else writer.WriteFloat(0);
if (attachment["x"] is JsonValue x1) writer.WriteFloat((float)x1); else writer.WriteFloat(0);
if (attachment["y"] is JsonValue y1) writer.WriteFloat((float)y1); else writer.WriteFloat(0);
if (attachment["scaleX"] is JsonValue scaleX) writer.WriteFloat((float)scaleX); else writer.WriteFloat(1);
if (attachment["scaleY"] is JsonValue scaleY) writer.WriteFloat((float)scaleY); else writer.WriteFloat(1);
if (attachment["width"] is JsonValue width) writer.WriteFloat((float)width); else writer.WriteFloat(32);
if (attachment["height"] is JsonValue height) writer.WriteFloat((float)height); else writer.WriteFloat(32);
if (attachment["color"] is JsonValue color1) writer.WriteInt(int.Parse((string)color1, NumberStyles.HexNumber)); else writer.WriteInt(-1);
writer.WriteStringRef((string)attachment["path"]);
writer.WriteFloat((float)(attachment["rotation"] ?? 0f));
writer.WriteFloat((float)(attachment["x"] ?? 0f));
writer.WriteFloat((float)(attachment["y"] ?? 0f));
writer.WriteFloat((float)(attachment["scaleX"] ?? 1f));
writer.WriteFloat((float)(attachment["scaleY"] ?? 1f));
writer.WriteFloat((float)(attachment["width"] ?? 32f));
writer.WriteFloat((float)(attachment["height"] ?? 32f));
writer.WriteInt(int.Parse((string)(attachment["color"] ?? "ffffffff"), NumberStyles.HexNumber));
break;
case AttachmentType.Boundingbox:
if (attachment["vertexCount"] is JsonValue _vertexCount1) vertexCount = (int)_vertexCount1; else vertexCount = 0;
vertexCount = (int)(attachment["vertexCount"] ?? 0);
writer.WriteVarInt(vertexCount);
WriteVertices(attachment["vertices"].AsArray(), vertexCount);
if (nonessential) writer.WriteInt(0);
break;
case AttachmentType.Mesh:
if (attachment["path"] is JsonValue path2) writer.WriteStringRef((string)path2); else writer.WriteStringRef(null);
if (attachment["color"] is JsonValue color2) writer.WriteInt(int.Parse((string)color2, NumberStyles.HexNumber)); else writer.WriteInt(-1);
writer.WriteStringRef((string)attachment["path"]);
writer.WriteInt(int.Parse((string)(attachment["color"] ?? "ffffffff"), NumberStyles.HexNumber));
vertexCount = attachment["uvs"].AsArray().Count >> 1;
writer.WriteVarInt(vertexCount);
WriteFloatArray(attachment["uvs"].AsArray(), vertexCount << 1); // vertexCount = uvs.Length >> 1
WriteShortArray(attachment["triangles"].AsArray());
WriteVertices(attachment["vertices"].AsArray(), vertexCount);
if (attachment["hull"] is JsonValue hull) writer.WriteVarInt((int)hull); else writer.WriteVarInt(0);
writer.WriteVarInt((int)(attachment["hull"] ?? 0));
if (nonessential)
{
if (attachment["edges"] is JsonArray edges) WriteShortArray(edges); else writer.WriteVarInt(0);
if (attachment["width"] is JsonValue _width) writer.WriteFloat((float)_width); else writer.WriteFloat(0);
if (attachment["height"] is JsonValue _height) writer.WriteFloat((float)_height); else writer.WriteFloat(0);
writer.WriteFloat((float)(attachment["width"] ?? 0f));
writer.WriteFloat((float)(attachment["height"] ?? 0f));
}
break;
case AttachmentType.Linkedmesh:
if (attachment["path"] is JsonValue path3) writer.WriteStringRef((string)path3); else writer.WriteStringRef(null);
if (attachment["color"] is JsonValue color3) writer.WriteInt(int.Parse((string)color3, NumberStyles.HexNumber)); else writer.WriteInt(-1);
if (attachment["skin"] is JsonValue skin) writer.WriteStringRef((string)skin); else writer.WriteStringRef(null);
if (attachment["parent"] is JsonValue parent) writer.WriteStringRef((string)parent); else writer.WriteStringRef(null);
if (attachment["deform"] is JsonValue deform) writer.WriteBoolean((bool)deform); else writer.WriteBoolean(true);
writer.WriteStringRef((string)attachment["path"]);
writer.WriteInt(int.Parse((string)(attachment["color"] ?? "ffffffff"), NumberStyles.HexNumber));
writer.WriteStringRef((string)attachment["skin"]);
writer.WriteStringRef((string)attachment["parent"]);
writer.WriteBoolean((bool)(attachment["deform"] ?? true));
if (nonessential)
{
if (attachment["width"] is JsonValue _width) writer.WriteFloat((float)_width); else writer.WriteFloat(0);
if (attachment["height"] is JsonValue _height) writer.WriteFloat((float)_height); else writer.WriteFloat(0);
writer.WriteFloat((float)(attachment["width"] ?? 0f));
writer.WriteFloat((float)(attachment["height"] ?? 0f));
}
break;
case AttachmentType.Path:
if (attachment["closed"] is JsonValue closed) writer.WriteBoolean((bool)closed); else writer.WriteBoolean(false);
if (attachment["constantSpeed"] is JsonValue constantSpeed) writer.WriteBoolean((bool)constantSpeed); else writer.WriteBoolean(true);
if (attachment["vertexCount"] is JsonValue _vertexCount3) vertexCount = (int)_vertexCount3; else vertexCount = 0;
writer.WriteBoolean((bool)(attachment["closed"] ?? false));
writer.WriteBoolean((bool)(attachment["constantSpeed"] ?? true));
vertexCount = (int)(attachment["vertexCount"] ?? 0);
writer.WriteVarInt(vertexCount);
WriteVertices(attachment["vertices"].AsArray(), vertexCount);
WriteFloatArray(attachment["lengths"].AsArray(), vertexCount / 3);
if (nonessential) writer.WriteInt(0);
break;
case AttachmentType.Point:
if (attachment["rotation"] is JsonValue rotation2) writer.WriteFloat((float)rotation2); else writer.WriteFloat(0);
if (attachment["x"] is JsonValue x2) writer.WriteFloat((float)x2); else writer.WriteFloat(0);
if (attachment["y"] is JsonValue y2) writer.WriteFloat((float)y2); else writer.WriteFloat(0);
writer.WriteFloat((float)(attachment["rotation"] ?? 0f));
writer.WriteFloat((float)(attachment["x"] ?? 0f));
writer.WriteFloat((float)(attachment["y"] ?? 0f));
if (nonessential) writer.WriteInt(0);
break;
case AttachmentType.Clipping:
writer.WriteVarInt(slot2idx[(string)attachment["end"]]);
if (attachment["vertexCount"] is JsonValue _vertexCount4) vertexCount = (int)_vertexCount4; else vertexCount = 0;
vertexCount = (int)(attachment["vertexCount"] ?? 0);
writer.WriteVarInt(vertexCount);
WriteVertices(attachment["vertices"].AsArray(), vertexCount);
if (nonessential) writer.WriteInt(0);
@@ -1242,17 +1253,17 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
{
JsonObject data = _data.AsObject();
writer.WriteStringRef(name);
if (data["int"] is JsonValue @int) writer.WriteVarInt((int)@int); else writer.WriteVarInt(0);
if (data["float"] is JsonValue @float) writer.WriteFloat((float)@float); else writer.WriteFloat(0);
if (data["string"] is JsonValue @string) writer.WriteString((string)@string); else writer.WriteString("");
writer.WriteVarInt((int)(data["int"] ?? 0));
writer.WriteFloat((float)(data["float"] ?? 0f));
writer.WriteString((string)(data["string"] ?? ""));
if (data["audio"] is JsonValue _audio)
{
var audio = (string)_audio;
writer.WriteString(audio);
if (audio is not null)
{
if (data["volume"] is JsonValue volume) writer.WriteFloat((float)volume); else writer.WriteFloat(1);
if (data["balance"] is JsonValue balance) writer.WriteFloat((float)balance); else writer.WriteFloat(0);
writer.WriteFloat((float)(data["volume"] ?? 1f));
writer.WriteFloat((float)(data["balance"] ?? 0f));
}
}
else
@@ -1282,9 +1293,10 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
if (data["ik"] is JsonObject ik) WriteIKTimelines(ik); else writer.WriteVarInt(0);
if (data["transform"] is JsonObject transform) WriteTransformTimelines(transform); else writer.WriteVarInt(0);
if (data["path"] is JsonObject path) WritePathTimelines(path); else writer.WriteVarInt(0);
if (data["deform"] is JsonObject deform) WriteDeformTimelines(deform); else writer.WriteVarInt(0);
if (data["drawOrder"] is JsonArray drawOrder) WriteDrawOrderTimelines(drawOrder); else
if (data["draworder"] is JsonArray draworder) WriteDrawOrderTimelines(draworder); else writer.WriteVarInt(0);
if (data["deform"] is JsonObject deform) WriteDeformTimelines(deform);
if (data["drawOrder"] is JsonArray drawOrder) WriteDrawOrderTimelines(drawOrder);
else if (data["draworder"] is JsonArray draworder) WriteDrawOrderTimelines(draworder);
else writer.WriteVarInt(0);
if (data["events"] is JsonArray events) WriteEventTimelines(events); else writer.WriteVarInt(0);
}
}
@@ -1306,7 +1318,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
writer.WriteVarInt(frames.Count);
foreach (JsonObject o in frames)
{
if (o["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
writer.WriteFloat((float)(o["time"] ?? 0f));
writer.WriteStringRef((string)o["name"]);
}
}
@@ -1317,7 +1329,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
for (int i = 0, n = frames.Count; i < n; i++)
{
JsonObject o = frames[i].AsObject();
if (o["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
writer.WriteFloat((float)(o["time"] ?? 0f));
writer.WriteInt(int.Parse((string)o["color"], NumberStyles.HexNumber));
if (i < n - 1) WriteCurve(o);
}
@@ -1329,7 +1341,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
for (int i = 0, n = frames.Count; i < n; i++)
{
JsonObject o = frames[i].AsObject();
if (o["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
writer.WriteFloat((float)(o["time"] ?? 0f));
writer.WriteInt(int.Parse((string)o["light"], NumberStyles.HexNumber));
writer.WriteInt(int.Parse((string)o["dark"], NumberStyles.HexNumber));
if (i < n - 1) WriteCurve(o);
@@ -1357,8 +1369,8 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
for (int i = 0, n = frames.Count; i < n; i++)
{
JsonObject o = frames[i].AsObject();
if (o["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
if (o["angle"] is JsonValue angle) writer.WriteFloat((float)angle); else writer.WriteFloat(0);
writer.WriteFloat((float)(o["time"] ?? 0f));
writer.WriteFloat((float)(o["angle"] ?? 0f));
if (i < n - 1) WriteCurve(o);
}
}
@@ -1369,9 +1381,9 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
for (int i = 0, n = frames.Count; i < n; i++)
{
JsonObject o = frames[i].AsObject();
if (o["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
if (o["x"] is JsonValue x) writer.WriteFloat((float)x); else writer.WriteFloat(0);
if (o["y"] is JsonValue y) writer.WriteFloat((float)y); else writer.WriteFloat(0);
writer.WriteFloat((float)(o["time"] ?? 0f));
writer.WriteFloat((float)(o["x"] ?? 0f));
writer.WriteFloat((float)(o["y"] ?? 0f));
if (i < n - 1) WriteCurve(o);
}
}
@@ -1382,9 +1394,9 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
for (int i = 0, n = frames.Count; i < n; i++)
{
JsonObject o = frames[i].AsObject();
if (o["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
if (o["x"] is JsonValue x) writer.WriteFloat((float)x); else writer.WriteFloat(1);
if (o["y"] is JsonValue y) writer.WriteFloat((float)y); else writer.WriteFloat(1);
writer.WriteFloat((float)(o["time"] ?? 0f));
writer.WriteFloat((float)(o["x"] ?? 1f));
writer.WriteFloat((float)(o["y"] ?? 1f));
if (i < n - 1) WriteCurve(o);
}
}
@@ -1395,9 +1407,9 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
for (int i = 0, n = frames.Count; i < n; i++)
{
JsonObject o = frames[i].AsObject();
if (o["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
if (o["x"] is JsonValue x) writer.WriteFloat((float)x); else writer.WriteFloat(0);
if (o["y"] is JsonValue y) writer.WriteFloat((float)y); else writer.WriteFloat(0);
writer.WriteFloat((float)(o["time"] ?? 0f));
writer.WriteFloat((float)(o["x"] ?? 0f));
writer.WriteFloat((float)(o["y"] ?? 0f));
if (i < n - 1) WriteCurve(o);
}
}
@@ -1416,12 +1428,12 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
for (int i = 0, n = frames.Count; i < n; i++)
{
JsonObject o = frames[i].AsObject();
if (o["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
if (o["mix"] is JsonValue mix) writer.WriteFloat((float)mix); else writer.WriteFloat(1);
if (o["softness"] is JsonValue softness) writer.WriteFloat((float)softness); else writer.WriteFloat(0);
if (o["bendPositive"] is JsonValue bendPositive) writer.WriteSByte((sbyte)((bool)bendPositive ? 1 : -1)); else writer.WriteSByte(1);
if (o["compress"] is JsonValue compress) writer.WriteBoolean((bool)compress); else writer.WriteBoolean(false);
if (o["stretch"] is JsonValue stretch) writer.WriteBoolean((bool)stretch); else writer.WriteBoolean(false);
writer.WriteFloat((float)(o["time"] ?? 0f));
writer.WriteFloat((float)(o["mix"] ?? 1f));
writer.WriteFloat((float)(o["softness"] ?? 0f));
writer.WriteSByte((sbyte)((bool)(o["bendPositive"] ?? true) ? 1 : -1));
writer.WriteBoolean((bool)(o["compress"] ?? false));
writer.WriteBoolean((bool)(o["stretch"] ?? false));
if (i < n - 1) WriteCurve(o);
}
}
@@ -1438,11 +1450,11 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
for (int i = 0, n = frames.Count; i < n; i++)
{
JsonObject o = frames[i].AsObject();
if (o["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
if (o["rotateMix"] is JsonValue rotateMix) writer.WriteFloat((float)rotateMix); else writer.WriteFloat(1);
if (o["translateMix"] is JsonValue translateMix) writer.WriteFloat((float)translateMix); else writer.WriteFloat(1);
if (o["scaleMix"] is JsonValue scaleMix) writer.WriteFloat((float)scaleMix); else writer.WriteFloat(1);
if (o["shearMix"] is JsonValue shearMix) writer.WriteFloat((float)shearMix); else writer.WriteFloat(1);
writer.WriteFloat((float)(o["time"] ?? 0f));
writer.WriteFloat((float)(o["rotateMix"] ?? 1f));
writer.WriteFloat((float)(o["translateMix"] ?? 1f));
writer.WriteFloat((float)(o["scaleMix"] ?? 1f));
writer.WriteFloat((float)(o["shearMix"] ?? 1f));
if (i < n - 1) WriteCurve(o);
}
}
@@ -1466,8 +1478,8 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
for (int i = 0, n = frames.Count; i < n; i++)
{
JsonObject o = frames[i].AsObject();
if (o["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
if (o["position"] is JsonValue position) writer.WriteFloat((float)position); else writer.WriteFloat(0);
writer.WriteFloat((float)(o["time"] ?? 0f));
writer.WriteFloat((float)(o["position"] ?? 0f));
if (i < n - 1) WriteCurve(o);
}
}
@@ -1478,8 +1490,8 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
for (int i = 0, n = frames.Count; i < n; i++)
{
JsonObject o = frames[i].AsObject();
if (o["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
if (o["spacing"] is JsonValue spacing) writer.WriteFloat((float)spacing); else writer.WriteFloat(0);
writer.WriteFloat((float)(o["time"] ?? 0f));
writer.WriteFloat((float)(o["spacing"] ?? 0f));
if (i < n - 1) WriteCurve(o);
}
}
@@ -1490,9 +1502,9 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
for (int i = 0, n = frames.Count; i < n; i++)
{
JsonObject o = frames[i].AsObject();
if (o["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
if (o["rotateMix"] is JsonValue rotateMix) writer.WriteFloat((float)rotateMix); else writer.WriteFloat(1);
if (o["translateMix"] is JsonValue translateMix) writer.WriteFloat((float)translateMix); else writer.WriteFloat(1);
writer.WriteFloat((float)(o["time"] ?? 0f));
writer.WriteFloat((float)(o["rotateMix"] ?? 1f));
writer.WriteFloat((float)(o["translateMix"] ?? 1f));
if (i < n - 1) WriteCurve(o);
}
}
@@ -1521,13 +1533,13 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
for (int i = 0, n = frames.Count; i < n; i++)
{
JsonObject o = frames[i].AsObject();
if (o["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
writer.WriteFloat((float)(o["time"] ?? 0f));
if (o["vertices"] is JsonArray vertices)
{
writer.WriteVarInt(vertices.Count);
if (vertices.Count > 0)
{
if (o["offset"] is JsonValue offset) writer.WriteVarInt((int)offset); else writer.WriteVarInt(0);
writer.WriteVarInt((int)(o["offset"] ?? 0));
WriteFloatArray(vertices, vertices.Count);
}
}
@@ -1547,7 +1559,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
writer.WriteVarInt(drawOrderTimelines.Count);
foreach (JsonObject data in drawOrderTimelines)
{
if (data["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
writer.WriteFloat((float)(data["time"] ?? 0f));
if (data["offsets"] is JsonArray offsets)
{
writer.WriteVarInt(offsets.Count);
@@ -1572,12 +1584,10 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
foreach(JsonObject data in eventTimelines)
{
JsonObject eventData = events[(string)data["name"]].AsObject();
if (data["time"] is JsonValue time) writer.WriteFloat((float)time); else writer.WriteFloat(0);
writer.WriteFloat((float)(data["time"] ?? 0f));
writer.WriteVarInt(event2idx[(string)data["name"]]);
if (data["int"] is JsonValue @int) writer.WriteVarInt((int)@int); else
if (eventData["int"] is JsonValue @int2) writer.WriteVarInt((int)@int2); else writer.WriteVarInt(0);
if (data["float"] is JsonValue @float) writer.WriteFloat((float)@float); else
if (eventData["float"] is JsonValue @float2) writer.WriteFloat((float)@float2); else writer.WriteFloat(0);
writer.WriteVarInt((int)(data["int"] ?? eventData["int"] ?? 0));
writer.WriteFloat((float)(data["float"] ?? eventData["float"] ?? 0f));
if (data["string"] is JsonValue @string)
{
writer.WriteBoolean(true);
@@ -1590,10 +1600,8 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
if (eventData.ContainsKey("audio"))
{
if (data["volume"] is JsonValue volume) writer.WriteFloat((float)volume); else
if (eventData["volume"] is JsonValue volume2) writer.WriteFloat((float)volume2); else writer.WriteFloat(1);
if (data["balance"] is JsonValue balance) writer.WriteFloat((float)balance); else
if (eventData["balance"] is JsonValue balance2) writer.WriteFloat((float)balance2); else writer.WriteFloat(0);
writer.WriteFloat((float)(data["volume"] ?? eventData["volume"] ?? 1f));
writer.WriteFloat((float)(data["balance"] ?? eventData["balance"] ?? 0f));
}
}
}
@@ -1659,9 +1667,9 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
{
writer.WriteByte(SkeletonBinary.CURVE_BEZIER);
writer.WriteFloat((float)curve);
if (obj["c2"] is JsonValue c2) writer.WriteFloat((float)c2); else writer.WriteFloat(0);
if (obj["c3"] is JsonValue c3) writer.WriteFloat((float)c3); else writer.WriteFloat(1);
if (obj["c4"] is JsonValue c4) writer.WriteFloat((float)c4); else writer.WriteFloat(1);
writer.WriteFloat((float)(obj["c2"] ?? 0f));
writer.WriteFloat((float)(obj["c3"] ?? 1f));
writer.WriteFloat((float)(obj["c4"] ?? 1f));
}
}
else

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -29,26 +29,6 @@ namespace SpineViewer.Spine.Implementations.SpineObject
// };
//}
private class TextureLoader : SpineRuntime21.TextureLoader
{
public void Load(AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == TextureFilter.Linear)
texture.Smooth = true;
if (page.uWrap == TextureWrap.Repeat && page.vWrap == TextureWrap.Repeat)
texture.Repeated = true;
page.rendererObject = texture;
}
public void Unload(object texture)
{
((SFML.Graphics.Texture)texture).Dispose();
}
}
private readonly static TextureLoader textureLoader = new();
private static readonly Animation EmptyAnimation = new(EMPTY_ANIMATION, [], 0);
private readonly Atlas atlas;
@@ -70,7 +50,8 @@ namespace SpineViewer.Spine.Implementations.SpineObject
public SpineObject21(string skelPath, string atlasPath) : base(skelPath, atlasPath)
{
atlas = new Atlas(AtlasPath, textureLoader);
try { atlas = new Atlas(AtlasPath, textureLoader); }
catch (Exception ex) { throw new InvalidDataException($"Failed to load atlas '{atlasPath}'", ex); }
try
{
// 先尝试二进制文件
@@ -90,6 +71,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
catch
{
// 都不行就报错
atlas.Dispose();
throw new InvalidDataException($"Unknown skeleton file format {SkelPath}");
}
}
@@ -116,7 +98,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
atlas.Dispose();
atlas?.Dispose();
}
public override string FileVersion { get => skeletonData.Version; }
@@ -181,12 +163,14 @@ namespace SpineViewer.Spine.Implementations.SpineObject
skeleton.Skin.AddAttachment(k.Key, k.Value, v);
}
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
protected override void clearSkins()
{
skeleton.Skin.Attachments.Clear();
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
protected override int[] getTrackIndices() => animationState.Tracks.Select((_, i) => i).Where(i => animationState.Tracks[i] is not null).ToArray();
@@ -238,10 +222,10 @@ namespace SpineViewer.Spine.Implementations.SpineObject
tmpSkeleton.Update(0);
tmpSkeleton.UpdateWorldTransform();
// 按 10 帧每秒计算边框
// 按 100 帧每秒计算边框
var bounds = getCurrentBounds();
float[] _ = [];
for (float tick = 0, delta = 0.1f; tick < maxDuration; tick += delta)
for (float tick = 0, delta = 0.01f; tick < maxDuration; tick += delta)
{
tmpSkeleton.GetBounds(out var x, out var y, out var w, out var h);
bounds = bounds.Union(new(x, y, w, h));
@@ -276,7 +260,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
SFML.Graphics.Texture texture;
float[] worldVertices = worldVerticesBuffer; // 顶点世界坐标, 连续的 [x0, y0, x1, y1, ...] 坐标值
int worldVerticesCount; // 等于顶点数组的长度除以 2
//int worldVerticesCount; // 等于顶点数组的长度除以 2
int[] worldTriangleIndices; // 三角形索引, 从顶点坐标数组取的时候要乘以 2, 最大值是 worldVerticesCount - 1
int worldTriangleIndicesLength; // 三角形索引数组长度
float[] uvs; // 纹理坐标
@@ -290,7 +274,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
texture = (SFML.Graphics.Texture)((AtlasRegion)regionAttachment.RendererObject).page.rendererObject;
regionAttachment.ComputeWorldVertices(slot.Bone, worldVertices);
worldVerticesCount = 4;
//worldVerticesCount = 4;
worldTriangleIndices = [0, 1, 2, 2, 3, 0];
worldTriangleIndicesLength = 6;
uvs = regionAttachment.UVs;
@@ -306,7 +290,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
if (meshAttachment.Vertices.Length > worldVertices.Length)
worldVertices = worldVerticesBuffer = new float[meshAttachment.Vertices.Length * 2];
meshAttachment.ComputeWorldVertices(slot, worldVertices);
worldVerticesCount = meshAttachment.Vertices.Length / 2;
//worldVerticesCount = meshAttachment.Vertices.Length / 2;
worldTriangleIndices = meshAttachment.Triangles;
worldTriangleIndicesLength = meshAttachment.Triangles.Length;
uvs = meshAttachment.UVs;
@@ -315,6 +299,22 @@ namespace SpineViewer.Spine.Implementations.SpineObject
tintB *= meshAttachment.B;
tintA *= meshAttachment.A;
}
else if (attachment is SkinnedMeshAttachment skinnedMeshAttachment)
{
texture = (SFML.Graphics.Texture)((AtlasRegion)skinnedMeshAttachment.RendererObject).page.rendererObject;
if (skinnedMeshAttachment.UVs.Length > worldVertices.Length)
worldVertices = worldVerticesBuffer = new float[skinnedMeshAttachment.UVs.Length * 2];
skinnedMeshAttachment.ComputeWorldVertices(slot, worldVertices);
//worldVerticesCount = skinnedMeshAttachment.Vertices.Length / 2;
worldTriangleIndices = skinnedMeshAttachment.Triangles;
worldTriangleIndicesLength = skinnedMeshAttachment.Triangles.Length;
uvs = skinnedMeshAttachment.UVs;
tintR *= skinnedMeshAttachment.R;
tintG *= skinnedMeshAttachment.G;
tintB *= skinnedMeshAttachment.B;
tintA *= skinnedMeshAttachment.A;
}
// 2.1.x 不支持剪裁
//else if (attachment is ClippingAttachment clippingAttachment)
//{
@@ -448,6 +448,37 @@ namespace SpineViewer.Spine.Implementations.SpineObject
vt.Position.Y = worldVerticesBuffer[idx2 + 1];
lineVertices.Append(vt); lineVertices.Append(vt);
vt.Position.X = worldVerticesBuffer[idx0];
vt.Position.Y = worldVerticesBuffer[idx0 + 1];
lineVertices.Append(vt);
}
}
else if (slot.Attachment is SkinnedMeshAttachment skinnedMeshAttachment)
{
if (skinnedMeshAttachment.UVs.Length > worldVerticesBuffer.Length)
worldVerticesBuffer = new float[skinnedMeshAttachment.UVs.Length * 2];
skinnedMeshAttachment.ComputeWorldVertices(slot, worldVerticesBuffer);
var triangleIndices = skinnedMeshAttachment.Triangles;
for (int i = 0; i < triangleIndices.Length; i += 3)
{
var idx0 = triangleIndices[i] * 2;
var idx1 = triangleIndices[i + 1] * 2;
var idx2 = triangleIndices[i + 2] * 2;
vt.Position.X = worldVerticesBuffer[idx0];
vt.Position.Y = worldVerticesBuffer[idx0 + 1];
lineVertices.Append(vt);
vt.Position.X = worldVerticesBuffer[idx1];
vt.Position.Y = worldVerticesBuffer[idx1 + 1];
lineVertices.Append(vt); lineVertices.Append(vt);
vt.Position.X = worldVerticesBuffer[idx2];
vt.Position.Y = worldVerticesBuffer[idx2 + 1];
lineVertices.Append(vt); lineVertices.Append(vt);
vt.Position.X = worldVerticesBuffer[idx0];
vt.Position.Y = worldVerticesBuffer[idx0 + 1];
lineVertices.Append(vt);
@@ -470,6 +501,34 @@ namespace SpineViewer.Spine.Implementations.SpineObject
var hullLength = (meshAttachment.HullLength >> 1) << 1;
if (debugMeshHulls && hullLength > 2)
{
vt.Position.X = worldVerticesBuffer[0];
vt.Position.Y = worldVerticesBuffer[1];
lineVertices.Append(vt);
for (int i = 2; i < hullLength; i += 2)
{
vt.Position.X = worldVerticesBuffer[i];
vt.Position.Y = worldVerticesBuffer[i + 1];
lineVertices.Append(vt);
lineVertices.Append(vt);
}
vt.Position.X = worldVerticesBuffer[0];
vt.Position.Y = worldVerticesBuffer[1];
lineVertices.Append(vt);
}
}
else if (slot.Attachment is SkinnedMeshAttachment skinnedMeshAttachment)
{
if (skinnedMeshAttachment.UVs.Length > worldVerticesBuffer.Length)
worldVerticesBuffer = new float[skinnedMeshAttachment.UVs.Length * 2];
skinnedMeshAttachment.ComputeWorldVertices(slot, worldVerticesBuffer);
var hullLength = (skinnedMeshAttachment.HullLength >> 1) << 1;
if (debugMeshHulls && hullLength > 2)
{
vt.Position.X = worldVerticesBuffer[0];

View File

@@ -29,26 +29,6 @@ namespace SpineViewer.Spine.Implementations.SpineObject
};
}
private class TextureLoader : SpineRuntime36.TextureLoader
{
public void Load(AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == TextureFilter.Linear)
texture.Smooth = true;
if (page.uWrap == TextureWrap.Repeat && page.vWrap == TextureWrap.Repeat)
texture.Repeated = true;
page.rendererObject = texture;
}
public void Unload(object texture)
{
((SFML.Graphics.Texture)texture).Dispose();
}
}
private static readonly TextureLoader textureLoader = new();
private static readonly Animation EmptyAnimation = new(EMPTY_ANIMATION, [], 0);
private readonly Atlas atlas;
@@ -69,7 +49,8 @@ namespace SpineViewer.Spine.Implementations.SpineObject
public SpineObject36(string skelPath, string atlasPath) : base(skelPath, atlasPath)
{
atlas = new Atlas(AtlasPath, textureLoader);
try { atlas = new Atlas(AtlasPath, textureLoader); }
catch (Exception ex) { throw new InvalidDataException($"Failed to load atlas '{atlasPath}'", ex); }
try
{
// 先尝试二进制文件
@@ -89,6 +70,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
catch
{
// 都不行就报错
atlas.Dispose();
throw new InvalidDataException($"Unknown skeleton file format {SkelPath}");
}
}
@@ -115,7 +97,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
atlas.Dispose();
atlas?.Dispose();
}
public override string FileVersion { get => skeletonData.Version; }
@@ -180,12 +162,14 @@ namespace SpineViewer.Spine.Implementations.SpineObject
skeleton.Skin.AddAttachment(k.slotIndex, k.name, v);
}
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
protected override void clearSkins()
{
skeleton.Skin.Attachments.Clear();
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
protected override int[] getTrackIndices() => animationState.Tracks.Select((_, i) => i).Where(i => animationState.Tracks.Items[i] is not null).ToArray();
@@ -238,10 +222,10 @@ namespace SpineViewer.Spine.Implementations.SpineObject
tmpSkeleton.Update(0);
tmpSkeleton.UpdateWorldTransform();
// 按 10 帧每秒计算边框
// 按 100 帧每秒计算边框
var bounds = getCurrentBounds();
float[] _ = [];
for (float tick = 0, delta = 0.1f; tick < maxDuration; tick += delta)
for (float tick = 0, delta = 0.01f; tick < maxDuration; tick += delta)
{
tmpSkeleton.GetBounds(out var x, out var y, out var w, out var h, ref _);
bounds = bounds.Union(new(x, y, w, h));

View File

@@ -26,26 +26,6 @@ namespace SpineViewer.Spine.Implementations.SpineObject
};
}
private class TextureLoader : SpineRuntime37.TextureLoader
{
public void Load(AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == TextureFilter.Linear)
texture.Smooth = true;
if (page.uWrap == TextureWrap.Repeat && page.vWrap == TextureWrap.Repeat)
texture.Repeated = true;
page.rendererObject = texture;
}
public void Unload(object texture)
{
((SFML.Graphics.Texture)texture).Dispose();
}
}
private static readonly TextureLoader textureLoader = new();
private static readonly Animation EmptyAnimation = new(EMPTY_ANIMATION, [], 0);
private readonly Atlas atlas;
@@ -66,7 +46,8 @@ namespace SpineViewer.Spine.Implementations.SpineObject
public SpineObject37(string skelPath, string atlasPath) : base(skelPath, atlasPath)
{
atlas = new Atlas(AtlasPath, textureLoader);
try { atlas = new Atlas(AtlasPath, textureLoader); }
catch (Exception ex) { throw new InvalidDataException($"Failed to load atlas '{atlasPath}'", ex); }
try
{
// 先尝试二进制文件
@@ -86,6 +67,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
catch
{
// 都不行就报错
atlas.Dispose();
throw new InvalidDataException($"Unknown skeleton file format {SkelPath}");
}
}
@@ -112,7 +94,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
atlas.Dispose();
atlas?.Dispose();
}
public override string FileVersion { get => skeletonData.Version; }
@@ -177,12 +159,14 @@ namespace SpineViewer.Spine.Implementations.SpineObject
skeleton.Skin.AddAttachment(k.slotIndex, k.name, v);
}
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
protected override void clearSkins()
{
skeleton.Skin.Attachments.Clear();
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
protected override int[] getTrackIndices() => animationState.Tracks.Select((_, i) => i).Where(i => animationState.Tracks.Items[i] is not null).ToArray();
@@ -235,10 +219,10 @@ namespace SpineViewer.Spine.Implementations.SpineObject
tmpSkeleton.Update(0);
tmpSkeleton.UpdateWorldTransform();
// 按 10 帧每秒计算边框
// 按 100 帧每秒计算边框
var bounds = getCurrentBounds();
float[] _ = [];
for (float tick = 0, delta = 0.1f; tick < maxDuration; tick += delta)
for (float tick = 0, delta = 0.01f; tick < maxDuration; tick += delta)
{
tmpSkeleton.GetBounds(out var x, out var y, out var w, out var h, ref _);
bounds = bounds.Union(new(x, y, w, h));

View File

@@ -30,29 +30,6 @@ namespace SpineViewer.Spine.Implementations.SpineObject
};
}
private class TextureLoader : SpineRuntime38.TextureLoader
{
public void Load(AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == TextureFilter.Linear)
texture.Smooth = true;
if (page.uWrap == TextureWrap.Repeat && page.vWrap == TextureWrap.Repeat)
texture.Repeated = true;
page.rendererObject = texture;
// 似乎是不需要设置的, 因为存在某些 png 和 atlas 大小不同的情况, 一般是有一些缩放, 如果设置了反而渲染异常
// page.width = (int)texture.Size.X;
// page.height = (int)texture.Size.Y;
}
public void Unload(object texture)
{
((SFML.Graphics.Texture)texture).Dispose();
}
}
private static readonly TextureLoader textureLoader = new();
private static readonly Animation EmptyAnimation = new(EMPTY_ANIMATION, [], 0);
private readonly Atlas atlas;
@@ -73,7 +50,8 @@ namespace SpineViewer.Spine.Implementations.SpineObject
public SpineObject38(string skelPath, string atlasPath) : base(skelPath, atlasPath)
{
atlas = new Atlas(AtlasPath, textureLoader);
try { atlas = new Atlas(AtlasPath, textureLoader); }
catch (Exception ex) { throw new InvalidDataException($"Failed to load atlas '{atlasPath}'", ex); }
try
{
// 先尝试二进制文件
@@ -93,6 +71,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
catch (Exception ex)
{
// 都不行就报错
atlas.Dispose();
throw new InvalidDataException($"Unknown skeleton file format {SkelPath}", ex);
}
}
@@ -119,7 +98,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
atlas.Dispose();
atlas?.Dispose();
}
public override string FileVersion { get => skeletonData.Version; }
@@ -181,6 +160,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
{
skeleton.Skin.AddSkin(sk);
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
}
@@ -188,6 +168,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
{
skeleton.Skin.Clear();
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
protected override int[] getTrackIndices() => animationState.Tracks.Select((_, i) => i).Where(i => animationState.Tracks.Items[i] is not null).ToArray();
@@ -236,10 +217,10 @@ namespace SpineViewer.Spine.Implementations.SpineObject
tmpSkeleton.Update(0);
tmpSkeleton.UpdateWorldTransform();
// 按 10 帧每秒计算边框
// 按 100 帧每秒计算边框
var bounds = getCurrentBounds();
float[] _ = [];
for (float tick = 0, delta = 0.1f; tick < maxDuration; tick += delta)
for (float tick = 0, delta = 0.01f; tick < maxDuration; tick += delta)
{
tmpSkeleton.GetBounds(out var x, out var y, out var w, out var h, ref _);
bounds = bounds.Union(new(x, y, w, h));

View File

@@ -28,26 +28,6 @@ namespace SpineViewer.Spine.Implementations.SpineObject
};
}
private class TextureLoader : SpineRuntime40.TextureLoader
{
public void Load(AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == TextureFilter.Linear)
texture.Smooth = true;
if (page.uWrap == TextureWrap.Repeat && page.vWrap == TextureWrap.Repeat)
texture.Repeated = true;
page.rendererObject = texture;
}
public void Unload(object texture)
{
((SFML.Graphics.Texture)texture).Dispose();
}
}
private static readonly TextureLoader textureLoader = new();
private static readonly Animation EmptyAnimation = new(EMPTY_ANIMATION, [], 0);
private readonly Atlas atlas;
@@ -68,7 +48,8 @@ namespace SpineViewer.Spine.Implementations.SpineObject
public SpineObject40(string skelPath, string atlasPath) : base(skelPath, atlasPath)
{
atlas = new Atlas(AtlasPath, textureLoader);
try { atlas = new Atlas(AtlasPath, textureLoader); }
catch (Exception ex) { throw new InvalidDataException($"Failed to load atlas '{atlasPath}'", ex); }
try
{
// 先尝试二进制文件
@@ -88,6 +69,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
catch
{
// 都不行就报错
atlas.Dispose();
throw new InvalidDataException($"Unknown skeleton file format {SkelPath}");
}
}
@@ -115,7 +97,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
atlas.Dispose();
atlas?.Dispose();
}
public override string FileVersion { get => skeletonData.Version; }
@@ -177,6 +159,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
{
skeleton.Skin.AddSkin(sk);
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
}
@@ -184,6 +167,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
{
skeleton.Skin.Clear();
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
protected override int[] getTrackIndices() => animationState.Tracks.Select((_, i) => i).Where(i => animationState.Tracks.Items[i] is not null).ToArray();
@@ -232,10 +216,10 @@ namespace SpineViewer.Spine.Implementations.SpineObject
tmpSkeleton.Update(0);
tmpSkeleton.UpdateWorldTransform();
// 按 10 帧每秒计算边框
// 按 100 帧每秒计算边框
var bounds = getCurrentBounds();
float[] _ = [];
for (float tick = 0, delta = 0.1f; tick < maxDuration; tick += delta)
for (float tick = 0, delta = 0.01f; tick < maxDuration; tick += delta)
{
tmpSkeleton.GetBounds(out var x, out var y, out var w, out var h, ref _);
bounds = bounds.Union(new(x, y, w, h));

View File

@@ -28,26 +28,6 @@ namespace SpineViewer.Spine.Implementations.SpineObject
};
}
private class TextureLoader : SpineRuntime41.TextureLoader
{
public void Load(AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == TextureFilter.Linear)
texture.Smooth = true;
if (page.uWrap == TextureWrap.Repeat && page.vWrap == TextureWrap.Repeat)
texture.Repeated = true;
page.rendererObject = texture;
}
public void Unload(object texture)
{
((SFML.Graphics.Texture)texture).Dispose();
}
}
private static TextureLoader textureLoader = new();
private static readonly Animation EmptyAnimation = new(EMPTY_ANIMATION, [], 0);
private readonly Atlas atlas;
@@ -68,7 +48,8 @@ namespace SpineViewer.Spine.Implementations.SpineObject
public SpineObject41(string skelPath, string atlasPath) : base(skelPath, atlasPath)
{
atlas = new Atlas(AtlasPath, textureLoader);
try { atlas = new Atlas(AtlasPath, textureLoader); }
catch (Exception ex) { throw new InvalidDataException($"Failed to load atlas '{atlasPath}'", ex); }
try
{
// 先尝试二进制文件
@@ -88,6 +69,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
catch
{
// 都不行就报错
atlas.Dispose();
throw new InvalidDataException($"Unknown skeleton file format {SkelPath}");
}
}
@@ -115,7 +97,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
atlas.Dispose();
atlas?.Dispose();
}
public override string FileVersion { get => skeletonData.Version; }
@@ -177,6 +159,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
{
skeleton.Skin.AddSkin(sk);
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
}
@@ -184,6 +167,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
{
skeleton.Skin.Clear();
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
protected override int[] getTrackIndices() => animationState.Tracks.Select((_, i) => i).Where(i => animationState.Tracks.Items[i] is not null).ToArray();
@@ -232,10 +216,10 @@ namespace SpineViewer.Spine.Implementations.SpineObject
//tmpSkeleton.Update(0);
tmpSkeleton.UpdateWorldTransform();
// 按 10 帧每秒计算边框
// 按 100 帧每秒计算边框
var bounds = getCurrentBounds();
float[] _ = [];
for (float tick = 0, delta = 0.1f; tick < maxDuration; tick += delta)
for (float tick = 0, delta = 0.01f; tick < maxDuration; tick += delta)
{
tmpSkeleton.GetBounds(out var x, out var y, out var w, out var h, ref _);
bounds = bounds.Union(new(x, y, w, h));

View File

@@ -28,26 +28,6 @@ namespace SpineViewer.Spine.Implementations.SpineObject
};
}
private class TextureLoader : SpineRuntime42.TextureLoader
{
public void Load(AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == TextureFilter.Linear)
texture.Smooth = true;
if (page.uWrap == TextureWrap.Repeat && page.vWrap == TextureWrap.Repeat)
texture.Repeated = true;
page.rendererObject = texture;
}
public void Unload(object texture)
{
((SFML.Graphics.Texture)texture).Dispose();
}
}
private static readonly TextureLoader textureLoader = new();
private static readonly Animation EmptyAnimation = new(EMPTY_ANIMATION, [], 0);
private readonly Atlas atlas;
@@ -68,7 +48,8 @@ namespace SpineViewer.Spine.Implementations.SpineObject
public SpineObject42(string skelPath, string atlasPath) : base(skelPath, atlasPath)
{
atlas = new Atlas(AtlasPath, textureLoader);
try { atlas = new Atlas(AtlasPath, textureLoader); }
catch (Exception ex) { throw new InvalidDataException($"Failed to load atlas '{atlasPath}'", ex); }
try
{
// 先尝试二进制文件
@@ -88,6 +69,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
catch
{
// 都不行就报错
atlas.Dispose();
throw new InvalidDataException($"Unknown skeleton file format {SkelPath}");
}
}
@@ -115,7 +97,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
atlas.Dispose();
atlas?.Dispose();
}
public override string FileVersion { get => skeletonData.Version; }
@@ -177,6 +159,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
{
skeleton.Skin.AddSkin(sk);
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
}
@@ -184,6 +167,7 @@ namespace SpineViewer.Spine.Implementations.SpineObject
{
skeleton.Skin.Clear();
skeleton.SetSlotsToSetupPose();
skeleton.UpdateCache();
}
protected override int[] getTrackIndices() => animationState.Tracks.Select((_, i) => i).Where(i => animationState.Tracks.Items[i] is not null).ToArray();
@@ -232,10 +216,10 @@ namespace SpineViewer.Spine.Implementations.SpineObject
tmpSkeleton.Update(0);
tmpSkeleton.UpdateWorldTransform(Skeleton.Physics.Update);
// 按 10 帧每秒计算边框
// 按 100 帧每秒计算边框
var bounds = getCurrentBounds();
float[] _ = [];
for (float tick = 0, delta = 0.1f; tick < maxDuration; tick += delta)
for (float tick = 0, delta = 0.01f; tick < maxDuration; tick += delta)
{
tmpSkeleton.GetBounds(out var x, out var y, out var w, out var h, ref _);
bounds = bounds.Union(new(x, y, w, h));

View File

@@ -168,7 +168,7 @@ namespace SpineViewer.Spine
// 无符号右移, 符号按原样设置在最高位, 其他位与符号异或
return optimizePositive ? val : (val >>> 1) ^ -(val & 1);
}
public string ReadString()
public string? ReadString()
{
int byteCount = ReadVarInt();
switch (byteCount)
@@ -181,7 +181,7 @@ namespace SpineViewer.Spine
ReadFully(buffer, 0, byteCount);
return System.Text.Encoding.UTF8.GetString(buffer, 0, byteCount);
}
public string ReadStringRef()
public string? ReadStringRef()
{
int index = ReadVarInt();
return index == 0 ? null : StringTable[index - 1];
@@ -209,7 +209,7 @@ namespace SpineViewer.Spine
protected Stream output;
public BinaryWriter(Stream output) { this.output = output; }
public void Write(int val) => output.WriteByte((byte)val);
public void Write(byte val) => output.WriteByte(val);
public void WriteByte(byte val) => output.WriteByte(val);
public void WriteUByte(byte val) => output.WriteByte(val);
public void WriteSByte(sbyte val) => output.WriteByte((byte)val);
@@ -276,7 +276,7 @@ namespace SpineViewer.Spine
}
output.WriteByte(b);
}
public void WriteString(string val)
public void WriteString(string? val)
{
if (val == null)
{
@@ -294,7 +294,7 @@ namespace SpineViewer.Spine
System.Text.Encoding.UTF8.GetBytes(val, 0, val.Length, buffer, 0);
WriteFully(buffer, 0, byteCount);
}
public void WriteStringRef(string val)
public void WriteStringRef(string? val)
{
if (val is null)
{

View File

@@ -1,5 +1,6 @@
using FFMpegCore;
using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -64,13 +65,17 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary>
[StringEnumConverter.StandardValues("av1_nvenc", "av1_amf", "libaom-av1", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-c:v, 使\n建议使用硬件加速, libaom-av1 ")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayEncoder")]
[LocalizedDescription(typeof(Properties.Resources), "descAvifEncoder")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
/// <summary>
/// CRF
/// </summary>
[Category("[3] "), DisplayName("CRF"), Description("-crf, 0-63, 18-28, 23, ")]
/// <summary>
/// CRF
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[DisplayName("CRF")]
[LocalizedDescription(typeof(Properties.Resources), "descCRF")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; }
/// <summary>
@@ -78,13 +83,17 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary>
[StringEnumConverter.StandardValues("yuv420p", "yuv422p", "yuv444p", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-pix_fmt, 使")]
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayPixelFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descPixelFormat")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
/// <summary>
/// 循环次数
/// </summary>
[Category("[3] "), DisplayName(""), Description("-loop, , 0 , [0, 65535]")]
/// <summary>
/// 循环次数
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayLoopCount")]
[LocalizedDescription(typeof(Properties.Resources), "descLoopCount")]
public int Loop { get => Exporter.Loop; set => Exporter.Loop = value; }
}
}

View File

@@ -1,4 +1,5 @@
using System;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
@@ -45,16 +46,20 @@ namespace SpineViewer.Spine.SpineExporter
[Browsable(false)]
public override string Suffix => Exporter.Suffix;
/// <summary>
/// 文件格式
/// </summary>
[Category("[2] FFmpeg "), DisplayName(""), Description("-f, ")]
/// <summary>
/// 文件格式
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFFmpegParameter")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayFileFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descFileFormat")]
public string CustomFormat { get => Exporter.CustomFormat; set => Exporter.CustomFormat = value; }
/// <summary>
/// 文件名后缀
/// </summary>
[Category("[2] FFmpeg "), DisplayName(""), Description("")]
/// <summary>
/// 文件名后缀
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFFmpegParameter")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayFilenameSuffix")]
[LocalizedDescription(typeof(Properties.Resources), "descFilenameSuffix")]
public string CustomSuffix { get => Exporter.CustomSuffix; set => Exporter.CustomSuffix = value; }
}
}

View File

@@ -1,6 +1,7 @@
using NLog;
using SpineViewer.Extensions;
using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -288,11 +289,11 @@ namespace SpineViewer.Spine.SpineExporter
public virtual string? Validate()
{
if (!string.IsNullOrWhiteSpace(OutputDir) && File.Exists(OutputDir))
return "输出文件夹无效";
return Properties.Resources.invalidInputFolder;
if (!string.IsNullOrWhiteSpace(OutputDir) && !Directory.Exists(OutputDir))
return $"文件夹 {OutputDir} 不存在";
return $"{Properties.Resources.folderNotExistPrefix} {OutputDir} {Properties.Resources.folderNotExistSuffix}";
if (IsExportSingle && string.IsNullOrWhiteSpace(OutputDir))
return "导出单个时必须提供输出文件夹";
return Properties.Resources.mustProvideOutputFolder;
OutputDir = string.IsNullOrWhiteSpace(OutputDir) ? null : Path.GetFullPath(OutputDir);
return null;
@@ -345,66 +346,86 @@ namespace SpineViewer.Spine.SpineExporter
/// 输出文件夹
/// </summary>
[Editor(typeof(FolderNameEditor), typeof(UITypeEditor))]
[Category("[0] "), DisplayName(""), Description("")]
[LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayOutputFolder")]
[LocalizedDescription(typeof(Properties.Resources), "descOutputFolder")]
public string? OutputDir { get => Exporter.OutputDir; set => Exporter.OutputDir = value; }
/// <summary>
/// 导出单个
/// </summary>
[Category("[0] "), DisplayName(""), Description("")]
public bool IsExportSingle { get => Exporter.IsExportSingle; set => Exporter.IsExportSingle = value; }
/// <summary>
/// 导出单个
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayExportSingle")]
[LocalizedDescription(typeof(Properties.Resources), "descExportSingle")]
public bool IsExportSingle { get => Exporter.IsExportSingle; set => Exporter.IsExportSingle = value; }
/// <summary>
/// 画面分辨率
/// </summary>
[TypeConverter(typeof(SizeConverter))]
[Category("[0] "), DisplayName(""), Description("")]
public Size Resolution { get => Exporter.Resolution; }
[LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayResolution")]
[LocalizedDescription(typeof(Properties.Resources), "descResolution")]
public Size Resolution { get => Exporter.Resolution; }
/// <summary>
/// 预览画面视区
/// </summary>
[Category("[0] "), DisplayName(""), Description("")]
public SFML.Graphics.View View { get => Exporter.PreviewerView; }
/// <summary>
/// 预览画面视区
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayPreviewViewport")]
[LocalizedDescription(typeof(Properties.Resources), "descPreviewViewport")]
public SFML.Graphics.View View { get => Exporter.PreviewerView; }
/// <summary>
/// 是否仅渲染选中
/// </summary>
[Category("[0] "), DisplayName(""), Description("")]
public bool RenderSelectedOnly { get => Exporter.RenderSelectedOnly; }
/// <summary>
/// 是否仅渲染选中
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayRenderSelected")]
[LocalizedDescription(typeof(Properties.Resources), "descRenderSelected")]
public bool RenderSelectedOnly { get => Exporter.RenderSelectedOnly; }
/// <summary>
/// 背景颜色
/// </summary>
[Editor(typeof(SFMLColorEditor), typeof(UITypeEditor))]
[TypeConverter(typeof(SFMLColorConverter))]
[Category("[0] "), DisplayName(""), Description("使, #RRGGBBAA")]
public SFML.Graphics.Color BackgroundColor { get => Exporter.BackgroundColor; set => Exporter.BackgroundColor = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayBackgroundColor")]
[LocalizedDescription(typeof(Properties.Resources), "descBackgroundColor")]
public SFML.Graphics.Color BackgroundColor { get => Exporter.BackgroundColor; set => Exporter.BackgroundColor = value; }
/// <summary>
/// 四周边缘距离
/// </summary>
[TypeConverter(typeof(PaddingConverter))]
[Category("[0] "), DisplayName(""), Description(" (Margin), ")]
public Padding Margin { get => Exporter.Margin; set => Exporter.Margin = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayMargin")]
[LocalizedDescription(typeof(Properties.Resources), "descMargin")]
public Padding Margin { get => Exporter.Margin; set => Exporter.Margin = value; }
/// <summary>
/// 四周填充距离
/// </summary>
[TypeConverter(typeof(PaddingConverter))]
[Category("[0] "), DisplayName(""), Description(" (Padding), , ")]
public Padding Padding { get => Exporter.Padding; set => Exporter.Padding = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayPadding")]
[LocalizedDescription(typeof(Properties.Resources), "descPadding")]
public Padding Padding { get => Exporter.Padding; set => Exporter.Padding = value; }
/// <summary>
/// 允许内容溢出到边缘和填充区域
/// </summary>
[Category("[0] "), DisplayName(""), Description("使, ")]
public bool AllowContentOverflow { get => Exporter.AllowContentOverflow; set => Exporter.AllowContentOverflow = value; }
/// <summary>
/// 允许内容溢出到边缘和填充区域
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayAllowContentOverflow")]
[LocalizedDescription(typeof(Properties.Resources), "descAllowContentOverflow")]
public bool AllowContentOverflow { get => Exporter.AllowContentOverflow; set => Exporter.AllowContentOverflow = value; }
/// <summary>
/// 自动分辨率
/// </summary>
[Category("[0] "), DisplayName(""), Description(", ")]
public bool AutoResolution { get => Exporter.AutoResolution; set => Exporter.AutoResolution = value; }
/// <summary>
/// 自动分辨率
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayAutoResolution")]
[LocalizedDescription(typeof(Properties.Resources), "descAutoResolution")]
public bool AutoResolution { get => Exporter.AutoResolution; set => Exporter.AutoResolution = value; }
}
}

View File

@@ -7,6 +7,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using SpineViewer.Utils.Localize;
namespace SpineViewer.Spine.SpineExporter
{
@@ -45,9 +46,9 @@ namespace SpineViewer.Spine.SpineExporter
if (base.Validate() is string error)
return error;
if (string.IsNullOrWhiteSpace(Format))
return "需要提供有效的格式";
return Properties.Resources.validFormatRequired;
if (string.IsNullOrWhiteSpace(Suffix))
return "需要提供有效的文件名后缀";
return Properties.Resources.validExtensionRequired;
return null;
}
@@ -56,7 +57,7 @@ namespace SpineViewer.Spine.SpineExporter
var noteSuffix = FileNameNoteSuffix;
if (!string.IsNullOrWhiteSpace(noteSuffix)) noteSuffix = $"_{noteSuffix}";
var filename = $"ffmpeg_{timestamp}_{FPS:f0}{noteSuffix}{Suffix}";
var filename = $"ffmpeg_{timestamp}_{Guid.NewGuid().ToString()[..6]}_{FPS:f0}{noteSuffix}{Suffix}";
// 导出单个时必定提供输出文件夹
var savePath = Path.Combine(OutputDir, filename);
@@ -85,7 +86,7 @@ namespace SpineViewer.Spine.SpineExporter
{
if (worker?.CancellationPending == true) break; // 取消的日志在 GetFrames 里输出
var filename = $"{spine.Name}_{timestamp}_{FPS:f0}{noteSuffix}{Suffix}";
var filename = $"{spine.Name}_{timestamp}_{spine.ID[..6]}_{FPS:f0}{noteSuffix}{Suffix}";
// 如果提供了输出文件夹, 则全部导出到输出文件夹, 否则导出到各自的文件夹下
var savePath = Path.Combine(OutputDir ?? spine.AssetsDir, filename);
@@ -114,22 +115,28 @@ namespace SpineViewer.Spine.SpineExporter
[Browsable(false)]
public override FFmpegVideoExporter Exporter => (FFmpegVideoExporter)base.Exporter;
/// <summary>
/// 文件格式
/// </summary>
[Category("[2] FFmpeg "), DisplayName(""), Description("-f, ")]
/// <summary>
/// 文件格式
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFFmpegParameter")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayFileFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descFileFormat")]
public virtual string Format => Exporter.Format;
/// <summary>
/// 文件名后缀
/// </summary>
[Category("[2] FFmpeg "), DisplayName(""), Description("")]
/// <summary>
/// 文件名后缀
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFFmpegParameter")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayFilenameSuffix")]
[LocalizedDescription(typeof(Properties.Resources), "descFilenameSuffix")]
public virtual string Suffix => Exporter.Suffix;
/// <summary>
/// 文件名后缀
/// </summary>
[Category("[2] FFmpeg "), DisplayName(""), Description("使 \"ffmpeg -h encoder=<编码器>\" 查看编码器支持的参数\n使用 \"ffmpeg -h muxer=<文件格式>\" 查看文件格式支持的参数")]
public string CustomArgument { get => Exporter.CustomArgument; set => Exporter.CustomArgument = value; }
/// <summary>
/// 文件名后缀
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFFmpegParameter")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayCustomArgument")]
[LocalizedDescription(typeof(Properties.Resources), "descCustomArgument")]
public string CustomArgument { get => Exporter.CustomArgument; set => Exporter.CustomArgument = value; }
}
}

View File

@@ -1,4 +1,5 @@
using SpineViewer.Spine;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -46,10 +47,10 @@ namespace SpineViewer.Spine.SpineExporter
protected override void ExportSingle(SpineObject[] spinesToRender, BackgroundWorker? worker = null)
{
// 导出单个时必定提供输出文件夹
var filename = $"frame_{timestamp}{ImageFormat.GetSuffix()}";
var filename = $"frame_{timestamp}_{Guid.NewGuid().ToString()[..6]}{ImageFormat.GetSuffix()}";
var savePath = Path.Combine(OutputDir, filename);
worker?.ReportProgress(0, $"已处理 0/1");
worker?.ReportProgress(0, $"{Properties.Resources.process} 0/1");
try
{
using var frame = GetFrame(spinesToRender);
@@ -62,7 +63,7 @@ namespace SpineViewer.Spine.SpineExporter
logger.Error(ex.ToString());
logger.Error("Failed to save single frame");
}
worker?.ReportProgress(100, $"已处理 1/1");
worker?.ReportProgress(100, $"{Properties.Resources.process} 1/1");
}
protected override void ExportIndividual(SpineObject[] spinesToRender, BackgroundWorker? worker = null)
@@ -71,13 +72,13 @@ namespace SpineViewer.Spine.SpineExporter
int success = 0;
int error = 0;
worker?.ReportProgress(0, $"已处理 0/{total}");
worker?.ReportProgress(0, $"{Properties.Resources.process} 0/{total}");
for (int i = 0; i < total; i++)
{
var spine = spinesToRender[i];
// 逐个导出时如果提供了输出文件夹, 则全部导出到输出文件夹, 否则输出到各自的文件夹
var filename = $"{spine.Name}_{timestamp}{ImageFormat.GetSuffix()}";
var filename = $"{spine.Name}_{timestamp}_{spine.ID[..6]}{ImageFormat.GetSuffix()}";
var savePath = Path.Combine(OutputDir ?? spine.AssetsDir, filename);
try
@@ -95,7 +96,7 @@ namespace SpineViewer.Spine.SpineExporter
error++;
}
worker?.ReportProgress((int)((i + 1) * 100.0) / total, $"已处理 {i + 1}/{total}");
worker?.ReportProgress((int)((i + 1) * 100.0) / total, $"{Properties.Resources.process} {i + 1}/{total}");
}
if (error > 0)
@@ -114,20 +115,24 @@ namespace SpineViewer.Spine.SpineExporter
/// 单帧画面格式
/// </summary>
[TypeConverter(typeof(ImageFormatConverter))]
[Category("[1] "), DisplayName("")]
[LocalizedCategory(typeof(Properties.Resources), "categorySingleFrame")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayImageFormat")]
public ImageFormat ImageFormat { get => Exporter.ImageFormat; set => Exporter.ImageFormat = value; }
/// <summary>
/// 文件名后缀
/// </summary>
[Category("[1] "), DisplayName(""), Description("")]
/// <summary>
/// 文件名后缀
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categorySingleFrame")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayFilenameSuffix")]
[LocalizedDescription(typeof(Properties.Resources), "descFileNameExtension")]
public string Suffix { get => Exporter.ImageFormat.GetSuffix(); }
/// <summary>
/// DPI
/// </summary>
[TypeConverter(typeof(SizeFConverter))]
[Category("[1] "), DisplayName("DPI"), Description("")]
[LocalizedCategory(typeof(Properties.Resources), "categorySingleFrame")]
[LocalizedDescription(typeof(Properties.Resources), "descDPI")]
public SizeF DPI { get => Exporter.DPI; set => Exporter.DPI = value; }
}
}

View File

@@ -1,5 +1,6 @@
using SpineViewer.Spine;
using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -21,14 +22,16 @@ namespace SpineViewer.Spine.SpineExporter
protected override void ExportSingle(SpineObject[] spinesToRender, BackgroundWorker? worker = null)
{
var uniqueSuffix = Guid.NewGuid().ToString()[..6];
// 导出单个时必定提供输出文件夹,
var saveDir = Path.Combine(OutputDir, $"frames_{timestamp}_{FPS:f0}");
var saveDir = Path.Combine(OutputDir, $"frames_{timestamp}_{uniqueSuffix}_{FPS:f0}");
Directory.CreateDirectory(saveDir);
int frameIdx = 0;
foreach (var frame in GetFrames(spinesToRender, worker))
{
var filename = $"frames_{timestamp}_{FPS:f0}_{frameIdx:d6}{Suffix}";
var filename = $"frames_{timestamp}_{uniqueSuffix}_{FPS:f0}_{frameIdx:d6}{Suffix}";
var savePath = Path.Combine(saveDir, filename);
try
@@ -55,14 +58,14 @@ namespace SpineViewer.Spine.SpineExporter
if (worker?.CancellationPending == true) break; // 取消的日志在 GetFrames 里输出
// 如果提供了输出文件夹, 则全部导出到输出文件夹, 否则导出到各自的文件夹下
var subDir = $"{spine.Name}_{timestamp}_{FPS:f0}";
var subDir = $"{spine.Name}_{timestamp}_{spine.ID[..6]}_{FPS:f0}";
var saveDir = Path.Combine(OutputDir ?? spine.AssetsDir, subDir);
Directory.CreateDirectory(saveDir);
int frameIdx = 0;
foreach (var frame in GetFrames(spine, worker))
{
var filename = $"{spine.Name}_{timestamp}_{FPS:f0}_{frameIdx:d6}{Suffix}";
var filename = $"{spine.Name}_{timestamp}_{spine.ID[..6]}_{FPS:f0}_{frameIdx:d6}{Suffix}";
var savePath = Path.Combine(saveDir, filename);
try
@@ -93,7 +96,9 @@ namespace SpineViewer.Spine.SpineExporter
/// 文件名后缀
/// </summary>
[TypeConverter(typeof(StringEnumConverter)), StringEnumConverter.StandardValues(".png", ".jpg", ".tga", ".bmp")]
[Category("[2] "), DisplayName(""), Description("")]
[LocalizedCategory(typeof(Properties.Resources), "categoryFrameSequenceParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayFilenameSuffix")]
[LocalizedDescription(typeof(Properties.Resources), "descFrameFileExtension")]
public string Suffix { get => Exporter.Suffix; set => Exporter.Suffix = value; }
}
}

View File

@@ -1,4 +1,5 @@
using FFMpegCore;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -58,22 +59,28 @@ namespace SpineViewer.Spine.SpineExporter
[Browsable(false)]
public override GifExporter Exporter => (GifExporter)base.Exporter;
/// <summary>
/// 调色板最大颜色数量
/// </summary>
[Category("[3] "), DisplayName(""), Description("使, ")]
/// <summary>
/// 调色板最大颜色数量
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayMaxColor")]
[LocalizedDescription(typeof(Properties.Resources), "descMaxColor")]
public uint MaxColors { get => Exporter.MaxColors; set => Exporter.MaxColors = value; }
/// <summary>
/// 透明度阈值
/// </summary>
[Category("[3] "), DisplayName(""), Description("")]
/// <summary>
/// 透明度阈值
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayAlphaThreshold")]
[LocalizedDescription(typeof(Properties.Resources), "descAlphaThreshold")]
public byte AlphaThreshold { get => Exporter.AlphaThreshold; set => Exporter.AlphaThreshold = value; }
/// <summary>
/// 透明度阈值
/// </summary>
[Category("[3] "), DisplayName(""), Description("-loop, , -1 , 0 , [-1, 65535]")]
/// <summary>
/// 透明度阈值
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayLoopCount")]
[LocalizedDescription(typeof(Properties.Resources), "descLoopCount")]
public int Loop { get => Exporter.Loop; set => Exporter.Loop = value; }
}
}

View File

@@ -1,5 +1,6 @@
using FFMpegCore;
using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -58,21 +59,27 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary>
[StringEnumConverter.StandardValues("libx264", "libx265", "libvpx-vp9", "av1_nvenc", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-c:v, 使")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayEncoder")]
[LocalizedDescription(typeof(Properties.Resources), "descAvifEncoder")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
/// <summary>
/// CRF
/// </summary>
[Category("[3] "), DisplayName("CRF"), Description("-crf, 0-63, 18-28, 23, ")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; }
/// <summary>
/// CRF
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[DisplayName("CRF")]
[LocalizedDescription(typeof(Properties.Resources), "descCRF")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; }
/// <summary>
/// 像素格式
/// </summary>
[StringEnumConverter.StandardValues("yuv420p", "yuv422p", "yuv444p", "yuva420p", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-pix_fmt, 使")]
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayPixelFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descPixelFormat")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
}
}

View File

@@ -1,5 +1,6 @@
using FFMpegCore;
using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -57,15 +58,19 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary>
[StringEnumConverter.StandardValues("prores_ks", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-c:v, 使")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayEncoder")]
[LocalizedDescription(typeof(Properties.Resources), "descAvifEncoder")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
/// <summary>
/// 预设
/// </summary>
[StringEnumConverter.StandardValues("auto", "proxy", "lt", "standard", "hq", "4444", "4444xq")]
[TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-profile, ")]
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayPreset")]
[LocalizedDescription(typeof(Properties.Resources), "descPreset")]
public string Profile { get => Exporter.Profile; set => Exporter.Profile = value; }
/// <summary>
@@ -73,7 +78,9 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary>
[StringEnumConverter.StandardValues("yuv422p10le", "yuv444p10le", "yuva444p10le", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-pix_fmt, 使")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayPixelFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descPixelFormat")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
}
}

View File

@@ -1,5 +1,6 @@
using FFMpegCore;
using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -58,21 +59,27 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary>
[StringEnumConverter.StandardValues("libx264", "libx265", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-c:v, 使")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayEncoder")]
[LocalizedDescription(typeof(Properties.Resources), "descAvifEncoder")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
/// <summary>
/// CRF
/// </summary>
[Category("[3] "), DisplayName("CRF"), Description("-crf, 0-63, 18-28, 23, ")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; }
/// <summary>
/// CRF
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[DisplayName("CRF")]
[LocalizedDescription(typeof(Properties.Resources), "descCRF")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; }
/// <summary>
/// 像素格式
/// </summary>
[StringEnumConverter.StandardValues("yuv420p", "yuv422p", "yuv444p", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-pix_fmt, 使")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayPixelFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descPixelFormat")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
}
}

View File

@@ -1,4 +1,5 @@
using SpineViewer.Spine;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -29,15 +30,6 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary>
public bool KeepLast { get; set; } = true;
public override string? Validate()
{
if (base.Validate() is string error)
return error;
if (IsExportSingle && Duration < 0)
return "导出单个时导出时长不能为负数";
return null;
}
/// <summary>
/// 生成单个模型的帧序列
/// </summary>
@@ -55,11 +47,11 @@ namespace SpineViewer.Spine.SpineExporter
int frameCount = 1 + total + final; // 所有帧的数量 = 起始帧 + 完整帧 + 最后一帧
worker?.ReportProgress(0, $"{spine.Name} 已处理 0/{frameCount} 帧");
worker?.ReportProgress(0, $"{spine.Name} {Properties.Resources.process} 0/{frameCount} {Properties.Resources.frame}");
// 导出首帧
var firstFrame = GetFrame(spine);
worker?.ReportProgress(1 * 100 / frameCount, $"{spine.Name} 已处理 1/{frameCount} 帧");
worker?.ReportProgress(1 * 100 / frameCount, $"{spine.Name} {Properties.Resources.process} 1/{frameCount} {Properties.Resources.frame}");
yield return firstFrame;
// 导出完整帧
@@ -73,7 +65,7 @@ namespace SpineViewer.Spine.SpineExporter
spine.Update(delta);
var frame = GetFrame(spine);
worker?.ReportProgress((1 + i + 1) * 100 / frameCount, $"{spine.Name} 已处理 {1 + i + 1}/{frameCount} 帧");
worker?.ReportProgress((1 + i + 1) * 100 / frameCount, $"{spine.Name} {Properties.Resources.process} {1 + i + 1}/{frameCount} {Properties.Resources.frame}");
yield return frame;
}
@@ -82,7 +74,7 @@ namespace SpineViewer.Spine.SpineExporter
{
spine.Update(deltaFinal);
var finalFrame = GetFrame(spine);
worker?.ReportProgress(100, $"{spine.Name} 已处理 {frameCount}/{frameCount} 帧");
worker?.ReportProgress(100, $"{spine.Name} {Properties.Resources.process} {frameCount}/{frameCount} {Properties.Resources.frame}");
yield return finalFrame;
}
}
@@ -92,8 +84,16 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary>
protected IEnumerable<SFMLImageVideoFrame> GetFrames(SpineObject[] spinesToRender, BackgroundWorker? worker = null)
{
// 导出单个时必须根据 Duration 决定导出时长
// 导出单个时取所有模型的所有轨道时长最大值
var duration = Duration;
if (duration < 0)
{
duration = spinesToRender.Select(
sp => sp.GetTrackIndices().Select(
i => sp.GetAnimationDuration(sp.GetAnimation(i))
).DefaultIfEmpty(0).Max()
).Max();
}
float delta = 1f / FPS;
int total = (int)(duration * FPS); // 完整帧的数量
@@ -103,11 +103,11 @@ namespace SpineViewer.Spine.SpineExporter
int frameCount = 1 + total + final; // 所有帧的数量 = 起始帧 + 完整帧 + 最后一帧
worker?.ReportProgress(0, $"已处理 0/{frameCount} 帧");
worker?.ReportProgress(0, $"{Properties.Resources.process} 0/{frameCount} {Properties.Resources.frame}");
// 导出首帧
var firstFrame = GetFrame(spinesToRender);
worker?.ReportProgress(1 * 100 / frameCount, $"已处理 1/{frameCount} 帧");
worker?.ReportProgress(1 * 100 / frameCount, $"{Properties.Resources.process} 1/{frameCount} {Properties.Resources.frame}");
yield return firstFrame;
// 导出完整帧
@@ -121,7 +121,7 @@ namespace SpineViewer.Spine.SpineExporter
foreach (var spine in spinesToRender) spine.Update(delta);
var frame = GetFrame(spinesToRender);
worker?.ReportProgress((1 + i + 1) * 100 / frameCount, $"已处理 {1 + i + 1}/{frameCount} 帧");
worker?.ReportProgress((1 + i + 1) * 100 / frameCount, $"{Properties.Resources.process} {1 + i + 1}/{frameCount} {Properties.Resources.frame}");
yield return frame;
}
@@ -130,7 +130,7 @@ namespace SpineViewer.Spine.SpineExporter
{
foreach (var spine in spinesToRender) spine.Update(delta);
var finalFrame = GetFrame(spinesToRender);
worker?.ReportProgress(100, $"已处理 {frameCount}/{frameCount} 帧");
worker?.ReportProgress(100, $"{Properties.Resources.process} {frameCount}/{frameCount} {Properties.Resources.frame}");
yield return finalFrame;
}
}
@@ -148,22 +148,28 @@ namespace SpineViewer.Spine.SpineExporter
[Browsable(false)]
public override VideoExporter Exporter => (VideoExporter)base.Exporter;
/// <summary>
/// 导出时长
/// </summary>
[Category("[1] "), DisplayName(""), Description(", 0, 使")]
/// <summary>
/// 导出时长
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryVideoParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "duration")]
[LocalizedDescription(typeof(Properties.Resources), "descDuration")]
public float Duration { get => Exporter.Duration; set => Exporter.Duration = value; }
/// <summary>
/// 帧率
/// </summary>
[Category("[1] "), DisplayName(""), Description("")]
public float FPS { get => Exporter.FPS; set => Exporter.FPS = value; }
/// <summary>
/// 帧率
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryVideoParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayFPS")]
[LocalizedDescription(typeof(Properties.Resources), "descFPS")]
public float FPS { get => Exporter.FPS; set => Exporter.FPS = value; }
/// <summary>
/// 保留最后一帧
/// </summary>
[Category("[1] "), DisplayName(""), Description(", , 1")]
public bool KeepLast { get => Exporter.KeepLast; set => Exporter.KeepLast = value; }
/// <summary>
/// 保留最后一帧
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryVideoParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayKeepLastFrame")]
[LocalizedDescription(typeof(Properties.Resources), "descKeepLastFrame")]
public bool KeepLast { get => Exporter.KeepLast; set => Exporter.KeepLast = value; }
}
}

View File

@@ -1,5 +1,6 @@
using FFMpegCore;
using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -59,21 +60,27 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary>
[StringEnumConverter.StandardValues("libvpx-vp9", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-c:v, 使")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayEncoder")]
[LocalizedDescription(typeof(Properties.Resources), "descAvifEncoder")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
/// <summary>
/// CRF
/// </summary>
[Category("[3] "), DisplayName("CRF"), Description("-crf, 0-63, 18-28, 23, ")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; }
/// <summary>
/// CRF
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[DisplayName("CRF")]
[LocalizedDescription(typeof(Properties.Resources), "descCRF")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; }
/// <summary>
/// 像素格式
/// </summary>
[StringEnumConverter.StandardValues("yuv420p", "yuv422p", "yuv444p", "yuva420p", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-pix_fmt, 使")]
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayPixelFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descPixelFormat")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
}
}

View File

@@ -1,5 +1,6 @@
using FFMpegCore;
using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -69,33 +70,43 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary>
[StringEnumConverter.StandardValues("libwebp_anim", "libwebp", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-c:v, 使")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayEncoder")]
[LocalizedDescription(typeof(Properties.Resources), "descAvifEncoder")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
/// <summary>
/// 是否无损
/// </summary>
[Category("[3] "), DisplayName(""), Description("-lossless, 0 , 1 ")]
public bool Lossless { get => Exporter.Lossless; set => Exporter.Lossless = value; }
/// <summary>
/// 是否无损
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayLoseless")]
[LocalizedDescription(typeof(Properties.Resources), "descLoseless")]
public bool Lossless { get => Exporter.Lossless; set => Exporter.Lossless = value; }
/// <summary>
/// CRF
/// </summary>
[Category("[3] "), DisplayName(""), Description("-quality, 0-100, 75")]
public int Quality { get => Exporter.Quality; set => Exporter.Quality = value; }
/// <summary>
/// CRF
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayQuality")]
[LocalizedDescription(typeof(Properties.Resources), "descQuality")]
public int Quality { get => Exporter.Quality; set => Exporter.Quality = value; }
/// <summary>
/// 像素格式
/// </summary>
[StringEnumConverter.StandardValues("yuv420p", "yuva420p", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-pix_fmt, 使")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayPixelFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descPixelFormat")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
/// <summary>
/// 透明度阈值
/// </summary>
[Category("[3] "), DisplayName(""), Description("-loop, , 0 , [0, 65535]")]
public int Loop { get => Exporter.Loop; set => Exporter.Loop = value; }
/// <summary>
/// 透明度阈值
/// </summary>
[LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayLoopCount")]
[LocalizedDescription(typeof(Properties.Resources), "descLoopCount")]
public int Loop { get => Exporter.Loop; set => Exporter.Loop = value; }
}
}

View File

@@ -32,6 +32,12 @@ namespace SpineViewer.Spine
/// </summary>
protected static readonly Size PreviewResolution = new(256, 256);
/// <summary>
/// 纹理加载器
/// </summary>
public static TextureLoader TextureLoader => textureLoader;
protected readonly static TextureLoader textureLoader = new();
/// <summary>
/// 创建特定版本的 Spine
/// </summary>

View File

@@ -1,5 +1,6 @@
using SpineViewer.Spine;
using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -20,7 +21,7 @@ namespace SpineViewer.Spine.SpineView
/// <summary>
/// 全轨道动画最大时长
/// </summary>
[DisplayName("全轨道最大时长")]
[LocalizedDisplayName(typeof(Properties.Resources), "maximumTrackLength")]
public float AnimationTracksMaxDuration => Spine.GetTrackIndices().Select(i => Spine.GetAnimationDuration(Spine.GetAnimation(i))).Max();
/// <summary>
@@ -144,8 +145,8 @@ namespace SpineViewer.Spine.SpineView
[Browsable(false)]
public int Index { get; } = i;
[DisplayName("时长")]
public float Duration => spine.GetAnimationDuration(spine.GetAnimation(Index));
[LocalizedDisplayName(typeof(Properties.Resources), "duration")]
public float Duration => spine.GetAnimationDuration(spine.GetAnimation(Index));
/// <summary>
/// 实现了默认的转为字符串的方式

View File

@@ -1,5 +1,6 @@
using SpineViewer.Spine;
using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -21,37 +22,37 @@ namespace SpineViewer.Spine.SpineView
/// 获取所属版本
/// </summary>
[TypeConverter(typeof(SpineVersionConverter))]
[DisplayName("运行时版本")]
[LocalizedDisplayName(typeof(Properties.Resources), "runtimeVersion")]
public SpineVersion Version => Spine.Version;
/// <summary>
/// 资源所在完整目录
/// </summary>
[DisplayName("资源目录")]
public string AssetsDir => Spine.AssetsDir;
/// <summary>
/// 资源所在完整目录
/// </summary>
[LocalizedDisplayName(typeof(Properties.Resources), "resourcesPath")]
public string AssetsDir => Spine.AssetsDir;
/// <summary>
/// skel 文件完整路径
/// </summary>
[DisplayName("skel文件路径")]
public string SkelPath => Spine.SkelPath;
/// <summary>
/// skel 文件完整路径
/// </summary>
[LocalizedDisplayName(typeof(Properties.Resources), "skelPath")]
public string SkelPath => Spine.SkelPath;
/// <summary>
/// atlas 文件完整路径
/// </summary>
[DisplayName("atlas文件路径")]
public string AtlasPath => Spine.AtlasPath;
/// <summary>
/// atlas 文件完整路径
/// </summary>
[LocalizedDisplayName(typeof(Properties.Resources), "atlasPath")]
public string AtlasPath => Spine.AtlasPath;
/// <summary>
/// 名称
/// </summary>
[DisplayName("名称")]
public string Name => Spine.Name;
/// <summary>
/// 名称
/// </summary>
[LocalizedDisplayName(typeof(Properties.Resources), "name")]
public string Name => Spine.Name;
/// <summary>
/// 获取所属文件版本
/// </summary>
[DisplayName("文件版本")]
public string FileVersion => Spine.FileVersion;
/// <summary>
/// 获取所属文件版本
/// </summary>
[LocalizedDisplayName(typeof(Properties.Resources), "fileVersion")]
public string FileVersion => Spine.FileVersion;
}
}

View File

@@ -6,6 +6,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SpineViewer.Spine;
using SpineViewer.Utils.Localize;
namespace SpineViewer.Spine.SpineView
{
@@ -14,28 +15,28 @@ namespace SpineViewer.Spine.SpineView
[Browsable(false)]
public SpineObject Spine { get; } = spine;
[DisplayName("基本信息")]
[LocalizedDisplayName(typeof(Properties.Resources), "basicInfo")]
public SpineBaseInfoProperty BaseInfo { get; } = new(spine);
[DisplayName("渲染")]
public SpineRenderProperty Render { get; } = new(spine);
[LocalizedDisplayName(typeof(Properties.Resources), "render")]
public SpineRenderProperty Render { get; } = new(spine);
[DisplayName("变换")]
public SpineTransformProperty Transform { get; } = new(spine);
[LocalizedDisplayName(typeof(Properties.Resources), "transform")]
public SpineTransformProperty Transform { get; } = new(spine);
[TypeConverter(typeof(ExpandableObjectConverter))]
[DisplayName("皮肤")]
public SpineSkinProperty Skin { get; } = new(spine);
[LocalizedDisplayName(typeof(Properties.Resources), "skin")]
public SpineSkinProperty Skin { get; } = new(spine);
[TypeConverter(typeof(ExpandableObjectConverter))]
[DisplayName("插槽")]
public SpineSlotProperty Slot { get; } = new(spine);
[LocalizedDisplayName(typeof(Properties.Resources), "slot")]
public SpineSlotProperty Slot { get; } = new(spine);
[TypeConverter(typeof(ExpandableObjectConverter))]
[DisplayName("动画")]
public SpineAnimationProperty Animation { get; } = new(spine);
[LocalizedDisplayName(typeof(Properties.Resources), "animation")]
public SpineAnimationProperty Animation { get; } = new(spine);
[DisplayName("调试")]
public SpineDebugProperty Debug { get; } = new(spine);
[LocalizedDisplayName(typeof(Properties.Resources), "debug")]
public SpineDebugProperty Debug { get; } = new(spine);
}
}

View File

@@ -5,6 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SpineViewer.Spine;
using SpineViewer.Utils.Localize;
namespace SpineViewer.Spine.SpineView
{
@@ -16,16 +17,16 @@ namespace SpineViewer.Spine.SpineView
[Browsable(false)]
public SpineObject Spine { get; } = spine;
/// <summary>
/// 是否被隐藏, 被隐藏的模型将仅仅在列表显示, 不参与其他行为
/// </summary>
[DisplayName("是否隐藏")]
/// <summary>
/// 是否被隐藏, 被隐藏的模型将仅仅在列表显示, 不参与其他行为
/// </summary>
[LocalizedDisplayName(typeof(Properties.Resources), "isHidden")]
public bool IsHidden { get => Spine.IsHidden; set => Spine.IsHidden = value; }
/// <summary>
/// 是否使用预乘Alpha
/// </summary>
[DisplayName("预乘Alpha通道")]
public bool UsePremultipliedAlpha { get => Spine.UsePma; set => Spine.UsePma = value; }
/// <summary>
/// 是否使用预乘Alpha
/// </summary>
[LocalizedDisplayName(typeof(Properties.Resources), "usePremultipliedAlpha")]
public bool UsePremultipliedAlpha { get => Spine.UsePma; set => Spine.UsePma = value; }
}
}

View File

@@ -6,6 +6,7 @@ using System.Text;
using System.Threading.Tasks;
using SpineViewer.Spine;
using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
namespace SpineViewer.Spine.SpineView
{
@@ -17,29 +18,29 @@ namespace SpineViewer.Spine.SpineView
[Browsable(false)]
public SpineObject Spine { get; } = spine;
/// <summary>
/// 缩放比例
/// </summary>
[DisplayName("缩放比例")]
/// <summary>
/// 缩放比例
/// </summary>
[LocalizedDisplayName(typeof(Properties.Resources), "scale")]
public float Scale { get => Spine.Scale; set => Spine.Scale = value; }
/// <summary>
/// 位置
/// </summary>
[TypeConverter(typeof(PointFConverter))]
[DisplayName("位置")]
public PointF Position { get => Spine.Position; set => Spine.Position = value; }
[LocalizedDisplayName(typeof(Properties.Resources), "position")]
public PointF Position { get => Spine.Position; set => Spine.Position = value; }
/// <summary>
/// 水平翻转
/// </summary>
[DisplayName("水平翻转")]
public bool FlipX { get => Spine.FlipX; set => Spine.FlipX = value; }
/// <summary>
/// 水平翻转
/// </summary>
[LocalizedDisplayName(typeof(Properties.Resources), "flipX")]
public bool FlipX { get => Spine.FlipX; set => Spine.FlipX = value; }
/// <summary>
/// 垂直翻转
/// </summary>
[DisplayName("垂直翻转")]
public bool FlipY { get => Spine.FlipY; set => Spine.FlipY = value; }
/// <summary>
/// 垂直翻转
/// </summary>
[LocalizedDisplayName(typeof(Properties.Resources), "flipY")]
public bool FlipY { get => Spine.FlipY; set => Spine.FlipY = value; }
}
}

View File

@@ -0,0 +1,287 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SpineViewer.Spine
{
/// <summary>
/// 实现不同版本的 TextureLoader
/// </summary>
public class TextureLoader :
SpineRuntime21.TextureLoader,
SpineRuntime36.TextureLoader,
SpineRuntime37.TextureLoader,
SpineRuntime38.TextureLoader,
SpineRuntime40.TextureLoader,
SpineRuntime41.TextureLoader,
SpineRuntime42.TextureLoader
{
/// <summary>
/// 强制启用 Smooth
/// </summary>
public bool ForceSmooth { get; set; } = false;
/// <summary>
/// 强制启用 Repeated
/// </summary>
public bool ForceRepeated { get; set; } = false;
/// <summary>
/// 强制启用 Mipmap
/// </summary>
public bool ForceMipmap { get; set; } = false;
public void Load(SpineRuntime21.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime21.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime21.TextureWrap.Repeat && page.vWrap == SpineRuntime21.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime21.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime21.TextureFilter.MipMap:
case SpineRuntime21.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime21.TextureFilter.MipMapLinearNearest:
case SpineRuntime21.TextureFilter.MipMapNearestLinear:
case SpineRuntime21.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
}
public void Load(SpineRuntime36.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime36.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime36.TextureWrap.Repeat && page.vWrap == SpineRuntime36.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime36.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime36.TextureFilter.MipMap:
case SpineRuntime36.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime36.TextureFilter.MipMapLinearNearest:
case SpineRuntime36.TextureFilter.MipMapNearestLinear:
case SpineRuntime36.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
}
public void Load(SpineRuntime37.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime37.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime37.TextureWrap.Repeat && page.vWrap == SpineRuntime37.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime37.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime37.TextureFilter.MipMap:
case SpineRuntime37.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime37.TextureFilter.MipMapLinearNearest:
case SpineRuntime37.TextureFilter.MipMapNearestLinear:
case SpineRuntime37.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
}
public void Load(SpineRuntime38.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime38.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime38.TextureWrap.Repeat && page.vWrap == SpineRuntime38.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime38.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime38.TextureFilter.MipMap:
case SpineRuntime38.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime38.TextureFilter.MipMapLinearNearest:
case SpineRuntime38.TextureFilter.MipMapNearestLinear:
case SpineRuntime38.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
}
public void Load(SpineRuntime40.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime40.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime40.TextureWrap.Repeat && page.vWrap == SpineRuntime40.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime40.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime40.TextureFilter.MipMap:
case SpineRuntime40.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime40.TextureFilter.MipMapLinearNearest:
case SpineRuntime40.TextureFilter.MipMapNearestLinear:
case SpineRuntime40.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
}
public void Load(SpineRuntime41.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime41.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime41.TextureWrap.Repeat && page.vWrap == SpineRuntime41.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime41.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime41.TextureFilter.MipMap:
case SpineRuntime41.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime41.TextureFilter.MipMapLinearNearest:
case SpineRuntime41.TextureFilter.MipMapNearestLinear:
case SpineRuntime41.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
}
public void Load(SpineRuntime42.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime42.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime42.TextureWrap.Repeat && page.vWrap == SpineRuntime42.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime42.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime42.TextureFilter.MipMap:
case SpineRuntime42.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime42.TextureFilter.MipMapLinearNearest:
case SpineRuntime42.TextureFilter.MipMapNearestLinear:
case SpineRuntime42.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
// 似乎是不需要设置的, 因为存在某些 png 和 atlas 大小不同的情况, 一般是有一些缩放, 如果设置了反而渲染异常
// page.width = (int)texture.Size.X;
// page.height = (int)texture.Size.Y;
}
public void Unload(object texture) => ((SFML.Graphics.Texture)texture).Dispose();
}
}

View File

@@ -7,7 +7,7 @@
<TargetFramework>net8.0-windows</TargetFramework>
<BaseOutputPath>$(SolutionDir)out</BaseOutputPath>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
<Version>0.12.7</Version>
<Version>0.12.17</Version>
<OutputType>WinExe</OutputType>
<UseWindowsForms>true</UseWindowsForms>
<ApplicationIcon>appicon.ico</ApplicationIcon>
@@ -49,6 +49,9 @@
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Controls\SpinePreviewPanel.resx">
<Generator></Generator>
</EmbeddedResource>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>

View File

@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Resources;
using System.Text;
using System.Threading.Tasks;
namespace SpineViewer.Utils.Localize
{
public class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
private readonly ResourceManager _resourceManager;
private readonly string _resourceKey;
public LocalizedDisplayNameAttribute(Type resourceSource, string resourceKey)
{
_resourceManager = new ResourceManager(resourceSource);
_resourceKey = resourceKey;
}
public override string DisplayName => _resourceManager.GetString(_resourceKey) ?? $"[{_resourceKey}]";
}
public class LocalizedCategoryAttribute : CategoryAttribute
{
private readonly ResourceManager _resourceManager;
private readonly string _resourceKey;
public LocalizedCategoryAttribute(Type resourceSource, string resourceKey)
{
_resourceManager = new ResourceManager(resourceSource);
_resourceKey = resourceKey;
}
protected override string GetLocalizedString(string value)
{
return _resourceManager.GetString(_resourceKey) ?? $"[{_resourceKey}]";
}
}
public class LocalizedDescriptionAttribute : DescriptionAttribute
{
private readonly ResourceManager _resourceManager;
private readonly string _resourceKey;
public LocalizedDescriptionAttribute(Type resourceSource, string resourceKey)
{
_resourceManager = new ResourceManager(resourceSource);
_resourceKey = resourceKey;
}
public override string Description => _resourceManager.GetString(_resourceKey) ?? $"[{_resourceKey}]";
}
}

View File

@@ -0,0 +1,52 @@
using NLog;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace SpineViewer.Utils.Localize
{
public static class LocalizeConfiguration
{
public static void UpdateLocalizeSetting(string newCulture)
{
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if (config.AppSettings.Settings["localize"] != null)
config.AppSettings.Settings["localize"].Value = newCulture;
else
config.AppSettings.Settings.Add("localize", newCulture);
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
public static void SetCulture()
{
string cultureName = ConfigurationManager.AppSettings["localize"];
if (string.IsNullOrWhiteSpace(cultureName))
{
cultureName = "zh-CN";
}
try
{
var culture = new CultureInfo(cultureName);
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}
catch (CultureNotFoundException)
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN");
Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-CN");
}
}
}
}

View File

@@ -188,7 +188,7 @@ namespace SpineViewer.Utils
if (s.Length == 4) // #RGB
return ParseShortHexColor(s, includeAlpha: false);
throw new FormatException("无法解析颜色,请使用 #RRGGBBAA、#RRGGBB、#RGBA 或 #RGB 格式");
throw new FormatException(Properties.Resources.formatExceptionParseColor);
}
// 处理 R,G,B,A 和 R,G,B 格式
@@ -207,11 +207,11 @@ namespace SpineViewer.Utils
if (color.IsKnownColor || color.IsNamedColor)
return new SFML.Graphics.Color(color.R, color.G, color.B, color.A);
throw new FormatException("无法解析颜色,请使用已知的颜色名称");
throw new FormatException(Properties.Resources.formatExceptionUnknownColor);
}
catch (Exception ex)
{
throw new FormatException("无法解析颜色,请检查格式", ex);
throw new FormatException(Properties.Resources.formatExceptionParseColorError, ex);
}
}