fixed scrolling and improved preview drawing

This commit is contained in:
flash 2023-10-08 20:41:21 +02:00
parent 09243441bc
commit 9dcfad3038
2 changed files with 140 additions and 136 deletions

View file

@ -31,6 +31,7 @@ namespace SoFii
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
this.serverBox = new System.Windows.Forms.GroupBox();
this.serverUseCustom = new System.Windows.Forms.CheckBox();
this.serverAddressLabel = new System.Windows.Forms.Label();
this.serverAddressInput = new System.Windows.Forms.TextBox();
this.serverResetButton = new System.Windows.Forms.Button();
@ -41,28 +42,27 @@ namespace SoFii
this.gameBrowseButton = new System.Windows.Forms.Button();
this.mainTabs = new System.Windows.Forms.TabControl();
this.locationsTabPage = new System.Windows.Forms.TabPage();
this.versionLabel = new System.Windows.Forms.Label();
this.mainOpenFileDiag = new System.Windows.Forms.OpenFileDialog();
this.serverUseCustom = new System.Windows.Forms.CheckBox();
this.playerTabPage = new System.Windows.Forms.TabPage();
this.playerNameBox = new System.Windows.Forms.GroupBox();
this.playerNameLabel = new System.Windows.Forms.Label();
this.playerNameInput = new System.Windows.Forms.TextBox();
this.playerNameColoursBox = new System.Windows.Forms.GroupBox();
this.playerNameColourButton = new System.Windows.Forms.Button();
this.playerNamePreview = new System.Windows.Forms.Panel();
this.gfxBox = new System.Windows.Forms.GroupBox();
this.gfxFullscreen = new System.Windows.Forms.CheckBox();
this.gfxResolutionLabel = new System.Windows.Forms.Label();
this.gfxResolutionSelect = new System.Windows.Forms.ComboBox();
this.gfxFullscreen = new System.Windows.Forms.CheckBox();
this.playerNameBox = new System.Windows.Forms.GroupBox();
this.playerNamePreview = new System.Windows.Forms.Panel();
this.playerNameColoursBox = new System.Windows.Forms.GroupBox();
this.playerNameColourButton = new System.Windows.Forms.Button();
this.playerNameLabel = new System.Windows.Forms.Label();
this.playerNameInput = new System.Windows.Forms.TextBox();
this.versionLabel = new System.Windows.Forms.Label();
this.mainOpenFileDiag = new System.Windows.Forms.OpenFileDialog();
this.serverBox.SuspendLayout();
this.gameBox.SuspendLayout();
this.mainTabs.SuspendLayout();
this.locationsTabPage.SuspendLayout();
this.playerTabPage.SuspendLayout();
this.gfxBox.SuspendLayout();
this.playerNameBox.SuspendLayout();
this.playerNameColoursBox.SuspendLayout();
this.gfxBox.SuspendLayout();
this.SuspendLayout();
//
// serverBox
@ -80,6 +80,17 @@ namespace SoFii
this.serverBox.TabStop = false;
this.serverBox.Text = "Server";
//
// serverUseCustom
//
this.serverUseCustom.AutoSize = true;
this.serverUseCustom.Location = new System.Drawing.Point(87, 47);
this.serverUseCustom.Name = "serverUseCustom";
this.serverUseCustom.Size = new System.Drawing.Size(154, 17);
this.serverUseCustom.TabIndex = 304;
this.serverUseCustom.Text = "Use custom server address";
this.serverUseCustom.UseVisualStyleBackColor = true;
this.serverUseCustom.CheckedChanged += new System.EventHandler(this.serverUseCustom_CheckedChanged);
//
// serverAddressLabel
//
this.serverAddressLabel.AutoSize = true;
@ -181,6 +192,7 @@ namespace SoFii
//
// locationsTabPage
//
this.locationsTabPage.AutoScroll = true;
this.locationsTabPage.Controls.Add(this.gameBox);
this.locationsTabPage.Controls.Add(this.serverBox);
this.locationsTabPage.Location = new System.Drawing.Point(4, 22);
@ -191,36 +203,9 @@ namespace SoFii
this.locationsTabPage.Text = "Locations";
this.locationsTabPage.UseVisualStyleBackColor = true;
//
// versionLabel
//
this.versionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.versionLabel.AutoSize = true;
this.versionLabel.ForeColor = System.Drawing.SystemColors.GrayText;
this.versionLabel.Location = new System.Drawing.Point(13, 533);
this.versionLabel.Name = "versionLabel";
this.versionLabel.Size = new System.Drawing.Size(117, 13);
this.versionLabel.TabIndex = 13;
this.versionLabel.Text = "SoFii version goes here";
//
// mainOpenFileDiag
//
this.mainOpenFileDiag.DefaultExt = "exe";
this.mainOpenFileDiag.Filter = "SoF2 Multiplayer Executable|SoF2MP.exe";
this.mainOpenFileDiag.RestoreDirectory = true;
//
// serverUseCustom
//
this.serverUseCustom.AutoSize = true;
this.serverUseCustom.Location = new System.Drawing.Point(87, 47);
this.serverUseCustom.Name = "serverUseCustom";
this.serverUseCustom.Size = new System.Drawing.Size(154, 17);
this.serverUseCustom.TabIndex = 304;
this.serverUseCustom.Text = "Use custom server address";
this.serverUseCustom.UseVisualStyleBackColor = true;
this.serverUseCustom.CheckedChanged += new System.EventHandler(this.serverUseCustom_CheckedChanged);
//
// playerTabPage
//
this.playerTabPage.AutoScroll = true;
this.playerTabPage.Controls.Add(this.gfxBox);
this.playerTabPage.Controls.Add(this.playerNameBox);
this.playerTabPage.Location = new System.Drawing.Point(4, 22);
@ -231,6 +216,50 @@ namespace SoFii
this.playerTabPage.Text = "Settings";
this.playerTabPage.UseVisualStyleBackColor = true;
//
// gfxBox
//
this.gfxBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.gfxBox.Controls.Add(this.gfxResolutionLabel);
this.gfxBox.Controls.Add(this.gfxResolutionSelect);
this.gfxBox.Controls.Add(this.gfxFullscreen);
this.gfxBox.Location = new System.Drawing.Point(6, 372);
this.gfxBox.Name = "gfxBox";
this.gfxBox.Size = new System.Drawing.Size(540, 72);
this.gfxBox.TabIndex = 500;
this.gfxBox.TabStop = false;
this.gfxBox.Text = "Graphics";
//
// gfxResolutionLabel
//
this.gfxResolutionLabel.AutoSize = true;
this.gfxResolutionLabel.Location = new System.Drawing.Point(24, 22);
this.gfxResolutionLabel.Name = "gfxResolutionLabel";
this.gfxResolutionLabel.Size = new System.Drawing.Size(57, 13);
this.gfxResolutionLabel.TabIndex = 502;
this.gfxResolutionLabel.Text = "Resolution";
//
// gfxResolutionSelect
//
this.gfxResolutionSelect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.gfxResolutionSelect.FormattingEnabled = true;
this.gfxResolutionSelect.Location = new System.Drawing.Point(87, 19);
this.gfxResolutionSelect.Name = "gfxResolutionSelect";
this.gfxResolutionSelect.Size = new System.Drawing.Size(360, 21);
this.gfxResolutionSelect.TabIndex = 503;
this.gfxResolutionSelect.SelectedIndexChanged += new System.EventHandler(this.gfxResolutionSelect_SelectedIndexChanged);
//
// gfxFullscreen
//
this.gfxFullscreen.AutoSize = true;
this.gfxFullscreen.Location = new System.Drawing.Point(87, 46);
this.gfxFullscreen.Name = "gfxFullscreen";
this.gfxFullscreen.Size = new System.Drawing.Size(74, 17);
this.gfxFullscreen.TabIndex = 501;
this.gfxFullscreen.Text = "Fullscreen";
this.gfxFullscreen.UseVisualStyleBackColor = true;
this.gfxFullscreen.CheckedChanged += new System.EventHandler(this.gfxFullscreen_CheckedChanged);
//
// playerNameBox
//
this.playerNameBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
@ -246,24 +275,13 @@ namespace SoFii
this.playerNameBox.TabStop = false;
this.playerNameBox.Text = "Player Name";
//
// playerNameLabel
// playerNamePreview
//
this.playerNameLabel.AutoSize = true;
this.playerNameLabel.Location = new System.Drawing.Point(46, 23);
this.playerNameLabel.Name = "playerNameLabel";
this.playerNameLabel.Size = new System.Drawing.Size(35, 13);
this.playerNameLabel.TabIndex = 401;
this.playerNameLabel.Text = "Name";
//
// playerNameInput
//
this.playerNameInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.playerNameInput.Location = new System.Drawing.Point(87, 20);
this.playerNameInput.Name = "playerNameInput";
this.playerNameInput.Size = new System.Drawing.Size(360, 20);
this.playerNameInput.TabIndex = 402;
this.playerNameInput.TextChanged += new System.EventHandler(this.playerNameInput_TextChanged);
this.playerNamePreview.Location = new System.Drawing.Point(87, 46);
this.playerNamePreview.Name = "playerNamePreview";
this.playerNamePreview.Size = new System.Drawing.Size(360, 18);
this.playerNamePreview.TabIndex = 410;
this.playerNamePreview.Paint += new System.Windows.Forms.PaintEventHandler(this.playerNamePreview_Paint);
//
// playerNameColoursBox
//
@ -288,56 +306,41 @@ namespace SoFii
this.playerNameColourButton.TextAlign = System.Drawing.ContentAlignment.BottomRight;
this.playerNameColourButton.UseVisualStyleBackColor = true;
//
// playerNamePreview
// playerNameLabel
//
this.playerNamePreview.Location = new System.Drawing.Point(87, 46);
this.playerNamePreview.Name = "playerNamePreview";
this.playerNamePreview.Size = new System.Drawing.Size(360, 18);
this.playerNamePreview.TabIndex = 410;
this.playerNameLabel.AutoSize = true;
this.playerNameLabel.Location = new System.Drawing.Point(46, 23);
this.playerNameLabel.Name = "playerNameLabel";
this.playerNameLabel.Size = new System.Drawing.Size(35, 13);
this.playerNameLabel.TabIndex = 401;
this.playerNameLabel.Text = "Name";
//
// gfxBox
// playerNameInput
//
this.gfxBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
this.playerNameInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.gfxBox.Controls.Add(this.gfxResolutionLabel);
this.gfxBox.Controls.Add(this.gfxResolutionSelect);
this.gfxBox.Controls.Add(this.gfxFullscreen);
this.gfxBox.Location = new System.Drawing.Point(6, 372);
this.gfxBox.Name = "gfxBox";
this.gfxBox.Size = new System.Drawing.Size(540, 72);
this.gfxBox.TabIndex = 500;
this.gfxBox.TabStop = false;
this.gfxBox.Text = "Graphics";
this.playerNameInput.Location = new System.Drawing.Point(87, 20);
this.playerNameInput.Name = "playerNameInput";
this.playerNameInput.Size = new System.Drawing.Size(360, 20);
this.playerNameInput.TabIndex = 402;
this.playerNameInput.TextChanged += new System.EventHandler(this.playerNameInput_TextChanged);
//
// gfxFullscreen
// versionLabel
//
this.gfxFullscreen.AutoSize = true;
this.gfxFullscreen.Location = new System.Drawing.Point(87, 46);
this.gfxFullscreen.Name = "gfxFullscreen";
this.gfxFullscreen.Size = new System.Drawing.Size(74, 17);
this.gfxFullscreen.TabIndex = 501;
this.gfxFullscreen.Text = "Fullscreen";
this.gfxFullscreen.UseVisualStyleBackColor = true;
this.gfxFullscreen.CheckedChanged += new System.EventHandler(this.gfxFullscreen_CheckedChanged);
this.versionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.versionLabel.AutoSize = true;
this.versionLabel.ForeColor = System.Drawing.SystemColors.GrayText;
this.versionLabel.Location = new System.Drawing.Point(13, 533);
this.versionLabel.Name = "versionLabel";
this.versionLabel.Size = new System.Drawing.Size(117, 13);
this.versionLabel.TabIndex = 13;
this.versionLabel.Text = "SoFii version goes here";
//
// gfxResolutionLabel
// mainOpenFileDiag
//
this.gfxResolutionLabel.AutoSize = true;
this.gfxResolutionLabel.Location = new System.Drawing.Point(24, 22);
this.gfxResolutionLabel.Name = "gfxResolutionLabel";
this.gfxResolutionLabel.Size = new System.Drawing.Size(57, 13);
this.gfxResolutionLabel.TabIndex = 502;
this.gfxResolutionLabel.Text = "Resolution";
//
// gfxResolutionSelect
//
this.gfxResolutionSelect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.gfxResolutionSelect.FormattingEnabled = true;
this.gfxResolutionSelect.Location = new System.Drawing.Point(87, 19);
this.gfxResolutionSelect.Name = "gfxResolutionSelect";
this.gfxResolutionSelect.Size = new System.Drawing.Size(360, 21);
this.gfxResolutionSelect.TabIndex = 503;
this.gfxResolutionSelect.SelectedIndexChanged += new System.EventHandler(this.gfxResolutionSelect_SelectedIndexChanged);
this.mainOpenFileDiag.DefaultExt = "exe";
this.mainOpenFileDiag.Filter = "SoF2 Multiplayer Executable|SoF2MP.exe";
this.mainOpenFileDiag.RestoreDirectory = true;
//
// MainWindow
//
@ -360,11 +363,11 @@ namespace SoFii
this.mainTabs.ResumeLayout(false);
this.locationsTabPage.ResumeLayout(false);
this.playerTabPage.ResumeLayout(false);
this.gfxBox.ResumeLayout(false);
this.gfxBox.PerformLayout();
this.playerNameBox.ResumeLayout(false);
this.playerNameBox.PerformLayout();
this.playerNameColoursBox.ResumeLayout(false);
this.gfxBox.ResumeLayout(false);
this.gfxBox.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();

