diff --git a/Source/Builder.csproj b/Source/Builder.csproj index 82ab8469..a797ca6a 100644 --- a/Source/Builder.csproj +++ b/Source/Builder.csproj @@ -107,6 +107,9 @@ PreferencesForm.cs + + Component + Component @@ -194,6 +197,7 @@ + diff --git a/Source/Interface/MainForm.Designer.cs b/Source/Interface/MainForm.Designer.cs index c279585c..e11f361c 100644 --- a/Source/Interface/MainForm.Designer.cs +++ b/Source/Interface/MainForm.Designer.cs @@ -49,6 +49,7 @@ namespace CodeImp.DoomBuilder.Interface this.menuedit = new System.Windows.Forms.ToolStripMenuItem(); this.itemmapoptions = new System.Windows.Forms.ToolStripMenuItem(); this.menutools = new System.Windows.Forms.ToolStripMenuItem(); + this.itemreloadresources = new System.Windows.Forms.ToolStripMenuItem(); this.configurationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.preferencesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.menuhelp = new System.Windows.Forms.ToolStripMenuItem(); @@ -75,8 +76,7 @@ namespace CodeImp.DoomBuilder.Interface this.yposlabel = new System.Windows.Forms.ToolStripStatusLabel(); this.panelinfo = new System.Windows.Forms.Panel(); this.redrawtimer = new System.Windows.Forms.Timer(this.components); - this.display = new System.Windows.Forms.Panel(); - this.itemreloadresources = new System.Windows.Forms.ToolStripMenuItem(); + this.display = new CodeImp.DoomBuilder.Interface.RenderTargetControl(); toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator(); @@ -86,6 +86,7 @@ namespace CodeImp.DoomBuilder.Interface this.menumain.SuspendLayout(); this.toolbar.SuspendLayout(); this.statusbar.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.display)).BeginInit(); this.SuspendLayout(); // // toolStripMenuItem1 @@ -115,6 +116,11 @@ namespace CodeImp.DoomBuilder.Interface toolStripStatusLabel1.Text = ","; toolStripStatusLabel1.ToolTipText = "Current X, Y coordinates on map"; // + // toolStripSeparator4 + // + toolStripSeparator4.Name = "toolStripSeparator4"; + toolStripSeparator4.Size = new System.Drawing.Size(194, 6); + // // menumain // this.menumain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -239,6 +245,14 @@ namespace CodeImp.DoomBuilder.Interface this.menutools.Size = new System.Drawing.Size(44, 20); this.menutools.Text = "Tools"; // + // itemreloadresources + // + this.itemreloadresources.Name = "itemreloadresources"; + this.itemreloadresources.Size = new System.Drawing.Size(197, 22); + this.itemreloadresources.Tag = "reloadresources"; + this.itemreloadresources.Text = "Reload Resources"; + this.itemreloadresources.Click += new System.EventHandler(this.InvokeTaggedAction); + // // configurationToolStripMenuItem // this.configurationToolStripMenuItem.Name = "configurationToolStripMenuItem"; @@ -481,7 +495,6 @@ namespace CodeImp.DoomBuilder.Interface // display // this.display.BackColor = System.Drawing.SystemColors.AppWorkspace; - this.display.BackgroundImage = global::CodeImp.DoomBuilder.Properties.Resources.Splash2; this.display.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; this.display.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.display.CausesValidation = false; @@ -490,27 +503,15 @@ namespace CodeImp.DoomBuilder.Interface this.display.Name = "display"; this.display.Size = new System.Drawing.Size(731, 372); this.display.TabIndex = 5; + this.display.TabStop = false; this.display.MouseLeave += new System.EventHandler(this.display_MouseLeave); this.display.MouseDown += new System.Windows.Forms.MouseEventHandler(this.display_MouseDown); this.display.MouseMove += new System.Windows.Forms.MouseEventHandler(this.display_MouseMove); - this.display.MouseClick += new System.Windows.Forms.MouseEventHandler(this.display_MouseClick); this.display.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.display_MouseDoubleClick); this.display.Resize += new System.EventHandler(this.display_Resize); - this.display.MouseEnter += new System.EventHandler(this.display_MouseEnter); + this.display.MouseClick += new System.Windows.Forms.MouseEventHandler(this.display_MouseClick); this.display.MouseUp += new System.Windows.Forms.MouseEventHandler(this.display_MouseUp); - // - // itemreloadresources - // - this.itemreloadresources.Name = "itemreloadresources"; - this.itemreloadresources.Size = new System.Drawing.Size(197, 22); - this.itemreloadresources.Tag = "reloadresources"; - this.itemreloadresources.Text = "Reload Resources"; - this.itemreloadresources.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // toolStripSeparator4 - // - toolStripSeparator4.Name = "toolStripSeparator4"; - toolStripSeparator4.Size = new System.Drawing.Size(194, 6); + this.display.MouseEnter += new System.EventHandler(this.display_MouseEnter); // // MainForm // @@ -541,6 +542,7 @@ namespace CodeImp.DoomBuilder.Interface this.toolbar.PerformLayout(); this.statusbar.ResumeLayout(false); this.statusbar.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.display)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -564,7 +566,7 @@ namespace CodeImp.DoomBuilder.Interface private System.Windows.Forms.Timer redrawtimer; private System.Windows.Forms.ToolStripMenuItem menuhelp; private System.Windows.Forms.ToolStripMenuItem itemhelpabout; - private System.Windows.Forms.Panel display; + private CodeImp.DoomBuilder.Interface.RenderTargetControl display; private System.Windows.Forms.ToolStripMenuItem itemnorecent; private System.Windows.Forms.ToolStripStatusLabel xposlabel; private System.Windows.Forms.ToolStripStatusLabel yposlabel; diff --git a/Source/Interface/MainForm.cs b/Source/Interface/MainForm.cs index 2214cc34..d955748c 100644 --- a/Source/Interface/MainForm.cs +++ b/Source/Interface/MainForm.cs @@ -65,7 +65,7 @@ namespace CodeImp.DoomBuilder.Interface #region ================== Properties public bool MouseInDisplay { get { return mouseinside; } } - public Panel Display { get { return display; } } + public RenderTargetControl Display { get { return display; } } #endregion @@ -89,6 +89,9 @@ namespace CodeImp.DoomBuilder.Interface // Make recent items list CreateRecentFiles(); + // Show splash + ShowSplashDisplay(); + // Keep last position and size lastposition = this.Location; lastsize = this.Size; @@ -316,9 +319,7 @@ namespace CodeImp.DoomBuilder.Interface public void ShowSplashDisplay() { // Change display to show splash logo - display.BackColor = System.Drawing.SystemColors.AppWorkspace; - display.BackgroundImage = global::CodeImp.DoomBuilder.Properties.Resources.Splash2; - display.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + display.SetSplashLogoDisplay(); this.Update(); } @@ -326,9 +327,7 @@ namespace CodeImp.DoomBuilder.Interface public void ClearDisplay() { // Clear the display - display.BackColor = Color.Black; - display.BackgroundImage = null; - display.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + display.SetManualRendering(); this.Update(); } diff --git a/Source/Interface/MainForm.resx b/Source/Interface/MainForm.resx index 7eba9183..82553b1a 100644 --- a/Source/Interface/MainForm.resx +++ b/Source/Interface/MainForm.resx @@ -132,15 +132,15 @@ False + + False + True 17, 17 - - False - True diff --git a/Source/Interface/RenderTargetControl.cs b/Source/Interface/RenderTargetControl.cs new file mode 100644 index 00000000..dc41e4bb --- /dev/null +++ b/Source/Interface/RenderTargetControl.cs @@ -0,0 +1,154 @@ + +#region ================== Copyright (c) 2007 Pascal vd Heiden + +/* + * Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com + * This program is released under GNU General Public License + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#endregion + +#region ================== Namespaces + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Globalization; +using System.Windows.Forms; +using CodeImp.DoomBuilder.Controls; +using CodeImp.DoomBuilder.Geometry; +using CodeImp.DoomBuilder.Rendering; +using CodeImp.DoomBuilder.Editing; + +#endregion + +namespace CodeImp.DoomBuilder.Interface +{ + public class RenderTargetControl : PictureBox + { + #region ================== Constants + + #endregion + + #region ================== Variables + + // Reference to image to render from + private Image img = null; + + #endregion + + #region ================== Properties + + #endregion + + #region ================== Constructor / Disposer + + // Constructor + public RenderTargetControl() + { + // Initialize + this.SetStyle(ControlStyles.FixedWidth, true); + this.SetStyle(ControlStyles.FixedHeight, true); + } + + // Diposer + protected override void Dispose(bool disposing) + { + // Clean up + + // Done + base.Dispose(disposing); + } + + #endregion + + #region ================== Overrides + + // Paint method + protected override void OnPaint(PaintEventArgs pe) + { + /* + // Copy area that needs to be redrawn + if(img != null) + { + pe.Graphics.FillRectangle(Brushes.Black, pe.ClipRectangle); + pe.Graphics.DrawImage(img, pe.ClipRectangle, pe.ClipRectangle, GraphicsUnit.Pixel); + + } + */ + + // Pass on to base + // Do we really want this? + base.OnPaint(pe); + } + + #endregion + + #region ================== Methods + + // This sets the render source + public void SetImageSource(Image srcimg) + { + // Set new source image + img = srcimg; + this.Image = img; + } + + // This sets up the control to display the splash logo + public void SetSplashLogoDisplay() + { + // Remove render image + this.img = null; + + // Change display to show splash logo + this.SetStyle(ControlStyles.SupportsTransparentBackColor, false); + this.SetStyle(ControlStyles.ContainerControl, false); + this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); + this.SetStyle(ControlStyles.UserPaint, true); + this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); + this.SetStyle(ControlStyles.Opaque, false); + this.UpdateStyles(); + this.BackColor = System.Drawing.SystemColors.AppWorkspace; + this.BackgroundImage = global::CodeImp.DoomBuilder.Properties.Resources.Splash2; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + this.Image = null; + } + + // This sets up the control for manual rendering + public void SetManualRendering() + { + // Change display for rendering + /* + this.SetStyle(ControlStyles.SupportsTransparentBackColor, false); + this.SetStyle(ControlStyles.ContainerControl, false); + this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false); + this.SetStyle(ControlStyles.UserPaint, true); + this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); + this.SetStyle(ControlStyles.Opaque, true); + */ + this.SetStyle(ControlStyles.SupportsTransparentBackColor, false); + this.SetStyle(ControlStyles.ContainerControl, false); + this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); + this.SetStyle(ControlStyles.UserPaint, true); + this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); + this.SetStyle(ControlStyles.Opaque, false); + this.UpdateStyles(); + this.BackColor = Color.Black; + this.BackgroundImage = null; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + //this.BackgroundImage = global::CodeImp.DoomBuilder.Properties.Resources.floor0_3; + //this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Tile; + this.Image = img; + } + + #endregion + } +} diff --git a/Source/Interface/ResourceListView.cs b/Source/Interface/ResourceListView.cs index 3283fbd6..8e692902 100644 --- a/Source/Interface/ResourceListView.cs +++ b/Source/Interface/ResourceListView.cs @@ -34,19 +34,39 @@ namespace CodeImp.DoomBuilder.Interface { internal class ResourceListView : ListView { + #region ================== Constants + private const string DRAG_TYPE = "ReorderItems"; + + #endregion + + #region ================== Variables + + // List of items private List dragitems; - + + #endregion + + #region ================== Properties + // Disable sorting public new SortOrder Sorting { get { return SortOrder.None; } set { base.Sorting = SortOrder.None; } } + #endregion + + #region ================== Constructor + // Constructor public ResourceListView(): base() { // List for dragged items dragitems = new List(); } - + + #endregion + + #region ================== Overrides + // When items are dropped protected override void OnDragDrop(DragEventArgs e) { @@ -246,6 +266,10 @@ namespace CodeImp.DoomBuilder.Interface } } + #endregion + + #region ================== Methods + // This deselects all items private void DeselectAll() { @@ -256,5 +280,7 @@ namespace CodeImp.DoomBuilder.Interface base.SelectedItems[i].Selected = false; } } + + #endregion } } diff --git a/Source/Rendering/D3DGraphics.cs b/Source/Rendering/D3DGraphics.cs index 21c0e206..9c205660 100644 --- a/Source/Rendering/D3DGraphics.cs +++ b/Source/Rendering/D3DGraphics.cs @@ -30,6 +30,7 @@ using SlimDX.Direct3D; using System.ComponentModel; using CodeImp.DoomBuilder.Geometry; using SlimDX; +using CodeImp.DoomBuilder.Interface; #endregion @@ -50,7 +51,7 @@ namespace CodeImp.DoomBuilder.Rendering private int adapter; // Main objects - private Panel rendertarget; + private RenderTargetControl rendertarget; private Capabilities devicecaps; private Device device; private Renderer2D renderer2d; @@ -68,7 +69,7 @@ namespace CodeImp.DoomBuilder.Rendering public bool IsDisposed { get { return isdisposed; } } public Renderer2D Renderer2D { get { return renderer2d; } } public Renderer3D Renderer3D { get { return renderer3d; } } - public Panel RenderTarget { get { return rendertarget; } } + public RenderTargetControl RenderTarget { get { return rendertarget; } } public Viewport Viewport { get { return viewport; } } #endregion @@ -76,7 +77,7 @@ namespace CodeImp.DoomBuilder.Rendering #region ================== Constructor / Disposer // Constructor - public D3DGraphics(Panel rendertarget) + public D3DGraphics(RenderTargetControl rendertarget) { // Set render target this.rendertarget = rendertarget; diff --git a/Source/Rendering/Renderer2D.cs b/Source/Rendering/Renderer2D.cs index a1d8efe7..5e0e9c5d 100644 --- a/Source/Rendering/Renderer2D.cs +++ b/Source/Rendering/Renderer2D.cs @@ -92,7 +92,7 @@ namespace CodeImp.DoomBuilder.Rendering if(!isdisposed) { // Clean up - graphics.RenderTarget.BackgroundImage = null; + graphics.RenderTarget.SetImageSource(null); if(image != null) image.Dispose(); pixels = null; @@ -110,7 +110,7 @@ namespace CodeImp.DoomBuilder.Rendering public override void Reset() { // Trash old image - graphics.RenderTarget.BackgroundImage = null; + graphics.RenderTarget.SetImageSource(null); if(image != null) image.Dispose(); // Re-create image memory @@ -125,12 +125,12 @@ namespace CodeImp.DoomBuilder.Rendering height = graphics.RenderTarget.ClientSize.Height; // Trash old image - graphics.RenderTarget.BackgroundImage = null; + graphics.RenderTarget.SetImageSource(null); if(image != null) image.Dispose(); // Allocate memory image = new Bitmap(width, height, PixelFormat.Format32bppArgb); - graphics.RenderTarget.BackgroundImage = image; + graphics.RenderTarget.SetImageSource(image); } // This begins a drawing session