diff --git a/InkCanvasForClass/MainWindow.xaml b/InkCanvasForClass/MainWindow.xaml
index 6a1075d..5e3631e 100644
--- a/InkCanvasForClass/MainWindow.xaml
+++ b/InkCanvasForClass/MainWindow.xaml
@@ -127,6 +127,7 @@
+
@@ -3460,6 +3461,10 @@
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/InkCanvasForClass/MainWindow.xaml.cs b/InkCanvasForClass/MainWindow.xaml.cs
index e872ba3..8feeaa1 100644
--- a/InkCanvasForClass/MainWindow.xaml.cs
+++ b/InkCanvasForClass/MainWindow.xaml.cs
@@ -23,6 +23,7 @@ using Ink_Canvas.Popups;
using iNKORE.UI.WPF.Modern.Controls;
using System.Windows.Forms;
using System.Windows.Input;
+using Vanara.PInvoke;
using Application = System.Windows.Application;
using Button = System.Windows.Controls.Button;
using TextBox = System.Windows.Controls.TextBox;
@@ -143,6 +144,7 @@ namespace Ink_Canvas {
drawingAttributes.FitToCurve = Settings.Canvas.FitToCurve;
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
+ inkCanvas.DeleteKeyCommandFired += InkCanvasDeleteCommandFiredEvent;
//inkCanvas.Gesture += InkCanvas_Gesture;
}
catch { }
@@ -196,7 +198,7 @@ namespace Ink_Canvas {
const uint MF_GRAYED = 0x00000001;
const uint SC_CLOSE = 0xF060;
- private static void PreloadIALibrary(object state) {
+ private static void PreloadIALibrary() {
GC.KeepAlive(typeof(InkAnalyzer));
GC.KeepAlive(typeof(AnalysisAlternate));
GC.KeepAlive(typeof(InkDrawingNode));
@@ -242,7 +244,7 @@ namespace Ink_Canvas {
BoardBackgroundPopup.Visibility = Visibility.Collapsed;
// 提前加载IA库,优化第一笔等待时间
- ThreadPool.QueueUserWorkItem(PreloadIALibrary);
+ PreloadIALibrary();
SystemEvents.DisplaySettingsChanged += SystemEventsOnDisplaySettingsChanged;
@@ -263,6 +265,10 @@ namespace Ink_Canvas {
SelectionV2Init();
InitStorageManagementModule();
+
+ InitFreezeWindow(new HWND[] {
+ new HWND(new WindowInteropHelper(this).Handle)
+ });
}
private void SystemEventsOnDisplaySettingsChanged(object sender, EventArgs e) {
@@ -318,7 +324,10 @@ namespace Ink_Canvas {
}
if (e.Cancel) LogHelper.WriteLogToFile("Ink Canvas closing cancelled", LogHelper.LogType.Event);
- else Application.Current.Shutdown();
+ else {
+ DisposeFreezeFrame();
+ Application.Current.Shutdown();
+ }
}
[DllImport("user32.dll", SetLastError = true)]
diff --git a/InkCanvasForClass/MainWindow_cs/MW_FloatingBarIcons.cs b/InkCanvasForClass/MainWindow_cs/MW_FloatingBarIcons.cs
index 0400e6c..4df4fd8 100644
--- a/InkCanvasForClass/MainWindow_cs/MW_FloatingBarIcons.cs
+++ b/InkCanvasForClass/MainWindow_cs/MW_FloatingBarIcons.cs
@@ -116,6 +116,10 @@ namespace Ink_Canvas {
/// 控制是否顯示浮動工具欄的“手勢”按鈕
///
private void CheckEnableTwoFingerGestureBtnVisibility(bool isVisible) {
+ if (CheckboxEnableFloatingBarGesture.IsChecked == false) {
+ EnableTwoFingerGestureBorder.Visibility = Visibility.Collapsed;
+ return;
+ }
if (StackPanelCanvasControls.Visibility != Visibility.Visible
|| BorderFloatingBarMainControls.Visibility != Visibility.Visible) {
EnableTwoFingerGestureBorder.Visibility = Visibility.Collapsed;
@@ -319,15 +323,15 @@ namespace Ink_Canvas {
if (mode != null && autoAlignCenter) {
if (BorderFloatingBarExitPPTBtn.Visibility == Visibility.Visible) {
- await Task.Delay(1);
+ await Task.Delay(10);
ViewboxFloatingBarMarginAnimation(60);
} else if (Topmost == true) //非黑板
{
- await Task.Delay(1);
+ await Task.Delay(10);
ViewboxFloatingBarMarginAnimation(100, true);
} else //黑板
{
- await Task.Delay(1);
+ await Task.Delay(10);
ViewboxFloatingBarMarginAnimation(60);
}
}
@@ -336,7 +340,7 @@ namespace Ink_Canvas {
PenPaletteV2Popup.IsOpen = false;
SelectionPopupV2.IsOpen = false;
- await Task.Delay(10);
+ await Task.Delay(20);
isHidingSubPanelsWhenInking = false;
}
@@ -646,6 +650,54 @@ namespace Ink_Canvas {
iconLabelsWhiteboard[wmi].Foreground = new SolidColorBrush(Colors.GhostWhite);
}
+ FloatingbarFreezeBtnBGCanvas.Visibility = mode != ICCToolsEnum.CursorMode ? Visibility.Visible : Visibility.Collapsed;
+ if (mode == ICCToolsEnum.CursorMode) IsAnnotationFreezeOn = false;
+ }
+
+ #endregion
+
+ #region 画面定格
+
+ private bool _isAnnotationFreezeOn { get; set; } = false;
+
+ private bool IsAnnotationFreezeOn {
+ get => _isAnnotationFreezeOn;
+ set {
+ _isAnnotationFreezeOn = value;
+ UpdateFloatingBarFreezeIconCheckedStatus();
+ var t = new Thread(() => {
+ ApplyFreezeFrame();
+ });
+ t.Start();
+ }
+ }
+
+ private async void ApplyFreezeFrame() {
+ if (!isFreezeFrameLoaded) return;
+ if (_isAnnotationFreezeOn) {
+ var bmp = await GetFreezedFrameAsync();
+ Dispatcher.InvokeAsync(() => {
+ FreezeFrameBackgroundImage.Source = BitmapToImageSource(bmp);
+ FreezeFrameBackgroundImage.Visibility = Visibility.Visible;
+ });
+ } else {
+ Dispatcher.InvokeAsync(() => {
+ FreezeFrameBackgroundImage.Source = null;
+ FreezeFrameBackgroundImage.Visibility = Visibility.Collapsed;
+ });
+ }
+ }
+
+ private void UpdateFloatingBarFreezeIconCheckedStatus() {
+ if (IsAnnotationFreezeOn) {
+ FreezeIconGeometry.Brush = new SolidColorBrush(Colors.White);
+ FreezeToolbarTextBlock.Foreground = new SolidColorBrush(Colors.White);
+ FloatingbarFreezeBtnBG.Visibility = Visibility.Visible;
+ } else {
+ FreezeIconGeometry.Brush = new SolidColorBrush(Color.FromRgb(27, 27, 27));
+ FreezeToolbarTextBlock.Foreground = new SolidColorBrush(Colors.Black);
+ FloatingbarFreezeBtnBG.Visibility = Visibility.Hidden;
+ }
}
#endregion
@@ -665,6 +717,14 @@ namespace Ink_Canvas {
}
}
+ private void FreezeFloatingBarBtn_MouseUp(object sender, MouseButtonEventArgs e) {
+ if (lastBorderMouseDownObject != null && lastBorderMouseDownObject is Panel)
+ ((Panel)lastBorderMouseDownObject).Background = new SolidColorBrush(Colors.Transparent);
+ if (sender == FreezeFloatingBarBtn && lastBorderMouseDownObject != FreezeFloatingBarBtn) return;
+
+ IsAnnotationFreezeOn = !IsAnnotationFreezeOn;
+ }
+
private async void CursorIcon_Click(object sender, RoutedEventArgs e)
{
if (lastBorderMouseDownObject != null && lastBorderMouseDownObject is Panel)
@@ -753,8 +813,8 @@ namespace Ink_Canvas {
((Panel)lastBorderMouseDownObject).Background = new SolidColorBrush(Colors.Transparent);
if (sender == Pen_Icon && lastBorderMouseDownObject != Pen_Icon) return;
- if (Pen_Icon.Background == null || StackPanelCanvasControls.Visibility == Visibility.Collapsed)
- {
+ if (Pen_Icon.Background == null || StackPanelCanvasControls.Visibility == Visibility.Collapsed) {
+
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
GridTransparencyFakeBackground.Opacity = 1;
@@ -980,6 +1040,28 @@ namespace Ink_Canvas {
#region 按钮布局更新
+ public void UpdateFloatingBarIconsVisibility() {
+
+ var items = new FrameworkElement[] {
+ ShapeDrawFloatingBarBtn,
+ FreezeFloatingBarBtn,
+ HandFloatingBarBtn,
+ SymbolIconUndo,
+ SymbolIconRedo,
+ CursorWithDelFloatingBarBtn,
+ SymbolIconSelect,
+ WhiteboardFloatingBarBtn,
+ Fold_Icon,
+ EnableTwoFingerGestureBorder
+ };
+
+ var floatingBarIconsVisibilityValue = Settings.Appearance.FloatingBarIconsVisibility;
+ var fbivca = floatingBarIconsVisibilityValue.ToCharArray();
+ for (var i = 0; i < fbivca.Length; i++) {
+ items[i].Visibility = fbivca[i] == '1' ? Visibility.Visible : Visibility.Collapsed;
+ }
+ }
+
public void UpdateFloatingBarIconsLayout() {
FrameworkElement[] IconsArray = new FrameworkElement[13] {
Cursor_Icon,
@@ -1388,10 +1470,10 @@ namespace Ink_Canvas {
private bool isViewboxFloatingBarMarginAnimationRunning = false;
- public async void ViewboxFloatingBarMarginAnimation(int MarginFromEdge,
+ public void ViewboxFloatingBarMarginAnimation(int MarginFromEdge,
bool PosXCaculatedWithTaskbarHeight = false) {
if (MarginFromEdge == 60) MarginFromEdge = 55;
- await Dispatcher.InvokeAsync(() => {
+ Dispatcher.InvokeAsync(() => {
if (Topmost == false)
MarginFromEdge = -60;
else
@@ -1437,20 +1519,20 @@ namespace Ink_Canvas {
}
}
+ var sb = new Storyboard();
var marginAnimation = new ThicknessAnimation {
- Duration = TimeSpan.FromSeconds(0.35),
+ Duration = TimeSpan.FromSeconds(0.20),
From = ViewboxFloatingBar.Margin,
To = new Thickness(pos.X, pos.Y, 0, -20)
};
marginAnimation.EasingFunction = new CircleEase();
- ViewboxFloatingBar.BeginAnimation(MarginProperty, marginAnimation);
- });
-
- await Task.Delay(200);
-
- await Dispatcher.InvokeAsync(() => {
- ViewboxFloatingBar.Margin = new Thickness(pos.X, pos.Y, -2000, -200);
- if (Topmost == false) ViewboxFloatingBar.Visibility = Visibility.Hidden;
+ sb.Children.Add(marginAnimation);
+ Storyboard.SetTargetProperty(sb, new PropertyPath(FrameworkElement.MarginProperty));
+ sb.Completed += (sender, args) => {
+ ViewboxFloatingBar.Margin = new Thickness(pos.X, pos.Y, 0, -20);
+ if (Topmost == false) ViewboxFloatingBar.Visibility = Visibility.Hidden;
+ };
+ sb.Begin(ViewboxFloatingBar);
});
}
diff --git a/InkCanvasForClass/MainWindow_cs/MW_Freeze.cs b/InkCanvasForClass/MainWindow_cs/MW_Freeze.cs
new file mode 100644
index 0000000..2fa5c0a
--- /dev/null
+++ b/InkCanvasForClass/MainWindow_cs/MW_Freeze.cs
@@ -0,0 +1,169 @@
+using OSVersionExtension;
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using Vanara.PInvoke;
+
+namespace Ink_Canvas {
+ public partial class MainWindow : Window {
+
+ public IntPtr MagnificationWinHandle;
+ public IntPtr MagnificationHostWindowHandle;
+
+ public bool isFreezeFrameLoaded = false;
+
+ [DllImport("user32.dll")]
+ static extern bool UpdateWindow(IntPtr hWnd);
+
+ ///
+ /// 初始化画面定格窗口
+ ///
+ ///
+ public void InitFreezeWindow(HWND[] hwndsList) {
+ isFreezeFrameLoaded = false;
+ if (OSVersion.GetOperatingSystem() < OSVersionExtension.OperatingSystem.Windows81) return;
+ if (!Magnification.MagInitialize()) return;
+ // 註冊宿主窗體類名
+ var wndClassEx = new WNDCLASSEX {
+ cbSize = (uint)Marshal.SizeOf(), style = CS_HREDRAW | CS_VREDRAW,
+ lpfnWndProc = StaticWndProcDelegate, hInstance = IntPtr.Zero,
+ hCursor = LoadCursor(IntPtr.Zero, IDC_ARROW), hbrBackground = (IntPtr)(1 + COLOR_BTNFACE),
+ lpszClassName = "ICCMagnifierWindowHostForFreezeFrame",
+ hIcon = IntPtr.Zero, hIconSm = IntPtr.Zero
+ };
+ RegisterClassEx(ref wndClassEx);
+ // 創建宿主窗體
+ var windowHostHandle = CreateWindowEx(
+ WS_EX_TOPMOST | WS_EX_LAYERED, "ICCMagnifierWindowHostForFreezeFrame", "ICCMagnifierWindowHostWindowForFreezeFrame",
+ WS_SIZEBOX | WS_SYSMENU | WS_CLIPCHILDREN | WS_CAPTION | WS_MAXIMIZEBOX, 0, 0,
+ System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width,
+ System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero,
+ IntPtr.Zero);
+ // 設定分層窗體
+ SetLayeredWindowAttributes(windowHostHandle, 0, 0, LWA_ALPHA);
+ // 創建放大鏡窗體
+ var hwndMag = CreateWindowEx(
+ 0, Magnification.WC_MAGNIFIER, "ICCMagnifierWindowForFreezeFrame", WS_CHILD | WS_VISIBLE | MS_CLIPAROUNDCURSOR, 0, 0,
+ System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width,
+ System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height, windowHostHandle,
+ IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
+ // 設定窗體樣式和排布
+ int style = GetWindowLong(windowHostHandle, GWL_STYLE);
+ style &= ~WS_CAPTION; // 隐藏标题栏
+ style &= ~WS_THICKFRAME; // 禁止窗口拉伸
+ SetWindowLong(windowHostHandle, GWL_STYLE, style);
+ SetWindowPos(windowHostHandle, IntPtr.Zero, 0, 0, 0, 0, SWP_NOSIZE | SWP_FRAMECHANGED);
+ // 設定額外樣式
+ int exStyle = GetWindowLong(windowHostHandle, GWL_EXSTYLE);
+ exStyle |= WS_EX_TOOLWINDOW; /* <- 隐藏任务栏图标 */
+ exStyle &= ~WS_EX_APPWINDOW;
+ SetWindowLong(windowHostHandle, GWL_EXSTYLE, exStyle);
+ // 导出成员
+ MagnificationWinHandle = hwndMag;
+ MagnificationHostWindowHandle = windowHostHandle;
+ // 設定放大鏡工廠
+ Magnification.MAGTRANSFORM matrix = new Magnification.MAGTRANSFORM();
+ matrix[0, 0] = 1.0f;
+ matrix[0, 1] = 0.0f;
+ matrix[0, 2] = 0.0f;
+ matrix[1, 0] = 0.0f;
+ matrix[1, 1] = 1.0f;
+ matrix[1, 2] = 0.0f;
+ matrix[2, 0] = 1.0f;
+ matrix[2, 1] = 0.0f;
+ matrix[2, 2] = 0.0f;
+ if (!Magnification.MagSetWindowTransform(hwndMag, matrix)) return;
+ // 設定放大鏡轉化矩乘陣列
+ Magnification.MAGCOLOREFFECT magEffect = new Magnification.MAGCOLOREFFECT();
+ magEffect[0, 0] = 1.0f;
+ magEffect[0, 1] = 0.0f;
+ magEffect[0, 2] = 0.0f;
+ magEffect[0, 3] = 0.0f;
+ magEffect[0, 4] = 0.0f;
+ magEffect[1, 0] = 0.0f;
+ magEffect[1, 1] = 1.0f;
+ magEffect[1, 2] = 0.0f;
+ magEffect[1, 3] = 0.0f;
+ magEffect[1, 4] = 0.0f;
+ magEffect[2, 0] = 0.0f;
+ magEffect[2, 1] = 0.0f;
+ magEffect[2, 2] = 1.0f;
+ magEffect[2, 3] = 0.0f;
+ magEffect[2, 4] = 0.0f;
+ magEffect[3, 0] = 0.0f;
+ magEffect[3, 1] = 0.0f;
+ magEffect[3, 2] = 0.0f;
+ magEffect[3, 3] = 1.0f;
+ magEffect[3, 4] = 0.0f;
+ magEffect[4, 0] = 0.0f;
+ magEffect[4, 1] = 0.0f;
+ magEffect[4, 2] = 0.0f;
+ magEffect[4, 3] = 0.0f;
+ magEffect[4, 4] = 1.0f;
+ if (!Magnification.MagSetColorEffect(hwndMag, magEffect)) return;
+ // 顯示窗體
+ ShowWindow(windowHostHandle, SW_SHOW);
+ // 过滤窗口
+ var hwnds = new List { hwndMag };
+ hwnds.AddRange(hwndsList);
+ if (!Magnification.MagSetWindowFilterList(hwndMag, Magnification.MW_FILTERMODE.MW_FILTERMODE_EXCLUDE,
+ hwnds.Count, hwnds.ToArray())) return;
+ // 设置窗口 Source
+ if (!Magnification.MagSetWindowSource(hwndMag, new RECT(0, 0,
+ System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width,
+ System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height))) return;
+ InvalidateRect(hwndMag, IntPtr.Zero, true);
+ isFreezeFrameLoaded = true;
+ }
+
+ public async Task InitFreezeWindowAsync(HWND[] hwndsList) {
+ return await Task.Run(() => {
+ InitFreezeWindow(hwndsList);
+ return true;
+ });
+ }
+
+ public void DisposeFreezeFrame() {
+ // 反注册宿主窗口
+ UnregisterClass("ICCMagnifierWindowHostForFreezeFrame", IntPtr.Zero);
+ // 销毁宿主窗口
+ Magnification.MagUninitialize();
+ DestroyWindow(MagnificationHostWindowHandle);
+ }
+
+ public void SetFreezeFrameWindowsFilterList(HWND[] hwndsList) {
+ if (!isFreezeFrameLoaded) return;
+ var hwnds = new List { MagnificationWinHandle };
+ hwnds.AddRange(hwndsList);
+ if (!Magnification.MagSetWindowFilterList(MagnificationWinHandle, Magnification.MW_FILTERMODE.MW_FILTERMODE_EXCLUDE,
+ hwnds.Count, hwnds.ToArray())) return;
+ }
+
+ public Bitmap GetFreezedFrame() {
+ if (!isFreezeFrameLoaded) return new Bitmap(1,1);
+ if (!Magnification.MagSetWindowSource(MagnificationWinHandle, new RECT(0, 0,
+ System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width,
+ System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height))) return new Bitmap(1,1);
+ InvalidateRect(MagnificationWinHandle, IntPtr.Zero, true);
+ UpdateWindow(MagnificationHostWindowHandle);
+ RECT rect;
+ GetWindowRect(MagnificationWinHandle, out rect);
+ Bitmap bmp = new Bitmap(rect.Width, rect.Height);
+ Graphics memoryGraphics = Graphics.FromImage(bmp);
+ PrintWindow(MagnificationWinHandle, memoryGraphics.GetHdc(), PW_RENDERFULLCONTENT);
+ memoryGraphics.ReleaseHdc();
+ return bmp;
+ }
+
+ public async Task GetFreezedFrameAsync() {
+ if (!isFreezeFrameLoaded) return null;
+ var result = await Task.Run(GetFreezedFrame);
+ return result;
+ }
+ }
+}
\ No newline at end of file
diff --git a/InkCanvasForClass/MainWindow_cs/MW_InkCanvas.cs b/InkCanvasForClass/MainWindow_cs/MW_InkCanvas.cs
index 49838b8..f1e02d3 100644
--- a/InkCanvasForClass/MainWindow_cs/MW_InkCanvas.cs
+++ b/InkCanvasForClass/MainWindow_cs/MW_InkCanvas.cs
@@ -1,22 +1,40 @@
using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
+using System.Collections.Specialized;
+using System.Reflection;
using System.Windows;
using System.Windows.Controls;
-using System.Windows.Ink;
using System.Windows.Input;
-using System.Windows.Input.StylusPlugIns;
-using System.Windows.Media;
-namespace Ink_Canvas
-{
+namespace Ink_Canvas {
public class IccInkCanvas : InkCanvas {
public IccInkCanvas() {
-
+ // 通过反射移除InkCanvas自带的默认 Delete按键事件
+ var commandBindingsField =
+ typeof(CommandManager).GetField("_classCommandBindings", BindingFlags.NonPublic | BindingFlags.Static);
+ var bnds = commandBindingsField.GetValue(null) as HybridDictionary;
+ var inkCanvasBindings = bnds[typeof(InkCanvas)] as CommandBindingCollection;
+ var enumerator = inkCanvasBindings.GetEnumerator();
+ while (enumerator.MoveNext()) {
+ var item = (CommandBinding)enumerator.Current;
+ if (item.Command == ApplicationCommands.Delete) {
+ var executedField =
+ typeof(CommandBinding).GetField("Executed", BindingFlags.NonPublic | BindingFlags.Instance);
+ var canExecuteField =
+ typeof(CommandBinding).GetField("CanExecute", BindingFlags.NonPublic | BindingFlags.Instance);
+ executedField.SetValue(item, new ExecutedRoutedEventHandler((sender, args) => { }));
+ canExecuteField.SetValue(item, new CanExecuteRoutedEventHandler((sender, args) => { }));
+ }
+ }
+
+ // 为IccInkCanvas注册自定义的 Delete按键Command并Invoke OnDeleteCommandFired。
+ CommandManager.RegisterClassCommandBinding(typeof(IccInkCanvas), new CommandBinding(ApplicationCommands.Delete,
+ (sender, args) => {
+ DeleteKeyCommandFired?.Invoke(this, new RoutedEventArgs());
+ }, (sender, args) => {
+ args.CanExecute = GetSelectedStrokes().Count != 0;
+ }));
}
+
+ public event EventHandler DeleteKeyCommandFired;
}
-}
+}
\ No newline at end of file
diff --git a/InkCanvasForClass/MainWindow_cs/MW_SelectionGestures.cs b/InkCanvasForClass/MainWindow_cs/MW_SelectionGestures.cs
index 6409c81..384ff18 100644
--- a/InkCanvasForClass/MainWindow_cs/MW_SelectionGestures.cs
+++ b/InkCanvasForClass/MainWindow_cs/MW_SelectionGestures.cs
@@ -121,15 +121,6 @@ namespace Ink_Canvas {
// toolbutton
BorderStrokeSelectionToolButton_MouseLeave(sender, e);
-
- // cancel
- GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed;
- inkCanvas.Opacity = 1;
- InkSelectionStrokesOverlay.Visibility = Visibility.Collapsed;
- InkSelectionStrokesBackgroundInkCanvas.Visibility = Visibility.Collapsed;
- InkSelectionStrokesOverlay.DrawStrokes(new StrokeCollection(), new Matrix());
- UpdateStrokeSelectionBorder(false, null);
- RectangleSelectionHitTestBorder.Visibility = Visibility.Visible;
}
@@ -298,6 +289,10 @@ namespace Ink_Canvas {
CancelCurrentStrokesSelection();
}
+ private void InkCanvasDeleteCommandFiredEvent(object sender, RoutedEventArgs e) {
+ SymbolIconDelete_MouseUp(null, null);
+ }
+
private void RectangleSelectionHitTestBorder_MouseDown(object sender, MouseButtonEventArgs e) {
var pt = e.GetPosition(Main_Grid);
var nt = inkCanvas.Strokes.HitTest(pt, 8);
diff --git a/InkCanvasForClass/MainWindow_cs/MW_Settings.cs b/InkCanvasForClass/MainWindow_cs/MW_Settings.cs
index 4c4856e..6350c54 100644
--- a/InkCanvasForClass/MainWindow_cs/MW_Settings.cs
+++ b/InkCanvasForClass/MainWindow_cs/MW_Settings.cs
@@ -18,9 +18,12 @@ using System.Xml.Linq;
using iNKORE.UI.WPF.Modern.Media.Animation;
using System.Security.Principal;
using System.IO;
+using System.Linq;
using System.Reflection;
+using System.Text;
using System.Threading;
using System.Timers;
+using ColorPicker.Models;
using Ink_Canvas.Popups;
using Ookii.Dialogs.Wpf;
using Microsoft.Office.Interop.PowerPoint;
@@ -789,6 +792,38 @@ namespace Ink_Canvas {
SaveSettingsToFile();
}
+ private void CheckboxFloatingBarIconsVisibility_CheckedChanged(object sender, RoutedEventArgs e) {
+ if (!isLoaded) return;
+
+ var items = new CheckBox[] {
+ CheckboxEnableFloatingBarShapes,
+ CheckboxEnableFloatingBarFreeze,
+ CheckboxEnableFloatingBarHand,
+ CheckboxEnableFloatingBarUndo,
+ CheckboxEnableFloatingBarRedo,
+ CheckboxEnableFloatingBarCAM,
+ CheckboxEnableFloatingBarLasso,
+ CheckboxEnableFloatingBarWhiteboard,
+ CheckboxEnableFloatingBarFold,
+ CheckboxEnableFloatingBarGesture
+ };
+
+ if (!items.Contains((CheckBox)sender)) return;
+ if (Settings.Appearance.FloatingBarIconsVisibility.Length != 10) {
+ Settings.Appearance.FloatingBarIconsVisibility =
+ Settings.Appearance.FloatingBarIconsVisibility.PadRight(10, '1');
+ SaveSettingsToFile();
+ }
+ var value = Settings.Appearance.FloatingBarIconsVisibility;
+ var vsb = new StringBuilder(value);
+ vsb[Array.IndexOf(items, (CheckBox)sender)] = (bool)((CheckBox)sender).IsChecked ? '1' : '0';
+ Settings.Appearance.FloatingBarIconsVisibility = vsb.ToString();
+
+ UpdateFloatingBarIconsVisibility();
+
+ SaveSettingsToFile();
+ }
+
#endregion
#region Canvas
@@ -1520,6 +1555,7 @@ namespace Ink_Canvas {
Settings.Advanced.IsEnableDPIChangeDetection = false;
Settings.Advanced.IsEnableResolutionChangeDetection = false;
Settings.Advanced.IsDisableCloseWindow = true;
+ Settings.Advanced.EnableForceTopMost = false;
Settings.Appearance.IsEnableDisPlayNibModeToggler = false;
Settings.Appearance.IsColorfulViewboxFloatingBar = false;
@@ -1540,7 +1576,7 @@ namespace Ink_Canvas {
Settings.Appearance.ViewboxFloatingBarOpacityInPPTValue = 1.0;
Settings.Appearance.EnableTrayIcon = true;
Settings.Appearance.FloatingBarButtonLabelVisibility = true;
- Settings.Advanced.EnableForceTopMost = false;
+ Settings.Appearance.FloatingBarIconsVisibility = "11111111";
Settings.Automation.IsAutoFoldInEasiNote = true;
Settings.Automation.IsAutoFoldInEasiNoteIgnoreDesktopAnno = true;
@@ -1603,7 +1639,7 @@ namespace Ink_Canvas {
Settings.Canvas.HideStrokeWhenSelecting = false;
Settings.Canvas.ClearCanvasAndClearTimeMachine = false;
Settings.Canvas.FitToCurve = false;
- Settings.Canvas.UsingWhiteboard = false;
+ //Settings.Canvas.UsingWhiteboard = false;
Settings.Canvas.HyperbolaAsymptoteOption = 0;
Settings.Canvas.BlackboardBackgroundColor = BlackboardBackgroundColorEnum.White;
Settings.Canvas.BlackboardBackgroundPattern = BlackboardBackgroundPatternEnum.None;
diff --git a/InkCanvasForClass/MainWindow_cs/MW_SettingsToLoad.cs b/InkCanvasForClass/MainWindow_cs/MW_SettingsToLoad.cs
index ede48b5..c1751aa 100644
--- a/InkCanvasForClass/MainWindow_cs/MW_SettingsToLoad.cs
+++ b/InkCanvasForClass/MainWindow_cs/MW_SettingsToLoad.cs
@@ -5,8 +5,10 @@ using Ookii.Dialogs.Wpf;
using OSVersionExtension;
using System;
using System.Diagnostics;
+using System.Linq;
using System.Reflection;
using System.Security.Principal;
+using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
@@ -326,6 +328,33 @@ namespace Ink_Canvas {
ToggleSwitchFloatingBarButtonLabelVisibility.IsOn =
Settings.Appearance.FloatingBarButtonLabelVisibility;
+ var items = new CheckBox[] {
+ CheckboxEnableFloatingBarShapes,
+ CheckboxEnableFloatingBarFreeze,
+ CheckboxEnableFloatingBarHand,
+ CheckboxEnableFloatingBarUndo,
+ CheckboxEnableFloatingBarRedo,
+ CheckboxEnableFloatingBarCAM,
+ CheckboxEnableFloatingBarLasso,
+ CheckboxEnableFloatingBarWhiteboard,
+ CheckboxEnableFloatingBarFold,
+ CheckboxEnableFloatingBarGesture
+ };
+
+ if (Settings.Appearance.FloatingBarIconsVisibility.Length != 10) {
+ Settings.Appearance.FloatingBarIconsVisibility =
+ Settings.Appearance.FloatingBarIconsVisibility.PadRight(10, '1');
+ SaveSettingsToFile();
+ }
+
+ var floatingBarIconsVisibilityValue = Settings.Appearance.FloatingBarIconsVisibility;
+ var fbivca = floatingBarIconsVisibilityValue.ToCharArray();
+ for (var i = 0; i < fbivca.Length; i++) {
+ items[i].IsChecked = fbivca[i] == '1';
+ }
+
+ UpdateFloatingBarIconsVisibility();
+
FloatingBarTextVisibilityBindingLikeAPieceOfShit.Visibility = Settings.Appearance.FloatingBarButtonLabelVisibility ? Visibility.Visible : Visibility.Collapsed;
SystemEvents_UserPreferenceChanged(null, null);
@@ -631,6 +660,11 @@ namespace Ink_Canvas {
ToggleSwitchIsEnableAutoConvertInkColorWhenBackgroundChanged.IsOn =
Settings.Canvas.IsEnableAutoConvertInkColorWhenBackgroundChanged;
+
+ ComboBoxSelectionMethod.SelectedIndex = Settings.Canvas.SelectionMethod;
+ ToggleSwitchAllowClickToSelectLockedStroke.IsOn = Settings.Canvas.AllowClickToSelectLockedStroke;
+ ToggleSwitchOnlyHitTestFullyContainedStrokes.IsOn = Settings.Canvas.OnlyHitTestFullyContainedStrokes;
+ ToggleSwitchApplyScaleToStylusTip.IsOn = Settings.Canvas.ApplyScaleToStylusTip;
} else {
Settings.Canvas = new Canvas();
}
diff --git a/InkCanvasForClass/Popups/ScreenshotWindow.xaml.cs b/InkCanvasForClass/Popups/ScreenshotWindow.xaml.cs
index 6855f7e..72af71c 100644
--- a/InkCanvasForClass/Popups/ScreenshotWindow.xaml.cs
+++ b/InkCanvasForClass/Popups/ScreenshotWindow.xaml.cs
@@ -167,7 +167,7 @@ namespace Ink_Canvas.Popups
return result;
}
- private BitmapImage BitmapToImageSource(Bitmap bitmap)
+ public BitmapImage BitmapToImageSource(Bitmap bitmap)
{
using (MemoryStream memory = new MemoryStream())
{
diff --git a/InkCanvasForClass/Resources/Settings.cs b/InkCanvasForClass/Resources/Settings.cs
index ee46291..8493dd0 100644
--- a/InkCanvasForClass/Resources/Settings.cs
+++ b/InkCanvasForClass/Resources/Settings.cs
@@ -230,9 +230,10 @@ namespace Ink_Canvas
public bool IsShowModeFingerToggleSwitch { get; set; } = true;
[JsonProperty("theme")]
public int Theme { get; set; } = 0;
-
[JsonProperty("floatingBarButtonLabelVisibility")]
public bool FloatingBarButtonLabelVisibility = true;
+ [JsonProperty("FloatingBarIconsVisibility")]
+ public string FloatingBarIconsVisibility = "11111111";
}
public class PowerPointSettings