From e543266caa23ff2e32cdc237c46b1d850179373d Mon Sep 17 00:00:00 2001 From: Nick Vella Date: Fri, 16 Aug 2019 00:07:04 +1000 Subject: [PATCH] splash: begin work on new splash --- logotype.svg | 69 ++++ .../Exceptions.Designer.cs | 162 +++++++++ .../Images/NetFoundationLogo - Copy.png | Bin 0 -> 3815 bytes .../Images/NetFoundationLogo.png | Bin 0 -> 3596 bytes .../Images/SplashScreenLogo.png | Bin 0 -> 11547 bytes .../OpenLiveWriter.CoreServices.csproj | 16 +- .../SplashScreen.cs | 311 +++++++++--------- .../SplashScreen.resx | 72 ++-- src/managed/OpenLiveWriter/ApplicationMain.cs | 37 +-- .../OpenLiveWriter.Ribbon.vcxproj | 6 +- 10 files changed, 446 insertions(+), 227 deletions(-) create mode 100644 logotype.svg create mode 100644 src/managed/OpenLiveWriter.CoreServices/Exceptions.Designer.cs create mode 100644 src/managed/OpenLiveWriter.CoreServices/Images/NetFoundationLogo - Copy.png create mode 100644 src/managed/OpenLiveWriter.CoreServices/Images/NetFoundationLogo.png create mode 100644 src/managed/OpenLiveWriter.CoreServices/Images/SplashScreenLogo.png diff --git a/logotype.svg b/logotype.svg new file mode 100644 index 00000000..03186ad2 --- /dev/null +++ b/logotype.svg @@ -0,0 +1,69 @@ + + + + + + + + + + image/svg+xml + + + + + + + Open Live Writer + + diff --git a/src/managed/OpenLiveWriter.CoreServices/Exceptions.Designer.cs b/src/managed/OpenLiveWriter.CoreServices/Exceptions.Designer.cs new file mode 100644 index 00000000..6ae1cf5c --- /dev/null +++ b/src/managed/OpenLiveWriter.CoreServices/Exceptions.Designer.cs @@ -0,0 +1,162 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace OpenLiveWriter.CoreServices { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Exceptions { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Exceptions() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OpenLiveWriter.CoreServices.Exceptions", typeof(Exceptions).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to The specified path ({0}) is invalid. + /// + internal static string SiteStorageException_InvalidPath { + get { + return ResourceManager.GetString("SiteStorageException.InvalidPath", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The specified RootFile value ("{0}") is invalid. + /// + internal static string SiteStorageException_InvalidRootFileName { + get { + return ResourceManager.GetString("SiteStorageException.InvalidRootFileName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error accessing manifest for site at {0}. + /// + internal static string SiteStorageException_ManifestAccessError { + get { + return ResourceManager.GetString("SiteStorageException.ManifestAccessError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to A RootFile was not specified for the site. + /// + internal static string SiteStorageException_NoRootFileSpecified { + get { + return ResourceManager.GetString("SiteStorageException.NoRootFileSpecified", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error accessing path {0}. + /// + internal static string SiteStorageException_PathAccessError { + get { + return ResourceManager.GetString("SiteStorageException.PathAccessError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Could not locate the path {0}. + /// + internal static string SiteStorageException_PathNotFound { + get { + return ResourceManager.GetString("SiteStorageException.PathNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to A Stream that was written to was not closed prior to attempting to read from it (path = {0}). + /// + internal static string SiteStorageException_StreamNotClosed { + get { + return ResourceManager.GetString("SiteStorageException.StreamNotClosed", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error copying site from {0} to {1}. + /// + internal static string SiteStorageException_UnableToCopySite { + get { + return ResourceManager.GetString("SiteStorageException.UnableToCopySite", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to create storage at {0}. + /// + internal static string SiteStorageException_UnableToCreateStorage { + get { + return ResourceManager.GetString("SiteStorageException.UnableToCreateStorage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error deleting site at {0}. + /// + internal static string SiteStorageException_UnableToDeleteSite { + get { + return ResourceManager.GetString("SiteStorageException.UnableToDeleteSite", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error moving site from {0} to {1}. + /// + internal static string SiteStorageException_UnableToMoveSite { + get { + return ResourceManager.GetString("SiteStorageException.UnableToMoveSite", resourceCulture); + } + } + } +} diff --git a/src/managed/OpenLiveWriter.CoreServices/Images/NetFoundationLogo - Copy.png b/src/managed/OpenLiveWriter.CoreServices/Images/NetFoundationLogo - Copy.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2107b6048175d0a31d7ee67fe4f3bcff2b9ade GIT binary patch literal 3815 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 Sl~zRn00008J^y(nHr8)OTRm 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 PGUGuspz1Yhw$c9&|9(^3 literal 0 HcmV?d00001 diff --git a/src/managed/OpenLiveWriter.CoreServices/OpenLiveWriter.CoreServices.csproj b/src/managed/OpenLiveWriter.CoreServices/OpenLiveWriter.CoreServices.csproj index 99a5e7b7..47dfc621 100644 --- a/src/managed/OpenLiveWriter.CoreServices/OpenLiveWriter.CoreServices.csproj +++ b/src/managed/OpenLiveWriter.CoreServices/OpenLiveWriter.CoreServices.csproj @@ -134,6 +134,11 @@ + + True + True + Exceptions.resx + @@ -325,6 +330,8 @@ Designer + ResXFileCodeGenerator + Exceptions.Designer.cs @@ -343,6 +350,10 @@ + + + + @@ -356,19 +367,14 @@ - - - - - \ No newline at end of file diff --git a/src/managed/OpenLiveWriter.CoreServices/SplashScreen.cs b/src/managed/OpenLiveWriter.CoreServices/SplashScreen.cs index a84ced80..b6f95b5b 100644 --- a/src/managed/OpenLiveWriter.CoreServices/SplashScreen.cs +++ b/src/managed/OpenLiveWriter.CoreServices/SplashScreen.cs @@ -10,6 +10,7 @@ using System.Windows.Forms; using OpenLiveWriter.Interop.Windows; using OpenLiveWriter.Localization; using OpenLiveWriter.Localization.Bidi; +using System.Diagnostics; namespace OpenLiveWriter.CoreServices { @@ -22,12 +23,14 @@ namespace OpenLiveWriter.CoreServices /// Required designer variable. /// private System.ComponentModel.Container components = null; + private Label labelStatus; + private Bitmap _logoBitmap; + private PictureBox pictureBoxLogo; + private Bitmap _fdnLogoBitmap; + private PictureBox pictureBoxFdnLogo; + private System.Windows.Forms.Timer timerAnimation; - /// - /// Background image - /// - private Bitmap _backgroundImage; - private Bitmap _logoImage; + private int _ticks = 0; public SplashScreen() { @@ -37,168 +40,63 @@ namespace OpenLiveWriter.CoreServices InitializeComponent(); DisplayHelper.Scale(this); - // Turn off CS_CLIPCHILDREN. - User32.SetWindowLong(Handle, GWL.STYLE, User32.GetWindowLong(Handle, GWL.STYLE) & ~WS.CLIPCHILDREN); - // Turn on double buffered painting. - SetStyle(ControlStyles.UserPaint, true); - SetStyle(ControlStyles.DoubleBuffer, true); - if (!BidiHelper.IsRightToLeft) - SetStyle(ControlStyles.AllPaintingInWmPaint, true); + //SetStyle(ControlStyles.UserPaint, true); + //SetStyle(ControlStyles.DoubleBuffer, true); + //if (!BidiHelper.IsRightToLeft) + // SetStyle(ControlStyles.AllPaintingInWmPaint, true); - _backgroundImage = DisplayHelper.ScaleBitmap(new Bitmap(this.GetType(), "Images.SplashScreen.png")); - _logoImage = DisplayHelper.ScaleBitmap(new Bitmap(this.GetType(), "Images.SplashScreenLogo.jpg")); - - if (SystemInformation.HighContrast) - { - ImageHelper.ConvertToHighContrast(_backgroundImage); - ImageHelper.ConvertToHighContrast(_logoImage); - } - } - - private const int WS_EX_TOOLWINDOW = 0x00000080; - private const int WS_EX_APPWINDOW = 0x00040000; - private const int WS_EX_LAYERED = 0x00080000; - protected override CreateParams CreateParams - { - get - { - CreateParams cp = base.CreateParams; - cp.ExStyle &= ~WS_EX_APPWINDOW; - cp.ExStyle |= WS_EX_TOOLWINDOW; - cp.ExStyle |= WS_EX_LAYERED; - return cp; - } + //if (SystemInformation.HighContrast) + //{ + // ImageHelper.ConvertToHighContrast(_backgroundImage); + // ImageHelper.ConvertToHighContrast(_logoImage); + //} } protected override void OnLoad(EventArgs e) { base.OnLoad(e); - UpdateBitmap(); + LoadScaledImages(); + + // Create the timer + timerAnimation = new System.Windows.Forms.Timer(); + timerAnimation.Interval = 17; // 60 FPS rounded up + timerAnimation.Tick += new EventHandler(AnimationTick); + timerAnimation.Enabled = true; + timerAnimation.Start(); } - private void UpdateBitmap() + private void LoadScaledImages() { - using (Bitmap bitmap = CreateBitmap()) - { - IntPtr screenDC = User32.GetDC(IntPtr.Zero); - try - { - IntPtr memDC = Gdi32.CreateCompatibleDC(screenDC); - try - { - IntPtr hBitmap = bitmap.GetHbitmap(Color.FromArgb(0)); - try - { - IntPtr hOrigBitmap = Gdi32.SelectObject(memDC, hBitmap); - try - { - POINT dst = new POINT(); - dst.x = Left; - dst.y = Top; + const float scaleFactor = 2f; // Assume logos are already at 2x scaling + var fdnLogoBmp = new Bitmap(this.GetType(), "Images.NetFoundationLogo.png"); + var logoBmp = new Bitmap(this.GetType(), "Images.SplashScreenLogo.png"); - SIZE size = new SIZE(); - size.cx = bitmap.Width; - size.cy = bitmap.Height; + var fdnLogoSize = new Size( + (int)Math.Ceiling(fdnLogoBmp.Width * (DisplayHelper.ScalingFactorX / scaleFactor)), + (int)Math.Ceiling(fdnLogoBmp.Height * (DisplayHelper.ScalingFactorY / scaleFactor))); + _fdnLogoBitmap = new Bitmap(fdnLogoBmp, fdnLogoSize); + pictureBoxFdnLogo.Image = _fdnLogoBitmap; + pictureBoxFdnLogo.Size = _fdnLogoBitmap.Size; - POINT src = new POINT(); - src.x = 0; - src.y = 0; - - User32.BLENDFUNCTION blendFunction = new User32.BLENDFUNCTION(); - blendFunction.BlendOp = 0; // AC_SRC_OVER - blendFunction.BlendFlags = 0; - blendFunction.SourceConstantAlpha = 255; - blendFunction.AlphaFormat = 1; // AC_SRC_ALPHA - - User32.UpdateLayeredWindow(Handle, screenDC, ref dst, ref size, memDC, ref src, 0, ref blendFunction, 2); - } - finally - { - Gdi32.SelectObject(memDC, hOrigBitmap); - } - } - finally - { - Gdi32.DeleteObject(hBitmap); - } - } - finally - { - Gdi32.DeleteDC(memDC); - } - } - finally - { - User32.ReleaseDC(IntPtr.Zero, screenDC); - } - } + var logoBmpSize = new Size( + (int)Math.Ceiling(logoBmp.Width * (DisplayHelper.ScalingFactorX / scaleFactor)), + (int)Math.Ceiling(logoBmp.Height * (DisplayHelper.ScalingFactorY / scaleFactor))); + _logoBitmap = new Bitmap(logoBmp, logoBmpSize); + pictureBoxLogo.Image = _logoBitmap; + pictureBoxLogo.Size = _logoBitmap.Size; } - private Bitmap CreateBitmap() + public void ShowSplashScreen() { - Bitmap bitmap = new Bitmap(_backgroundImage.Width, _backgroundImage.Height, PixelFormat.Format32bppArgb); - using (Graphics graphics = Graphics.FromImage(bitmap)) + Thread thread = new Thread(() => { - BidiGraphics g = new BidiGraphics(graphics, bitmap.Size); - - // draw transparent background image - g.DrawImage(false, _backgroundImage, - new Rectangle(0, 0, _backgroundImage.Width, _backgroundImage.Height)); - - // draw logo image - g.DrawImage(false, _logoImage, new Rectangle( - (ClientSize.Width - _logoImage.Width) / 2, - (int)Math.Ceiling(DisplayHelper.ScaleY(120)) - _logoImage.Height, - _logoImage.Width, - _logoImage.Height)); - - // draw copyright notice - string splashText = Res.Get(StringId.SplashScreenCopyrightNotice); - using (Font font = new Font(Font.FontFamily, 7.5f)) - { - const int TEXT_PADDING_H = 36; - const int TEXT_PADDING_V = 26; - int textWidth = Size.Width - 2 * (int)Math.Ceiling(DisplayHelper.ScaleX(TEXT_PADDING_H)); - int textHeight = - Convert.ToInt32( - (int)Math.Ceiling(DisplayHelper.ScaleY( - g.MeasureText(splashText, font, new Size(textWidth, 0), TextFormatFlags.WordBreak).Height - )), - CultureInfo.InvariantCulture); - - // GDI text can't be drawn on an alpha-blended surface. So we render a black-on-white - // bitmap, then use a ColorMatrix to effectively turn it into an alpha mask. - - using (Bitmap textBitmap = new Bitmap(textWidth, textHeight, PixelFormat.Format32bppRgb)) - { - using (Graphics tbG = Graphics.FromImage(textBitmap)) - { - tbG.FillRectangle(Brushes.Black, 0, 0, textWidth, textHeight); - new BidiGraphics(tbG, textBitmap.Size). - DrawText(splashText, font, new Rectangle(0, 0, textWidth, textHeight), Color.White, Color.Black, TextFormatFlags.WordBreak); - } - - Rectangle textRect = new Rectangle( - (int)Math.Ceiling(DisplayHelper.ScaleX(TEXT_PADDING_H)), - ClientSize.Height - (int)Math.Ceiling(DisplayHelper.ScaleY(TEXT_PADDING_V)) - textHeight, textWidth, textHeight); - using (ImageAttributes ia = new ImageAttributes()) - { - ColorMatrix cm = new ColorMatrix(new float[][] - { - new float[] {0, 0, 0, 1f/3f, 0}, - new float[] {0, 0, 0, 1f/3f, 0}, - new float[] {0, 0, 0, 1f/3f, 0}, - new float[] {0, 0, 0, 0, 0}, - new float[] {0.9372f, 0.9372f, 0.9372f, 0, 0}, - }); - ia.SetColorMatrix(cm); - g.DrawImage(false, textBitmap, textRect, 0, 0, textWidth, textHeight, GraphicsUnit.Pixel, ia); - } - } - } - } - return bitmap; + ShowDialog(); + }); + thread.Name = "Splash Screen Animation Thread"; + thread.IsBackground = true; + thread.SetApartmentState(ApartmentState.STA); + thread.Start(); } /// @@ -223,21 +121,116 @@ namespace OpenLiveWriter.CoreServices /// private void InitializeComponent() { - // + this.labelStatus = new System.Windows.Forms.Label(); + this.pictureBoxFdnLogo = new System.Windows.Forms.PictureBox(); + this.pictureBoxLogo = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxFdnLogo)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLogo)).BeginInit(); + this.SuspendLayout(); + // + // labelStatus + // + this.labelStatus.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.labelStatus.AutoSize = true; + this.labelStatus.ForeColor = System.Drawing.Color.White; + this.labelStatus.Location = new System.Drawing.Point(19, 214); + this.labelStatus.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10); + this.labelStatus.Name = "labelStatus"; + this.labelStatus.Size = new System.Drawing.Size(57, 15); + this.labelStatus.TabIndex = 1; + this.labelStatus.Text = "Starting..."; + // + // pictureBoxFdnLogo + // + this.pictureBoxFdnLogo.ErrorImage = null; + this.pictureBoxFdnLogo.InitialImage = null; + this.pictureBoxFdnLogo.Location = new System.Drawing.Point(20, 20); + this.pictureBoxFdnLogo.Name = "pictureBoxFdnLogo"; + this.pictureBoxFdnLogo.Size = new System.Drawing.Size(20, 20); + this.pictureBoxFdnLogo.TabIndex = 2; + this.pictureBoxFdnLogo.TabStop = false; + // + // pictureBoxLogo + // + this.pictureBoxLogo.ErrorImage = null; + this.pictureBoxLogo.InitialImage = null; + this.pictureBoxLogo.Location = new System.Drawing.Point(20, 92); + this.pictureBoxLogo.Name = "pictureBoxLogo"; + this.pictureBoxLogo.Size = new System.Drawing.Size(20, 20); + this.pictureBoxLogo.TabIndex = 3; + this.pictureBoxLogo.TabStop = false; + this.pictureBoxLogo.Visible = false; + // // SplashScreen - // - this.AutoScaleMode = AutoScaleMode.None; - this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); - this.ClientSize = new System.Drawing.Size(380, 235); - this.Cursor = Cursors.AppStarting; + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(162)))), ((int)(((byte)(93)))), ((int)(((byte)(162))))); + this.ClientSize = new System.Drawing.Size(439, 248); + this.Controls.Add(this.pictureBoxLogo); + this.Controls.Add(this.pictureBoxFdnLogo); + this.Controls.Add(this.labelStatus); + this.Cursor = System.Windows.Forms.Cursors.AppStarting; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.Name = "SplashScreen"; - //if this inherits Yes from the parent the screenshot of the background is reversed - this.RightToLeftLayout = false; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxFdnLogo)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLogo)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + } #endregion + + private void Label1_Click(object sender, EventArgs e) + { + + } + + private void AnimationTick(object sender, EventArgs e) + { + // .NET Foundation Logo linear slide animation + const int fdnLogoAnimTicks = 10; + const int fdnLogoAnimTarget = 20; + pictureBoxFdnLogo.Left = (int)Math.Min(DisplayHelper.ScalingFactorX * _ticks * ((float)fdnLogoAnimTarget / fdnLogoAnimTicks), DisplayHelper.ScalingFactorX * fdnLogoAnimTarget); + pictureBoxFdnLogo.Image = ChangeOpacity(_fdnLogoBitmap, (float)Math.Min((float)_ticks / fdnLogoAnimTicks, 1.0)); + + const int logoAnimStart = 10; + const int logoAnimEnd = logoAnimStart + 20; + + int logoAnimBegin = (Width / 2) - (pictureBoxLogo.Width / 2) - (int)(40 * DisplayHelper.ScalingFactorX); + int logoAnimTarget = (Width / 2) - (pictureBoxLogo.Width / 2); + if(_ticks > logoAnimStart) + { + pictureBoxLogo.Visible = true; + double x = Math.Min((float)(_ticks - logoAnimStart) / (logoAnimEnd - logoAnimStart) +.1, 1.0); + pictureBoxLogo.Left = (int)Math.Min(logoAnimBegin + (Math.Pow(Math.Log10(x), 10) * (logoAnimTarget - logoAnimBegin) * DisplayHelper.ScalingFactorX), logoAnimTarget); + // Set logo transparency (float)Math.Min((float)(_ticks - logoAnimStart) / (logoAnimEnd - logoAnimStart), 1.0) + pictureBoxLogo.Image = ChangeOpacity(_logoBitmap, (float)x); + + } else + { + pictureBoxLogo.Visible = false; + } + + Update(); + _ticks++; + } + + private static Bitmap ChangeOpacity(Image img, float opacityvalue) + { + // Example from https://www.codeproject.com/Tips/201129/Change-Opacity-of-Image-in-C + + Bitmap bmp = new Bitmap(img.Width, img.Height); // Determining Width and Height of Source Image + Graphics graphics = Graphics.FromImage(bmp); + ColorMatrix colormatrix = new ColorMatrix(); + colormatrix.Matrix33 = opacityvalue; + ImageAttributes imgAttribute = new ImageAttributes(); + imgAttribute.SetColorMatrix(colormatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); + graphics.DrawImage(img, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, imgAttribute); + graphics.Dispose(); // Releasing all resource used by graphics + return bmp; + } } /// diff --git a/src/managed/OpenLiveWriter.CoreServices/SplashScreen.resx b/src/managed/OpenLiveWriter.CoreServices/SplashScreen.resx index f7b67c54..d58980a3 100644 --- a/src/managed/OpenLiveWriter.CoreServices/SplashScreen.resx +++ b/src/managed/OpenLiveWriter.CoreServices/SplashScreen.resx @@ -3,7 +3,7 @@ + + + + + + + + + + + + + + + + + + - + + @@ -89,42 +109,12 @@ text/microsoft-resx - 1.3 + 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - False - - - (Default) - - - False - - - False - - - 8, 8 - - - True - - - 80 - - - False - - - Private - - - SplashScreen - \ No newline at end of file diff --git a/src/managed/OpenLiveWriter/ApplicationMain.cs b/src/managed/OpenLiveWriter/ApplicationMain.cs index bea585f6..1274996e 100644 --- a/src/managed/OpenLiveWriter/ApplicationMain.cs +++ b/src/managed/OpenLiveWriter/ApplicationMain.cs @@ -168,8 +168,7 @@ namespace OpenLiveWriter IDisposable splashScreen = null; // Show the splash screen. SplashScreen splashScreenForm = new SplashScreen(); - splashScreenForm.Show(); - splashScreenForm.Update(); + splashScreenForm.ShowSplashScreen(); splashScreen = new FormSplashScreen(splashScreenForm); LaunchFirstInstance(splashScreen, args); @@ -324,23 +323,23 @@ namespace OpenLiveWriter ApplicationLauncher.LaunchBloggingForm(args, splashScreen, true); } - if (splashScreen != null) - { - try - { - using (Form splashScreenForm = ((FormSplashScreen)splashScreen).Form) - { - if (splashScreenForm != null && !splashScreenForm.IsDisposed) - { - Application.Run(splashScreenForm); - } - } - } - catch (Exception e) - { - Debug.Fail("Failed to show splash screen: " + e); - } - } + //if (splashScreen != null) + //{ + // try + // { + // using (Form splashScreenForm = ((FormSplashScreen)splashScreen).Form) + // { + // if (splashScreenForm != null && !splashScreenForm.IsDisposed) + // { + // Application.Run(splashScreenForm); + // } + // } + // } + // catch (Exception e) + // { + // Debug.Fail("Failed to show splash screen: " + e); + // } + //} ManualKeepalive.Wait(true); } catch (DirectoryException ex) diff --git a/src/unmanaged/OpenLiveWriter.Ribbon/OpenLiveWriter.Ribbon.vcxproj b/src/unmanaged/OpenLiveWriter.Ribbon/OpenLiveWriter.Ribbon.vcxproj index 3b0884c0..f4c712a8 100644 --- a/src/unmanaged/OpenLiveWriter.Ribbon/OpenLiveWriter.Ribbon.vcxproj +++ b/src/unmanaged/OpenLiveWriter.Ribbon/OpenLiveWriter.Ribbon.vcxproj @@ -15,19 +15,19 @@ {195A60BF-7A4D-42E6-B5F4-FEBC679E19F0} Win32Proj OpenLiveWriter.Ribbon - 10.0.17763.0 + 10.0 DynamicLibrary true - v141 + v142 Unicode DynamicLibrary false - v141 + v142 true Unicode