优化贴边交互

This commit is contained in:
liufei
2022-04-20 16:38:55 +08:00
parent 125cc72499
commit be9dcdb923
5 changed files with 99 additions and 11 deletions

View File

@@ -13,5 +13,14 @@ namespace GeekDesk.Constant
/// 查询框是否在工作 /// 查询框是否在工作
/// </summary> /// </summary>
public static bool SEARCH_BOX_SHOW = false; public static bool SEARCH_BOX_SHOW = false;
/// <summary>
/// 贴边隐藏后 以非鼠标经过方式触发显示
/// </summary>
public static bool MARGIN_HIDE_AND_OTHER_SHOW = false;
} }
} }

View File

@@ -21,6 +21,7 @@
KeyDown="OnKeyDown" KeyDown="OnKeyDown"
Focusable="True" Focusable="True"
MouseDown="MainWindow_MouseDown" MouseDown="MainWindow_MouseDown"
MouseEnter="MainWindow_MouseEnter"
> >
<WindowChrome.WindowChrome> <WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="0" ResizeBorderThickness="15"/> <WindowChrome CaptionHeight="0" ResizeBorderThickness="15"/>

View File

@@ -351,33 +351,53 @@ namespace GeekDesk
//{ //{
// return; // return;
//} //}
//修改贴边隐藏状态为未隐藏 //修改贴边隐藏状态为未隐藏
MarginHide.IS_HIDE = false; if (MarginHide.ON_HIDE)
{
MarginHide.IS_HIDE = false;
if (!CommonCode.MouseInWindow(mainWindow))
{
RunTimeStatus.MARGIN_HIDE_AND_OTHER_SHOW = true;
MarginHide.WaitHide(3000);
}
}
if (appData.AppConfig.FollowMouse) if (appData.AppConfig.FollowMouse)
{ {
ShowWindowFollowMouse.Show(mainWindow, MousePosition.CENTER, 0, 0, false); ShowWindowFollowMouse.Show(mainWindow, MousePosition.CENTER, 0, 0, false);
} }
FadeStoryBoard(1, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Visible); FadeStoryBoard(1, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Visible);
Keyboard.Focus(mainWindow.EmptyTextBox); Keyboard.Focus(mainWindow.EmptyTextBox);
} }
public static void HideApp() public static void HideApp()
{ {
if (RunTimeStatus.SEARCH_BOX_SHOW) if (!MarginHide.IS_HIDE)
{ {
mainWindow.HidedSearchBox(); if (RunTimeStatus.SEARCH_BOX_SHOW)
new Thread(() =>
{ {
Thread.Sleep(100); mainWindow.HidedSearchBox();
App.Current.Dispatcher.BeginInvoke(new Action(() => new Thread(() =>
{ {
FadeStoryBoard(0, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Collapsed); Thread.Sleep(100);
})); App.Current.Dispatcher.BeginInvoke(new Action(() =>
}).Start(); {
FadeStoryBoard(0, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Collapsed);
}));
}).Start();
}
else
{
FadeStoryBoard(0, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Collapsed);
}
} else } else
{ {
FadeStoryBoard(0, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Collapsed); ShowApp();
} }
} }
/// <summary> /// <summary>
@@ -596,5 +616,15 @@ namespace GeekDesk
EmptyTextBox.Focus(); EmptyTextBox.Focus();
} }
/// <summary>
/// 鼠标进入后
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainWindow_MouseEnter(object sender, MouseEventArgs e)
{
//防止延迟贴边隐藏
RunTimeStatus.MARGIN_HIDE_AND_OTHER_SHOW = false;
}
} }
} }

View File

@@ -222,5 +222,34 @@ namespace GeekDesk.Util
} }
} }
/// <summary>
/// 判断鼠标是否在窗口内
/// </summary>
/// <param name="window"></param>
/// <returns></returns>
public static bool MouseInWindow(Window window)
{
double windowHeight = window.Height;
double windowWidth = window.Width;
double windowTop = window.Top;
double windowLeft = window.Left;
//获取鼠标位置
System.Windows.Point p = MouseUtil.GetMousePosition();
double mouseX = p.X;
double mouseY = p.Y;
//鼠标不在窗口上
if (mouseX < windowLeft || mouseX > windowLeft + windowWidth
|| mouseY < windowTop || mouseY > windowTop + windowHeight)
{
return false;
}
return true;
}
} }
} }

View File

@@ -30,6 +30,8 @@ namespace GeekDesk.Util
public static readonly int shadowWidth = 20; public static readonly int shadowWidth = 20;
public static bool ON_HIDE = false;
private static double showMarginWidth = 1; private static double showMarginWidth = 1;
@@ -69,7 +71,8 @@ namespace GeekDesk.Util
#region #region
private static void HideWindow(object o, EventArgs e) private static void HideWindow(object o, EventArgs e)
{ {
if (window.Visibility != Visibility.Visible) return; if (window.Visibility != Visibility.Visible
|| RunTimeStatus.MARGIN_HIDE_AND_OTHER_SHOW) return;
double screenLeft = SystemParameters.VirtualScreenLeft; double screenLeft = SystemParameters.VirtualScreenLeft;
double screenTop = SystemParameters.VirtualScreenTop; double screenTop = SystemParameters.VirtualScreenTop;
@@ -150,6 +153,7 @@ namespace GeekDesk.Util
public static void StartHide() public static void StartHide()
{ {
ON_HIDE = true;
if (timer != null) return; if (timer != null) return;
timer = new Timer timer = new Timer
{ {
@@ -161,6 +165,7 @@ namespace GeekDesk.Util
public static void StopHide() public static void StopHide()
{ {
ON_HIDE = false;
if (timer == null) return; if (timer == null) return;
timer.Stop(); timer.Stop();
timer.Dispose(); timer.Dispose();
@@ -295,6 +300,20 @@ namespace GeekDesk.Util
} }
public static void WaitHide(int waitTime)
{
new System.Threading.Thread(()=>
{
System.Threading.Thread.Sleep(waitTime);
//修改状态为false 继续执行贴边隐藏
RunTimeStatus.MARGIN_HIDE_AND_OTHER_SHOW = false;
}).Start();
}
} }
} }