diff --git a/src/Test/Assa/ResamplerTest.cs b/src/Test/Assa/ResamplerTest.cs new file mode 100644 index 000000000..d171526b0 --- /dev/null +++ b/src/Test/Assa/ResamplerTest.cs @@ -0,0 +1,51 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Nikse.SubtitleEdit.Core.Common; + +namespace Test.Assa +{ + [TestClass] + public class AssaResamplerTest + { + [TestMethod] + public void TestResampleOverrideFontTags1() + { + var result = AssaResampler.ResampleOverrideTagsFont(100, 200, 100, 200, "{\\fs10}Hallo!"); + Assert.AreEqual("{\\fs20}Hallo!", result); + } + + [TestMethod] + public void TestResampleOverrideFontTags2() + { + var result = AssaResampler.ResampleOverrideTagsFont(100, 200, 100, 200, "{\\fs10}Hallo! {\\fs20}Hallo!"); + Assert.AreEqual("{\\fs20}Hallo! {\\fs40}Hallo!", result); + } + + [TestMethod] + public void TestResampleOverrideFontTags3() + { + var result = AssaResampler.ResampleOverrideTagsFont(100, 200, 100, 200, "{\\fs10\\fs20\\fs30}Hallo!"); + Assert.AreEqual("{\\fs20\\fs40\\fs60}Hallo!", result); + } + + [TestMethod] + public void TestResampleOverridePositionTags1() + { + var result = AssaResampler.ResampleOverrideTagsPosition(100, 200, 100, 200, "{\\pos(10,20)}Hallo!"); + Assert.AreEqual("{\\pos(20,40)}Hallo!", result); + } + + [TestMethod] + public void TestResampleOverridePositionTags2() + { + var result = AssaResampler.ResampleOverrideTagsPosition(100, 200, 100, 200, "{\\pos(10,20)\\pos(20,30)}Hallo!"); + Assert.AreEqual("{\\pos(20,40)\\pos(40,60)}Hallo!", result); + } + + [TestMethod] + public void TestResampleOverrideDrawingTags1() + { + var result = AssaResampler.ResampleOverrideTagsDrawing(100, 200, 100, 200, "{\\p1}m 0 0 l 100 0 100 100 0 100{\\p0}"); + Assert.AreEqual("{\\p1}m 0 0 l 200 0 200 200 0 200{\\p0}", result); + } + } +} diff --git a/src/Test/AssaTagHelper/RemoveTag.cs b/src/Test/Assa/TagHelperRemoveTagTest.cs similarity index 96% rename from src/Test/AssaTagHelper/RemoveTag.cs rename to src/Test/Assa/TagHelperRemoveTagTest.cs index ae03e0bdc..ea6bbbbb7 100644 --- a/src/Test/AssaTagHelper/RemoveTag.cs +++ b/src/Test/Assa/TagHelperRemoveTagTest.cs @@ -1,10 +1,10 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Controls; -namespace Test.AssaTagHelper +namespace Test.Assa { [TestClass] - public class RemoveTag + public class TagHelperRemoveTagTest { [TestMethod] public void RemoveTag1() diff --git a/src/Test/Test.csproj b/src/Test/Test.csproj index 54eb4ff4b..06e7aee18 100644 --- a/src/Test/Test.csproj +++ b/src/Test/Test.csproj @@ -61,7 +61,8 @@ - + + diff --git a/src/libse/Common/AssaResampler.cs b/src/libse/Common/AssaResampler.cs index 37d082869..ba6d3b603 100644 --- a/src/libse/Common/AssaResampler.cs +++ b/src/libse/Common/AssaResampler.cs @@ -19,7 +19,7 @@ namespace Nikse.SubtitleEdit.Core.Common return factor * v; } - public static string ResampleOverrideTags(decimal sourceWidth, decimal targetWidth, decimal sourceHeight, decimal targetHeight, string input) + public static string ResampleOverrideTagsFont(decimal sourceWidth, decimal targetWidth, decimal sourceHeight, decimal targetHeight, string input) { var s = input; @@ -28,23 +28,37 @@ namespace Nikse.SubtitleEdit.Core.Common s = FixTagWithNumber(sourceWidth, targetWidth, s, "fscx"); s = FixTagWithNumber(sourceHeight, targetHeight, s, "fscy"); + return s; + } + + public static string ResampleOverrideTagsPosition(decimal sourceWidth, decimal targetWidth, decimal sourceHeight, decimal targetHeight, string input) + { + var s = input; + // {\\pos(10,11)} s = FixMethodTwoParameters(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "pos"); s = FixMethodTwoParameters(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "org"); // {\\move(10,11,20,21,5,5)} - FixMethodSixParametersFourActive(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "move"); + s = FixMethodSixParametersFourActive(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "move"); // {\\move(10,11,20,21)} - FixMethodFourParameters(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "move"); - FixMethodFourParameters(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "clip"); - FixMethodFourParameters(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "iclip"); + s = FixMethodFourParameters(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "move"); + s = FixMethodFourParameters(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "clip"); + s = FixMethodFourParameters(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "iclip"); + + return s; + } + + public static string ResampleOverrideTagsDrawing(decimal sourceWidth, decimal targetWidth, decimal sourceHeight, decimal targetHeight, string input) + { + var s = input; //{\clip(1,m 50 0 b 100 0 100 100 50 100 b 0 100 0 0 50 0)} //{\p1}m 0 0 l 100 0 100 100 0 100{\p0} - FixDrawing(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "\\iclip\\(", ")"); - FixDrawing(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "\\clip\\(", ")"); - FixDrawing(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "{\\p1}", "{\\p0}"); + s = FixDrawing(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "\\iclip\\(", ")"); + s = FixDrawing(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "\\clip\\(", ")"); + s = FixDrawing(sourceWidth, targetWidth, sourceHeight, targetHeight, s, "{\\p1}", "{\\p0}"); return s; } diff --git a/src/ui/Forms/Assa/ResolutionResampler.Designer.cs b/src/ui/Forms/Assa/ResolutionResampler.Designer.cs index 3dc754d60..d01164483 100644 --- a/src/ui/Forms/Assa/ResolutionResampler.Designer.cs +++ b/src/ui/Forms/Assa/ResolutionResampler.Designer.cs @@ -41,7 +41,10 @@ namespace Nikse.SubtitleEdit.Forms.Assa this.numericUpDownSourceWidth = new System.Windows.Forms.NumericUpDown(); this.buttonCancel = new System.Windows.Forms.Button(); this.buttonOK = new System.Windows.Forms.Button(); - this.checkBoxKeepAspectRatio = new System.Windows.Forms.CheckBox(); + this.checkBoxMargins = new System.Windows.Forms.CheckBox(); + this.checkBoxFontSize = new System.Windows.Forms.CheckBox(); + this.checkBoxPosition = new System.Windows.Forms.CheckBox(); + this.checkBoxDrawing = new System.Windows.Forms.CheckBox(); ((System.ComponentModel.ISupportInitialize)(this.numericUpDownTargetHeight)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numericUpDownTargetWidth)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSourceHeight)).BeginInit(); @@ -157,7 +160,7 @@ namespace Nikse.SubtitleEdit.Forms.Assa this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.buttonCancel.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonCancel.Location = new System.Drawing.Point(327, 143); + this.buttonCancel.Location = new System.Drawing.Point(371, 189); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.Size = new System.Drawing.Size(75, 23); this.buttonCancel.TabIndex = 16; @@ -169,7 +172,7 @@ namespace Nikse.SubtitleEdit.Forms.Assa // this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonOK.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonOK.Location = new System.Drawing.Point(246, 143); + this.buttonOK.Location = new System.Drawing.Point(290, 189); this.buttonOK.Name = "buttonOK"; this.buttonOK.Size = new System.Drawing.Size(75, 23); this.buttonOK.TabIndex = 15; @@ -177,22 +180,61 @@ namespace Nikse.SubtitleEdit.Forms.Assa this.buttonOK.UseVisualStyleBackColor = true; this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); // - // checkBoxKeepAspectRatio + // checkBoxMargins // - this.checkBoxKeepAspectRatio.AutoSize = true; - this.checkBoxKeepAspectRatio.Location = new System.Drawing.Point(15, 99); - this.checkBoxKeepAspectRatio.Name = "checkBoxKeepAspectRatio"; - this.checkBoxKeepAspectRatio.Size = new System.Drawing.Size(169, 17); - this.checkBoxKeepAspectRatio.TabIndex = 17; - this.checkBoxKeepAspectRatio.Text = "Keep aspect ration for margins"; - this.checkBoxKeepAspectRatio.UseVisualStyleBackColor = true; + this.checkBoxMargins.AutoSize = true; + this.checkBoxMargins.Location = new System.Drawing.Point(15, 99); + this.checkBoxMargins.Name = "checkBoxMargins"; + this.checkBoxMargins.Size = new System.Drawing.Size(169, 17); + this.checkBoxMargins.TabIndex = 17; + this.checkBoxMargins.Text = "Keep aspect ration for margins"; + this.checkBoxMargins.UseVisualStyleBackColor = true; + // + // checkBoxFontSize + // + this.checkBoxFontSize.AutoSize = true; + this.checkBoxFontSize.Checked = true; + this.checkBoxFontSize.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxFontSize.Location = new System.Drawing.Point(12, 122); + this.checkBoxFontSize.Name = "checkBoxFontSize"; + this.checkBoxFontSize.Size = new System.Drawing.Size(172, 17); + this.checkBoxFontSize.TabIndex = 18; + this.checkBoxFontSize.Text = "Keep aspect ration for font size"; + this.checkBoxFontSize.UseVisualStyleBackColor = true; + // + // checkBoxPosition + // + this.checkBoxPosition.AutoSize = true; + this.checkBoxPosition.Checked = true; + this.checkBoxPosition.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxPosition.Location = new System.Drawing.Point(12, 145); + this.checkBoxPosition.Name = "checkBoxPosition"; + this.checkBoxPosition.Size = new System.Drawing.Size(169, 17); + this.checkBoxPosition.TabIndex = 19; + this.checkBoxPosition.Text = "Keep aspect ration for position"; + this.checkBoxPosition.UseVisualStyleBackColor = true; + // + // checkBoxDrawing + // + this.checkBoxDrawing.AutoSize = true; + this.checkBoxDrawing.Checked = true; + this.checkBoxDrawing.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxDrawing.Location = new System.Drawing.Point(12, 168); + this.checkBoxDrawing.Name = "checkBoxDrawing"; + this.checkBoxDrawing.Size = new System.Drawing.Size(170, 17); + this.checkBoxDrawing.TabIndex = 20; + this.checkBoxDrawing.Text = "Keep aspect ration for drawing"; + this.checkBoxDrawing.UseVisualStyleBackColor = true; // // ResolutionResampler // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(414, 178); - this.Controls.Add(this.checkBoxKeepAspectRatio); + this.ClientSize = new System.Drawing.Size(458, 224); + this.Controls.Add(this.checkBoxDrawing); + this.Controls.Add(this.checkBoxPosition); + this.Controls.Add(this.checkBoxFontSize); + this.Controls.Add(this.checkBoxMargins); this.Controls.Add(this.buttonCancel); this.Controls.Add(this.buttonOK); this.Controls.Add(this.label1); @@ -238,6 +280,9 @@ namespace Nikse.SubtitleEdit.Forms.Assa private System.Windows.Forms.NumericUpDown numericUpDownSourceWidth; private System.Windows.Forms.Button buttonCancel; private System.Windows.Forms.Button buttonOK; - private System.Windows.Forms.CheckBox checkBoxKeepAspectRatio; + private System.Windows.Forms.CheckBox checkBoxMargins; + private System.Windows.Forms.CheckBox checkBoxFontSize; + private System.Windows.Forms.CheckBox checkBoxPosition; + private System.Windows.Forms.CheckBox checkBoxDrawing; } } \ No newline at end of file diff --git a/src/ui/Forms/Assa/ResolutionResampler.cs b/src/ui/Forms/Assa/ResolutionResampler.cs index e0bd4fd4e..f272ee61d 100644 --- a/src/ui/Forms/Assa/ResolutionResampler.cs +++ b/src/ui/Forms/Assa/ResolutionResampler.cs @@ -112,7 +112,10 @@ namespace Nikse.SubtitleEdit.Forms.Assa var targetWidth = numericUpDownTargetWidth.Value; var targetHeight = numericUpDownTargetHeight.Value; - var fixMargins = checkBoxKeepAspectRatio.Checked; + var fixMargins = checkBoxMargins.Checked; + var fixFonts = checkBoxFontSize.Checked; + var fixPos = checkBoxPosition.Checked; + var fixDraw = checkBoxDrawing.Checked; var styles = AdvancedSubStationAlpha.GetSsaStylesFromHeader(_subtitle.Header); foreach (var style in styles) { @@ -132,7 +135,20 @@ namespace Nikse.SubtitleEdit.Forms.Assa foreach (var p in _subtitle.Paragraphs) { - p.Text = AssaResampler.ResampleOverrideTags(sourceWidth, targetWidth, sourceHeight, targetHeight, p.Text); + if (fixFonts) + { + p.Text = AssaResampler.ResampleOverrideTagsFont(sourceWidth, targetWidth, sourceHeight, targetHeight, p.Text); + } + + if (fixPos) + { + p.Text = AssaResampler.ResampleOverrideTagsPosition(sourceWidth, targetWidth, sourceHeight, targetHeight, p.Text); + } + + if (fixDraw) + { + p.Text = AssaResampler.ResampleOverrideTagsDrawing(sourceWidth, targetWidth, sourceHeight, targetHeight, p.Text); + } } DialogResult = DialogResult.OK;