115 lines
2.8 KiB
C#
115 lines
2.8 KiB
C#
using System;
|
||||
|
|
using System.CodeDom.Compiler;
|
|||
|
|
using System.ComponentModel;
|
|||
|
|
using System.Diagnostics;
|
|||
|
|
using System.IO;
|
|||
|
|
using System.Windows;
|
|||
|
|
using System.Windows.Controls;
|
|||
|
|
using System.Windows.Controls.Primitives;
|
|||
|
|
using System.Windows.Input;
|
|||
|
|
using System.Windows.Markup;
|
|||
|
|
using System.Windows.Media.Imaging;
|
|||
|
|
using Wpf.Ui.Controls;
|
|||
|
|
|
|||
|
|
namespace Crysome.Server.View;
|
|||
|
|
|
|||
|
|
public class ScreenshotViewerWindow : FluentWindow, IComponentConnector
|
|||
|
|
{
|
|||
|
|
internal TextBlock TitleText;
|
|||
|
|
|
|||
|
|
internal Button CloseBtn;
|
|||
|
|
|
|||
|
|
internal Image ScreenshotImage;
|
|||
|
|
|
|||
|
|
internal TextBlock StatusText;
|
|||
|
|
|
|||
|
|
private bool _contentLoaded;
|
|||
|
|
|
|||
|
|
public ScreenshotViewerWindow(string title, byte[] imageData)
|
|||
|
|
{
|
|||
|
|
InitializeComponent();
|
|||
|
|
((Window)this).Title = title ?? "Screenshot";
|
|||
|
|
TitleText.Text = title ?? "Screenshot";
|
|||
|
|
if (imageData != null && imageData.Length != 0)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
BitmapImage bitmapImage = new BitmapImage();
|
|||
|
|
bitmapImage.BeginInit();
|
|||
|
|
bitmapImage.StreamSource = new MemoryStream(imageData);
|
|||
|
|
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
|
|||
|
|
bitmapImage.EndInit();
|
|||
|
|
((Freezable)bitmapImage).Freeze();
|
|||
|
|
ScreenshotImage.Source = bitmapImage;
|
|||
|
|
StatusText.Text = $"{bitmapImage.PixelWidth} × {bitmapImage.PixelHeight}";
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
StatusText.Text = "Failed to load image: " + ex.Message;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
StatusText.Text = "No image data received.";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void CloseBtn_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
((Window)this).Close();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void Header_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
((Window)this).DragMove();
|
|||
|
|
}
|
|||
|
|
catch
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[DebuggerNonUserCode]
|
|||
|
|
[GeneratedCode("PresentationBuildTasks", "9.0.14.0")]
|
|||
|
|
public void InitializeComponent()
|
|||
|
|
{
|
|||
|
|
if (!_contentLoaded)
|
|||
|
|
{
|
|||
|
|
_contentLoaded = true;
|
|||
|
|
Uri resourceLocator = new Uri("/Crysome.Server;component/view/screenshotviewerwindow.xaml", UriKind.Relative);
|
|||
|
|
Application.LoadComponent(this, resourceLocator);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[DebuggerNonUserCode]
|
|||
|
|
[GeneratedCode("PresentationBuildTasks", "9.0.14.0")]
|
|||
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|||
|
|
void IComponentConnector.Connect(int connectionId, object target)
|
|||
|
|
{
|
|||
|
|
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
|
|||
|
|
//IL_004f: Expected O, but got Unknown
|
|||
|
|
switch (connectionId)
|
|||
|
|
{
|
|||
|
|
case 1:
|
|||
|
|
((Border)target).MouseLeftButtonDown += Header_MouseLeftButtonDown;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
TitleText = (TextBlock)target;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
CloseBtn = (Button)target;
|
|||
|
|
((ButtonBase)(object)CloseBtn).Click += CloseBtn_Click;
|
|||
|
|
break;
|
|||
|
|
case 4:
|
|||
|
|
ScreenshotImage = (Image)target;
|
|||
|
|
break;
|
|||
|
|
case 5:
|
|||
|
|
StatusText = (TextBlock)target;
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
_contentLoaded = true;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|