贴边隐藏优化

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)
{
appData.AppConfig.SelectedMenuIcons = null;
//设置对应菜单的图标列表
if (MenuListBox.SelectedIndex == -1)
{

View File

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

View File

@@ -38,7 +38,6 @@ namespace GeekDesk
public static int hotKeyId = -1;
public static int toDoHotKeyId = -1;
public static MainWindow mainWindow;
public static MarginHide hide;
public MainWindow()
{
LoadData();
@@ -50,10 +49,10 @@ namespace GeekDesk
ToDoTask.BackLogCheck();
////实例化隐藏 Hide类进行时间timer设置
hide = new MarginHide(this);
MarginHide.ReadyHide(this);
if (appData.AppConfig.MarginHide)
{
hide.TimerSet();
MarginHide.StartHide();
}
}
@@ -62,7 +61,6 @@ namespace GeekDesk
/// </summary>
private void LoadData()
{
GC.KeepAlive(MainWindow.appData); // 持活
this.DataContext = appData;
if (appData.MenuList.Count == 0)
{
@@ -131,7 +129,7 @@ namespace GeekDesk
{
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();
}
@@ -337,7 +335,7 @@ namespace GeekDesk
// return;
//}
//修改贴边隐藏状态为未隐藏
MarginHide.isHide = false;
MarginHide.IS_HIDE = false;
if (appData.AppConfig.FollowMouse)
{
ShowWindowFollowMouse.Show(mainWindow, MousePosition.CENTER, 0, 0, false);
@@ -395,20 +393,6 @@ namespace GeekDesk
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.MarginHide && !hide.IsMargin())
if (appData.AppConfig.MarginHide && !MarginHide.IS_HIDE)
{
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>
@@ -491,7 +490,6 @@ namespace GeekDesk
{
MouseHookThread.Dispose();
}
hide.TimerStop();
Process p = new Process();
p.StartInfo.FileName = Constants.APP_DIR + "GeekDesk.exe";

View File

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