贴边隐藏优化

This commit is contained in:
liufei
2022-01-07 20:01:39 +08:00
parent 9f60f1be63
commit 74e36cc68a
4 changed files with 92 additions and 99 deletions

View File

@@ -204,6 +204,7 @@ namespace GeekDesk.Control.UserControls.PannelCard
private void menus_SelectionChanged(object sender, SelectionChangedEventArgs e) private void menus_SelectionChanged(object sender, SelectionChangedEventArgs e)
{ {
appData.AppConfig.SelectedMenuIcons = null;
//设置对应菜单的图标列表 //设置对应菜单的图标列表
if (MenuListBox.SelectedIndex == -1) if (MenuListBox.SelectedIndex == -1)
{ {

View File

@@ -154,7 +154,7 @@ namespace GeekDesk.Control.UserControls.PannelCard
//如果开启了贴边隐藏 则窗体不贴边才隐藏窗口 //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
if (appData.AppConfig.MarginHide) if (appData.AppConfig.MarginHide)
{ {
if (!MainWindow.hide.IsMargin()) if (!MarginHide.IS_HIDE)
{ {
MainWindow.HideApp(); MainWindow.HideApp();
} }
@@ -172,7 +172,7 @@ namespace GeekDesk.Control.UserControls.PannelCard
//如果开启了贴边隐藏 则窗体不贴边才隐藏窗口 //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
if (appData.AppConfig.MarginHide) if (appData.AppConfig.MarginHide)
{ {
if (!MainWindow.hide.IsMargin()) if (!MarginHide.IS_HIDE)
{ {
MainWindow.HideApp(); MainWindow.HideApp();
} }
@@ -196,7 +196,7 @@ namespace GeekDesk.Control.UserControls.PannelCard
//如果开启了贴边隐藏 则窗体不贴边才隐藏窗口 //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
if (appData.AppConfig.MarginHide) if (appData.AppConfig.MarginHide)
{ {
if (!MainWindow.hide.IsMargin()) if (!MarginHide.IS_HIDE)
{ {
MainWindow.HideApp(); MainWindow.HideApp();
} }
@@ -279,7 +279,7 @@ namespace GeekDesk.Control.UserControls.PannelCard
//如果开启了贴边隐藏 则窗体不贴边才隐藏窗口 //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
if (appData.AppConfig.MarginHide) if (appData.AppConfig.MarginHide)
{ {
if (!MainWindow.hide.IsMargin()) if (!MarginHide.IS_HIDE)
{ {
MainWindow.HideApp(); MainWindow.HideApp();
} }

View File

@@ -38,7 +38,6 @@ namespace GeekDesk
public static int hotKeyId = -1; public static int hotKeyId = -1;
public static int toDoHotKeyId = -1; public static int toDoHotKeyId = -1;
public static MainWindow mainWindow; public static MainWindow mainWindow;
public static MarginHide hide;
public MainWindow() public MainWindow()
{ {
LoadData(); LoadData();
@@ -50,10 +49,10 @@ namespace GeekDesk
ToDoTask.BackLogCheck(); ToDoTask.BackLogCheck();
////实例化隐藏 Hide类进行时间timer设置 ////实例化隐藏 Hide类进行时间timer设置
hide = new MarginHide(this); MarginHide.ReadyHide(this);
if (appData.AppConfig.MarginHide) if (appData.AppConfig.MarginHide)
{ {
hide.TimerSet(); MarginHide.StartHide();
} }
} }
@@ -62,7 +61,6 @@ namespace GeekDesk
/// </summary> /// </summary>
private void LoadData() private void LoadData()
{ {
GC.KeepAlive(MainWindow.appData); // 持活
this.DataContext = appData; this.DataContext = appData;
if (appData.MenuList.Count == 0) if (appData.MenuList.Count == 0)
{ {
@@ -131,7 +129,7 @@ namespace GeekDesk
{ {
if (MotionControl.hotkeyFinished) if (MotionControl.hotkeyFinished)
{ {
if (mainWindow.Visibility == Visibility.Collapsed || mainWindow.Opacity == 0 || MarginHide.isHide) if (mainWindow.Visibility == Visibility.Collapsed || mainWindow.Opacity == 0 || MarginHide.IS_HIDE)
{ {
ShowApp(); ShowApp();
} }
@@ -337,7 +335,7 @@ namespace GeekDesk
// return; // return;
//} //}
//修改贴边隐藏状态为未隐藏 //修改贴边隐藏状态为未隐藏
MarginHide.isHide = false; MarginHide.IS_HIDE = false;
if (appData.AppConfig.FollowMouse) if (appData.AppConfig.FollowMouse)
{ {
ShowWindowFollowMouse.Show(mainWindow, MousePosition.CENTER, 0, 0, false); ShowWindowFollowMouse.Show(mainWindow, MousePosition.CENTER, 0, 0, false);
@@ -395,20 +393,6 @@ namespace GeekDesk
p.Start(); p.Start();
} }
/// <summary>
/// 右键任务栏图标退出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ExitApp(object sender, RoutedEventArgs e)
{
if (appData.AppConfig.MouseMiddleShow)
{
MouseHookThread.Dispose();
}
hide.TimerStop();
Application.Current.Shutdown();
}
@@ -455,7 +439,7 @@ namespace GeekDesk
if (appData.AppConfig.AppHideType == AppHideType.LOST_FOCUS) if (appData.AppConfig.AppHideType == AppHideType.LOST_FOCUS)
{ {
//如果开启了贴边隐藏 则窗体不贴边才隐藏窗口 //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
if (appData.AppConfig.MarginHide && !hide.IsMargin()) if (appData.AppConfig.MarginHide && !MarginHide.IS_HIDE)
{ {
this.Visibility = Visibility.Collapsed; this.Visibility = Visibility.Collapsed;
} }
@@ -480,6 +464,21 @@ namespace GeekDesk
} }
} }
/// <summary>
/// 右键任务栏图标退出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ExitApp(object sender, RoutedEventArgs e)
{
if (appData.AppConfig.MouseMiddleShow)
{
MouseHookThread.Dispose();
}
Application.Current.Shutdown();
}
/// <summary> /// <summary>
/// 重启 /// 重启
/// </summary> /// </summary>
@@ -491,7 +490,6 @@ namespace GeekDesk
{ {
MouseHookThread.Dispose(); MouseHookThread.Dispose();
} }
hide.TimerStop();
Process p = new Process(); Process p = new Process();
p.StartInfo.FileName = Constants.APP_DIR + "GeekDesk.exe"; p.StartInfo.FileName = Constants.APP_DIR + "GeekDesk.exe";

View File

@@ -26,27 +26,28 @@ namespace GeekDesk.Util
public class MarginHide public class MarginHide
{ {
readonly Window window;//定义使用该方法的窗体 private static Window window;//定义使用该方法的窗体
private readonly int hideTime = 200; private static readonly int hideTime = 200;
private static readonly int fadeHideTime = 180;
private static readonly int fadeShowTime = 200;
private static readonly int taskTime = 250;
private readonly int fadeHideTime = 180; private static double showMarginWidth = 1;
private readonly int fadeShowTime = 200; public static bool IS_RUN = false;
public static bool IS_HIDE = false;
private readonly int taskTime = 250; private static Timer timer = null;
private double showMarginWidth = 1; public static void ReadyHide(Window window)
#pragma warning disable CS0414 // 字段“MarginHide.isHide”已被赋值但从未使用过它的值
public static bool isHide = false;
#pragma warning restore CS0414 // 字段“MarginHide.isHide”已被赋值但从未使用过它的值
public Timer timer;
//构造函数,传入将要匹配的窗体
public MarginHide(Window window)
{ {
this.window = window; MarginHide.window = window;
if (timer != null) return;
timer = new Timer();//添加timer计时器隐藏功能
timer.Interval = taskTime;
timer.Tick += HideWindow;
timer.Start();
} }
@@ -54,7 +55,7 @@ namespace GeekDesk.Util
/// 窗体是否贴边 /// 窗体是否贴边
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public bool IsMargin() public static bool IsMargin()
{ {
double screenLeft = SystemParameters.VirtualScreenLeft; double screenLeft = SystemParameters.VirtualScreenLeft;
double screenTop = SystemParameters.VirtualScreenTop; double screenTop = SystemParameters.VirtualScreenTop;
@@ -74,9 +75,9 @@ namespace GeekDesk.Util
#region #region
private void TimerDealy(object o, EventArgs e) private static void HideWindow(object o, EventArgs e)
{ {
if (window.Visibility != Visibility.Visible) return; if (window.Visibility != Visibility.Visible || !IS_RUN) return;
double screenLeft = SystemParameters.VirtualScreenLeft; double screenLeft = SystemParameters.VirtualScreenLeft;
double screenTop = SystemParameters.VirtualScreenTop; double screenTop = SystemParameters.VirtualScreenTop;
@@ -95,12 +96,12 @@ namespace GeekDesk.Util
//鼠标不在窗口上 //鼠标不在窗口上
if ((mouseX < windowLeft || mouseX > windowLeft + windowWidth if ((mouseX < windowLeft || mouseX > windowLeft + windowWidth
|| mouseY < windowTop || mouseY > windowTop + windowHeight) && !isHide) || mouseY < windowTop || mouseY > windowTop + windowHeight) && !IS_HIDE)
{ {
//上方隐藏条件 //上方隐藏条件
if (windowTop <= screenTop) if (windowTop <= screenTop)
{ {
isHide = true; IS_HIDE = true;
FadeAnimation(1, 0); FadeAnimation(1, 0);
HideAnimation(windowTop, screenTop - windowHeight + showMarginWidth, Window.TopProperty, HideType.TOP_HIDE); HideAnimation(windowTop, screenTop - windowHeight + showMarginWidth, Window.TopProperty, HideType.TOP_HIDE);
return; return;
@@ -108,7 +109,7 @@ namespace GeekDesk.Util
//左侧隐藏条件 //左侧隐藏条件
if (windowLeft <= screenLeft) if (windowLeft <= screenLeft)
{ {
isHide = true; IS_HIDE = true;
FadeAnimation(1, 0); FadeAnimation(1, 0);
HideAnimation(windowLeft, screenLeft - windowWidth + showMarginWidth, Window.LeftProperty, HideType.LEFT_HIDE); HideAnimation(windowLeft, screenLeft - windowWidth + showMarginWidth, Window.LeftProperty, HideType.LEFT_HIDE);
return; return;
@@ -116,18 +117,18 @@ namespace GeekDesk.Util
//右侧隐藏条件 //右侧隐藏条件
if (windowLeft + windowWidth + Math.Abs(screenLeft) >= screenWidth) if (windowLeft + windowWidth + Math.Abs(screenLeft) >= screenWidth)
{ {
isHide = true; IS_HIDE = true;
FadeAnimation(1, 0); FadeAnimation(1, 0);
HideAnimation(windowLeft, screenWidth - Math.Abs(screenLeft) - showMarginWidth, Window.LeftProperty, HideType.RIGHT_HIDE); HideAnimation(windowLeft, screenWidth - Math.Abs(screenLeft) - showMarginWidth, Window.LeftProperty, HideType.RIGHT_HIDE);
return; return;
} }
} else if (mouseX >= windowLeft && mouseX <= windowLeft + windowWidth } else if (mouseX >= windowLeft && mouseX <= windowLeft + windowWidth
&& mouseY >= windowTop && mouseY <= windowTop + windowHeight && isHide) && mouseY >= windowTop && mouseY <= windowTop + windowHeight && IS_HIDE)
{ {
//上方显示 //上方显示
if (windowTop <= screenTop - showMarginWidth) if (windowTop <= screenTop - showMarginWidth)
{ {
isHide = false; IS_HIDE = false;
HideAnimation(windowTop, screenTop, Window.TopProperty, HideType.TOP_SHOW); HideAnimation(windowTop, screenTop, Window.TopProperty, HideType.TOP_SHOW);
FadeAnimation(0, 1); FadeAnimation(0, 1);
return; return;
@@ -135,7 +136,7 @@ namespace GeekDesk.Util
//左侧显示 //左侧显示
if (windowLeft <= screenLeft - showMarginWidth) if (windowLeft <= screenLeft - showMarginWidth)
{ {
isHide = false; IS_HIDE = false;
HideAnimation(windowLeft, screenLeft, Window.LeftProperty, HideType.LEFT_SHOW); HideAnimation(windowLeft, screenLeft, Window.LeftProperty, HideType.LEFT_SHOW);
FadeAnimation(0, 1); FadeAnimation(0, 1);
return; return;
@@ -143,7 +144,7 @@ namespace GeekDesk.Util
//右侧显示 //右侧显示
if (windowLeft + Math.Abs(screenLeft) == screenWidth - showMarginWidth) if (windowLeft + Math.Abs(screenLeft) == screenWidth - showMarginWidth)
{ {
isHide = false; IS_HIDE = false;
HideAnimation(windowLeft, screenWidth - Math.Abs(screenLeft) - windowWidth, Window.LeftProperty, HideType.RIGHT_SHOW); HideAnimation(windowLeft, screenWidth - Math.Abs(screenLeft) - windowWidth, Window.LeftProperty, HideType.RIGHT_SHOW);
FadeAnimation(0, 1); FadeAnimation(0, 1);
return; return;
@@ -154,25 +155,17 @@ namespace GeekDesk.Util
#endregion #endregion
public void TimerSet() public static void StartHide()
{ {
if (timer != null) return; IS_RUN = true;
timer = new Timer();//添加timer计时器隐藏功能
#region
timer.Interval = taskTime;
timer.Tick += TimerDealy;
timer.Start();
#endregion
} }
public void TimerStop() public static void StopHide()
{ {
if (timer == null) return; IS_RUN = false;
timer.Stop();
timer.Dispose();
timer = null;
//功能关闭 如果界面是隐藏状态 那么要显示界面 ↓ //功能关闭 如果界面是隐藏状态 那么要显示界面 ↓
if (IS_HIDE)
{
double screenLeft = SystemParameters.VirtualScreenLeft; double screenLeft = SystemParameters.VirtualScreenLeft;
double screenTop = SystemParameters.VirtualScreenTop; double screenTop = SystemParameters.VirtualScreenTop;
double screenWidth = SystemParameters.VirtualScreenWidth; double screenWidth = SystemParameters.VirtualScreenWidth;
@@ -185,7 +178,7 @@ namespace GeekDesk.Util
//左侧显示 //左侧显示
if (windowLeft <= screenLeft - showMarginWidth) if (windowLeft <= screenLeft - showMarginWidth)
{ {
isHide = false; IS_HIDE = false;
FadeAnimation(0, 1); FadeAnimation(0, 1);
HideAnimation(windowLeft, screenLeft, Window.LeftProperty, HideType.LEFT_SHOW); HideAnimation(windowLeft, screenLeft, Window.LeftProperty, HideType.LEFT_SHOW);
return; return;
@@ -194,7 +187,7 @@ namespace GeekDesk.Util
//上方显示 //上方显示
if (windowTop <= screenTop - showMarginWidth) if (windowTop <= screenTop - showMarginWidth)
{ {
isHide = false; IS_HIDE = false;
FadeAnimation(0, 1); FadeAnimation(0, 1);
HideAnimation(windowTop, screenTop, Window.TopProperty, HideType.TOP_SHOW); HideAnimation(windowTop, screenTop, Window.TopProperty, HideType.TOP_SHOW);
return; return;
@@ -203,15 +196,16 @@ namespace GeekDesk.Util
//右侧显示 //右侧显示
if (windowLeft + Math.Abs(screenLeft) == screenWidth - showMarginWidth) if (windowLeft + Math.Abs(screenLeft) == screenWidth - showMarginWidth)
{ {
isHide = false; IS_HIDE = false;
FadeAnimation(0, 1); FadeAnimation(0, 1);
HideAnimation(windowLeft, screenWidth - Math.Abs(screenLeft) - windowWidth, Window.LeftProperty, HideType.RIGHT_SHOW); HideAnimation(windowLeft, screenWidth - Math.Abs(screenLeft) - windowWidth, Window.LeftProperty, HideType.RIGHT_SHOW);
return; return;
} }
} }
}
private void HideAnimation(double from, double to, DependencyProperty property, HideType hideType) private static void HideAnimation(double from, double to, DependencyProperty property, HideType hideType)
{ {
double toTemp = to; double toTemp = to;
@@ -261,7 +255,7 @@ namespace GeekDesk.Util
window.BeginAnimation(property, da); window.BeginAnimation(property, da);
} }
private void FadeAnimation(double from, double to) private static void FadeAnimation(double from, double to)
{ {
double time; double time;
if (to == 0D) if (to == 0D)