Added improvements to the "Fit Texture" action: (#124) (by biwa)

- Dialog can't be resized anymore
- Dialog can be canceled by pressing the escape key
- Changed input boxes to the appropriate GZDB version, so steps and modifier key work correctly
- Added checkboxes to automatically fit the textures optimally based on the width/height of the line(s) in respect to the width/height of the texture
- Added input boxes to manually set a width/height pattern size of the texture that will be used when automatically fitting textures
This commit is contained in:
biwa 2017-07-18 13:56:27 +02:00 committed by jewalky
parent f14a4bd64a
commit 131c51d7d2
3 changed files with 255 additions and 94 deletions

View file

@ -27,10 +27,12 @@
private void InitializeComponent() { private void InitializeComponent() {
this.labelhorizrepeat = new System.Windows.Forms.Label(); this.labelhorizrepeat = new System.Windows.Forms.Label();
this.repeatgroup = new System.Windows.Forms.GroupBox(); this.repeatgroup = new System.Windows.Forms.GroupBox();
this.vertrepeat = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
this.horizrepeat = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
this.cbautoheight = new System.Windows.Forms.CheckBox();
this.cbautowidth = new System.Windows.Forms.CheckBox();
this.resetvert = new System.Windows.Forms.Button(); this.resetvert = new System.Windows.Forms.Button();
this.resethoriz = new System.Windows.Forms.Button(); this.resethoriz = new System.Windows.Forms.Button();
this.vertrepeat = new System.Windows.Forms.NumericUpDown();
this.horizrepeat = new System.Windows.Forms.NumericUpDown();
this.labelvertrepeat = new System.Windows.Forms.Label(); this.labelvertrepeat = new System.Windows.Forms.Label();
this.cbfitwidth = new System.Windows.Forms.CheckBox(); this.cbfitwidth = new System.Windows.Forms.CheckBox();
this.accept = new System.Windows.Forms.Button(); this.accept = new System.Windows.Forms.Button();
@ -38,9 +40,11 @@
this.cbfitheight = new System.Windows.Forms.CheckBox(); this.cbfitheight = new System.Windows.Forms.CheckBox();
this.cbfitconnected = new System.Windows.Forms.CheckBox(); this.cbfitconnected = new System.Windows.Forms.CheckBox();
this.groupBox2 = new System.Windows.Forms.GroupBox(); this.groupBox2 = new System.Windows.Forms.GroupBox();
this.patternheight = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
this.patternwidth = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
this.labelpatternheight = new System.Windows.Forms.Label();
this.labelpatternwidth = new System.Windows.Forms.Label();
this.repeatgroup.SuspendLayout(); this.repeatgroup.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.vertrepeat)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.horizrepeat)).BeginInit();
this.groupBox2.SuspendLayout(); this.groupBox2.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
@ -55,19 +59,81 @@
// //
// repeatgroup // repeatgroup
// //
this.repeatgroup.Controls.Add(this.resetvert);
this.repeatgroup.Controls.Add(this.resethoriz);
this.repeatgroup.Controls.Add(this.vertrepeat); this.repeatgroup.Controls.Add(this.vertrepeat);
this.repeatgroup.Controls.Add(this.horizrepeat); this.repeatgroup.Controls.Add(this.horizrepeat);
this.repeatgroup.Controls.Add(this.cbautoheight);
this.repeatgroup.Controls.Add(this.cbautowidth);
this.repeatgroup.Controls.Add(this.resetvert);
this.repeatgroup.Controls.Add(this.resethoriz);
this.repeatgroup.Controls.Add(this.labelvertrepeat); this.repeatgroup.Controls.Add(this.labelvertrepeat);
this.repeatgroup.Controls.Add(this.labelhorizrepeat); this.repeatgroup.Controls.Add(this.labelhorizrepeat);
this.repeatgroup.Location = new System.Drawing.Point(12, 107); this.repeatgroup.Location = new System.Drawing.Point(12, 118);
this.repeatgroup.Name = "repeatgroup"; this.repeatgroup.Name = "repeatgroup";
this.repeatgroup.Size = new System.Drawing.Size(183, 80); this.repeatgroup.Size = new System.Drawing.Size(251, 80);
this.repeatgroup.TabIndex = 1; this.repeatgroup.TabIndex = 1;
this.repeatgroup.TabStop = false; this.repeatgroup.TabStop = false;
this.repeatgroup.Text = " Texture Repeating "; this.repeatgroup.Text = " Texture Repeating ";
// //
// vertrepeat
//
this.vertrepeat.AllowDecimal = true;
this.vertrepeat.AllowExpressions = false;
this.vertrepeat.AllowNegative = true;
this.vertrepeat.AllowRelative = false;
this.vertrepeat.ButtonStep = 1;
this.vertrepeat.ButtonStepBig = 10F;
this.vertrepeat.ButtonStepFloat = 1F;
this.vertrepeat.ButtonStepSmall = 1F;
this.vertrepeat.ButtonStepsUseModifierKeys = true;
this.vertrepeat.ButtonStepsWrapAround = false;
this.vertrepeat.Location = new System.Drawing.Point(84, 44);
this.vertrepeat.Name = "vertrepeat";
this.vertrepeat.Size = new System.Drawing.Size(63, 24);
this.vertrepeat.StepValues = null;
this.vertrepeat.TabIndex = 16;
this.vertrepeat.WhenTextChanged += new System.EventHandler(this.vertrepeat_ValueChanged);
//
// horizrepeat
//
this.horizrepeat.AllowDecimal = true;
this.horizrepeat.AllowExpressions = false;
this.horizrepeat.AllowNegative = true;
this.horizrepeat.AllowRelative = false;
this.horizrepeat.ButtonStep = 1;
this.horizrepeat.ButtonStepBig = 10F;
this.horizrepeat.ButtonStepFloat = 1F;
this.horizrepeat.ButtonStepSmall = 1F;
this.horizrepeat.ButtonStepsUseModifierKeys = true;
this.horizrepeat.ButtonStepsWrapAround = false;
this.horizrepeat.Location = new System.Drawing.Point(84, 19);
this.horizrepeat.Name = "horizrepeat";
this.horizrepeat.Size = new System.Drawing.Size(63, 24);
this.horizrepeat.StepValues = null;
this.horizrepeat.TabIndex = 15;
this.horizrepeat.WhenTextChanged += new System.EventHandler(this.horizrepeat_ValueChanged);
//
// cbautoheight
//
this.cbautoheight.AutoSize = true;
this.cbautoheight.Location = new System.Drawing.Point(180, 51);
this.cbautoheight.Name = "cbautoheight";
this.cbautoheight.Size = new System.Drawing.Size(48, 17);
this.cbautoheight.TabIndex = 11;
this.cbautoheight.Text = "Auto";
this.cbautoheight.UseVisualStyleBackColor = true;
this.cbautoheight.CheckedChanged += new System.EventHandler(this.cb_CheckedChanged);
//
// cbautowidth
//
this.cbautowidth.AutoSize = true;
this.cbautowidth.Location = new System.Drawing.Point(180, 24);
this.cbautowidth.Name = "cbautowidth";
this.cbautowidth.Size = new System.Drawing.Size(48, 17);
this.cbautowidth.TabIndex = 10;
this.cbautowidth.Text = "Auto";
this.cbautowidth.UseVisualStyleBackColor = true;
this.cbautowidth.CheckedChanged += new System.EventHandler(this.cb_CheckedChanged);
//
// resetvert // resetvert
// //
this.resetvert.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Reset; this.resetvert.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Reset;
@ -88,52 +154,6 @@
this.resethoriz.UseVisualStyleBackColor = true; this.resethoriz.UseVisualStyleBackColor = true;
this.resethoriz.Click += new System.EventHandler(this.resethoriz_Click); this.resethoriz.Click += new System.EventHandler(this.resethoriz_Click);
// //
// vertrepeat
//
this.vertrepeat.Location = new System.Drawing.Point(84, 48);
this.vertrepeat.Maximum = new decimal(new int[] {
512,
0,
0,
0});
this.vertrepeat.Minimum = new decimal(new int[] {
512,
0,
0,
-2147483648});
this.vertrepeat.Name = "vertrepeat";
this.vertrepeat.Size = new System.Drawing.Size(60, 20);
this.vertrepeat.TabIndex = 3;
this.vertrepeat.Value = new decimal(new int[] {
1,
0,
0,
0});
this.vertrepeat.ValueChanged += new System.EventHandler(this.vertrepeat_ValueChanged);
//
// horizrepeat
//
this.horizrepeat.Location = new System.Drawing.Point(84, 22);
this.horizrepeat.Maximum = new decimal(new int[] {
512,
0,
0,
0});
this.horizrepeat.Minimum = new decimal(new int[] {
512,
0,
0,
-2147483648});
this.horizrepeat.Name = "horizrepeat";
this.horizrepeat.Size = new System.Drawing.Size(60, 20);
this.horizrepeat.TabIndex = 2;
this.horizrepeat.Value = new decimal(new int[] {
1,
0,
0,
0});
this.horizrepeat.ValueChanged += new System.EventHandler(this.horizrepeat_ValueChanged);
//
// labelvertrepeat // labelvertrepeat
// //
this.labelvertrepeat.Location = new System.Drawing.Point(15, 50); this.labelvertrepeat.Location = new System.Drawing.Point(15, 50);
@ -156,8 +176,8 @@
// //
// accept // accept
// //
this.accept.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.accept.Anchor = System.Windows.Forms.AnchorStyles.None;
this.accept.Location = new System.Drawing.Point(12, 194); this.accept.Location = new System.Drawing.Point(51, 204);
this.accept.Name = "accept"; this.accept.Name = "accept";
this.accept.Size = new System.Drawing.Size(88, 24); this.accept.Size = new System.Drawing.Size(88, 24);
this.accept.TabIndex = 6; this.accept.TabIndex = 6;
@ -167,8 +187,8 @@
// //
// cancel // cancel
// //
this.cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.cancel.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cancel.Location = new System.Drawing.Point(106, 194); this.cancel.Location = new System.Drawing.Point(145, 204);
this.cancel.Name = "cancel"; this.cancel.Name = "cancel";
this.cancel.Size = new System.Drawing.Size(88, 24); this.cancel.Size = new System.Drawing.Size(88, 24);
this.cancel.TabIndex = 7; this.cancel.TabIndex = 7;
@ -179,7 +199,7 @@
// cbfitheight // cbfitheight
// //
this.cbfitheight.AutoSize = true; this.cbfitheight.AutoSize = true;
this.cbfitheight.Location = new System.Drawing.Point(10, 42); this.cbfitheight.Location = new System.Drawing.Point(10, 44);
this.cbfitheight.Name = "cbfitheight"; this.cbfitheight.Name = "cbfitheight";
this.cbfitheight.Size = new System.Drawing.Size(69, 17); this.cbfitheight.Size = new System.Drawing.Size(69, 17);
this.cbfitheight.TabIndex = 8; this.cbfitheight.TabIndex = 8;
@ -190,7 +210,7 @@
// cbfitconnected // cbfitconnected
// //
this.cbfitconnected.AutoSize = true; this.cbfitconnected.AutoSize = true;
this.cbfitconnected.Location = new System.Drawing.Point(10, 65); this.cbfitconnected.Location = new System.Drawing.Point(10, 69);
this.cbfitconnected.Name = "cbfitconnected"; this.cbfitconnected.Name = "cbfitconnected";
this.cbfitconnected.Size = new System.Drawing.Size(168, 17); this.cbfitconnected.Size = new System.Drawing.Size(168, 17);
this.cbfitconnected.TabIndex = 9; this.cbfitconnected.TabIndex = 9;
@ -200,38 +220,100 @@
// //
// groupBox2 // groupBox2
// //
this.groupBox2.Controls.Add(this.patternheight);
this.groupBox2.Controls.Add(this.patternwidth);
this.groupBox2.Controls.Add(this.labelpatternheight);
this.groupBox2.Controls.Add(this.labelpatternwidth);
this.groupBox2.Controls.Add(this.cbfitwidth); this.groupBox2.Controls.Add(this.cbfitwidth);
this.groupBox2.Controls.Add(this.cbfitconnected); this.groupBox2.Controls.Add(this.cbfitconnected);
this.groupBox2.Controls.Add(this.cbfitheight); this.groupBox2.Controls.Add(this.cbfitheight);
this.groupBox2.Location = new System.Drawing.Point(12, 12); this.groupBox2.Location = new System.Drawing.Point(12, 12);
this.groupBox2.Name = "groupBox2"; this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(183, 89); this.groupBox2.Size = new System.Drawing.Size(251, 100);
this.groupBox2.TabIndex = 10; this.groupBox2.TabIndex = 10;
this.groupBox2.TabStop = false; this.groupBox2.TabStop = false;
this.groupBox2.Text = " Options "; this.groupBox2.Text = " Options ";
// //
// patternheight
//
this.patternheight.AllowDecimal = true;
this.patternheight.AllowExpressions = false;
this.patternheight.AllowNegative = false;
this.patternheight.AllowRelative = false;
this.patternheight.ButtonStep = 8;
this.patternheight.ButtonStepBig = 16F;
this.patternheight.ButtonStepFloat = 8F;
this.patternheight.ButtonStepSmall = 8F;
this.patternheight.ButtonStepsUseModifierKeys = true;
this.patternheight.ButtonStepsWrapAround = false;
this.patternheight.Location = new System.Drawing.Point(177, 40);
this.patternheight.Name = "patternheight";
this.patternheight.Size = new System.Drawing.Size(63, 24);
this.patternheight.StepValues = null;
this.patternheight.TabIndex = 18;
this.patternheight.WhenTextChanged += new System.EventHandler(this.patternsize_ValueChanged);
//
// patternwidth
//
this.patternwidth.AllowDecimal = true;
this.patternwidth.AllowExpressions = false;
this.patternwidth.AllowNegative = false;
this.patternwidth.AllowRelative = false;
this.patternwidth.ButtonStep = 8;
this.patternwidth.ButtonStepBig = 16F;
this.patternwidth.ButtonStepFloat = 8F;
this.patternwidth.ButtonStepSmall = 8F;
this.patternwidth.ButtonStepsUseModifierKeys = true;
this.patternwidth.ButtonStepsWrapAround = false;
this.patternwidth.Location = new System.Drawing.Point(177, 15);
this.patternwidth.Name = "patternwidth";
this.patternwidth.Size = new System.Drawing.Size(63, 24);
this.patternwidth.StepValues = null;
this.patternwidth.TabIndex = 17;
this.patternwidth.WhenTextChanged += new System.EventHandler(this.patternsize_ValueChanged);
//
// labelpatternheight
//
this.labelpatternheight.AutoSize = true;
this.labelpatternheight.Location = new System.Drawing.Point(98, 45);
this.labelpatternheight.Name = "labelpatternheight";
this.labelpatternheight.Size = new System.Drawing.Size(76, 13);
this.labelpatternheight.TabIndex = 11;
this.labelpatternheight.Text = "Pattern height:";
//
// labelpatternwidth
//
this.labelpatternwidth.AutoSize = true;
this.labelpatternwidth.Location = new System.Drawing.Point(102, 20);
this.labelpatternwidth.Name = "labelpatternwidth";
this.labelpatternwidth.Size = new System.Drawing.Size(72, 13);
this.labelpatternwidth.TabIndex = 10;
this.labelpatternwidth.Text = "Pattern width:";
//
// FitTexturesForm // FitTexturesForm
// //
this.AcceptButton = this.accept; this.AcceptButton = this.accept;
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.ClientSize = new System.Drawing.Size(206, 223); this.CancelButton = this.cancel;
this.ClientSize = new System.Drawing.Size(275, 233);
this.Controls.Add(this.groupBox2); this.Controls.Add(this.groupBox2);
this.Controls.Add(this.cancel); this.Controls.Add(this.cancel);
this.Controls.Add(this.accept); this.Controls.Add(this.accept);
this.Controls.Add(this.repeatgroup); this.Controls.Add(this.repeatgroup);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false; this.MaximizeBox = false;
this.MinimizeBox = false; this.MinimizeBox = false;
this.Name = "FitTexturesForm"; this.Name = "FitTexturesForm";
this.Opacity = 0; this.Opacity = 0D;
this.ShowIcon = false; this.ShowIcon = false;
this.ShowInTaskbar = false; this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Fit Textures"; this.Text = "Fit Textures";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FitTexturesForm_FormClosing); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FitTexturesForm_FormClosing);
this.TextChanged += new System.EventHandler(this.vertrepeat_ValueChanged);
this.repeatgroup.ResumeLayout(false); this.repeatgroup.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.vertrepeat)).EndInit(); this.repeatgroup.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.horizrepeat)).EndInit();
this.groupBox2.ResumeLayout(false); this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout(); this.groupBox2.PerformLayout();
this.ResumeLayout(false); this.ResumeLayout(false);
@ -243,8 +325,6 @@
private System.Windows.Forms.Label labelhorizrepeat; private System.Windows.Forms.Label labelhorizrepeat;
private System.Windows.Forms.GroupBox repeatgroup; private System.Windows.Forms.GroupBox repeatgroup;
private System.Windows.Forms.Button resethoriz; private System.Windows.Forms.Button resethoriz;
private System.Windows.Forms.NumericUpDown vertrepeat;
private System.Windows.Forms.NumericUpDown horizrepeat;
private System.Windows.Forms.Label labelvertrepeat; private System.Windows.Forms.Label labelvertrepeat;
private System.Windows.Forms.Button resetvert; private System.Windows.Forms.Button resetvert;
private System.Windows.Forms.CheckBox cbfitwidth; private System.Windows.Forms.CheckBox cbfitwidth;
@ -253,5 +333,13 @@
private System.Windows.Forms.CheckBox cbfitheight; private System.Windows.Forms.CheckBox cbfitheight;
private System.Windows.Forms.CheckBox cbfitconnected; private System.Windows.Forms.CheckBox cbfitconnected;
private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.CheckBox cbautowidth;
private System.Windows.Forms.CheckBox cbautoheight;
private System.Windows.Forms.Label labelpatternheight;
private System.Windows.Forms.Label labelpatternwidth;
private Controls.ButtonsNumericTextbox horizrepeat;
private Controls.ButtonsNumericTextbox vertrepeat;
private Controls.ButtonsNumericTextbox patternwidth;
private Controls.ButtonsNumericTextbox patternheight;
} }
} }

