SystemTrayMenu/UserInterface/TaskbarLogo.xaml.cs
Peter Kirmeier 81e20d618b Refactored menu window fading
Improve TaskbarLogo (still flickers on load but only very shortly)
2022-12-04 01:24:30 +01:00

79 lines
2.4 KiB
C#

// <copyright file="TaskbarLogo.xaml.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
//
// Copyright (c) 2022-2022 Peter Kirmeier
namespace SystemTrayMenu.UserInterface
{
using System;
using System.IO;
using System.Reflection;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media.Imaging;
/// <summary>
/// Logic of Taskbar window.
/// </summary>
public partial class TaskbarLogo : Window
{
public TaskbarLogo()
{
InitializeComponent();
Assembly myassembly = Assembly.GetExecutingAssembly();
string myname = myassembly.GetName().Name ?? string.Empty;
using (Stream? imgstream = myassembly.GetManifestResourceStream(myname + ".Resources.SystemTrayMenu.png"))
{
if (imgstream != null)
{
BitmapImage imageSource = new BitmapImage();
imageSource.BeginInit();
imageSource.StreamSource = imgstream;
imageSource.EndInit();
ImagePictureBox.Source = imageSource;
}
}
Icon = Imaging.CreateBitmapSourceFromHIcon(
Config.GetAppIcon().Handle,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
Title = myname;
Closed += (_, _) => Application.Current.Shutdown();
Deactivated += SetStateNormal;
Activated += (object? sender, EventArgs e) =>
{
SetStateNormal(sender, e);
Activate();
UpdateLayout();
Focus();
};
ContentRendered += MoveOutOfScreen;
}
private void MoveOutOfScreen(object? sender, EventArgs e)
{
// Do this only once
ContentRendered -= MoveOutOfScreen;
Top += SystemParameters.VirtualScreenHeight;
}
/// <summary>
/// This ensures that next click on taskbaritem works as activate event/click event.
/// </summary>
private void SetStateNormal(object? sender, EventArgs e)
{
if (IsActive)
{
WindowState = WindowState.Normal;
}
}
}
}