View file

@ -39,7 +39,6 @@ namespace SoFii {
DrawPlayerNameColourButtons();
playerNameInput.Text = Settings.PlayerName;
DrawPlayerNamePreview();
gfxResolutionSelect.Items.AddRange(new object[] {
string.Empty,
@ -392,7 +391,11 @@ namespace SoFii {
ResizeToFit();
}
public void DrawPlayerNamePreview() {
private void playerNamePreview_Paint(object sender, PaintEventArgs e) {
DrawPlayerNamePreview(e.Graphics);
}
public void DrawPlayerNamePreview(Graphics gfx) {
string userName = playerNameInput.Text;
bool nextIsColourChar = false;
Color colour = SystemColors.ControlText;
@ -402,56 +405,54 @@ namespace SoFii {
float offset = 0;
StringBuilder sb = new StringBuilder();
using(Graphics gfx = playerNamePreview.CreateGraphics()) {
gfx.Clear(SystemColors.ControlLightLight);
gfx.Clear(SystemColors.ControlLightLight);
float spaceWidth = gfx.MeasureString(" ", font).Width + .1f;
float spaceWidth = gfx.MeasureString("_", font).Width;
void drawBuffer() {
if(sb.Length < 1)
return;
void drawBuffer() {
if(sb.Length < 1)
return;
string str = sb.ToString();
sb.Length = 0;
string str = sb.ToString();
sb.Length = 0;
gfx.DrawString(str, font, brush, offset, 0);
offset += gfx.MeasureString(str, font).Width - spaceWidth;
};
gfx.DrawString(str, font, brush, offset, 0);
offset += gfx.MeasureString(str.Replace(' ', '_'), font).Width - spaceWidth;
};
foreach(char chr in userName) {
if(nextIsColourChar) {
foreach(ColourCharInfo cci in Colours)
if(cci.Char == chr) {
if(cci.Colour != colour) {
colour = cci.Colour;
brush.Dispose();
brush = new SolidBrush(colour);
}
break;
foreach(char chr in userName) {
if(nextIsColourChar) {
foreach(ColourCharInfo cci in Colours)
if(cci.Char == chr) {
if(cci.Colour != colour) {
colour = cci.Colour;
brush.Dispose();
brush = new SolidBrush(colour);
}
break;
}
nextIsColourChar = false;
continue;
}
if(chr == '^') {
nextIsColourChar = true;
drawBuffer();
continue;
}
sb.Append(chr);
nextIsColourChar = false;
continue;
}
drawBuffer();
if(chr == '^') {
nextIsColourChar = true;
drawBuffer();
continue;
}
sb.Append(chr);
}
drawBuffer();
brush.Dispose();
}
private void playerNameInput_TextChanged(object sender, EventArgs e) {
Settings.PlayerName = playerNameInput.Text;
DrawPlayerNamePreview();
playerNamePreview.Invalidate();
}
private void gfxFullscreen_CheckedChanged(object sender, EventArgs e) {