completed the branch

This commit is contained in:
NaBian committed 2019-05-15 23:19:24 +08:00
1 parent a8aa1a4525
commit f37e9f78b8
4 files changed
+82 -11

No files matched your search

@@ -38,4 +38,9 @@
<ItemGroup>
<None Remove="Themes\Styles\Base\TreeViewBaseStyle.xaml" />
</ItemGroup>
<ItemGroup>
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\dropper.cur">
<Link>Resources\dropper.cur</Link>
</Resource>
</ItemGroup>
</Project>
@@ -100,6 +100,11 @@
<LastGenOutput>Lang.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\dropper.cur">
<Link>Resources\dropper.cur</Link>
</Resource>
</ItemGroup>
<Import Project="..\..\Shared\HandyControl_Shared\HandyControl_Shared.projitems" Label="Shared" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
@@ -1,6 +1,5 @@
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using HandyControl.Data;
@@ -9,8 +8,10 @@ using HandyControl.Tools.Interop;
namespace HandyControl.Controls
{
internal class ColorDropper : Control
internal class ColorDropper
{
private bool _cursorIsSetted;
private Cursor _dropperCursor;
private readonly ColorPicker _colorPicker;
@@ -26,8 +27,7 @@ namespace HandyControl.Controls
{
if (_dropperCursor == null)
{
var info = Application.GetResourceStream(
new Uri("pack://application:,,,/HandyControl;Component/Resources/dropper.cur"));
var info = Application.GetResourceStream(new Uri("pack://application:,,,/HandyControl;Component/Resources/dropper.cur"));
if (info != null)
{
_dropperCursor = new Cursor(info.Stream);
@@ -36,24 +36,61 @@ namespace HandyControl.Controls
if (_dropperCursor == null) return;
Mouse.OverrideCursor = _dropperCursor;
MouseHook.Start();
MouseHook.StatusChanged += MouseHook_StatusChanged;
}
else
{
Mouse.OverrideCursor = Cursors.Arrow;
MouseHook.Stop();
MouseHook.StatusChanged -= MouseHook_StatusChanged;
}
}
private void MouseHook_StatusChanged(object sender, MouseHookEventArgs e)
{
if (!_colorPicker.IsMouseOver && e.Message == MouseHookMessageType.LeftButtonDown)
var window = System.Windows.Window.GetWindow(_colorPicker);
if (window == null)
{
var brush = new SolidColorBrush(GetColorAt(e.Point.X, e.Point.Y));
_colorPicker.SelectedBrush = brush;
//MouseHook.Stop();
//MouseHook.StatusChanged -= MouseHook_StatusChanged;
UpdateCursor(false);
return;
}
if (!_colorPicker.IsMouseOver && window.IsMouseOver)
{
UpdateCursor(true);
if (e.Message == MouseHookMessageType.LeftButtonDown)
{
var brush = new SolidColorBrush(GetColorAt(e.Point.X, e.Point.Y));
_colorPicker.SelectedBrush = brush;
}
}
else
{
UpdateCursor(false);
}
}
private void UpdateCursor(bool isDropper)
{
if (isDropper)
{
Mouse.Captured?.ReleaseMouseCapture();
if (!_cursorIsSetted)
{
Mouse.OverrideCursor = _dropperCursor;
_cursorIsSetted = true;
}
}
else
{
if (_cursorIsSetted)
{
Mouse.OverrideCursor = Cursors.Arrow;
_cursorIsSetted = false;
}
}
}
@@ -61,6 +61,8 @@ namespace HandyControl.Controls
private bool _appliedTemplate;
private bool _disposed;
/// <summary>
/// 当前显示的颜色类型
/// </summary>
@@ -340,6 +342,11 @@ namespace HandyControl.Controls
}
}
~ColorPicker()
{
Dispose(false);
}
public ColorPicker()
{
CommandBindings.Add(new CommandBinding(ControlCommands.Confirm, ButtonConfirm_OnClick));
@@ -704,8 +711,25 @@ namespace HandyControl.Controls
_colorDropper.Update(_toggleButtonDropper.IsChecked.Value);
}
public void Dispose() => System.Windows.Window.GetWindow(this)?.Close();
protected virtual void Dispose(bool disposing)
{
if (_disposed) return;
Dispatcher.BeginInvoke(new Action(() =>
{
_colorDropper?.Update(false);
System.Windows.Window.GetWindow(this)?.Close();
}));
_disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public bool CanDispose { get; } = true;
}
}