diff --git a/Vocaluxe/Lib/Draw/CDirect3D.cs b/Vocaluxe/Lib/Draw/CDirect3D.cs index 865cad00..ca6c771a 100644 --- a/Vocaluxe/Lib/Draw/CDirect3D.cs +++ b/Vocaluxe/Lib/Draw/CDirect3D.cs @@ -34,10 +34,20 @@ using VocaluxeLib.Draw; namespace Vocaluxe.Lib.Draw { - class CDirect3D : RenderForm, IDraw + class CRenderFormHook : RenderForm, CDrawBaseWindows.IFormHook + { + public CDrawBaseWindows.MessageEventHandler OnMessage { private get; set; } + + protected override void WndProc(ref Message m) + { + if (OnMessage(ref m)) + base.WndProc(ref m); + } + } + + class CDirect3D : CDrawBaseWindows, IDraw { #region private vars - private readonly CKeys _Keys; private readonly CMouse _Mouse; private bool _Run; @@ -46,8 +56,6 @@ namespace Vocaluxe.Lib.Draw private readonly Device _Device; private readonly PresentParameters _PresentParameters; - private bool _Fullscreen; - private Size _OldSize; private Size _SizeBeforeMinimize; private readonly Dictionary _D3DTextures = new Dictionary(); @@ -71,7 +79,6 @@ namespace Vocaluxe.Lib.Draw private readonly Queue _Vertices = new Queue(); private readonly Queue _VerticesTextures = new Queue(); private readonly Queue _VerticesRotationMatrices = new Queue(); - #endregion private vars /// @@ -79,8 +86,7 @@ namespace Vocaluxe.Lib.Draw /// public CDirect3D() { - Icon = new Icon(Path.Combine(CSettings.ProgramFolder, CSettings.FileNameIcon)); - + _Form = new CRenderFormHook(); _Keys = new CKeys(); try { @@ -91,25 +97,26 @@ namespace Vocaluxe.Lib.Draw CLog.LogError("No DirectX runtimes were found, please download and install them from http://www.microsoft.com/download/en/details.aspx?id=8109", true, true, e); } - Paint += _OnPaintEvent; - Closing += _OnClosingEvent; - Resize += _OnResizeEvent; + _Form.Closing += _OnClosingEvent; + _Form.Resize += _OnResize; + _Form.Load += _OnLoad; - KeyDown += _OnKeyDown; - PreviewKeyDown += _OnPreviewKeyDown; - KeyPress += _OnKeyPress; - KeyUp += _OnKeyUp; + + _Form.KeyDown += _OnKeyDown; + _Form.PreviewKeyDown += _OnPreviewKeyDown; + _Form.KeyPress += _OnKeyPress; + _Form.KeyUp += _OnKeyUp; _Mouse = new CMouse(); - MouseMove += _OnMouseMove; - MouseWheel += _OnMouseWheel; - MouseDown += _OnMouseDown; - MouseUp += _OnMouseUp; - MouseLeave += _OnMouseLeave; - MouseEnter += _OnMouseEnter; + _Form.MouseMove += _OnMouseMove; + _Form.MouseWheel += _OnMouseWheel; + _Form.MouseDown += _OnMouseDown; + _Form.MouseUp += _OnMouseUp; + _Form.MouseLeave += _OnMouseLeave; + _Form.MouseEnter += _OnMouseEnter; - ClientSize = new Size(CConfig.ScreenW, CConfig.ScreenH); - _SizeBeforeMinimize = ClientSize; + _Form.ClientSize = new Size(CConfig.ScreenW, CConfig.ScreenH); + _SizeBeforeMinimize = _Form.ClientSize; _PresentParameters = new PresentParameters { @@ -168,14 +175,14 @@ namespace Vocaluxe.Lib.Draw CreateFlags flags = (caps.DeviceCaps & DeviceCaps.HWTransformAndLight) != 0 ? CreateFlags.HardwareVertexProcessing : CreateFlags.SoftwareVertexProcessing; //Check if Pow2 textures are needed - CDrawHelper.NonPowerOf2TextureSupported = true; - CDrawHelper.NonPowerOf2TextureSupported &= (caps.TextureCaps & TextureCaps.Pow2) == 0; - CDrawHelper.NonPowerOf2TextureSupported &= (caps.TextureCaps & TextureCaps.NonPow2Conditional) == 0; - CDrawHelper.NonPowerOf2TextureSupported &= (caps.TextureCaps & TextureCaps.SquareOnly) == 0; + _NonPowerOf2TextureSupported = true; + _NonPowerOf2TextureSupported &= (caps.TextureCaps & TextureCaps.Pow2) == 0; + _NonPowerOf2TextureSupported &= (caps.TextureCaps & TextureCaps.NonPow2Conditional) == 0; + _NonPowerOf2TextureSupported &= (caps.TextureCaps & TextureCaps.SquareOnly) == 0; try { - _Device = new Device(_D3D, _D3D.Adapters.DefaultAdapter.Adapter, DeviceType.Hardware, Handle, flags, _PresentParameters); + _Device = new Device(_D3D, _D3D.Adapters.DefaultAdapter.Adapter, DeviceType.Hardware, _Form.Handle, flags, _PresentParameters); } finally { @@ -187,68 +194,39 @@ namespace Vocaluxe.Lib.Draw } } - CenterToScreen(); + _CenterToScreen(); } #region form events - private void _OnPaintEvent(object sender, PaintEventArgs e) {} - - private void _OnResizeEvent(object sender, EventArgs e) {} - private void _OnClosingEvent(object sender, CancelEventArgs e) { _Run = false; } - protected override void OnLoad(EventArgs e) + private void _OnLoad(object sender, EventArgs e) { _Device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); } - protected override void OnResize(EventArgs e) + private void _OnResize(object sender, EventArgs e) { - base.OnResize(e); _DoResize(); } - - protected override void WndProc(ref Message m) - { - switch (m.Msg) - { - case 0x112: // WM_SYSCOMMAND - switch ((int)m.WParam & 0xFFF0) - { - case 0xF100: // SC_KEYMENU - m.Result = IntPtr.Zero; - break; - case 0xF140: // SC_SCREENSAVER - case 0xF170: // SC_MONITORPOWER - break; - default: - base.WndProc(ref m); - break; - } - break; - default: - base.WndProc(ref m); - break; - } - } #endregion form events #region resize /// /// Resizes the viewport /// - private void _DoResize() + protected override void _DoResize() { // The window was minimized, so restore it to the last known size - if (ClientSize.Width == 0 || ClientSize.Height == 0) - ClientSize = _SizeBeforeMinimize; + if (_Form.ClientSize.Width == 0 || _Form.ClientSize.Height == 0) + _Form.ClientSize = _SizeBeforeMinimize; if (!_Run) return; - _H = ClientSize.Height; - _W = ClientSize.Width; + _H = _Form.ClientSize.Height; + _W = _Form.ClientSize.Width; _Y = 0; _X = 0; @@ -256,18 +234,18 @@ namespace Vocaluxe.Lib.Draw { //The windows's width is too big _W = (int)Math.Round(_H * CSettings.GetRenderAspect()); - _X = (ClientSize.Width - _W) / 2; + _X = (_Form.ClientSize.Width - _W) / 2; } else { //The windows's height is too big _H = (int)Math.Round(_W / CSettings.GetRenderAspect()); - _Y = (ClientSize.Height - _H) / 2; + _Y = (_Form.ClientSize.Height - _H) / 2; } //Apply the new sizes to the PresentParameters - _PresentParameters.BackBufferWidth = ClientSize.Width; - _PresentParameters.BackBufferHeight = ClientSize.Height; + _PresentParameters.BackBufferWidth = _Form.ClientSize.Width; + _PresentParameters.BackBufferHeight = _Form.ClientSize.Height; ClearScreen(); //To set new PresentParameters the device has to be resetted _Reset(); @@ -277,52 +255,22 @@ namespace Vocaluxe.Lib.Draw //Set the new Viewport _Device.Viewport = new Viewport(_X, _Y, _W, _H); //Store size so it can get restored after the window gets minimized - _SizeBeforeMinimize = ClientSize; + _SizeBeforeMinimize = _Form.ClientSize; } + // ReSharper disable RedundantOverridenMember /// /// Triggers the Fullscreen mode /// - private void _EnterFullScreen() + protected override void _EnterFullScreen() { //This currently not using real fullscreen mode but a borderless window //Real fullscreen could be gained setting _PresentParameters.Windowed = true //And calling Reset() and Init() after - _OldSize = ClientSize; - - int screenNr = 0; - for (int i = 0; i < Screen.AllScreens.Length; i++) - { - Screen scr = Screen.AllScreens[i]; - if (scr.Bounds.Top <= Top && scr.Bounds.Left <= Left) - screenNr = i; - } - - ClientSize = new Size(Screen.AllScreens[screenNr].Bounds.Width, Screen.AllScreens[screenNr].Bounds.Height); - FormBorderStyle = FormBorderStyle.None; - CenterToScreen(); - _Fullscreen = true; - - if (WindowState == FormWindowState.Maximized) - { - WindowState = FormWindowState.Normal; - _DoResize(); - WindowState = FormWindowState.Maximized; - } - else - _DoResize(); + base._EnterFullScreen(); } - /// - /// Triggers the windowed mode - /// - private void _LeaveFullScreen() - { - ClientSize = _OldSize; - FormBorderStyle = FormBorderStyle.Sizable; - CenterToScreen(); - _Fullscreen = false; - } + // ReSharper restore RedundantOverridenMember #endregion resize #region mouse event handlers @@ -388,11 +336,14 @@ namespace Vocaluxe.Lib.Draw /// Inits the Device /// /// True if it succeeded else false - public bool Init() + public override bool Init() { + if (!base.Init()) + return false; + if (_Device.Disposed) return false; - Text = CSettings.GetFullVersionText(); + _AdjustNewBorders(); _VertexBuffer = new VertexBuffer(_Device, CSettings.VertexBufferElements * (4 * Marshal.SizeOf(typeof(STexturedColoredVertex))), Usage.WriteOnly | Usage.Dynamic, @@ -468,7 +419,7 @@ namespace Vocaluxe.Lib.Draw { _Run = true; int delay = 0; - Show(); + _Form.Show(); if (CConfig.FullScreen == EOffOn.TR_CONFIG_ON) _EnterFullScreen(); @@ -513,12 +464,7 @@ namespace Vocaluxe.Lib.Draw } //Apply fullscreen mode if ((CConfig.FullScreen == EOffOn.TR_CONFIG_ON) != _Fullscreen) - { - if (!_Fullscreen) - _EnterFullScreen(); - else - _LeaveFullScreen(); - } + _ToggleFullScreen(); //Apply border changes if (_BorderLeft != CConfig.BorderLeft || _BorderRight != CConfig.BorderRight || _BorderTop != CConfig.BorderTop || _BorderBottom != CConfig.BorderBottom) @@ -531,16 +477,19 @@ namespace Vocaluxe.Lib.Draw _AdjustNewBorders(); } - if (CTime.IsRunning()) - delay = (int)Math.Floor(CConfig.CalcCycleTime() - CTime.GetMilliseconds()); + if (CConfig.VSync == EOffOn.TR_CONFIG_ON) + { + if (CTime.IsRunning()) + delay = (int)Math.Floor(CConfig.CalcCycleTime() - CTime.GetMilliseconds()); - if (delay >= 1 && CConfig.VSync == EOffOn.TR_CONFIG_OFF) - Thread.Sleep(delay); + if (delay >= 1 && delay < 500) + Thread.Sleep(delay); + } //Calculate the FPS Rate and restart the timer after a frame CTime.CalculateFPS(); CTime.Restart(); } - Close(); + _Form.Close(); } /// @@ -578,7 +527,7 @@ namespace Vocaluxe.Lib.Draw { try { - Close(); + _Form.Close(); } catch {} //Dispose all textures @@ -680,7 +629,7 @@ namespace Vocaluxe.Lib.Draw /// public CTexture CopyScreen() { - CTexture texture = CDrawHelper.GetNewTexture(_W, _H); + CTexture texture = GetNewTexture(_W, _H); Surface backbufferSurface = _Device.GetBackBuffer(0, 0); var tex = new Texture(_Device, texture.W2, texture.H2, 0, Usage.AutoGenerateMipMap, Format.A8R8G8B8, Pool.Managed); @@ -850,7 +799,7 @@ namespace Vocaluxe.Lib.Draw int w = Math.Min(bmp.Width, maxSize); int h = Math.Min(bmp.Height, maxSize); - CTexture texture = CDrawHelper.GetNewTexture(bmp.Width,bmp.Height,w, h); + CTexture texture = GetNewTexture(bmp.Width, bmp.Height, w, h); Bitmap bmp2 = null; byte[] data; @@ -890,7 +839,7 @@ namespace Vocaluxe.Lib.Draw public CTexture AddTexture(int w, int h, byte[] data) { - CTexture texture = CDrawHelper.GetNewTexture(w, h); + CTexture texture = GetNewTexture(w, h); return _AddTexture(texture, data); } @@ -935,7 +884,7 @@ namespace Vocaluxe.Lib.Draw public CTexture EnqueueTexture(int w, int h, byte[] data) { - CTexture texture = CDrawHelper.GetNewTexture(w, h); + CTexture texture = GetNewTexture(w, h); lock (_D3DTextures) { @@ -1004,16 +953,18 @@ namespace Vocaluxe.Lib.Draw /// The texture to be removed public void RemoveTexture(ref CTexture texture) { - if(texture==null) return; - lock (_D3DTextures) + if (texture == null) + return; + lock (_D3DTextures) + { + Texture t; + if (_D3DTextures.TryGetValue(texture.ID, out t)) { - Texture t; - if (_D3DTextures.TryGetValue(texture.ID, out t)) - { - if(t!=null) t.Dispose(); - _D3DTextures.Remove(texture.ID); - } + if (t != null) + t.Dispose(); + _D3DTextures.Remove(texture.ID); } + } texture = null; } diff --git a/Vocaluxe/Lib/Draw/CDrawBase.cs b/Vocaluxe/Lib/Draw/CDrawBase.cs new file mode 100644 index 00000000..7da7073f --- /dev/null +++ b/Vocaluxe/Lib/Draw/CDrawBase.cs @@ -0,0 +1,156 @@ +using System; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Windows.Forms; +using Vocaluxe.Base; +using VocaluxeLib.Draw; + +namespace Vocaluxe.Lib.Draw +{ + struct SClientRect + { + public Point Location; + public int Width; + public int Height; + }; + + struct STextureQueue + { + public readonly CTexture Texture; + public readonly byte[] Data; + + public STextureQueue(CTexture texture, byte[] data) + { + Texture = texture; + Data = data; + } + } + + abstract class CDrawBaseWindows : CDrawBase + { + public delegate bool MessageEventHandler(ref Message m); + + public interface IFormHook + { + MessageEventHandler OnMessage { set; } + } + + protected Form _Form; + private SClientRect _Restore; + + protected void _CenterToScreen() + { + Screen screen = Screen.FromControl(_Form); + _Form.Location = new Point((screen.WorkingArea.Width - _Form.Width) / 2, + (screen.WorkingArea.Height - _Form.Height) / 2); + } + + private bool _OnMessageAvoidScreenOff(ref Message m) + { + switch (m.Msg) + { + case 0x112: // WM_SYSCOMMAND + switch ((int)m.WParam & 0xFFF0) + { + case 0xF100: // SC_KEYMENU + m.Result = IntPtr.Zero; + return false; + case 0xF140: // SC_SCREENSAVER + case 0xF170: // SC_MONITORPOWER + return false; + } + break; + } + return true; + } + + protected void _ToggleFullScreen() + { + if (!_Fullscreen) + _EnterFullScreen(); + else + _LeaveFullScreen(); + } + + protected virtual void _EnterFullScreen() + { + Debug.Assert(!_Fullscreen); + _Fullscreen = true; + + _Restore.Location = _Form.Location; + _Restore.Width = _Form.Width; + _Restore.Height = _Form.Height; + + _Form.FormBorderStyle = FormBorderStyle.None; + + Screen screen = Screen.FromControl(_Form); + _Form.DesktopBounds = new Rectangle(screen.Bounds.Location, new Size(screen.Bounds.Width, screen.Bounds.Height)); + + if (_Form.WindowState == FormWindowState.Maximized) + { + _Form.WindowState = FormWindowState.Normal; + _DoResize(); + _Form.WindowState = FormWindowState.Maximized; + } + else + _DoResize(); + } + + protected abstract void _DoResize(); + + protected void _LeaveFullScreen() + { + Debug.Assert(_Fullscreen); + _Fullscreen = false; + + _Form.FormBorderStyle = FormBorderStyle.Sizable; + _Form.DesktopBounds = new Rectangle(_Restore.Location, new Size(_Restore.Width, _Restore.Height)); + } + + public virtual bool Init() + { + _Form.Icon = new Icon(Path.Combine(CSettings.ProgramFolder, CSettings.FileNameIcon)); + _Form.Text = CSettings.GetFullVersionText(); + ((IFormHook)_Form).OnMessage = _OnMessageAvoidScreenOff; + return true; + } + } + + abstract class CDrawBase + { + protected bool _NonPowerOf2TextureSupported; + protected bool _Fullscreen; + + private readonly Object _MutexID = new object(); + private int _NextID; + + /// + /// Calculates the next power of two if the device has the POW2 flag set + /// + /// The value of which the next power of two will be calculated + /// The next power of two + private int _CheckForNextPowerOf2(int n) + { + if (_NonPowerOf2TextureSupported) + return n; + if (n < 0) + throw new ArgumentOutOfRangeException("n", "Must be positive."); + return (int)Math.Pow(2, Math.Ceiling(Math.Log(n, 2))); + } + + public CTexture GetNewTexture(int origWidth, int origHeight, int dataWidth = 0, int dataHeight = 0) + { + Debug.Assert(origWidth > 0 && origHeight > 0); + Debug.Assert(dataWidth > 0 || dataHeight <= 0); + int id; + lock (_MutexID) + { + id = _NextID++; + } + Size origSize = new Size(origWidth, origHeight); + Size dataSize = (dataHeight > 0) ? new Size(dataWidth, dataHeight) : origSize; + return new CTexture(id, origSize, dataSize, _CheckForNextPowerOf2(dataSize.Width), _CheckForNextPowerOf2(dataSize.Height)); + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Draw/CDrawHelper.cs b/Vocaluxe/Lib/Draw/CDrawHelper.cs deleted file mode 100644 index 12aa802d..00000000 --- a/Vocaluxe/Lib/Draw/CDrawHelper.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Diagnostics; -using System.Drawing; -using VocaluxeLib.Draw; - -namespace Vocaluxe.Lib.Draw -{ - static class CDrawHelper - { - public static bool NonPowerOf2TextureSupported; - - private static readonly Object _MutexID = new object(); - private static int _NextID; - - /// - /// Calculates the next power of two if the device has the POW2 flag set - /// - /// The value of which the next power of two will be calculated - /// The next power of two - private static int _CheckForNextPowerOf2(int n) - { - if (NonPowerOf2TextureSupported) - return n; - if (n < 0) - throw new ArgumentOutOfRangeException("n", "Must be positive."); - return (int)Math.Pow(2, Math.Ceiling(Math.Log(n, 2))); - } - - public static CTexture GetNewTexture(int origWidth, int origHeight, int dataWidth = 0, int dataHeight = 0) - { - Debug.Assert(origWidth > 0 && origHeight > 0); - Debug.Assert(dataWidth > 0 || dataHeight <= 0); - int id; - lock (_MutexID) - { - id = _NextID++; - } - Size origSize = new Size(origWidth, origHeight); - Size dataSize = (dataHeight > 0) ? new Size(dataWidth, dataHeight) : origSize; - return new CTexture(id, origSize, dataSize, _CheckForNextPowerOf2(dataSize.Width), _CheckForNextPowerOf2(dataSize.Height)); - } - } -} \ No newline at end of file diff --git a/Vocaluxe/Lib/Draw/COpenGL.cs b/Vocaluxe/Lib/Draw/COpenGL.cs index 3e156504..09db4bf7 100644 --- a/Vocaluxe/Lib/Draw/COpenGL.cs +++ b/Vocaluxe/Lib/Draw/COpenGL.cs @@ -54,26 +54,18 @@ using TextureTarget = OpenTK.Graphics.OpenGL.TextureTarget; namespace Vocaluxe.Lib.Draw { - struct SClientRect + class CFormHook : Form, CDrawBaseWindows.IFormHook { - public Point Location; - public int Width; - public int Height; - }; + public CDrawBaseWindows.MessageEventHandler OnMessage { private get; set; } - struct STextureQueue - { - public readonly CTexture Texture; - public readonly byte[] Data; - - public STextureQueue(CTexture texture, byte[] data) + protected override void WndProc(ref Message m) { - Texture = texture; - Data = data; + if (OnMessage(ref m)) + base.WndProc(ref m); } } - class COpenGL : Form, IDraw + class COpenGL : CDrawBaseWindows, IDraw { #region private vars private readonly CKeys _Keys; @@ -82,9 +74,6 @@ namespace Vocaluxe.Lib.Draw private readonly GLControl _Control; - private SClientRect _Restore; - private bool _Fullscreen; - private readonly Dictionary _Textures = new Dictionary(); private readonly Queue _TexturesToLoad = new Queue(); @@ -98,8 +87,7 @@ namespace Vocaluxe.Lib.Draw public COpenGL() { - Icon = new Icon(Path.Combine(CSettings.ProgramFolder, CSettings.FileNameIcon)); - + _Form = new CFormHook(); //Check AA Mode CConfig.AAMode = (EAntiAliasingModes)_CheckAntiAliasingMode((int)CConfig.AAMode); @@ -122,13 +110,13 @@ namespace Vocaluxe.Lib.Draw _Control.MakeCurrent(); _Control.VSync = CConfig.VSync == EOffOn.TR_CONFIG_ON; - Controls.Add(_Control); + _Form.Controls.Add(_Control); _Keys = new CKeys(); - Paint += _OnPaintEvent; - Closing += _OnClosingEvent; - Resize += _OnResizeEvent; + _Form.Closing += _OnClosingEvent; + _Form.Load += _OnLoad; + _Form.Resize += _OnResize; _Control.KeyDown += _OnKeyDownEvent; _Control.PreviewKeyDown += _OnPreviewKeyDownEvent; @@ -143,10 +131,11 @@ namespace Vocaluxe.Lib.Draw _Control.MouseLeave += _OnMouseLeave; _Control.MouseEnter += _OnMouseEnter; - ClientSize = new Size(CConfig.ScreenW, CConfig.ScreenH); - CenterToScreen(); + _Form.ClientSize = new Size(CConfig.ScreenW, CConfig.ScreenH); - CDrawHelper.NonPowerOf2TextureSupported = false; + _CenterToScreen(); + + _NonPowerOf2TextureSupported = false; } #region Helpers @@ -209,100 +198,24 @@ namespace Vocaluxe.Lib.Draw return result - 8; } */ - - private void _ToggleFullScreen() - { - if (!_Fullscreen) - _EnterFullScreen(); - else - _LeaveFullScreen(); - } - - private void _EnterFullScreen() - { - _Fullscreen = true; - - _Restore.Location = Location; - _Restore.Width = Width; - _Restore.Height = Height; - - FormBorderStyle = FormBorderStyle.None; - - int screenNr = 0; - for (int i = 0; i < Screen.AllScreens.Length; i++) - { - Screen scr = Screen.AllScreens[i]; - if (scr.Bounds.Top <= Top && scr.Bounds.Left <= Left) - screenNr = i; - } - - DesktopBounds = new Rectangle(Screen.AllScreens[screenNr].Bounds.Location, new Size(Screen.AllScreens[screenNr].Bounds.Width, Screen.AllScreens[screenNr].Bounds.Height)); - - if (WindowState == FormWindowState.Maximized) - { - WindowState = FormWindowState.Normal; - _DoResize(); - WindowState = FormWindowState.Maximized; - } - else - _DoResize(); - } - - private void _LeaveFullScreen() - { - _Fullscreen = false; - - FormBorderStyle = FormBorderStyle.Sizable; - DesktopBounds = new Rectangle(_Restore.Location, new Size(_Restore.Width, _Restore.Height)); - } #endregion Helpers #region form events - private void _OnPaintEvent(object sender, PaintEventArgs e) {} - - private void _OnResizeEvent(object sender, EventArgs e) {} - private void _OnClosingEvent(object sender, CancelEventArgs e) { _Run = false; } - protected override void OnLoad(EventArgs e) + private static void _OnLoad(object sender, EventArgs e) { GL.ClearColor(Color.Black); } - protected override void OnResize(EventArgs e) + private void _OnResize(object sender, EventArgs e) { - base.OnResize(e); - - _Control.ClientSize = ClientSize; + _Control.ClientSize = _Form.ClientSize; _DoResize(); } - - protected override void WndProc(ref Message m) - { - switch (m.Msg) - { - case 0x112: // WM_SYSCOMMAND - switch ((int)m.WParam & 0xFFF0) - { - case 0xF100: // SC_KEYMENU - m.Result = IntPtr.Zero; - break; - case 0xF140: // SC_SCREENSAVER - case 0xF170: // SC_MONITORPOWER - break; - default: - base.WndProc(ref m); - break; - } - break; - default: - base.WndProc(ref m); - break; - } - } #endregion form events #region mouse event handlers @@ -361,7 +274,7 @@ namespace Vocaluxe.Lib.Draw } #endregion keyboard event handlers - private void _DoResize() + protected override void _DoResize() { _H = _Control.Height; _W = _Control.Width; @@ -389,9 +302,10 @@ namespace Vocaluxe.Lib.Draw #region implementation #region main stuff - public bool Init() + public override bool Init() { - Text = CSettings.GetFullVersionText(); + if (!base.Init()) + return false; // Init Texturing GL.Enable(EnableCap.Texture2D); @@ -410,7 +324,7 @@ namespace Vocaluxe.Lib.Draw { _Run = true; int delay = 0; - Show(); + _Form.Show(); if (CConfig.FullScreen == EOffOn.TR_CONFIG_ON) _EnterFullScreen(); @@ -441,14 +355,14 @@ namespace Vocaluxe.Lib.Draw Application.DoEvents(); } - Close(); + _Form.Close(); } public void Unload() { try { - Close(); + _Form.Close(); } catch {} var textures = new CTexture[_Textures.Count]; @@ -476,7 +390,7 @@ namespace Vocaluxe.Lib.Draw public CTexture CopyScreen() { - CTexture texture = CDrawHelper.GetNewTexture(_W, _H); + CTexture texture = GetNewTexture(_W, _H); texture.Name = GL.GenTexture(); GL.BindTexture(TextureTarget.Texture2D, texture.Name); @@ -676,7 +590,7 @@ namespace Vocaluxe.Lib.Draw int w = Math.Min(bmp.Width, maxSize); int h = Math.Min(bmp.Height, maxSize); - CTexture texture = CDrawHelper.GetNewTexture(w, h); + CTexture texture = GetNewTexture(w, h); texture.Name = GL.GenTexture(); GL.BindTexture(TextureTarget.Texture2D, texture.Name); @@ -729,7 +643,7 @@ namespace Vocaluxe.Lib.Draw public CTexture AddTexture(int w, int h, byte[] data) { - CTexture texture = CDrawHelper.GetNewTexture(w, h); + CTexture texture = GetNewTexture(w, h); _CreateTexture(texture, data); @@ -776,7 +690,7 @@ namespace Vocaluxe.Lib.Draw public CTexture EnqueueTexture(int w, int h, byte[] data) { - CTexture texture = CDrawHelper.GetNewTexture(w, h); + CTexture texture = GetNewTexture(w, h); lock (_Textures) { @@ -864,10 +778,8 @@ namespace Vocaluxe.Lib.Draw { lock (_Textures) { - if (texture != null && _Textures.ContainsKey(texture.ID) && texture.Name>0) - { - return true; - } + if (texture != null && _Textures.ContainsKey(texture.ID) && texture.Name > 0) + return true; } return false; } diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 9f5c71a4..5585782e 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -224,7 +224,7 @@ - +