View file

@ -13,11 +13,15 @@ namespace CodeImp.DoomBuilder.BuilderModes
{ {
internal struct FitTextureOptions internal struct FitTextureOptions
{ {
public int HorizontalRepeat; public float HorizontalRepeat;
public int VerticalRepeat; public float VerticalRepeat;
public int PatternWidth;
public int PatternHeight;
public bool FitWidth; public bool FitWidth;
public bool FitHeight; public bool FitHeight;
public bool FitAcrossSurfaces; public bool FitAcrossSurfaces;
public bool AutoWidth;
public bool AutoHeight;
public Rectangle GlobalBounds; public Rectangle GlobalBounds;
public Rectangle Bounds; public Rectangle Bounds;
@ -94,8 +98,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Restore settings // Restore settings
blockupdate = true; blockupdate = true;
horizrepeat.Value = horizontalrepeat; horizrepeat.Text = horizontalrepeat.ToString();
vertrepeat.Value = verticalrepeat; vertrepeat.Text = verticalrepeat.ToString();
prevhorizrepeat = horizontalrepeat; prevhorizrepeat = horizontalrepeat;
prevvertrepeat = verticalrepeat; prevvertrepeat = verticalrepeat;
cbfitconnected.Checked = fitacrosssurfaces; cbfitconnected.Checked = fitacrosssurfaces;
@ -120,8 +124,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
FitAcrossSurfaces = (cbfitconnected.Enabled && cbfitconnected.Checked), FitAcrossSurfaces = (cbfitconnected.Enabled && cbfitconnected.Checked),
FitWidth = cbfitwidth.Checked, FitWidth = cbfitwidth.Checked,
FitHeight = cbfitheight.Checked, FitHeight = cbfitheight.Checked,
HorizontalRepeat = (int)horizrepeat.Value, PatternWidth = (int)patternwidth.GetResultFloat(0),
VerticalRepeat = (int)vertrepeat.Value PatternHeight = (int)patternheight.GetResultFloat(0),
AutoWidth = cbautowidth.Checked,
AutoHeight = cbautoheight.Checked,
HorizontalRepeat = (float)horizrepeat.GetResultFloat(0),
VerticalRepeat = (float)vertrepeat.GetResultFloat(0)
}; };
foreach(SortedVisualSide side in strips) side.OnTextureFit(options); foreach(SortedVisualSide side in strips) side.OnTextureFit(options);
@ -134,13 +142,21 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(!repeatgroup.Enabled) return; if(!repeatgroup.Enabled) return;
// Update control status // Update control status
cbautowidth.Enabled = cbfitwidth.Checked;
patternwidth.Enabled = cbfitwidth.Checked && (cbautowidth.Enabled && cbautowidth.Checked);
labelpatternwidth.Enabled = patternwidth.Enabled;
labelhorizrepeat.Enabled = cbfitwidth.Checked; labelhorizrepeat.Enabled = cbfitwidth.Checked;
horizrepeat.Enabled = cbfitwidth.Checked; horizrepeat.Enabled = cbfitwidth.Checked && !cbautowidth.Checked;
resethoriz.Enabled = cbfitwidth.Checked; resethoriz.Enabled = cbfitwidth.Checked && !cbautowidth.Checked;
cbautoheight.Enabled = cbfitheight.Checked;
patternheight.Enabled = cbfitheight.Checked && (cbautoheight.Enabled && cbautoheight.Checked);
labelpatternheight.Enabled = patternheight.Enabled;
labelvertrepeat.Enabled = cbfitheight.Checked; labelvertrepeat.Enabled = cbfitheight.Checked;
vertrepeat.Enabled = cbfitheight.Checked; vertrepeat.Enabled = cbfitheight.Checked && !cbautoheight.Checked;
resetvert.Enabled = cbfitheight.Checked; resetvert.Enabled = cbfitheight.Checked && !cbautoheight.Checked;
} }
#endregion #endregion
@ -154,8 +170,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Store settings // Store settings
if(this.DialogResult == DialogResult.OK) if(this.DialogResult == DialogResult.OK)
{ {
horizontalrepeat = (int)horizrepeat.Value; horizontalrepeat = (int)horizrepeat.GetResultFloat(0);
verticalrepeat = (int)vertrepeat.Value; verticalrepeat = (int)vertrepeat.GetResultFloat(0);
fitacrosssurfaces = cbfitwidth.Checked; fitacrosssurfaces = cbfitwidth.Checked;
fitwidth = cbfitwidth.Checked; fitwidth = cbfitwidth.Checked;
fitheight = cbfitheight.Checked; fitheight = cbfitheight.Checked;
@ -165,26 +181,26 @@ namespace CodeImp.DoomBuilder.BuilderModes
private void resethoriz_Click(object sender, EventArgs e) private void resethoriz_Click(object sender, EventArgs e)
{ {
prevhorizrepeat = 1; prevhorizrepeat = 1;
horizrepeat.Value = 1; horizrepeat.Text = "1";
} }
private void resetvert_Click(object sender, EventArgs e) private void resetvert_Click(object sender, EventArgs e)
{ {
prevvertrepeat = 1; prevvertrepeat = 1;
vertrepeat.Value = 1; vertrepeat.Text = "1";
} }
private void horizrepeat_ValueChanged(object sender, EventArgs e) private void horizrepeat_ValueChanged(object sender, EventArgs e)
{ {
if(blockupdate) return; if(blockupdate) return;
if(horizrepeat.Value == 0) if(horizrepeat.GetResultFloat(0) == 0)
{ {
horizrepeat.Value = prevhorizrepeat > 0 ? -1 : 1; horizrepeat.Text = prevhorizrepeat > 0 ? "-1" : "1";
return; return;
} }
prevhorizrepeat = (int)horizrepeat.Value; prevhorizrepeat = (int)horizrepeat.GetResultFloat(0);
UpdateChanges(); UpdateChanges();
} }
@ -192,13 +208,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
{ {
if(blockupdate) return; if(blockupdate) return;
if(vertrepeat.Value == 0) if(vertrepeat.GetResultFloat(0) == 0)
{ {
vertrepeat.Value = prevvertrepeat > 0 ? -1 : 1; vertrepeat.Text = prevvertrepeat > 0 ? "-1" : "1";
return; return;
} }
prevvertrepeat = (int)vertrepeat.Value; prevvertrepeat = (int)vertrepeat.GetResultFloat(0);
UpdateChanges(); UpdateChanges();
} }
@ -221,6 +237,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
UpdateChanges(); UpdateChanges();
} }
private void patternsize_ValueChanged(object sender, EventArgs e)
{
if (blockupdate) return;
UpdateChanges();
}
#endregion #endregion
#region ================== Debug #region ================== Debug
@ -287,5 +309,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
#endif #endif
#endregion #endregion
} }
} }

