mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-02 21:16:07 +02:00
migrate to wpf
This commit is contained in:
@@ -0,0 +1,244 @@
|
||||
using CefSharp;
|
||||
using CefSharp.Wpf;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Windows;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace VRCX
|
||||
{
|
||||
public partial class MainWindow : Window
|
||||
{
|
||||
public static MainWindow Instance;
|
||||
public ChromiumWebBrowser Browser;
|
||||
|
||||
// Store draggable region if we have one - used for hit testing
|
||||
private Region Region_;
|
||||
|
||||
private NotifyIcon NotifyIcon_;
|
||||
private bool Quit_;
|
||||
|
||||
private int LastLocationX;
|
||||
private int LastLocationY;
|
||||
private int LastSizeWidth;
|
||||
private int LastSizeHeight;
|
||||
|
||||
public MainWindow()
|
||||
{
|
||||
Instance = this;
|
||||
InitializeComponent();
|
||||
DoTrayIcon();
|
||||
|
||||
var dragHandler = new DragHandler();
|
||||
dragHandler.RegionsChanged += (region) =>
|
||||
{
|
||||
if (region != null)
|
||||
{
|
||||
// Only wire up event handler once
|
||||
if (Region_ == null)
|
||||
{
|
||||
Browser.PreviewMouseLeftButtonDown += (sender, e) =>
|
||||
{
|
||||
var point = e.GetPosition(Browser);
|
||||
|
||||
if (Region_.IsVisible((float)point.X, (float)point.Y))
|
||||
{
|
||||
var window = GetWindow(this);
|
||||
window.DragMove();
|
||||
|
||||
e.Handled = true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Region_ = region;
|
||||
}
|
||||
};
|
||||
|
||||
Browser = new ChromiumWebBrowser(
|
||||
Path.Combine(Program.BaseDirectory, "html/index.html")
|
||||
)
|
||||
{
|
||||
DragHandler = dragHandler,
|
||||
MenuHandler = new NoopMenuHandler(),
|
||||
BrowserSettings =
|
||||
{
|
||||
DefaultEncoding = "UTF-8",
|
||||
}
|
||||
};
|
||||
|
||||
Browser.IsBrowserInitializedChanged += (A, B) =>
|
||||
{
|
||||
if (Browser.IsDisposed == false)
|
||||
{
|
||||
Browser.ShowDevTools();
|
||||
}
|
||||
};
|
||||
|
||||
Util.ApplyJavascriptBindings(Browser.JavascriptObjectRepository);
|
||||
|
||||
Content = Browser;
|
||||
}
|
||||
|
||||
|
||||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// restore last window location and size
|
||||
try
|
||||
{
|
||||
int.TryParse(VRCXStorage.Instance.Get("VRCX_LocationX"), out LastLocationX);
|
||||
int.TryParse(VRCXStorage.Instance.Get("VRCX_LocationY"), out LastLocationY);
|
||||
int.TryParse(VRCXStorage.Instance.Get("VRCX_SizeWidth"), out LastSizeWidth);
|
||||
int.TryParse(VRCXStorage.Instance.Get("VRCX_SizeHeight"), out LastSizeHeight);
|
||||
var location = new System.Drawing.Point(LastLocationX, LastLocationY);
|
||||
var size = new System.Drawing.Size(LastSizeWidth, LastSizeHeight);
|
||||
var screen = Screen.FromPoint(location);
|
||||
if (screen.Bounds.Contains(location.X, location.Y) == true)
|
||||
{
|
||||
Left = location.X;
|
||||
Top = location.Y;
|
||||
}
|
||||
if (size.Width > 0 && size.Height > 0)
|
||||
{
|
||||
Width = size.Width;
|
||||
Height = size.Height;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
// restore last window state
|
||||
try
|
||||
{
|
||||
var state = WindowState;
|
||||
if ("true".Equals(VRCXStorage.Instance.Get("VRCX_StartAsMinimizedState")))
|
||||
{
|
||||
state = WindowState.Minimized;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (int.TryParse(VRCXStorage.Instance.Get("VRCX_WindowState"), out int v))
|
||||
{
|
||||
state = (WindowState)v;
|
||||
}
|
||||
if (state == WindowState.Minimized)
|
||||
{
|
||||
state = WindowState.Normal;
|
||||
}
|
||||
}
|
||||
WindowState = state;
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private void Window_Closed(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
VRCXStorage.Instance.Set("VRCX_LocationX", LastLocationX.ToString());
|
||||
VRCXStorage.Instance.Set("VRCX_LocationY", LastLocationY.ToString());
|
||||
VRCXStorage.Instance.Set("VRCX_SizeWidth", LastSizeWidth.ToString());
|
||||
VRCXStorage.Instance.Set("VRCX_SizeHeight", LastSizeHeight.ToString());
|
||||
VRCXStorage.Instance.Set("VRCX_WindowState", ((int)WindowState).ToString());
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
if (NotifyIcon_ != null)
|
||||
{
|
||||
NotifyIcon_.Visible = false;
|
||||
}
|
||||
|
||||
Content = null;
|
||||
}
|
||||
|
||||
private void DoTrayIcon()
|
||||
{
|
||||
var contextMenu = new ContextMenu();
|
||||
|
||||
contextMenu.MenuItems.Add("Open", (sender, e) =>
|
||||
{
|
||||
if (WindowState == WindowState.Minimized)
|
||||
{
|
||||
WindowState = WindowState.Normal;
|
||||
}
|
||||
Show();
|
||||
Focus();
|
||||
});
|
||||
|
||||
contextMenu.MenuItems.Add("-");
|
||||
|
||||
contextMenu.MenuItems.Add("Quit VRCX", (sender, e) =>
|
||||
{
|
||||
Quit_ = true;
|
||||
Close();
|
||||
});
|
||||
|
||||
NotifyIcon_ = new NotifyIcon();
|
||||
|
||||
try
|
||||
{
|
||||
var location = Assembly.GetExecutingAssembly().Location;
|
||||
NotifyIcon_.Icon = System.Drawing.Icon.ExtractAssociatedIcon(location);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
NotifyIcon_.ContextMenu = contextMenu;
|
||||
NotifyIcon_.Text = "VRCX";
|
||||
NotifyIcon_.DoubleClick += (sender, e) =>
|
||||
{
|
||||
if (WindowState == WindowState.Minimized)
|
||||
{
|
||||
WindowState = WindowState.Normal;
|
||||
}
|
||||
Show();
|
||||
Focus();
|
||||
};
|
||||
NotifyIcon_.Visible = true;
|
||||
}
|
||||
|
||||
private void Window_Closing(object sender, CancelEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Quit_ == false &&
|
||||
"true".Equals(SharedVariable.Instance.Get("config:vrcx_closetotray")) == true)
|
||||
{
|
||||
e.Cancel = true;
|
||||
Hide();
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private void Window_LocationChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (WindowState == WindowState.Normal)
|
||||
{
|
||||
LastLocationX = (int)Left;
|
||||
LastLocationY = (int)Top;
|
||||
}
|
||||
}
|
||||
|
||||
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
|
||||
{
|
||||
if (WindowState == WindowState.Normal)
|
||||
{
|
||||
LastSizeWidth = (int)Width;
|
||||
LastSizeHeight = (int)Height;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user