diff --git a/JustAsPlanned/JustAsPlanned.csproj b/JustAsPlanned/JustAsPlanned.csproj index 7b7887d..efbcd09 100644 --- a/JustAsPlanned/JustAsPlanned.csproj +++ b/JustAsPlanned/JustAsPlanned.csproj @@ -28,6 +28,7 @@ + @@ -87,5 +88,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/JustAsPlanned/MainWindow.xaml b/JustAsPlanned/MainWindow.xaml index 6bc2c0b..c9c8665 100644 --- a/JustAsPlanned/MainWindow.xaml +++ b/JustAsPlanned/MainWindow.xaml @@ -10,8 +10,7 @@ - - + @@ -26,9 +25,18 @@ - - diff --git a/JustAsPlanned/MainWindow.xaml.cs b/JustAsPlanned/MainWindow.xaml.cs index 2bb3ee0..51b3538 100644 --- a/JustAsPlanned/MainWindow.xaml.cs +++ b/JustAsPlanned/MainWindow.xaml.cs @@ -2,8 +2,10 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Drawing; using System.IO; using System.Linq; +using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -12,6 +14,7 @@ using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; +using System.Windows.Interop; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; @@ -48,14 +51,14 @@ void UpdateProgress() void DisplayCriticalFailture() => Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => { - ColorAnimation ca = new ColorAnimation(Color.FromRgb(110, 5, 5), new Duration(TimeSpan.FromSeconds(2))); - bMain.Background.BeginAnimation(SolidColorBrush.ColorProperty, ca); + ColorAnimation ca = new ColorAnimation(System.Windows.Media.Color.FromRgb(110, 5, 5), new Duration(TimeSpan.FromSeconds(2))); + gridBackgroundBlur.Background.BeginAnimation(SolidColorBrush.ColorProperty, ca); })); void DisplaySuccess() => Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => { - ColorAnimation ca = new ColorAnimation(Color.FromRgb(5, 110, 5), new Duration(TimeSpan.FromSeconds(2))); - bMain.Background.BeginAnimation(SolidColorBrush.ColorProperty, ca); + ColorAnimation ca = new ColorAnimation(System.Windows.Media.Color.FromRgb(5, 110, 5), new Duration(TimeSpan.FromSeconds(2))); + gridBackgroundBlur.Background.BeginAnimation(SolidColorBrush.ColorProperty, ca); })); private void Run() @@ -90,6 +93,7 @@ private void Run() steamInstallationPath = System.IO.Path.Combine(steamInstallationPath.ToString(), "steam.exe"); actualProgress = 20; UpdateStatus("Starting Muse Dash via Steam..."); + Thread.Sleep(3000); if (File.Exists(steamInstallationPath as string)) { Process.Start(new ProcessStartInfo @@ -101,7 +105,7 @@ private void Run() else { DisplayCriticalFailture(); - UpdateStatus("How? Steam is running and doesn't exist?! Contact devs NOW."); + UpdateStatus("How? Steam is running and doesn't exist?! Contact devs."); Thread.Sleep(5000); Environment.Exit(0); } @@ -158,9 +162,66 @@ private void Run() threadMain.Start(); } + private struct BackgroundImage + { + public string CopyrightMessage; + public string SourceUrl; + public Bitmap Image; + } + + private List backgroundImages = new List + { + new BackgroundImage { + SourceUrl = "https://www.pixiv.net/en/artworks/81691677", + CopyrightMessage = "Artwork by U-Joe, Pixiv ID: 81691677", + Image = Properties.Resources.Marisa + }, + new BackgroundImage { + SourceUrl = "https://www.pixiv.net/en/artworks/105672733", + CopyrightMessage = "Artwork by Lanana, Pixiv ID: 105672733", + Image = Properties.Resources.Koishi + }, + new BackgroundImage { + SourceUrl = "https://www.pixiv.net/en/artworks/64961553", + CopyrightMessage = "Artwork by 鳥成, Pixiv ID: 64961553", + Image = Properties.Resources.Youmu + } + }; + + BackgroundImage currentBackgroundImageData; + + [DllImport("gdi32.dll", EntryPoint = "DeleteObject")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool DeleteObject([In] IntPtr hObject); + + public ImageSource ImageSourceFromBitmap(Bitmap bmp) + { + var handle = bmp.GetHbitmap(); + try + { + return Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); + } + finally { DeleteObject(handle); } + } + + public void LoadBackgroundImage() + { + currentBackgroundImageData = backgroundImages.OrderBy(x => Guid.NewGuid()).First(); + Dispatcher.Invoke(DispatcherPriority.Render, new Action(() => + { + lblCopyright.Content = currentBackgroundImageData.CopyrightMessage; + gridBackgroundImage.Background = new ImageBrush() + { + ImageSource = ImageSourceFromBitmap(currentBackgroundImageData.Image), + Stretch = Stretch.UniformToFill + }; + })); + } + public MainWindow() { InitializeComponent(); + LoadBackgroundImage(); Closed += OnClosedEvent; MouseDown += OnDragEvent; updateProgressThread = new Thread(UpdateProgress); @@ -168,6 +229,11 @@ public MainWindow() Run(); } + private void OpenCopyrightReference(object sender, MouseButtonEventArgs e) + { + Process.Start(currentBackgroundImageData.SourceUrl); + } + private void OnDragEvent(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Left) diff --git a/JustAsPlanned/Properties/Resources.Designer.cs b/JustAsPlanned/Properties/Resources.Designer.cs index 8d43d74..2837928 100644 --- a/JustAsPlanned/Properties/Resources.Designer.cs +++ b/JustAsPlanned/Properties/Resources.Designer.cs @@ -1,71 +1,93 @@ //------------------------------------------------------------------------------ // -// Этот код был создан программным средством. -// Версия среды выполнения: 4.0.30319.42000 +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 // -// Изменения в этом файле могут привести к неправильному поведению и будут утрачены, если -// код создан повторно. +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. // //------------------------------------------------------------------------------ -namespace JustAsPlanned.Properties -{ - - +namespace JustAsPlanned.Properties { + using System; + + /// - /// Класс ресурсов со строгим типом для поиска локализованных строк и пр. + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. /// - // Этот класс был автоматически создан при помощи StronglyTypedResourceBuilder - // класс с помощью таких средств, как ResGen или Visual Studio. - // Для добавления или удаления члена измените файл .ResX, а затем перезапустите ResGen - // с параметром /str или заново постройте свой VS-проект. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - + internal class Resources { + private static global::System.Resources.ResourceManager resourceMan; - + private static global::System.Globalization.CultureInfo resourceCulture; - + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() - { + internal Resources() { } - + /// - /// Возврат кэшированного экземпляра ResourceManager, используемого этим классом. + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager - { - get - { - if ((resourceMan == null)) - { + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("JustAsPlanned.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } - + /// - /// Переопределяет свойство CurrentUICulture текущего потока для всех - /// подстановки ресурсов с помощью этого класса ресурсов со строгим типом. + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture - { - get - { + internal static global::System.Globalization.CultureInfo Culture { + get { return resourceCulture; } - set - { + set { resourceCulture = value; } } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Koishi { + get { + object obj = ResourceManager.GetObject("Koishi", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Marisa { + get { + object obj = ResourceManager.GetObject("Marisa", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Youmu { + get { + object obj = ResourceManager.GetObject("Youmu", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/JustAsPlanned/Properties/Resources.resx b/JustAsPlanned/Properties/Resources.resx index af7dbeb..e9e3fee 100644 --- a/JustAsPlanned/Properties/Resources.resx +++ b/JustAsPlanned/Properties/Resources.resx @@ -46,7 +46,7 @@ mimetype: application/x-microsoft.net.object.binary.base64 value : The object must be serialized with - : System.Serialization.Formatters.Binary.BinaryFormatter + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : and then encoded with base64 encoding. mimetype: application/x-microsoft.net.object.soap.base64 @@ -60,6 +60,7 @@ : and then encoded with base64 encoding. --> + @@ -68,9 +69,10 @@ - + + @@ -85,9 +87,10 @@ - + + @@ -109,9 +112,19 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\koishi.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\marisa.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\youmu.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/JustAsPlanned/Resources/koishi.jpg b/JustAsPlanned/Resources/koishi.jpg new file mode 100644 index 0000000..a19c382 Binary files /dev/null and b/JustAsPlanned/Resources/koishi.jpg differ diff --git a/JustAsPlanned/Resources/marisa.jpg b/JustAsPlanned/Resources/marisa.jpg new file mode 100644 index 0000000..c8ac0bc Binary files /dev/null and b/JustAsPlanned/Resources/marisa.jpg differ diff --git a/JustAsPlanned/Resources/youmu.jpg b/JustAsPlanned/Resources/youmu.jpg new file mode 100644 index 0000000..d6b312e Binary files /dev/null and b/JustAsPlanned/Resources/youmu.jpg differ