View file

@ -678,16 +678,41 @@ namespace CodeImp.DoomBuilder.BuilderModes
{ {
float scalex, offsetx; float scalex, offsetx;
float linelength = (float)Math.Round(Sidedef.Line.Length); // Let's use ZDoom-compatible line length here float linelength = (float)Math.Round(Sidedef.Line.Length); // Let's use ZDoom-compatible line length here
float patternwidth = (options.AutoWidth && options.PatternWidth > 0) ? options.PatternWidth : Texture.Width;
float horizontalrepeat = options.HorizontalRepeat;
if(options.FitAcrossSurfaces) if (options.FitAcrossSurfaces)
{ {
scalex = Texture.ScaledWidth / (linelength * (options.GlobalBounds.Width / linelength)) * options.HorizontalRepeat; if (options.AutoWidth)
{
horizontalrepeat = (float)Math.Round((float)options.GlobalBounds.Width / patternwidth);
if (horizontalrepeat == 0)
horizontalrepeat = 1.0f;
if (options.PatternWidth > 0)
horizontalrepeat /= Texture.Width / patternwidth;
}
scalex = Texture.ScaledWidth / (linelength * (options.GlobalBounds.Width / linelength)) * horizontalrepeat;
offsetx = (float)Math.Round((options.Bounds.X * scalex - Sidedef.OffsetX - options.ControlSideOffsetX), General.Map.FormatInterface.VertexDecimals); offsetx = (float)Math.Round((options.Bounds.X * scalex - Sidedef.OffsetX - options.ControlSideOffsetX), General.Map.FormatInterface.VertexDecimals);
if(Texture.IsImageLoaded) offsetx %= Texture.Width; if(Texture.IsImageLoaded) offsetx %= Texture.Width;
} }
else else
{ {
scalex = Texture.ScaledWidth / linelength * options.HorizontalRepeat; if (options.AutoWidth)
{
horizontalrepeat = (float)Math.Round(linelength / patternwidth);
if (horizontalrepeat == 0)
horizontalrepeat = 1.0f;
if (options.PatternWidth > 0)
horizontalrepeat /= Texture.Width / patternwidth;
}
scalex = Texture.ScaledWidth / linelength * horizontalrepeat;
offsetx = -Sidedef.OffsetX - options.ControlSideOffsetX; offsetx = -Sidedef.OffsetX - options.ControlSideOffsetX;
} }
@ -707,10 +732,23 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(Sidedef.Sector != null) if(Sidedef.Sector != null)
{ {
float scaley, offsety; float scaley, offsety;
float patternheight = (options.AutoHeight && options.PatternHeight > 0) ? options.PatternHeight : Texture.Height;
float verticalrepeat = options.VerticalRepeat;
if(options.FitAcrossSurfaces) if (options.FitAcrossSurfaces)
{ {
scaley = Texture.ScaledHeight / (options.Bounds.Height * ((float)options.GlobalBounds.Height / options.Bounds.Height)) * options.VerticalRepeat; if (options.AutoHeight)
{
verticalrepeat = (float)Math.Round((float)options.GlobalBounds.Height / patternheight);
if (verticalrepeat == 0)
verticalrepeat = 1.0f;
if (options.PatternHeight > 0)
verticalrepeat /= Texture.Height / patternheight;
}
scaley = Texture.ScaledHeight / (options.Bounds.Height * ((float)options.GlobalBounds.Height / options.Bounds.Height)) * verticalrepeat;
if(this is VisualLower) // Special cases, special cases... if(this is VisualLower) // Special cases, special cases...
{ {
@ -731,7 +769,18 @@ namespace CodeImp.DoomBuilder.BuilderModes
} }
else else
{ {
scaley = Texture.ScaledHeight / options.Bounds.Height * options.VerticalRepeat; if (options.AutoHeight)
{
verticalrepeat = (float)Math.Round((float)options.Bounds.Height / patternheight);
if (verticalrepeat == 0)
verticalrepeat = 1.0f;
if (options.PatternHeight > 0)
verticalrepeat /= Texture.Height / patternheight;
}
scaley = Texture.ScaledHeight / options.Bounds.Height * verticalrepeat;
// Special cases, special cases... // Special cases, special cases...
if(this is VisualLower) if(this is VisualLower)