diff --git a/AutomaticUpdateVersionControl.txt b/AutomaticUpdateVersionControl.txt
index 776d144c..96b14650 100644
--- a/AutomaticUpdateVersionControl.txt
+++ b/AutomaticUpdateVersionControl.txt
@@ -1 +1 @@
-1.7.8.0
+1.7.9.0
diff --git a/Ink Canvas/App.xaml.cs b/Ink Canvas/App.xaml.cs
index 8bcce6b3..b662a247 100644
--- a/Ink Canvas/App.xaml.cs
+++ b/Ink Canvas/App.xaml.cs
@@ -1,8 +1,3 @@
-using Hardcodet.Wpf.TaskbarNotification;
-using Ink_Canvas.Helpers;
-using iNKORE.UI.WPF.Modern.Controls;
-using Microsoft.Win32;
-using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -18,6 +13,11 @@ using System.Windows;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Threading;
+using Hardcodet.Wpf.TaskbarNotification;
+using Ink_Canvas.Helpers;
+using iNKORE.UI.WPF.Modern.Controls;
+using Microsoft.Win32;
+using Newtonsoft.Json;
using Application = System.Windows.Application;
using MessageBox = System.Windows.MessageBox;
using Timer = System.Threading.Timer;
@@ -353,18 +353,18 @@ namespace Ink_Canvas
{
return $"{timeSpan.Days}天 {timeSpan.Hours}小时 {timeSpan.Minutes}分钟";
}
- else if (timeSpan.TotalHours >= 1)
+
+ if (timeSpan.TotalHours >= 1)
{
return $"{timeSpan.Hours}小时 {timeSpan.Minutes}分钟";
}
- else if (timeSpan.TotalMinutes >= 1)
+
+ if (timeSpan.TotalMinutes >= 1)
{
return $"{timeSpan.Minutes}分钟 {timeSpan.Seconds}秒";
}
- else
- {
- return $"{timeSpan.Seconds}秒";
- }
+
+ return $"{timeSpan.Seconds}秒";
}
// 新增:记录崩溃日志
diff --git a/Ink Canvas/AssemblyInfo.cs b/Ink Canvas/AssemblyInfo.cs
index 36053414..4b4d635f 100644
--- a/Ink Canvas/AssemblyInfo.cs
+++ b/Ink Canvas/AssemblyInfo.cs
@@ -49,5 +49,5 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.7.8.4")]
-[assembly: AssemblyFileVersion("1.7.8.4")]
+[assembly: AssemblyVersion("1.7.9.0")]
+[assembly: AssemblyFileVersion("1.7.9.0")]
diff --git a/Ink Canvas/Helpers/AdvancedBezierSmoothing.cs b/Ink Canvas/Helpers/AdvancedBezierSmoothing.cs
index ab7aa9fd..0948fa44 100644
--- a/Ink Canvas/Helpers/AdvancedBezierSmoothing.cs
+++ b/Ink Canvas/Helpers/AdvancedBezierSmoothing.cs
@@ -4,10 +4,10 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using System.Windows;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Threading;
-using System.Windows;
namespace Ink_Canvas.Helpers
{
diff --git a/Ink Canvas/Helpers/AutoUpdateHelper.cs b/Ink Canvas/Helpers/AutoUpdateHelper.cs
index fe21d61c..397a381b 100644
--- a/Ink Canvas/Helpers/AutoUpdateHelper.cs
+++ b/Ink Canvas/Helpers/AutoUpdateHelper.cs
@@ -1,5 +1,3 @@
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@@ -17,6 +15,8 @@ using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
namespace Ink_Canvas.Helpers
{
@@ -1361,16 +1361,14 @@ namespace Ink_Canvas.Helpers
if (oldProcessId > 0 && !string.IsNullOrEmpty(extractPath) && !string.IsNullOrEmpty(targetPath))
{
- LogHelper.WriteLogToFile($"AutoUpdate | 参数验证通过,启动更新任务");
+ LogHelper.WriteLogToFile("AutoUpdate | 参数验证通过,启动更新任务");
// 启动更新任务
Task.Run(async () => await PerformUpdate(oldProcessId, extractPath, targetPath, isSilence));
return true; // 返回true表示是更新模式
}
- else
- {
- LogHelper.WriteLogToFile($"AutoUpdate | 参数验证失败 - 老进程ID: {oldProcessId}, 解压路径: {extractPath}, 目标路径: {targetPath}", LogHelper.LogType.Error);
- return false;
- }
+
+ LogHelper.WriteLogToFile($"AutoUpdate | 参数验证失败 - 老进程ID: {oldProcessId}, 解压路径: {extractPath}, 目标路径: {targetPath}", LogHelper.LogType.Error);
+ return false;
}
return false; // 返回false表示不是更新模式
}
@@ -1483,7 +1481,7 @@ namespace Ink_Canvas.Helpers
}
// 删除ZIP文件
- string zipFile = Path.Combine(updatesFolderPath, $"InkCanvasForClass.CE.*.zip");
+ string zipFile = Path.Combine(updatesFolderPath, "InkCanvasForClass.CE.*.zip");
string[] zipFiles = Directory.GetFiles(updatesFolderPath, "InkCanvasForClass.CE.*.zip");
foreach (string zip in zipFiles)
{
diff --git a/Ink Canvas/Helpers/DeviceIdentifier.cs b/Ink Canvas/Helpers/DeviceIdentifier.cs
index 04736514..f67b5387 100644
--- a/Ink Canvas/Helpers/DeviceIdentifier.cs
+++ b/Ink Canvas/Helpers/DeviceIdentifier.cs
@@ -1,4 +1,3 @@
-using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
@@ -6,7 +5,7 @@ using System.Linq;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;
-using System.Threading;
+using Newtonsoft.Json;
namespace Ink_Canvas.Helpers
{
@@ -350,14 +349,7 @@ namespace Ink_Canvas.Helpers
[JsonProperty("averageSessionSeconds")]
public double AverageSessionSeconds { get; set; }
- // 保留旧字段以保持向后兼容性(已弃用)
- [JsonProperty("totalUsageMinutes")]
- [Obsolete("已弃用,请使用 TotalUsageSeconds")]
- public long TotalUsageMinutes { get; set; }
- [JsonProperty("averageSessionMinutes")]
- [Obsolete("已弃用,请使用 AverageSessionSeconds")]
- public double AverageSessionMinutes { get; set; }
[JsonProperty("lastUpdateCheck")]
public DateTime LastUpdateCheck { get; set; }
@@ -387,53 +379,6 @@ namespace Ink_Canvas.Helpers
[JsonProperty("lastWeekUsageSeconds")]
public long LastWeekUsageSeconds { get; set; }
- // 保留旧字段以保持向后兼容性(已弃用)
- [JsonProperty("weeklyUsageMinutes")]
- [Obsolete("已弃用,请使用 WeeklyUsageSeconds")]
- public long WeeklyUsageMinutes { get; set; }
-
- [JsonProperty("lastWeekUsageMinutes")]
- [Obsolete("已弃用,请使用 LastWeekUsageSeconds")]
- public long LastWeekUsageMinutes { get; set; }
-
- ///
- /// 数据迁移:从分钟精度迁移到秒级精度
- ///
- public void MigrateToSecondsPrecision()
- {
- try
- {
- // 如果新字段为空但旧字段有数据,进行迁移
- if (TotalUsageSeconds == 0 && TotalUsageSeconds > 0)
- {
- TotalUsageSeconds = TotalUsageSeconds * 60;
- LogHelper.WriteLogToFile($"DeviceIdentifier | 迁移总使用时长: {TotalUsageSeconds}分钟 -> {TotalUsageSeconds}秒");
- }
-
- if (AverageSessionSeconds == 0 && AverageSessionSeconds > 0)
- {
- AverageSessionSeconds = AverageSessionSeconds * 60;
- LogHelper.WriteLogToFile($"DeviceIdentifier | 迁移平均会话时长: {AverageSessionSeconds}分钟 -> {AverageSessionSeconds}秒");
- }
-
- if (WeeklyUsageSeconds == 0 && WeeklyUsageSeconds > 0)
- {
- WeeklyUsageSeconds = WeeklyUsageSeconds * 60;
- LogHelper.WriteLogToFile($"DeviceIdentifier | 迁移每周使用时长: {WeeklyUsageSeconds}分钟 -> {WeeklyUsageSeconds}秒");
- }
-
- if (LastWeekUsageSeconds == 0 && LastWeekUsageSeconds > 0)
- {
- LastWeekUsageSeconds = LastWeekUsageSeconds * 60;
- LogHelper.WriteLogToFile($"DeviceIdentifier | 迁移上周使用时长: {LastWeekUsageSeconds}分钟 -> {LastWeekUsageSeconds}秒");
- }
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"DeviceIdentifier | 数据迁移失败: {ex.Message}", LogHelper.LogType.Error);
- }
- }
-
///
/// 检查并重置每周统计数据(秒级精度)
///
@@ -449,13 +394,9 @@ namespace Ink_Canvas.Helpers
LastWeekLaunchCount = WeeklyLaunchCount;
LastWeekUsageSeconds = WeeklyUsageSeconds;
- // 同时更新旧字段以保持兼容性
- LastWeekUsageSeconds = LastWeekUsageSeconds / 60;
-
// 重置本周数据
WeeklyLaunchCount = 0;
WeeklyUsageSeconds = 0;
- WeeklyUsageSeconds = 0;
WeekStartDate = currentWeekStart;
LogHelper.WriteLogToFile($"DeviceIdentifier | 每周统计重置 - 上周启动: {LastWeekLaunchCount}次, 上周使用: {FormatDuration(LastWeekUsageSeconds)}");
@@ -488,8 +429,6 @@ namespace Ink_Canvas.Helpers
{
CheckAndResetWeeklyStats();
WeeklyUsageSeconds += seconds;
- // 同时更新旧字段以保持兼容性
- WeeklyUsageSeconds = WeeklyUsageSeconds / 60;
}
}
@@ -587,9 +526,6 @@ namespace Ink_Canvas.Helpers
{
var stats = LoadUsageStats();
- // 执行数据迁移(如果需要)
- stats.MigrateToSecondsPrecision();
-
// 计算本次会话时长(秒级精度)
long sessionSeconds = 0;
if (stats.LastLaunchTime != DateTime.MinValue)
@@ -600,8 +536,7 @@ namespace Ink_Canvas.Helpers
// 更新秒级精度数据
stats.TotalUsageSeconds += sessionSeconds;
- // 同时更新旧字段以保持兼容性
- stats.TotalUsageSeconds = stats.TotalUsageSeconds / 60;
+
// 记录每周使用时长(秒级精度)
stats.RecordWeeklyUsage(sessionSeconds);
@@ -610,8 +545,7 @@ namespace Ink_Canvas.Helpers
if (stats.LaunchCount > 0)
{
stats.AverageSessionSeconds = (double)stats.TotalUsageSeconds / stats.LaunchCount;
- // 同时更新旧字段以保持兼容性
- stats.AverageSessionSeconds = stats.AverageSessionSeconds / 60;
+
}
}
@@ -649,21 +583,13 @@ namespace Ink_Canvas.Helpers
var currentWeekLaunches = stats.WeeklyLaunchCount;
var currentWeekSeconds = stats.WeeklyUsageSeconds;
- // 如果秒级数据为空但分钟数据存在,进行转换
- if (currentWeekSeconds == 0 && stats.WeeklyUsageSeconds > 0)
- {
- currentWeekSeconds = stats.WeeklyUsageSeconds * 60;
- }
+
// 如果本周数据不足,参考上周数据
var weeklyLaunches = currentWeekLaunches > 0 ? currentWeekLaunches : stats.LastWeekLaunchCount;
var weeklySeconds = currentWeekSeconds > 0 ? currentWeekSeconds : stats.LastWeekUsageSeconds;
- // 如果秒级数据仍为空,使用分钟数据转换
- if (weeklySeconds == 0 && stats.LastWeekUsageSeconds > 0)
- {
- weeklySeconds = stats.LastWeekUsageSeconds * 60;
- }
+
// 综合评分系统(0-100分)
var frequencyScore = CalculateFrequencyScoreWithWeeklyData(stats, daysSinceLastUse, weeklyLaunches, weeklySeconds);
@@ -731,7 +657,7 @@ namespace Ink_Canvas.Helpers
else if (weeklySeconds >= 3600) score += 5; // 1-2小时:轻度使用
// 历史使用深度评分(10分)- 反映用户的长期使用习惯(秒级精度)
- var totalSeconds = stats.TotalUsageSeconds > 0 ? stats.TotalUsageSeconds : stats.TotalUsageSeconds * 60;
+ var totalSeconds = stats.TotalUsageSeconds;
if (totalSeconds >= 180000) score += 10; // 50小时以上:资深用户
else if (totalSeconds >= 72000) score += 7; // 20-50小时:中等用户
else if (totalSeconds >= 18000) score += 4; // 5-20小时:新手用户
@@ -792,25 +718,7 @@ namespace Ink_Canvas.Helpers
}
}
- ///
- /// 获取使用统计信息(兼容性方法 - 分钟精度)
- ///
- [Obsolete("请使用 GetUsageStats() 获取秒级精度数据")]
- public static (int launchCount, long totalMinutes, double avgSessionMinutes, UpdatePriority priority) GetUsageStatsInMinutes()
- {
- try
- {
- var stats = LoadUsageStats();
- var totalMinutes = stats.TotalUsageSeconds / 60;
- var avgMinutes = stats.AverageSessionSeconds / 60;
- return (stats.LaunchCount, totalMinutes, avgMinutes, stats.UpdatePriority);
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"DeviceIdentifier | 获取使用统计失败: {ex.Message}", LogHelper.LogType.Error);
- return (0, 0, 0, UpdatePriority.Medium);
- }
- }
+
///
/// 加载使用统计
@@ -823,26 +731,27 @@ namespace Ink_Canvas.Helpers
var stats = LoadUsageStatsFromFile(UsageStatsFilePath);
if (stats != null)
{
- // 执行数据迁移(如果需要)
- stats.MigrateToSecondsPrecision();
return stats;
}
- // 2. 尝试从备份文件加载
+ // 2. 主文件无法读取,尝试从备份文件恢复
+ LogHelper.WriteLogToFile("DeviceIdentifier | 主文件无法读取,尝试从备份文件恢复");
+ if (RestoreUsageStatsFromBackup())
+ {
+ // 恢复成功后重新尝试加载主文件
+ stats = LoadUsageStatsFromFile(UsageStatsFilePath);
+ if (stats != null)
+ {
+ LogHelper.WriteLogToFile("DeviceIdentifier | 从备份文件成功恢复主文件");
+ return stats;
+ }
+ }
+
+ // 3. 如果备份恢复也失败,尝试直接加载备份文件
stats = LoadUsageStatsFromFile(UsageStatsBackupPath);
if (stats != null)
{
- LogHelper.WriteLogToFile("DeviceIdentifier | 从备份文件恢复使用统计");
- stats.MigrateToSecondsPrecision();
- // 尝试恢复主文件
- try
- {
- SaveUsageStatsToFile(UsageStatsFilePath, stats);
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"DeviceIdentifier | 恢复主文件失败: {ex.Message}", LogHelper.LogType.Warning);
- }
+ LogHelper.WriteLogToFile("DeviceIdentifier | 直接使用备份文件数据");
return stats;
}
@@ -854,8 +763,8 @@ namespace Ink_Canvas.Helpers
DeviceId = DeviceId,
LastLaunchTime = DateTime.Now,
LaunchCount = 0,
- TotalUsageSeconds = 0, // 保持兼容性
- AverageSessionSeconds = 0, // 保持兼容性
+ TotalUsageSeconds = 0,
+ AverageSessionSeconds = 0,
LastUpdateCheck = DateTime.MinValue,
UpdatePriority = UpdatePriority.Medium,
UsageFrequency = UsageFrequency.Medium
@@ -914,21 +823,7 @@ namespace Ink_Canvas.Helpers
return stats;
}
- // 如果解密失败,尝试作为普通JSON文件读取(向后兼容)
- try
- {
- string json = File.ReadAllText(filePath);
- var plainStats = JsonConvert.DeserializeObject(json);
- if (plainStats != null && !string.IsNullOrEmpty(plainStats.DeviceId))
- {
- LogHelper.WriteLogToFile($"DeviceIdentifier | 从普通JSON文件加载使用统计: {filePath}");
- return plainStats;
- }
- }
- catch
- {
- // 忽略JSON解析错误
- }
+
}
}
catch (Exception ex)
@@ -998,7 +893,7 @@ namespace Ink_Canvas.Helpers
return null;
}
- ///
+ ///
/// 保存使用统计到文件(加密)
///
private static void SaveUsageStatsToFile(string filePath, UsageStats stats)
@@ -1063,45 +958,7 @@ namespace Ink_Canvas.Helpers
LogHelper.WriteLogToFile($"DeviceIdentifier | 记录更新检查失败: {ex.Message}", LogHelper.LogType.Error);
}
}
-
- ///
- /// 验证使用统计数据的完整性
- ///
- public static bool ValidateUsageStatsIntegrity()
- {
- try
- {
- // 检查主文件
- if (File.Exists(UsageStatsFilePath))
- {
- var mainStats = LoadUsageStatsFromFile(UsageStatsFilePath);
- if (mainStats != null && mainStats.DeviceId == DeviceId)
- {
- LogHelper.WriteLogToFile("DeviceIdentifier | 主文件数据完整性验证通过");
- return true;
- }
- }
-
- // 检查备份文件
- if (File.Exists(UsageStatsBackupPath))
- {
- var backupStats = LoadUsageStatsFromFile(UsageStatsBackupPath);
- if (backupStats != null && backupStats.DeviceId == DeviceId)
- {
- LogHelper.WriteLogToFile("DeviceIdentifier | 备份文件数据完整性验证通过");
- return true;
- }
- }
-
- LogHelper.WriteLogToFile("DeviceIdentifier | 数据完整性验证失败", LogHelper.LogType.Warning);
- return false;
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"DeviceIdentifier | 数据完整性验证失败: {ex.Message}", LogHelper.LogType.Error);
- return false;
- }
- }
+
///
/// 从备份文件恢复使用统计数据
@@ -1430,26 +1287,6 @@ namespace Ink_Canvas.Helpers
}
}
- ///
- /// 检查是否应该进行版本修复(不受分级策略影响)
- ///
- /// 当前版本
- /// 可用版本
- /// 是否需要版本修复
- public static bool ShouldPerformVersionFix(string currentVersion, string availableVersion)
- {
- try
- {
- // 版本修复功能不受使用频率分级策略影响,始终允许
- LogHelper.WriteLogToFile($"DeviceIdentifier | 版本修复检查 - 当前版本: {currentVersion}, 可用版本: {availableVersion}, 结果: 允许");
- return true;
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"DeviceIdentifier | 版本修复检查失败: {ex.Message}", LogHelper.LogType.Error);
- return true; // 出错时默认允许
- }
- }
///
@@ -1502,9 +1339,7 @@ namespace Ink_Canvas.Helpers
return descriptions.Count > 0 ? string.Join(", ", descriptions) : "普通用户";
}
-
-
-
+
///
/// 关机时保存使用时间数据
///
@@ -1512,14 +1347,14 @@ namespace Ink_Canvas.Helpers
{
try
{
- LogHelper.WriteLogToFile("DeviceIdentifier | 开始关机时保存使用时间数据", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("DeviceIdentifier | 开始关机时保存使用时间数据");
// 1. 加载现有使用统计数据
var stats = LoadUsageStats();
if (stats == null)
{
stats = new UsageStats { DeviceId = DeviceId };
- LogHelper.WriteLogToFile("DeviceIdentifier | 创建新的使用统计数据", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("DeviceIdentifier | 创建新的使用统计数据");
}
// 2. 计算本次会话时长(防止异常值)
@@ -1542,7 +1377,7 @@ namespace Ink_Canvas.Helpers
// 4. 保存数据
SaveUsageStats(stats);
- LogHelper.WriteLogToFile("DeviceIdentifier | 关机保存完成", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("DeviceIdentifier | 关机保存完成");
}
catch (Exception ex)
{
diff --git a/Ink Canvas/Helpers/GlobalHotkeyManager.cs b/Ink Canvas/Helpers/GlobalHotkeyManager.cs
index dd90ddf7..b1f1eefe 100644
--- a/Ink Canvas/Helpers/GlobalHotkeyManager.cs
+++ b/Ink Canvas/Helpers/GlobalHotkeyManager.cs
@@ -1,8 +1,9 @@
using System;
using System.Collections.Generic;
-using System.Windows.Input;
using System.IO;
using System.Reflection;
+using System.Text;
+using System.Windows.Input;
using Newtonsoft.Json;
using NHotkey.Wpf;
@@ -16,7 +17,7 @@ namespace Ink_Canvas.Helpers
#region Private Fields
private readonly Dictionary _registeredHotkeys;
private readonly MainWindow _mainWindow;
- private bool _isDisposed = false;
+ private bool _isDisposed;
private bool _hotkeysShouldBeRegistered = true; // 启动时注册热键
// 配置文件路径
@@ -175,12 +176,12 @@ namespace Ink_Canvas.Helpers
{
if (!File.Exists(HotkeyConfigFile))
{
- LogHelper.WriteLogToFile("快捷键配置文件不存在", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("快捷键配置文件不存在");
return new List();
}
// 读取配置文件内容
- string jsonContent = File.ReadAllText(HotkeyConfigFile, System.Text.Encoding.UTF8);
+ string jsonContent = File.ReadAllText(HotkeyConfigFile, Encoding.UTF8);
if (string.IsNullOrEmpty(jsonContent))
{
LogHelper.WriteLogToFile("快捷键配置文件为空", LogHelper.LogType.Warning);
@@ -208,7 +209,7 @@ namespace Ink_Canvas.Helpers
});
}
- LogHelper.WriteLogToFile($"从配置文件读取到 {hotkeyList.Count} 个快捷键信息", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"从配置文件读取到 {hotkeyList.Count} 个快捷键信息");
return hotkeyList;
}
catch (Exception ex)
@@ -284,14 +285,14 @@ namespace Ink_Canvas.Helpers
{
// 成功从配置文件加载快捷键设置
_hotkeysShouldBeRegistered = true;
- LogHelper.WriteLogToFile("成功从配置文件加载快捷键设置", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("成功从配置文件加载快捷键设置");
}
else
{
// 如果配置文件不存在或加载失败,使用默认快捷键
if (!File.Exists(HotkeyConfigFile))
{
- LogHelper.WriteLogToFile("配置文件不存在,注册默认快捷键", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("配置文件不存在,注册默认快捷键");
RegisterDefaultHotkeys();
_hotkeysShouldBeRegistered = true;
}
@@ -345,14 +346,14 @@ namespace Ink_Canvas.Helpers
if (!_hotkeysShouldBeRegistered)
{
_hotkeysShouldBeRegistered = true;
- LogHelper.WriteLogToFile("启用快捷键注册功能", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("启用快捷键注册功能");
// 立即加载快捷键设置
LoadHotkeysFromSettings();
}
else
{
- LogHelper.WriteLogToFile("快捷键注册功能已经启用,重新加载快捷键设置", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("快捷键注册功能已经启用,重新加载快捷键设置");
// 即使已经启用,也要重新加载快捷键设置以确保快捷键正常工作
LoadHotkeysFromSettings();
}
@@ -374,14 +375,14 @@ namespace Ink_Canvas.Helpers
if (_hotkeysShouldBeRegistered)
{
_hotkeysShouldBeRegistered = false;
- LogHelper.WriteLogToFile("禁用快捷键注册功能", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("禁用快捷键注册功能");
// 注销所有快捷键
UnregisterAllHotkeys();
}
else
{
- LogHelper.WriteLogToFile("快捷键注册功能已经禁用", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("快捷键注册功能已经禁用");
}
}
catch (Exception ex)
@@ -403,13 +404,13 @@ namespace Ink_Canvas.Helpers
{
// 鼠标模式下禁用快捷键,让键盘操作放行
DisableHotkeyRegistration();
- LogHelper.WriteLogToFile("切换到鼠标模式,禁用快捷键以放行键盘操作", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("切换到鼠标模式,禁用快捷键以放行键盘操作");
}
else
{
// 非鼠标模式下启用快捷键
EnableHotkeyRegistration();
- LogHelper.WriteLogToFile("切换到非鼠标模式,启用快捷键", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("切换到非鼠标模式,启用快捷键");
}
}
catch (Exception ex)
@@ -509,7 +510,7 @@ namespace Ink_Canvas.Helpers
}
// 读取配置文件内容
- string jsonContent = File.ReadAllText(HotkeyConfigFile, System.Text.Encoding.UTF8);
+ string jsonContent = File.ReadAllText(HotkeyConfigFile, Encoding.UTF8);
if (string.IsNullOrEmpty(jsonContent))
{
LogHelper.WriteLogToFile("快捷键配置文件为空", LogHelper.LogType.Warning);
@@ -607,7 +608,7 @@ namespace Ink_Canvas.Helpers
string jsonContent = JsonConvert.SerializeObject(config, settings);
// 直接写入原文件,覆盖原有内容
- File.WriteAllText(HotkeyConfigFile, jsonContent, System.Text.Encoding.UTF8);
+ File.WriteAllText(HotkeyConfigFile, jsonContent, Encoding.UTF8);
LogHelper.WriteLogToFile($"快捷键配置已保存到: {HotkeyConfigFile}", LogHelper.LogType.Event);
return true;
@@ -714,33 +715,29 @@ namespace Ink_Canvas.Helpers
var getLeftMethod = canvasType.GetMethod("GetLeft", BindingFlags.Public | BindingFlags.Static);
if (getLeftMethod != null)
{
- var leftPosition = getLeftMethod.Invoke(null, new object[] { floatingbarSelectionBG });
+ var leftPosition = getLeftMethod.Invoke(null, new[] { floatingbarSelectionBG });
if (leftPosition != null)
{
var position = Convert.ToDouble(leftPosition);
// 根据高光位置判断当前选中的工具
// 位置计算基于SetFloatingBarHighlightPosition方法中的逻辑
- bool isMouseMode = false;
- string currentTool = "unknown";
-
+ bool isMouseMode;
+
// 简化判断:如果位置接近0,说明是鼠标模式
// 如果位置接近28,说明是批注模式
// 如果位置更大,说明是其他工具
if (position < 5) // 鼠标模式:marginOffset + (cursorWidth - actualHighlightWidth) / 2 ≈ 0
{
isMouseMode = true;
- currentTool = "鼠标";
}
else if (position < 35) // 批注模式:marginOffset + cursorWidth + (penWidth - actualHighlightWidth) / 2 ≈ 28
{
isMouseMode = false;
- currentTool = "批注";
}
else // 其他工具(橡皮擦、选择等)
{
isMouseMode = false;
- currentTool = "其他工具";
}
return isMouseMode;
diff --git a/Ink Canvas/Helpers/HardwareAcceleratedInkProcessor.cs b/Ink Canvas/Helpers/HardwareAcceleratedInkProcessor.cs
index 1ca4689f..5342b8f6 100644
--- a/Ink Canvas/Helpers/HardwareAcceleratedInkProcessor.cs
+++ b/Ink Canvas/Helpers/HardwareAcceleratedInkProcessor.cs
@@ -16,7 +16,6 @@ namespace Ink_Canvas.Helpers
{
private readonly RenderTargetBitmap _renderTarget;
private readonly DrawingVisual _drawingVisual;
- private readonly DrawingContext _drawingContext;
private bool _isInitialized;
public HardwareAcceleratedInkProcessor(int width = 1920, int height = 1080)
@@ -191,7 +190,6 @@ namespace Ink_Canvas.Helpers
///
public void Dispose()
{
- _drawingContext?.Close();
_renderTarget?.Clear();
_isInitialized = false;
}
diff --git a/Ink Canvas/Helpers/InkFadeManager.cs b/Ink Canvas/Helpers/InkFadeManager.cs
index febc4662..6f8188f8 100644
--- a/Ink Canvas/Helpers/InkFadeManager.cs
+++ b/Ink Canvas/Helpers/InkFadeManager.cs
@@ -1,13 +1,13 @@
using System;
using System.Collections.Generic;
using System.Windows;
-using System.Windows.Media.Animation;
-using System.Windows.Threading;
-using System.Windows.Ink;
using System.Windows.Controls;
+using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
+using System.Windows.Media.Animation;
using System.Windows.Shapes;
+using System.Windows.Threading;
namespace Ink_Canvas.Helpers
{
@@ -20,7 +20,7 @@ namespace Ink_Canvas.Helpers
///
/// 是否启用墨迹渐隐功能
///
- public bool IsEnabled { get; set; } = false;
+ public bool IsEnabled { get; set; }
///
/// 墨迹渐隐时间(毫秒)
@@ -258,7 +258,7 @@ namespace Ink_Canvas.Helpers
public void Enable()
{
IsEnabled = true;
- LogHelper.WriteLogToFile("墨迹渐隐功能已启用", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("墨迹渐隐功能已启用");
}
///
@@ -267,7 +267,7 @@ namespace Ink_Canvas.Helpers
public void Disable()
{
IsEnabled = false;
- LogHelper.WriteLogToFile("墨迹渐隐功能已禁用", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("墨迹渐隐功能已禁用");
}
#endregion
diff --git a/Ink Canvas/Helpers/InkSmoothingConfig.cs b/Ink Canvas/Helpers/InkSmoothingConfig.cs
index e57aad38..83533f0e 100644
--- a/Ink Canvas/Helpers/InkSmoothingConfig.cs
+++ b/Ink Canvas/Helpers/InkSmoothingConfig.cs
@@ -1,5 +1,5 @@
using System;
-using System.Configuration;
+using System.Diagnostics;
namespace Ink_Canvas.Helpers
{
@@ -64,7 +64,7 @@ namespace Ink_Canvas.Helpers
}
catch (Exception ex)
{
- System.Diagnostics.Debug.WriteLine($"加载平滑配置失败: {ex.Message}");
+ Debug.WriteLine($"加载平滑配置失败: {ex.Message}");
}
return config;
@@ -125,7 +125,7 @@ namespace Ink_Canvas.Helpers
}
catch (Exception ex)
{
- System.Diagnostics.Debug.WriteLine($"保存平滑配置失败: {ex.Message}");
+ Debug.WriteLine($"保存平滑配置失败: {ex.Message}");
}
}
diff --git a/Ink Canvas/Helpers/PPTInkManager.cs b/Ink Canvas/Helpers/PPTInkManager.cs
index f8c62ccb..fd43b18f 100644
--- a/Ink Canvas/Helpers/PPTInkManager.cs
+++ b/Ink Canvas/Helpers/PPTInkManager.cs
@@ -1,9 +1,9 @@
-using Microsoft.Office.Interop.PowerPoint;
-using System;
+using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Ink;
+using Microsoft.Office.Interop.PowerPoint;
namespace Ink_Canvas.Helpers
{
@@ -23,7 +23,7 @@ namespace Ink_Canvas.Helpers
private int _maxSlides = 100;
private string _currentPresentationId = "";
private readonly object _lockObject = new object();
- private bool _disposed = false;
+ private bool _disposed;
// 墨迹锁定机制,防止翻页时的墨迹冲突
private DateTime _inkLockUntil = DateTime.MinValue;
diff --git a/Ink Canvas/Helpers/PPTManager.cs b/Ink Canvas/Helpers/PPTManager.cs
index 76c3f4e9..fb57c16f 100644
--- a/Ink Canvas/Helpers/PPTManager.cs
+++ b/Ink Canvas/Helpers/PPTManager.cs
@@ -1,5 +1,4 @@
-using Microsoft.Office.Interop.PowerPoint;
-using System;
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
@@ -8,6 +7,7 @@ using System.Text;
using System.Threading;
using System.Timers;
using System.Windows.Threading;
+using Microsoft.Office.Interop.PowerPoint;
using Application = System.Windows.Application;
using Timer = System.Timers.Timer;
@@ -101,9 +101,9 @@ namespace Ink_Canvas.Helpers
private int _wpsProcessCheckCount;
private WpsWindowInfo _lastForegroundWpsWindow;
private DateTime _lastWindowCheckTime = DateTime.MinValue;
- private bool _lastSlideShowState = false;
+ private bool _lastSlideShowState;
private readonly object _lockObject = new object();
- private bool _disposed = false;
+ private bool _disposed;
#endregion
#region Constructor & Initialization
@@ -888,11 +888,9 @@ namespace Ink_Canvas.Helpers
LogHelper.WriteLogToFile("成功显示幻灯片导航(PowerPoint模式)", LogHelper.LogType.Event);
return true;
}
- else
- {
- LogHelper.WriteLogToFile("SlideNavigation对象为空,可能是WPS不支持此功能", LogHelper.LogType.Warning);
- return false;
- }
+
+ LogHelper.WriteLogToFile("SlideNavigation对象为空,可能是WPS不支持此功能", LogHelper.LogType.Warning);
+ return false;
}
catch (COMException comEx)
{
diff --git a/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncher/LauncherButton.cs b/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncher/LauncherButton.cs
index 54eb84bd..1e91a7de 100644
--- a/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncher/LauncherButton.cs
+++ b/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncher/LauncherButton.cs
@@ -1,9 +1,9 @@
-using iNKORE.UI.WPF.Modern.Controls;
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
+using iNKORE.UI.WPF.Modern.Controls;
namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
{
diff --git a/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncher/LauncherModels.cs b/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncher/LauncherModels.cs
index 9b6ac63b..2089ca6c 100644
--- a/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncher/LauncherModels.cs
+++ b/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncher/LauncherModels.cs
@@ -1,5 +1,3 @@
-using Microsoft.Win32;
-using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -10,6 +8,8 @@ using System.Windows;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
+using Microsoft.Win32;
+using Newtonsoft.Json;
namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
{
diff --git a/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncher/LauncherSettingsControl.xaml.cs b/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncher/LauncherSettingsControl.xaml.cs
index 6666f10d..4b6cda6c 100644
--- a/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncher/LauncherSettingsControl.xaml.cs
+++ b/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncher/LauncherSettingsControl.xaml.cs
@@ -1,10 +1,10 @@
-using Ink_Canvas.Windows;
-using Microsoft.Win32;
using System;
using System.ComponentModel;
using System.IO;
using System.Windows;
using System.Windows.Controls;
+using Ink_Canvas.Windows;
+using Microsoft.Win32;
namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
{
diff --git a/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncherPlugin.cs b/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncherPlugin.cs
index 555c7bf9..2c504bd0 100644
--- a/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncherPlugin.cs
+++ b/Ink Canvas/Helpers/Plugins/BuiltIn/SuperLauncherPlugin.cs
@@ -1,5 +1,3 @@
-using Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher;
-using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@@ -7,6 +5,8 @@ using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
+using Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher;
+using Newtonsoft.Json;
namespace Ink_Canvas.Helpers.Plugins.BuiltIn
{
diff --git a/Ink Canvas/Helpers/Plugins/PluginConfigurationManager.cs b/Ink Canvas/Helpers/Plugins/PluginConfigurationManager.cs
index dfa342b2..be1efddc 100644
--- a/Ink Canvas/Helpers/Plugins/PluginConfigurationManager.cs
+++ b/Ink Canvas/Helpers/Plugins/PluginConfigurationManager.cs
@@ -1,8 +1,8 @@
-using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
+using Newtonsoft.Json;
namespace Ink_Canvas.Helpers.Plugins
{
@@ -46,17 +46,15 @@ namespace Ink_Canvas.Helpers.Plugins
{
return typedValue;
}
- else
+
+ // 尝试类型转换
+ try
{
- // 尝试类型转换
- try
- {
- return (T)Convert.ChangeType(value, typeof(T));
- }
- catch
- {
- return defaultValue;
- }
+ return (T)Convert.ChangeType(value, typeof(T));
+ }
+ catch
+ {
+ return defaultValue;
}
}
}
diff --git a/Ink Canvas/Helpers/Plugins/PluginManager.cs b/Ink Canvas/Helpers/Plugins/PluginManager.cs
index 27b7742e..d1a6559f 100644
--- a/Ink Canvas/Helpers/Plugins/PluginManager.cs
+++ b/Ink Canvas/Helpers/Plugins/PluginManager.cs
@@ -1,5 +1,3 @@
-using Ink_Canvas.Windows;
-using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@@ -10,6 +8,8 @@ using System.Security.Cryptography;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
+using Ink_Canvas.Windows;
+using Newtonsoft.Json;
using Timer = System.Timers.Timer;
namespace Ink_Canvas.Helpers.Plugins
diff --git a/Ink Canvas/Helpers/Plugins/PluginServiceManager.cs b/Ink Canvas/Helpers/Plugins/PluginServiceManager.cs
index e3e2d3e5..fd1b1bf7 100644
--- a/Ink Canvas/Helpers/Plugins/PluginServiceManager.cs
+++ b/Ink Canvas/Helpers/Plugins/PluginServiceManager.cs
@@ -1,9 +1,9 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
-using System.Linq;
namespace Ink_Canvas.Helpers.Plugins
{
diff --git a/Ink Canvas/Helpers/SoftwareLauncher.cs b/Ink Canvas/Helpers/SoftwareLauncher.cs
index e3dc7188..5f2e405d 100644
--- a/Ink Canvas/Helpers/SoftwareLauncher.cs
+++ b/Ink Canvas/Helpers/SoftwareLauncher.cs
@@ -1,8 +1,8 @@
-using Microsoft.Win32;
-using System;
+using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
+using Microsoft.Win32;
namespace Ink_Canvas.Helpers
{
diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml
index c00ff977..00b1ac61 100644
--- a/Ink Canvas/MainWindow.xaml
+++ b/Ink Canvas/MainWindow.xaml
@@ -5159,7 +5159,7 @@
- Settings.Automation.MinimumAutomationStrokeNumber) SaveScreenShot(true);
if (CurrentWhiteboardIndex >= WhiteboardTotalCount)
{
- // 在最后一页时,点击“新页面”按钮直接新增一页
+ // 在最后一页时,点击"新页面"按钮直接新增一页
BtnWhiteBoardAdd_Click(sender, e);
return;
}
+ // 隐藏图片选择工具栏
+ if (currentSelectedElement != null)
+ {
+ // 保存当前编辑模式
+ var previousEditingMode = inkCanvas.EditingMode;
+ UnselectElement(currentSelectedElement);
+ // 恢复编辑模式
+ inkCanvas.EditingMode = previousEditingMode;
+ currentSelectedElement = null;
+ }
SaveStrokes();
@@ -251,6 +281,17 @@ namespace Ink_Canvas
if (Settings.Automation.IsAutoSaveStrokesAtClear &&
inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) SaveScreenShot(true);
+ // 隐藏图片选择工具栏
+ if (currentSelectedElement != null)
+ {
+ // 保存当前编辑模式
+ var previousEditingMode = inkCanvas.EditingMode;
+ UnselectElement(currentSelectedElement);
+ // 恢复编辑模式
+ inkCanvas.EditingMode = previousEditingMode;
+ currentSelectedElement = null;
+ }
+
SaveStrokes();
ClearStrokes(true);
@@ -279,6 +320,17 @@ namespace Ink_Canvas
private void BtnWhiteBoardDelete_Click(object sender, RoutedEventArgs e)
{
+ // 隐藏图片选择工具栏
+ if (currentSelectedElement != null)
+ {
+ // 保存当前编辑模式
+ var previousEditingMode = inkCanvas.EditingMode;
+ UnselectElement(currentSelectedElement);
+ // 恢复编辑模式
+ inkCanvas.EditingMode = previousEditingMode;
+ currentSelectedElement = null;
+ }
+
ClearStrokes(true);
if (CurrentWhiteboardIndex != WhiteboardTotalCount)
diff --git a/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs b/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs
index f94917af..6f956a9f 100644
--- a/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs
+++ b/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs
@@ -1,5 +1,4 @@
-using Ink_Canvas.Helpers;
-using System;
+using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
@@ -7,6 +6,7 @@ using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
+using Ink_Canvas.Helpers;
namespace Ink_Canvas
{
@@ -766,7 +766,7 @@ namespace Ink_Canvas
{
PenIcon_Click(null, null);
SymbolIconDelete_MouseUp(null, null);
- if (Settings.Canvas.ClearCanvasAndClearTimeMachine == false) timeMachine.ClearStrokeHistory();
+ if (!Settings.Canvas.ClearCanvasAndClearTimeMachine) timeMachine.ClearStrokeHistory();
// 根据设置决定是否清空图片
if (Settings.Canvas.ClearCanvasAlsoClearImages)
diff --git a/Ink Canvas/MainWindow_cs/MW_ClipboardHandler.cs b/Ink Canvas/MainWindow_cs/MW_ClipboardHandler.cs
index fc8eb43e..99053852 100644
--- a/Ink Canvas/MainWindow_cs/MW_ClipboardHandler.cs
+++ b/Ink Canvas/MainWindow_cs/MW_ClipboardHandler.cs
@@ -1,19 +1,26 @@
-using Ink_Canvas.Helpers;
-using System;
+using System;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Forms;
using System.Windows.Ink;
using System.Windows.Input;
+using System.Windows.Media;
using System.Windows.Media.Imaging;
-using System.Windows.Media;
+using System.Windows.Threading;
+using Ink_Canvas.Helpers;
+using Clipboard = System.Windows.Clipboard;
+using ContextMenu = System.Windows.Controls.ContextMenu;
+using Cursors = System.Windows.Input.Cursors;
+using MenuItem = System.Windows.Controls.MenuItem;
namespace Ink_Canvas
{
public partial class MainWindow : Window
{
- private bool isClipboardMonitoringEnabled = false;
- private BitmapSource lastClipboardImage = null;
+ private bool isClipboardMonitoringEnabled;
+ private BitmapSource lastClipboardImage;
// 初始化剪贴板监控
private void InitializeClipboardMonitoring()
@@ -92,7 +99,7 @@ namespace Ink_Canvas
// 显示菜单
contextMenu.IsOpen = true;
contextMenu.PlacementTarget = inkCanvas;
- contextMenu.Placement = System.Windows.Controls.Primitives.PlacementMode.MousePoint;
+ contextMenu.Placement = PlacementMode.MousePoint;
}
catch (Exception ex)
{
@@ -124,7 +131,7 @@ namespace Ink_Canvas
Source = clipboardImage,
Width = clipboardImage.PixelWidth,
Height = clipboardImage.PixelHeight,
- Stretch = System.Windows.Media.Stretch.Fill
+ Stretch = Stretch.Fill
};
// 生成唯一名称
@@ -141,19 +148,6 @@ namespace Ink_Canvas
element.RenderTransform = transformGroup;
}
- // 设置位置
- if (position.HasValue)
- {
- // 在指定位置居中显示
- InkCanvas.SetLeft(image, position.Value.X - image.Width / 2);
- InkCanvas.SetTop(image, position.Value.Y - image.Height / 2);
- }
- else
- {
- // 使用与文件选择相同的居中和缩放逻辑
- CenterAndScaleElement(image);
- }
-
// 设置图片属性,避免被InkCanvas选择系统处理
image.IsHitTestVisible = true;
image.Focusable = false;
@@ -163,31 +157,50 @@ namespace Ink_Canvas
{
// 清除当前选择,避免显示控制点
inkCanvas.Select(new StrokeCollection());
- // 设置编辑模式为Ink模式,这样可以保持图片的交互功能
+ // 设置编辑模式为非选择模式,这样可以保持图片的交互功能
// 同时通过图片的IsHitTestVisible和Focusable属性来避免InkCanvas选择系统的干扰
- inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
+ inkCanvas.EditingMode = InkCanvasEditingMode.None;
}
// 添加到画布
inkCanvas.Children.Add(image);
- // 绑定事件处理器
- if (image is FrameworkElement elementForEvents)
+ // 等待图片加载完成后再进行居中处理
+ image.Loaded += (sender, e) =>
{
- // 鼠标事件
- elementForEvents.MouseLeftButtonDown += Element_MouseLeftButtonDown;
- elementForEvents.MouseLeftButtonUp += Element_MouseLeftButtonUp;
- elementForEvents.MouseMove += Element_MouseMove;
- elementForEvents.MouseWheel += Element_MouseWheel;
+ // 确保在UI线程中执行
+ Dispatcher.BeginInvoke(new Action(() =>
+ {
+ // 先进行缩放居中处理
+ CenterAndScaleElement(image);
+
+ // 如果有指定位置,调整到指定位置
+ if (position.HasValue)
+ {
+ // 在指定位置居中显示
+ InkCanvas.SetLeft(image, position.Value.X - image.Width / 2);
+ InkCanvas.SetTop(image, position.Value.Y - image.Height / 2);
+ }
+
+ // 绑定事件处理器
+ if (image is FrameworkElement elementForEvents)
+ {
+ // 鼠标事件
+ elementForEvents.MouseLeftButtonDown += Element_MouseLeftButtonDown;
+ elementForEvents.MouseLeftButtonUp += Element_MouseLeftButtonUp;
+ elementForEvents.MouseMove += Element_MouseMove;
+ elementForEvents.MouseWheel += Element_MouseWheel;
- // 触摸事件
- elementForEvents.IsManipulationEnabled = true;
- elementForEvents.ManipulationDelta += Element_ManipulationDelta;
- elementForEvents.ManipulationCompleted += Element_ManipulationCompleted;
+ // 触摸事件
+ elementForEvents.IsManipulationEnabled = true;
+ elementForEvents.ManipulationDelta += Element_ManipulationDelta;
+ elementForEvents.ManipulationCompleted += Element_ManipulationCompleted;
- // 设置光标
- elementForEvents.Cursor = Cursors.Hand;
- }
+ // 设置光标
+ elementForEvents.Cursor = Cursors.Hand;
+ }
+ }), DispatcherPriority.Loaded);
+ };
// 提交到历史记录
timeMachine.CommitElementInsertHistory(image);
@@ -266,13 +279,13 @@ namespace Ink_Canvas
{
public static event Action ClipboardUpdate;
- private static System.Windows.Forms.Timer clipboardTimer;
+ private static Timer clipboardTimer;
private static string lastClipboardText = "";
- private static bool lastHadImage = false;
+ private static bool lastHadImage;
static ClipboardNotification()
{
- clipboardTimer = new System.Windows.Forms.Timer();
+ clipboardTimer = new Timer();
clipboardTimer.Interval = 500; // 每500ms检查一次
clipboardTimer.Tick += CheckClipboard;
clipboardTimer.Start();
diff --git a/Ink Canvas/MainWindow_cs/MW_Colors.cs b/Ink Canvas/MainWindow_cs/MW_Colors.cs
index 57ce6f80..c55e306c 100644
--- a/Ink Canvas/MainWindow_cs/MW_Colors.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Colors.cs
@@ -1,5 +1,4 @@
-using Ink_Canvas.Helpers;
-using System;
+using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows;
@@ -9,6 +8,7 @@ using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
+using Ink_Canvas.Helpers;
namespace Ink_Canvas
{
diff --git a/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs b/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs
index cbfb5a81..378dc86f 100644
--- a/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs
+++ b/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs
@@ -1,17 +1,17 @@
-using Microsoft.Win32;
-using System;
+using System;
+using System.Diagnostics;
using System.IO;
+using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
+using System.Windows.Ink;
+using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Threading;
using Ink_Canvas.Helpers;
-using System.Windows.Input;
-using System.Linq;
-using System.Collections.Generic;
-using System.Windows.Ink;
+using Microsoft.Win32;
namespace Ink_Canvas
{
@@ -19,9 +19,8 @@ namespace Ink_Canvas
{
// 当前选中的可操作元素
private FrameworkElement currentSelectedElement;
- private bool isDragging = false;
+ private bool isDragging;
private Point dragStartPoint;
- private bool isElementSelected = false;
#region Image
private async void BtnImageInsert_Click(object sender, RoutedEventArgs e)
@@ -65,7 +64,7 @@ namespace Ink_Canvas
BindElementEvents(image);
LogHelper.WriteLogToFile($"图片插入完成: {image.Name}");
- }), System.Windows.Threading.DispatcherPriority.Loaded);
+ }), DispatcherPriority.Loaded);
};
timeMachine.CommitElementInsertHistory(image);
@@ -110,12 +109,14 @@ namespace Ink_Canvas
{
if (sender is FrameworkElement element)
{
-
-
// 取消之前选中的元素
if (currentSelectedElement != null && currentSelectedElement != element)
{
+ // 保存当前编辑模式
+ var previousEditingMode = inkCanvas.EditingMode;
UnselectElement(currentSelectedElement);
+ // 恢复编辑模式
+ inkCanvas.EditingMode = previousEditingMode;
}
// 选中当前元素
@@ -175,6 +176,12 @@ namespace Ink_Canvas
// 使用滚轮缩放的核心机制
ApplyWheelScaleTransform(element, e);
+ // 如果是图片元素,更新工具栏位置
+ if (element is Image && BorderImageSelectionControl?.Visibility == Visibility.Visible)
+ {
+ UpdateImageSelectionToolbarPosition(element);
+ }
+
e.Handled = true;
}
}
@@ -257,7 +264,6 @@ namespace Ink_Canvas
private void SelectElement(FrameworkElement element)
{
currentSelectedElement = element;
- isElementSelected = true;
// 根据元素类型显示不同的选择工具栏
if (element is Image)
@@ -311,7 +317,6 @@ namespace Ink_Canvas
private void UnselectElement(FrameworkElement element)
{
// 去除选中效果
- isElementSelected = false;
// 隐藏所有选择工具栏
if (BorderImageSelectionControl != null)
@@ -330,11 +335,7 @@ namespace Ink_Canvas
GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed;
}
- // 恢复InkCanvas的编辑模式
- if (inkCanvas != null)
- {
- inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
- }
+
}
// 应用矩阵变换到元素
@@ -397,7 +398,7 @@ namespace Ink_Canvas
}
// 保存初始变换状态用于历史记录
- var initialTransform = transformGroup.Clone() as TransformGroup;
+ var initialTransform = transformGroup.Clone();
// 创建新的 TransformGroup 并添加 MatrixTransform
var newTransformGroup = new TransformGroup();
@@ -720,7 +721,7 @@ namespace Ink_Canvas
catch (Exception ex)
{
// 记录错误但不中断程序
- System.Diagnostics.Debug.WriteLine($"旋转图片时发生错误: {ex.Message}");
+ Debug.WriteLine($"旋转图片时发生错误: {ex.Message}");
}
}
@@ -741,26 +742,37 @@ namespace Ink_Canvas
Width = image.Width,
Height = image.Height,
Stretch = image.Stretch,
- RenderTransform = image.RenderTransform?.Clone() as Transform
+ RenderTransform = image.RenderTransform?.Clone()
};
// 设置位置,稍微偏移以避免重叠
InkCanvas.SetLeft(clonedImage, InkCanvas.GetLeft(image) + 20);
InkCanvas.SetTop(clonedImage, InkCanvas.GetTop(image) + 20);
+ // 设置图片属性,避免被InkCanvas选择系统处理
+ clonedImage.IsHitTestVisible = true;
+ clonedImage.Focusable = false;
+
+ // 初始化变换
+ InitializeElementTransform(clonedImage);
+
+ // 绑定事件
+ BindElementEvents(clonedImage);
+
// 添加到画布
inkCanvas.Children.Add(clonedImage);
// 提交到时间机器以支持撤销
timeMachine.CommitElementInsertHistory(clonedImage);
+
+ return clonedImage;
}
catch (Exception ex)
{
// 记录错误但不中断程序
- System.Diagnostics.Debug.WriteLine($"克隆图片时发生错误: {ex.Message}");
+ LogHelper.WriteLogToFile($"克隆图片时发生错误: {ex.Message}", LogHelper.LogType.Error);
+ return null;
}
-
- return null;
}
///
@@ -780,7 +792,7 @@ namespace Ink_Canvas
Width = image.Width,
Height = image.Height,
Stretch = image.Stretch,
- RenderTransform = image.RenderTransform?.Clone() as Transform
+ RenderTransform = image.RenderTransform?.Clone()
};
// 设置位置,稍微偏移以避免重叠
@@ -799,7 +811,7 @@ namespace Ink_Canvas
catch (Exception ex)
{
// 记录错误但不中断程序
- System.Diagnostics.Debug.WriteLine($"克隆图片到新页面时发生错误: {ex.Message}");
+ Debug.WriteLine($"克隆图片到新页面时发生错误: {ex.Message}");
}
}
@@ -852,7 +864,7 @@ namespace Ink_Canvas
catch (Exception ex)
{
// 记录错误但不中断程序
- System.Diagnostics.Debug.WriteLine($"缩放图片时发生错误: {ex.Message}");
+ Debug.WriteLine($"缩放图片时发生错误: {ex.Message}");
}
}
@@ -878,7 +890,7 @@ namespace Ink_Canvas
catch (Exception ex)
{
// 记录错误但不中断程序
- System.Diagnostics.Debug.WriteLine($"删除图片时发生错误: {ex.Message}");
+ Debug.WriteLine($"删除图片时发生错误: {ex.Message}");
}
}
@@ -897,7 +909,7 @@ namespace Ink_Canvas
Dispatcher.BeginInvoke(new Action(() =>
{
CenterAndScaleElement(element);
- }), System.Windows.Threading.DispatcherPriority.Loaded);
+ }), DispatcherPriority.Loaded);
};
return;
}
@@ -909,8 +921,8 @@ namespace Ink_Canvas
// 如果画布尺寸为0,使用窗口尺寸作为备选
if (canvasWidth <= 0 || canvasHeight <= 0)
{
- canvasWidth = this.ActualWidth;
- canvasHeight = this.ActualHeight;
+ canvasWidth = ActualWidth;
+ canvasHeight = ActualHeight;
}
// 如果仍然为0,使用屏幕尺寸
@@ -994,19 +1006,12 @@ namespace Ink_Canvas
{
if (BorderImageSelectionControl == null || element == null) return;
- // 获取元素在画布中的位置
- double elementLeft = InkCanvas.GetLeft(element);
- double elementTop = InkCanvas.GetTop(element);
- double elementWidth = element.ActualWidth;
- double elementHeight = element.ActualHeight;
-
- // 如果元素位置未设置,使用默认值
- if (double.IsNaN(elementLeft)) elementLeft = 0;
- if (double.IsNaN(elementTop)) elementTop = 0;
+ // 获取元素的实际边界(考虑变换)
+ Rect elementBounds = GetElementActualBounds(element);
// 计算工具栏位置(显示在图片下方)
- double toolbarLeft = elementLeft + (elementWidth / 2) - (BorderImageSelectionControl.ActualWidth / 2);
- double toolbarTop = elementTop + elementHeight + 10; // 图片下方10像素
+ double toolbarLeft = elementBounds.Left + (elementBounds.Width / 2) - (BorderImageSelectionControl.ActualWidth / 2);
+ double toolbarTop = elementBounds.Bottom + 10; // 图片下方10像素
// 确保工具栏不超出画布边界
double maxLeft = inkCanvas.ActualWidth - BorderImageSelectionControl.ActualWidth;
@@ -1024,6 +1029,53 @@ namespace Ink_Canvas
}
}
+ // 获取元素的实际边界(考虑变换)
+ private Rect GetElementActualBounds(FrameworkElement element)
+ {
+ try
+ {
+ var left = InkCanvas.GetLeft(element);
+ var top = InkCanvas.GetTop(element);
+
+ if (double.IsNaN(left)) left = 0;
+ if (double.IsNaN(top)) top = 0;
+
+ var width = element.ActualWidth > 0 ? element.ActualWidth : element.Width;
+ var height = element.ActualHeight > 0 ? element.ActualHeight : element.Height;
+
+ // 检查是否有RenderTransform
+ if (element.RenderTransform != null && element.RenderTransform != Transform.Identity)
+ {
+ try
+ {
+ // 如果有变换,使用变换后的边界
+ var transform = element.TransformToAncestor(inkCanvas);
+ var elementBounds = new Rect(0, 0, width, height);
+ var transformedBounds = transform.TransformBounds(elementBounds);
+ return transformedBounds;
+ }
+ catch
+ {
+ // 变换失败时回退到简单计算
+ return new Rect(left, top, width, height);
+ }
+ }
+
+ // 没有变换时直接使用位置和大小
+ return new Rect(left, top, width, height);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"获取元素实际边界失败: {ex.Message}", LogHelper.LogType.Error);
+ // 回退到基本计算
+ var left = InkCanvas.GetLeft(element);
+ var top = InkCanvas.GetTop(element);
+ if (double.IsNaN(left)) left = 0;
+ if (double.IsNaN(top)) top = 0;
+ return new Rect(left, top, element.ActualWidth, element.ActualHeight);
+ }
+ }
+
#region Image Selection Toolbar Event Handlers
// 图片克隆功能
@@ -1064,23 +1116,32 @@ namespace Ink_Canvas
{
if (currentSelectedElement is Image originalImage)
{
- // 创建克隆图片
- Image clonedImage = CloneImage(originalImage);
+ // 创建新页面
+ BtnWhiteBoardAdd_Click(null, null);
- // 这里可以添加切换到新页面的逻辑
- // 暂时先添加到当前页面
- inkCanvas.Children.Add(clonedImage);
+ // 创建克隆图片(不添加到当前画布,因为已经创建了新页面)
+ Image clonedImage = CreateClonedImage(originalImage);
- // 初始化变换
- InitializeElementTransform(clonedImage);
-
- // 绑定事件
- BindElementEvents(clonedImage);
-
- // 记录历史
- timeMachine.CommitElementInsertHistory(clonedImage);
-
- LogHelper.WriteLogToFile($"图片克隆到新页面完成: {clonedImage.Name}");
+ if (clonedImage != null)
+ {
+ // 设置图片属性,避免被InkCanvas选择系统处理
+ clonedImage.IsHitTestVisible = true;
+ clonedImage.Focusable = false;
+
+ // 初始化变换
+ InitializeElementTransform(clonedImage);
+
+ // 绑定事件
+ BindElementEvents(clonedImage);
+
+ // 添加到新页面的画布
+ inkCanvas.Children.Add(clonedImage);
+
+ // 记录历史
+ timeMachine.CommitElementInsertHistory(clonedImage);
+
+ LogHelper.WriteLogToFile($"图片克隆到新页面完成: {clonedImage.Name}");
+ }
}
}
catch (Exception ex)
@@ -1097,7 +1158,14 @@ namespace Ink_Canvas
if (currentSelectedElement != null)
{
ApplyRotateTransform(currentSelectedElement, -45);
- LogHelper.WriteLogToFile($"图片左旋转完成");
+
+ // 更新工具栏位置
+ if (currentSelectedElement is Image && BorderImageSelectionControl?.Visibility == Visibility.Visible)
+ {
+ UpdateImageSelectionToolbarPosition(currentSelectedElement);
+ }
+
+ LogHelper.WriteLogToFile("图片左旋转完成");
}
}
catch (Exception ex)
@@ -1114,7 +1182,14 @@ namespace Ink_Canvas
if (currentSelectedElement != null)
{
ApplyRotateTransform(currentSelectedElement, 45);
- LogHelper.WriteLogToFile($"图片右旋转完成");
+
+ // 更新工具栏位置
+ if (currentSelectedElement is Image && BorderImageSelectionControl?.Visibility == Visibility.Visible)
+ {
+ UpdateImageSelectionToolbarPosition(currentSelectedElement);
+ }
+
+ LogHelper.WriteLogToFile("图片右旋转完成");
}
}
catch (Exception ex)
@@ -1132,7 +1207,14 @@ namespace Ink_Canvas
{
var elementCenter = new Point(currentSelectedElement.ActualWidth / 2, currentSelectedElement.ActualHeight / 2);
ApplyScaleTransform(currentSelectedElement, 0.9, elementCenter);
- LogHelper.WriteLogToFile($"图片缩放减小完成");
+
+ // 更新工具栏位置
+ if (currentSelectedElement is Image && BorderImageSelectionControl?.Visibility == Visibility.Visible)
+ {
+ UpdateImageSelectionToolbarPosition(currentSelectedElement);
+ }
+
+ LogHelper.WriteLogToFile("图片缩放减小完成");
}
}
catch (Exception ex)
@@ -1147,17 +1229,24 @@ namespace Ink_Canvas
try
{
if (currentSelectedElement != null)
- {
- var elementCenter = new Point(currentSelectedElement.ActualWidth / 2, currentSelectedElement.ActualHeight / 2);
- ApplyScaleTransform(currentSelectedElement, 1.1, elementCenter);
- LogHelper.WriteLogToFile($"图片缩放增大完成");
- }
- }
- catch (Exception ex)
{
- LogHelper.WriteLogToFile($"图片缩放增大失败: {ex.Message}", LogHelper.LogType.Error);
+ var elementCenter = new Point(currentSelectedElement.ActualWidth / 2, currentSelectedElement.ActualHeight / 2);
+ ApplyScaleTransform(currentSelectedElement, 1.1, elementCenter);
+
+ // 更新工具栏位置
+ if (currentSelectedElement is Image && BorderImageSelectionControl?.Visibility == Visibility.Visible)
+ {
+ UpdateImageSelectionToolbarPosition(currentSelectedElement);
+ }
+
+ LogHelper.WriteLogToFile("图片缩放增大完成");
}
}
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"图片缩放增大失败: {ex.Message}", LogHelper.LogType.Error);
+ }
+ }
// 图片删除
private void BorderImageDelete_MouseUp(object sender, MouseButtonEventArgs e)
@@ -1166,6 +1255,9 @@ namespace Ink_Canvas
{
if (currentSelectedElement != null)
{
+ // 保存删除前的编辑模式
+ var previousEditingMode = inkCanvas.EditingMode;
+
// 记录删除历史
timeMachine.CommitElementRemoveHistory(currentSelectedElement);
@@ -1176,7 +1268,10 @@ namespace Ink_Canvas
UnselectElement(currentSelectedElement);
currentSelectedElement = null;
- LogHelper.WriteLogToFile($"图片删除完成");
+ // 恢复到删除前的编辑模式
+ inkCanvas.EditingMode = previousEditingMode;
+
+ LogHelper.WriteLogToFile($"图片删除完成,已恢复到编辑模式: {previousEditingMode}");
}
}
catch (Exception ex)
@@ -1185,7 +1280,7 @@ namespace Ink_Canvas
}
}
- // 克隆图片的辅助方法
+ // 克隆图片的辅助方法(只创建图片,不添加到画布)
private Image CreateClonedImage(Image originalImage)
{
try
@@ -1204,7 +1299,7 @@ namespace Ink_Canvas
clonedImage.Stretch = originalImage.Stretch;
clonedImage.StretchDirection = originalImage.StretchDirection;
- // 复制位置
+ // 复制位置(在新页面中居中显示)
double left = InkCanvas.GetLeft(originalImage);
double top = InkCanvas.GetTop(originalImage);
InkCanvas.SetLeft(clonedImage, left + 20); // 稍微偏移位置
diff --git a/Ink Canvas/MainWindow_cs/MW_Eraser.cs b/Ink Canvas/MainWindow_cs/MW_Eraser.cs
index d49cfe1a..4295d9ce 100644
--- a/Ink Canvas/MainWindow_cs/MW_Eraser.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Eraser.cs
@@ -1,5 +1,4 @@
-using Ink_Canvas.Helpers;
-using System;
+using System;
using System.Diagnostics;
using System.Linq;
using System.Windows;
@@ -7,6 +6,7 @@ using System.Windows.Controls;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
+using Ink_Canvas.Helpers;
namespace Ink_Canvas
{
diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
index ff1b66d6..35b1f2a5 100644
--- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
+++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
@@ -1,5 +1,3 @@
-using Ink_Canvas.Helpers;
-using iNKORE.UI.WPF.Modern;
using System;
using System.Diagnostics;
using System.Threading;
@@ -13,6 +11,8 @@ using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
+using Ink_Canvas.Helpers;
+using iNKORE.UI.WPF.Modern;
using Application = System.Windows.Application;
using Button = System.Windows.Controls.Button;
using Cursors = System.Windows.Input.Cursors;
@@ -641,6 +641,9 @@ namespace Ink_Canvas
ICCWaterMarkWhite.Visibility = Visibility.Visible;
ICCWaterMarkDark.Visibility = Visibility.Collapsed;
}
+
+ // 新增:确保在白板模式下基础浮动栏被隐藏
+ ViewboxFloatingBar.Visibility = Visibility.Collapsed;
}
else
{
@@ -651,10 +654,10 @@ namespace Ink_Canvas
{
var dops = Settings.PowerPointSettings.PPTButtonsDisplayOption.ToString();
var dopsc = dops.ToCharArray();
- if (dopsc[0] == '2' && isDisplayingOrHidingBlackboard == false) AnimationsHelper.ShowWithFadeIn(LeftBottomPanelForPPTNavigation);
- if (dopsc[1] == '2' && isDisplayingOrHidingBlackboard == false) AnimationsHelper.ShowWithFadeIn(RightBottomPanelForPPTNavigation);
- if (dopsc[2] == '2' && isDisplayingOrHidingBlackboard == false) AnimationsHelper.ShowWithFadeIn(LeftSidePanelForPPTNavigation);
- if (dopsc[3] == '2' && isDisplayingOrHidingBlackboard == false) AnimationsHelper.ShowWithFadeIn(RightSidePanelForPPTNavigation);
+ if (dopsc[0] == '2' && !isDisplayingOrHidingBlackboard) AnimationsHelper.ShowWithFadeIn(LeftBottomPanelForPPTNavigation);
+ if (dopsc[1] == '2' && !isDisplayingOrHidingBlackboard) AnimationsHelper.ShowWithFadeIn(RightBottomPanelForPPTNavigation);
+ if (dopsc[2] == '2' && !isDisplayingOrHidingBlackboard) AnimationsHelper.ShowWithFadeIn(LeftSidePanelForPPTNavigation);
+ if (dopsc[3] == '2' && !isDisplayingOrHidingBlackboard) AnimationsHelper.ShowWithFadeIn(RightSidePanelForPPTNavigation);
}
// 修复PPT放映时点击白板按钮后翻页按钮不显示的问题
if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
@@ -693,6 +696,9 @@ namespace Ink_Canvas
BlackBoardWaterMark.Visibility = Visibility.Collapsed;
ICCWaterMarkDark.Visibility = Visibility.Collapsed;
ICCWaterMarkWhite.Visibility = Visibility.Collapsed;
+
+ // 新增:退出白板模式时恢复基础浮动栏的显示
+ ViewboxFloatingBar.Visibility = Visibility.Visible;
}
BtnSwitch_Click(BtnSwitch, null);
@@ -1292,10 +1298,16 @@ namespace Ink_Canvas
public async void ViewboxFloatingBarMarginAnimation(int MarginFromEdge,
bool PosXCaculatedWithTaskbarHeight = false)
{
+ // 新增:在白板模式下不执行浮动栏动画
+ if (currentMode == 1)
+ {
+ return;
+ }
+
if (MarginFromEdge == 60) MarginFromEdge = 55;
await Dispatcher.InvokeAsync(() =>
{
- if (Topmost == false)
+ if (!Topmost)
MarginFromEdge = -60;
else
ViewboxFloatingBar.Visibility = Visibility.Visible;
@@ -1337,7 +1349,7 @@ namespace Ink_Canvas
pos.X = (screenWidth - floatingBarWidth) / 2;
- if (PosXCaculatedWithTaskbarHeight == false)
+ if (!PosXCaculatedWithTaskbarHeight)
{
// 如果任务栏高度为0(隐藏状态),则使用固定边距
if (toolbarHeight == 0)
@@ -1405,12 +1417,18 @@ namespace Ink_Canvas
await Dispatcher.InvokeAsync(() =>
{
ViewboxFloatingBar.Margin = new Thickness(pos.X, pos.Y, -2000, -200);
- if (Topmost == false) ViewboxFloatingBar.Visibility = Visibility.Hidden;
+ if (!Topmost) ViewboxFloatingBar.Visibility = Visibility.Hidden;
});
}
public async void PureViewboxFloatingBarMarginAnimationInDesktopMode()
{
+ // 新增:在白板模式下不执行浮动栏动画
+ if (currentMode == 1)
+ {
+ return;
+ }
+
await Dispatcher.InvokeAsync(() =>
{
ViewboxFloatingBar.Visibility = Visibility.Visible;
@@ -1487,6 +1505,12 @@ namespace Ink_Canvas
public async void PureViewboxFloatingBarMarginAnimationInPPTMode()
{
+ // 新增:在白板模式下不执行浮动栏动画
+ if (currentMode == 1)
+ {
+ return;
+ }
+
await Dispatcher.InvokeAsync(() =>
{
ViewboxFloatingBar.Visibility = Visibility.Visible;
@@ -2077,9 +2101,9 @@ namespace Ink_Canvas
{
highlighterColor = 100; // 黑色荧光笔
}
- else if (color == Colors.Yellow || IsColorSimilar(color, Color.FromRgb(234, 179, 8), 15) ||
- IsColorSimilar(color, Color.FromRgb(250, 204, 21), 15) ||
- IsColorSimilar(color, Color.FromRgb(253, 224, 71), 15))
+ else if (color == Colors.Yellow || IsColorSimilar(color, Color.FromRgb(234, 179, 8)) ||
+ IsColorSimilar(color, Color.FromRgb(250, 204, 21)) ||
+ IsColorSimilar(color, Color.FromRgb(253, 224, 71)))
{
highlighterColor = 103; // 黄色荧光笔
}
@@ -2094,12 +2118,12 @@ namespace Ink_Canvas
{
highlighterColor = 106; // 蓝色荧光笔
}
- else if (color == Colors.Red || IsColorSimilar(color, Color.FromRgb(220, 38, 38), 15) ||
- IsColorSimilar(color, Color.FromRgb(239, 68, 68), 15))
+ else if (color == Colors.Red || IsColorSimilar(color, Color.FromRgb(220, 38, 38)) ||
+ IsColorSimilar(color, Color.FromRgb(239, 68, 68)))
{
highlighterColor = 102; // 红色荧光笔
}
- else if (color == Colors.Green || IsColorSimilar(color, Color.FromRgb(22, 163, 74), 15))
+ else if (color == Colors.Green || IsColorSimilar(color, Color.FromRgb(22, 163, 74)))
{
highlighterColor = 104; // 绿色荧光笔
}
@@ -2560,6 +2584,9 @@ namespace Ink_Canvas
ClearStrokes(true);
RestoreStrokes(true);
+ // 新增:在屏幕模式下恢复基础浮动栏的显示
+ ViewboxFloatingBar.Visibility = Visibility.Visible;
+
if (BtnSwitchTheme.Content.ToString() == "浅色")
{
BtnSwitch.Content = "黑板";
@@ -2598,6 +2625,9 @@ namespace Ink_Canvas
// PPT墨迹和白板墨迹应该分别管理,不应该互相影响
RestoreStrokes();
+ // 新增:在白板模式下隐藏基础浮动栏
+ ViewboxFloatingBar.Visibility = Visibility.Collapsed;
+
BtnSwitch.Content = "屏幕";
if (BtnSwitchTheme.Content.ToString() == "浅色")
{
@@ -2737,11 +2767,23 @@ namespace Ink_Canvas
StackPanelCanvasControls.Visibility = Visibility.Collapsed;
CheckEnableTwoFingerGestureBtnVisibility(false);
HideSubPanels("cursor");
+
+ // 新增:在屏幕模式下显示基础浮动栏
+ if (currentMode == 0)
+ {
+ ViewboxFloatingBar.Visibility = Visibility.Visible;
+ }
}
else
{
AnimationsHelper.ShowWithSlideFromLeftAndFade(StackPanelCanvasControls);
CheckEnableTwoFingerGestureBtnVisibility(true);
+
+ // 新增:在批注模式下显示基础浮动栏
+ if (currentMode == 0)
+ {
+ ViewboxFloatingBar.Visibility = Visibility.Visible;
+ }
}
}
@@ -3096,19 +3138,16 @@ namespace Ink_Canvas
// 检查快捷调色盘是否显示及其实际宽度
bool isQuickColorPaletteVisible = false;
double quickColorPaletteWidth = 0;
- string quickColorPaletteMode = "none";
-
+
if (QuickColorPalettePanel != null && QuickColorPalettePanel.Visibility == Visibility.Visible)
{
isQuickColorPaletteVisible = true;
quickColorPaletteWidth = QuickColorPalettePanel.ActualWidth > 0 ? QuickColorPalettePanel.ActualWidth : 60;
- quickColorPaletteMode = "double";
}
else if (QuickColorPaletteSingleRowPanel != null && QuickColorPaletteSingleRowPanel.Visibility == Visibility.Visible)
{
isQuickColorPaletteVisible = true;
quickColorPaletteWidth = QuickColorPaletteSingleRowPanel.ActualWidth > 0 ? QuickColorPaletteSingleRowPanel.ActualWidth : 120;
- quickColorPaletteMode = "single";
}
// 获取实际按钮宽度,如果获取不到则使用默认值,同时考虑按钮的可见性
@@ -3227,26 +3266,27 @@ namespace Ink_Canvas
{
return "select";
}
- else if (inkCanvas.EditingMode == InkCanvasEditingMode.Ink)
+
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.Ink)
{
// 检查是否是荧光笔模式
if (drawingAttributes != null && drawingAttributes.IsHighlighter)
{
return "color";
}
- else
- {
- return "pen";
- }
+
+ return "pen";
}
- else if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
+
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
{
// 检查是面积擦还是线擦
if (Eraser_Icon != null && Eraser_Icon.Visibility == Visibility.Visible)
{
return "eraser";
}
- else if (EraserByStrokes_Icon != null && EraserByStrokes_Icon.Visibility == Visibility.Visible)
+
+ if (EraserByStrokes_Icon != null && EraserByStrokes_Icon.Visibility == Visibility.Visible)
{
return "eraserByStrokes";
}
diff --git a/Ink Canvas/MainWindow_cs/MW_ImageInsert.cs b/Ink Canvas/MainWindow_cs/MW_ImageInsert.cs
index 2ebc2189..9b1a6592 100644
--- a/Ink Canvas/MainWindow_cs/MW_ImageInsert.cs
+++ b/Ink Canvas/MainWindow_cs/MW_ImageInsert.cs
@@ -1,4 +1,3 @@
-using Ink_Canvas.Helpers;
using System;
using System.Collections.Generic;
using System.Drawing;
@@ -11,8 +10,14 @@ using System.Windows.Controls;
using System.Windows.Forms;
using System.Windows.Media;
using System.Windows.Media.Imaging;
+using System.Windows.Threading;
+using Ink_Canvas.Helpers;
using Application = System.Windows.Application;
+using Color = System.Drawing.Color;
+using Cursors = System.Windows.Input.Cursors;
+using Image = System.Windows.Controls.Image;
using PixelFormat = System.Drawing.Imaging.PixelFormat;
+using Point = System.Windows.Point;
using Size = System.Drawing.Size;
namespace Ink_Canvas
@@ -21,9 +26,9 @@ namespace Ink_Canvas
public struct ScreenshotResult
{
public Rectangle Area;
- public List Path;
+ public List Path;
- public ScreenshotResult(Rectangle area, List path = null)
+ public ScreenshotResult(Rectangle area, List path = null)
{
Area = area;
Path = path;
@@ -172,7 +177,7 @@ namespace Ink_Canvas
var bitmapSource = ConvertBitmapToBitmapSource(bitmap);
// 创建WPF Image控件
- var image = new System.Windows.Controls.Image
+ var image = new Image
{
Source = bitmapSource,
Stretch = Stretch.Uniform
@@ -202,7 +207,7 @@ namespace Ink_Canvas
CenterAndScaleScreenshot(image);
// 绑定事件处理器
BindScreenshotEvents(image);
- }), System.Windows.Threading.DispatcherPriority.Loaded);
+ }), DispatcherPriority.Loaded);
};
// 添加到画布
@@ -221,7 +226,7 @@ namespace Ink_Canvas
}
// 初始化截图的TransformGroup
- private void InitializeScreenshotTransform(System.Windows.Controls.Image image)
+ private void InitializeScreenshotTransform(Image image)
{
var transformGroup = new TransformGroup();
transformGroup.Children.Add(new ScaleTransform(1, 1));
@@ -231,7 +236,7 @@ namespace Ink_Canvas
}
// 绑定截图事件处理器
- private void BindScreenshotEvents(System.Windows.Controls.Image image)
+ private void BindScreenshotEvents(Image image)
{
// 鼠标事件
image.MouseLeftButtonDown += Element_MouseLeftButtonDown;
@@ -245,7 +250,7 @@ namespace Ink_Canvas
image.ManipulationCompleted += Element_ManipulationCompleted;
// 设置光标
- image.Cursor = System.Windows.Input.Cursors.Hand;
+ image.Cursor = Cursors.Hand;
// 禁用InkCanvas对截图的选择处理
image.IsHitTestVisible = true;
@@ -253,7 +258,7 @@ namespace Ink_Canvas
}
// 专门为截图优化的居中缩放方法
- private void CenterAndScaleScreenshot(System.Windows.Controls.Image image)
+ private void CenterAndScaleScreenshot(Image image)
{
try
{
@@ -270,8 +275,8 @@ namespace Ink_Canvas
// 如果画布尺寸为0,使用窗口尺寸作为备选
if (canvasWidth <= 0 || canvasHeight <= 0)
{
- canvasWidth = this.ActualWidth;
- canvasHeight = this.ActualHeight;
+ canvasWidth = ActualWidth;
+ canvasHeight = ActualHeight;
}
// 如果仍然为0,使用屏幕尺寸
@@ -320,8 +325,12 @@ namespace Ink_Canvas
InkCanvas.SetLeft(image, centerX);
InkCanvas.SetTop(image, centerY);
- // 清除任何现有的RenderTransform
- image.RenderTransform = Transform.Identity;
+ // 这样可以保持滚轮缩放和拖动功能
+ if (image.RenderTransform == null || image.RenderTransform == Transform.Identity)
+ {
+ // 只有在没有TransformGroup时才创建
+ InitializeScreenshotTransform(image);
+ }
LogHelper.WriteLogToFile($"截图居中完成: 位置({centerX}, {centerY}), 尺寸({newWidth}x{newHeight})");
}
@@ -334,7 +343,7 @@ namespace Ink_Canvas
}
// 应用形状遮罩到截图
- private Bitmap ApplyShapeMask(Bitmap bitmap, List path, Rectangle area)
+ private Bitmap ApplyShapeMask(Bitmap bitmap, List path, Rectangle area)
{
try
{
@@ -356,7 +365,7 @@ namespace Ink_Canvas
using (var resultGraphics = Graphics.FromImage(resultBitmap))
{
// 清除位图,设置为完全透明
- resultGraphics.Clear(System.Drawing.Color.Transparent);
+ resultGraphics.Clear(Color.Transparent);
// 设置高质量渲染
resultGraphics.SmoothingMode = SmoothingMode.AntiAlias;
diff --git a/Ink Canvas/MainWindow_cs/MW_Notification.cs b/Ink Canvas/MainWindow_cs/MW_Notification.cs
index e1e69945..c473b859 100644
--- a/Ink Canvas/MainWindow_cs/MW_Notification.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Notification.cs
@@ -1,8 +1,8 @@
-using Ink_Canvas.Helpers;
-using System;
+using System;
using System.Linq;
using System.Threading;
using System.Windows;
+using Ink_Canvas.Helpers;
namespace Ink_Canvas
{
diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs
index f3c05cab..065def08 100644
--- a/Ink Canvas/MainWindow_cs/MW_PPT.cs
+++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs
@@ -1,8 +1,4 @@
-using Ink_Canvas.Helpers;
-using iNKORE.UI.WPF.Modern;
-using Microsoft.Office.Core;
-using Microsoft.Office.Interop.PowerPoint;
-using System;
+using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
@@ -12,6 +8,10 @@ using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Threading;
+using Ink_Canvas.Helpers;
+using iNKORE.UI.WPF.Modern;
+using Microsoft.Office.Core;
+using Microsoft.Office.Interop.PowerPoint;
using Application = System.Windows.Application;
using File = System.IO.File;
using MessageBox = System.Windows.MessageBox;
@@ -76,15 +76,11 @@ namespace Ink_Canvas
#region PPT State Management
private bool wasFloatingBarFoldedWhenEnterSlideShow;
- private static bool hasShownWpsForceCloseWarning = false;
private bool isEnteredSlideShowEndEvent; //防止重复调用本函数导致墨迹保存失效
private bool isPresentationHaveBlackSpace;
- private string pptName;
- private bool _isPptClickingBtnTurned;
// 长按翻页相关字段
private DispatcherTimer _longPressTimer;
- private bool _isLongPressActive = false;
private bool _isLongPressNext = true; // true为下一页,false为上一页
private const int LongPressDelay = 15; // 长按延迟时间(毫秒)
private const int LongPressInterval = 15; // 长按翻页间隔(毫秒)
@@ -202,7 +198,6 @@ namespace Ink_Canvas
if (!Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn) return;
_isLongPressNext = isNext;
- _isLongPressActive = false;
_longPressTimer?.Start();
}
@@ -212,7 +207,6 @@ namespace Ink_Canvas
private void StopLongPressDetection()
{
_longPressTimer?.Stop();
- _isLongPressActive = false;
}
///
@@ -222,7 +216,6 @@ namespace Ink_Canvas
{
if (!Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn) return;
- _isLongPressActive = true;
_longPressTimer.Interval = TimeSpan.FromMilliseconds(LongPressInterval);
// 执行翻页
@@ -846,8 +839,6 @@ namespace Ink_Canvas
{
try
{
- _isPptClickingBtnTurned = true;
-
// 保存当前页墨迹
var currentSlide = _pptManager?.GetCurrentSlideNumber() ?? 0;
if (currentSlide > 0)
@@ -889,8 +880,6 @@ namespace Ink_Canvas
{
try
{
- _isPptClickingBtnTurned = true;
-
// 保存当前页墨迹
var currentSlide = _pptManager?.GetCurrentSlideNumber() ?? 0;
if (currentSlide > 0)
diff --git a/Ink Canvas/MainWindow_cs/MW_PageListView.cs b/Ink Canvas/MainWindow_cs/MW_PageListView.cs
index c82a0113..c7ea6c80 100644
--- a/Ink Canvas/MainWindow_cs/MW_PageListView.cs
+++ b/Ink Canvas/MainWindow_cs/MW_PageListView.cs
@@ -1,10 +1,10 @@
-using Ink_Canvas.Helpers;
-using System.Collections.ObjectModel;
+using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Ink;
using System.Windows.Input;
+using Ink_Canvas.Helpers;
namespace Ink_Canvas
{
@@ -86,6 +86,17 @@ namespace Ink_Canvas
// 只有当选择的页面与当前页面不同时才进行切换
if (index + 1 != CurrentWhiteboardIndex)
{
+ // 隐藏图片选择工具栏
+ if (currentSelectedElement != null)
+ {
+ // 保存当前编辑模式
+ var previousEditingMode = inkCanvas.EditingMode;
+ UnselectElement(currentSelectedElement);
+ // 恢复编辑模式
+ inkCanvas.EditingMode = previousEditingMode;
+ currentSelectedElement = null;
+ }
+
SaveStrokes();
ClearStrokes(true);
CurrentWhiteboardIndex = index + 1;
@@ -108,6 +119,17 @@ namespace Ink_Canvas
// 只有当选择的页面与当前页面不同时才进行切换
if (index + 1 != CurrentWhiteboardIndex)
{
+ // 隐藏图片选择工具栏
+ if (currentSelectedElement != null)
+ {
+ // 保存当前编辑模式
+ var previousEditingMode = inkCanvas.EditingMode;
+ UnselectElement(currentSelectedElement);
+ // 恢复编辑模式
+ inkCanvas.EditingMode = previousEditingMode;
+ currentSelectedElement = null;
+ }
+
SaveStrokes();
ClearStrokes(true);
CurrentWhiteboardIndex = index + 1;
diff --git a/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs b/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs
index bf233c24..fb242d97 100644
--- a/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs
@@ -1,15 +1,22 @@
-using Ink_Canvas.Helpers;
-using Newtonsoft.Json;
using System;
using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Imaging;
using System.IO;
+using System.IO.Compression;
+using System.Text;
using System.Windows;
using System.Windows.Controls;
+using System.Windows.Forms;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
+using Ink_Canvas.Helpers;
+using Newtonsoft.Json;
+using Color = System.Drawing.Color;
using File = System.IO.File;
+using Image = System.Windows.Controls.Image;
using OpenFileDialog = Microsoft.Win32.OpenFileDialog;
namespace Ink_Canvas
@@ -150,7 +157,7 @@ namespace Ink_Canvas
catch (Exception ex)
{
ShowNotification("墨迹保存失败");
- LogHelper.WriteLogToFile("墨迹保存失败 | " + ex.ToString(), LogHelper.LogType.Error);
+ LogHelper.WriteLogToFile("墨迹保存失败 | " + ex, LogHelper.LogType.Error);
}
}
@@ -191,7 +198,7 @@ namespace Ink_Canvas
// 保存元数据信息
string metadataFile = Path.Combine(tempDir, "metadata.txt");
- using (var writer = new StreamWriter(metadataFile, false, System.Text.Encoding.UTF8))
+ using (var writer = new StreamWriter(metadataFile, false, Encoding.UTF8))
{
writer.WriteLine($"保存时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}");
writer.WriteLine($"总页数: {allPageStrokes.Count}");
@@ -219,7 +226,7 @@ namespace Ink_Canvas
File.Delete(zipFileName);
// 使用System.IO.Compression.FileSystem来创建ZIP
- System.IO.Compression.ZipFile.CreateFromDirectory(tempDir, zipFileName);
+ ZipFile.CreateFromDirectory(tempDir, zipFileName);
if (newNotice) ShowNotification($"多页面墨迹成功保存至压缩包 {zipFileName}");
}
@@ -233,13 +240,13 @@ namespace Ink_Canvas
}
catch (Exception ex)
{
- LogHelper.WriteLogToFile($"清理临时目录失败: {ex.ToString()}", LogHelper.LogType.Warning);
+ LogHelper.WriteLogToFile($"清理临时目录失败: {ex}", LogHelper.LogType.Warning);
}
}
}
catch (Exception ex)
{
- LogHelper.WriteLogToFile($"保存多页面墨迹压缩包失败: {ex.ToString()}", LogHelper.LogType.Error);
+ LogHelper.WriteLogToFile($"保存多页面墨迹压缩包失败: {ex}", LogHelper.LogType.Error);
throw;
}
}
@@ -250,16 +257,16 @@ namespace Ink_Canvas
private void SaveSinglePageStrokesAsImage(string savePathWithName, bool newNotice)
{
// 全页面保存模式 - 保存整个墨迹页面的图像
- var bitmap = new System.Drawing.Bitmap(
- (int)System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width,
- (int)System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height);
+ var bitmap = new Bitmap(
+ Screen.PrimaryScreen.Bounds.Width,
+ Screen.PrimaryScreen.Bounds.Height);
- using (var g = System.Drawing.Graphics.FromImage(bitmap))
+ using (var g = Graphics.FromImage(bitmap))
{
// 创建黑色或透明背景
- System.Drawing.Color bgColor = Settings.Canvas.UsingWhiteboard
- ? System.Drawing.Color.White
- : System.Drawing.Color.FromArgb(22, 41, 36); // 黑板背景色
+ Color bgColor = Settings.Canvas.UsingWhiteboard
+ ? Color.White
+ : Color.FromArgb(22, 41, 36); // 黑板背景色
g.Clear(bgColor);
// 将InkCanvas墨迹渲染到Visual
@@ -287,7 +294,7 @@ namespace Ink_Canvas
{
encoder.Save(ms);
ms.Seek(0, SeekOrigin.Begin);
- var imgBitmap = new System.Drawing.Bitmap(ms);
+ var imgBitmap = new Bitmap(ms);
// 将生成的墨迹图像绘制到屏幕截图上
// 居中绘制,确保墨迹位于屏幕中央
@@ -297,7 +304,7 @@ namespace Ink_Canvas
// 保存为PNG
string imagePathWithName = Path.ChangeExtension(savePathWithName, "png");
- bitmap.Save(imagePathWithName, System.Drawing.Imaging.ImageFormat.Png);
+ bitmap.Save(imagePathWithName, ImageFormat.Png);
// 仍然保存墨迹文件以兼容旧版本
var fs = new FileStream(savePathWithName, FileMode.Create);
@@ -337,7 +344,7 @@ namespace Ink_Canvas
}
catch (Exception ex)
{
- LogHelper.WriteLogToFile($"保存页面图像失败: {ex.ToString()}", LogHelper.LogType.Error);
+ LogHelper.WriteLogToFile($"保存页面图像失败: {ex}", LogHelper.LogType.Error);
throw;
}
}
@@ -376,7 +383,7 @@ namespace Ink_Canvas
catch (Exception ex)
{
ShowNotification("墨迹打开失败");
- LogHelper.WriteLogToFile($"墨迹打开失败: {ex.ToString()}", LogHelper.LogType.Error);
+ LogHelper.WriteLogToFile($"墨迹打开失败: {ex}", LogHelper.LogType.Error);
}
}
@@ -394,7 +401,7 @@ namespace Ink_Canvas
try
{
// 解压ZIP文件
- System.IO.Compression.ZipFile.ExtractToDirectory(zipFilePath, tempDir);
+ ZipFile.ExtractToDirectory(zipFilePath, tempDir);
// 读取元数据文件
string metadataFile = Path.Combine(tempDir, "metadata.txt");
@@ -447,13 +454,13 @@ namespace Ink_Canvas
}
catch (Exception ex)
{
- LogHelper.WriteLogToFile($"清理临时目录失败: {ex.ToString()}", LogHelper.LogType.Warning);
+ LogHelper.WriteLogToFile($"清理临时目录失败: {ex}", LogHelper.LogType.Warning);
}
}
}
catch (Exception ex)
{
- LogHelper.WriteLogToFile($"打开ICC压缩包失败: {ex.ToString()}", LogHelper.LogType.Error);
+ LogHelper.WriteLogToFile($"打开ICC压缩包失败: {ex}", LogHelper.LogType.Error);
throw;
}
}
@@ -465,7 +472,7 @@ namespace Ink_Canvas
{
var metadata = new Dictionary();
- using (var reader = new StreamReader(metadataPath, System.Text.Encoding.UTF8))
+ using (var reader = new StreamReader(metadataPath, Encoding.UTF8))
{
string line;
while ((line = reader.ReadLine()) != null)
@@ -556,7 +563,7 @@ namespace Ink_Canvas
}
catch (Exception ex)
{
- LogHelper.WriteLogToFile($"恢复PPT墨迹失败: {ex.ToString()}", LogHelper.LogType.Error);
+ LogHelper.WriteLogToFile($"恢复PPT墨迹失败: {ex}", LogHelper.LogType.Error);
throw;
}
}
@@ -609,7 +616,7 @@ namespace Ink_Canvas
{
// 创建历史记录
var history = new TimeMachineHistory(strokes, TimeMachineHistoryType.UserInput, false);
- TimeMachineHistories[pageNumber] = new TimeMachineHistory[] { history };
+ TimeMachineHistories[pageNumber] = new[] { history };
}
}
}
@@ -628,7 +635,7 @@ namespace Ink_Canvas
}
catch (Exception ex)
{
- LogHelper.WriteLogToFile($"恢复白板墨迹失败: {ex.ToString()}", LogHelper.LogType.Error);
+ LogHelper.WriteLogToFile($"恢复白板墨迹失败: {ex}", LogHelper.LogType.Error);
throw;
}
}
diff --git a/Ink Canvas/MainWindow_cs/MW_Screenshot.cs b/Ink Canvas/MainWindow_cs/MW_Screenshot.cs
index 05b5cf89..f398a4e9 100644
--- a/Ink Canvas/MainWindow_cs/MW_Screenshot.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Screenshot.cs
@@ -1,5 +1,6 @@
using System;
using System.Drawing;
+using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Windows;
@@ -42,10 +43,10 @@ namespace Ink_Canvas
using (var memoryGraphics = Graphics.FromImage(bitmap))
{
// 设置高质量渲染
- memoryGraphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
- memoryGraphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
- memoryGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
- memoryGraphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
+ memoryGraphics.CompositingQuality = CompositingQuality.HighQuality;
+ memoryGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
+ memoryGraphics.SmoothingMode = SmoothingMode.HighQuality;
+ memoryGraphics.CompositingMode = CompositingMode.SourceOver;
memoryGraphics.CopyFromScreen(rc.X, rc.Y, 0, 0, rc.Size, CopyPixelOperation.SourceCopy);
diff --git a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs
index 6c6ab016..f8547b85 100644
--- a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs
+++ b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs
@@ -1,15 +1,13 @@
-using iNKORE.UI.WPF.Modern.Controls;
using System;
using System.Collections.Generic;
+using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
-using System.Windows.Shapes;
-using System.Windows.Threading;
+using iNKORE.UI.WPF.Modern.Controls;
using Point = System.Windows.Point;
-using System.Linq;
namespace Ink_Canvas
{
@@ -310,7 +308,7 @@ namespace Ink_Canvas
// 检查是否有图片元素被选中
var selectedElements = inkCanvas.GetSelectedElements();
- bool hasImageElement = selectedElements.Any(element => element is System.Windows.Controls.Image);
+ bool hasImageElement = selectedElements.Any(element => element is Image);
// 如果有图片元素被选中,不显示选择框
if (hasImageElement)
@@ -553,11 +551,9 @@ namespace Ink_Canvas
return new Rect(left, top, width, height);
}
}
- else
- {
- // 没有变换时直接使用位置和大小
- return new Rect(left, top, width, height);
- }
+
+ // 没有变换时直接使用位置和大小
+ return new Rect(left, top, width, height);
}
return new Rect(0, 0, 0, 0);
diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs
index 723f056e..803000f5 100644
--- a/Ink Canvas/MainWindow_cs/MW_Settings.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs
@@ -1,7 +1,3 @@
-using Hardcodet.Wpf.TaskbarNotification;
-using Ink_Canvas.Helpers;
-using Newtonsoft.Json;
-using OSVersionExtension;
using System;
using System.Diagnostics;
using System.IO;
@@ -13,6 +9,11 @@ using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
+using System.Windows.Threading;
+using Hardcodet.Wpf.TaskbarNotification;
+using Ink_Canvas.Helpers;
+using Newtonsoft.Json;
+using OSVersionExtension;
using Application = System.Windows.Application;
using CheckBox = System.Windows.Controls.CheckBox;
using ComboBox = System.Windows.Controls.ComboBox;
@@ -196,11 +197,14 @@ namespace Ink_Canvas
val > 0.5 && val < 1.25 ? val : val <= 0.5 ? 0.5 : val >= 1.25 ? 1.25 : 1;
ViewboxFloatingBarScaleTransform.ScaleY =
val > 0.5 && val < 1.25 ? val : val <= 0.5 ? 0.5 : val >= 1.25 ? 1.25 : 1;
- // auto align
- if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
- ViewboxFloatingBarMarginAnimation(60);
- else
- ViewboxFloatingBarMarginAnimation(100, true);
+ // auto align - 新增:只在屏幕模式下重新计算浮动栏位置
+ if (currentMode == 0)
+ {
+ if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
+ ViewboxFloatingBarMarginAnimation(60);
+ else
+ ViewboxFloatingBarMarginAnimation(100, true);
+ }
}
private void ViewboxFloatingBarOpacityValueSlider_ValueChanged(object sender, RoutedEventArgs e)
@@ -2686,14 +2690,14 @@ namespace Ink_Canvas
await Task.Delay(100);
// 获取当前选中的模式并重新设置高光位置
- string currentMode = GetCurrentSelectedMode();
- if (!string.IsNullOrEmpty(currentMode))
+ string selectedToolMode = GetCurrentSelectedMode();
+ if (!string.IsNullOrEmpty(selectedToolMode))
{
- SetFloatingBarHighlightPosition(currentMode);
+ SetFloatingBarHighlightPosition(selectedToolMode);
}
// 重新计算浮动栏位置,因为按钮可见性变化会影响浮动栏宽度
- if (!isFloatingBarFolded)
+ if (!isFloatingBarFolded && currentMode == 0) // 新增:只在屏幕模式下重新计算浮动栏位置
{
if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
{
@@ -2709,7 +2713,7 @@ namespace Ink_Canvas
{
LogHelper.WriteLogToFile($"重新计算高光位置和浮动栏位置失败: {ex.Message}", LogHelper.LogType.Error);
}
- }), System.Windows.Threading.DispatcherPriority.Loaded);
+ }), DispatcherPriority.Loaded);
}
catch (Exception ex)
{
@@ -2742,13 +2746,13 @@ namespace Ink_Canvas
private void HyperlinkSourceToPresentRepository_Click(object sender, RoutedEventArgs e)
{
- Process.Start("https://bgithub.xyz/ChangSakura/Ink-Canvas");
+ Process.Start("https://github.com/ChangSakura/Ink-Canvas");
HideSubPanels();
}
private void HyperlinkSourceToOringinalRepository_Click(object sender, RoutedEventArgs e)
{
- Process.Start("https://bgithub.xyz/WXRIW/Ink-Canvas");
+ Process.Start("https://github.com/WXRIW/Ink-Canvas");
HideSubPanels();
}
diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
index a423b3c2..5501b884 100644
--- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
+++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
@@ -1,8 +1,4 @@
-using Hardcodet.Wpf.TaskbarNotification;
-using Ink_Canvas.Helpers;
-using Newtonsoft.Json;
-using OSVersionExtension;
-using System;
+using System;
using System.Reflection;
using System.Windows;
using System.Windows.Controls;
@@ -10,6 +6,10 @@ using System.Windows.Ink;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
+using Hardcodet.Wpf.TaskbarNotification;
+using Ink_Canvas.Helpers;
+using Newtonsoft.Json;
+using OSVersionExtension;
using File = System.IO.File;
using OperatingSystem = OSVersionExtension.OperatingSystem;
diff --git a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs
index 5ca45da5..4b8ca738 100644
--- a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs
+++ b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs
@@ -1,6 +1,4 @@
-using Ink_Canvas.Helpers;
-using iNKORE.UI.WPF.Modern.Controls;
-using System;
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
@@ -10,6 +8,8 @@ using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
+using Ink_Canvas.Helpers;
+using iNKORE.UI.WPF.Modern.Controls;
using MessageBox = System.Windows.MessageBox;
using Point = System.Windows.Point;
@@ -74,9 +74,9 @@ namespace Ink_Canvas
ToggleSwitchDrawShapeBorderAutoHide.IsOn = !ToggleSwitchDrawShapeBorderAutoHide.IsOn;
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn)
- ((SymbolIcon)sender).Symbol = Symbol.Pin;
+ ((FontIcon)sender).Glyph = "";
else
- ((SymbolIcon)sender).Symbol = Symbol.UnPin;
+ ((FontIcon)sender).Glyph = "";
}
private object lastMouseDownSender;
@@ -499,20 +499,18 @@ namespace Ink_Canvas
catch { }
return;
}
- else
+
+ // 其他情况正常删除临时笔画
+ try
{
- // 其他情况正常删除临时笔画
- try
- {
- inkCanvas.Strokes.Remove(lastTempStroke);
- inkCanvas.Strokes.Remove(lastTempStrokeCollection);
- }
- catch
- {
- Trace.WriteLine("lastTempStrokeCollection failed.");
- }
- return;
+ inkCanvas.Strokes.Remove(lastTempStroke);
+ inkCanvas.Strokes.Remove(lastTempStrokeCollection);
}
+ catch
+ {
+ Trace.WriteLine("lastTempStrokeCollection failed.");
+ }
+ return;
}
// 修复:双曲线绘制时,第二笔应该基于第一笔的起点,而不是触摸实时位置
diff --git a/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs b/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs
index e25bb882..8e14c503 100644
--- a/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs
+++ b/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs
@@ -1,5 +1,4 @@
-using Ink_Canvas.Helpers;
-using System;
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
@@ -9,6 +8,7 @@ using System.Windows.Controls;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
+using Ink_Canvas.Helpers;
using Point = System.Windows.Point;
namespace Ink_Canvas
diff --git a/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs b/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs
index c663f058..541d2068 100644
--- a/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs
@@ -1,5 +1,4 @@
-using Ink_Canvas.Helpers;
-using System;
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows;
@@ -7,6 +6,7 @@ using System.Windows.Controls;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
+using Ink_Canvas.Helpers;
namespace Ink_Canvas
{
diff --git a/Ink Canvas/MainWindow_cs/MW_Timer.cs b/Ink Canvas/MainWindow_cs/MW_Timer.cs
index 3c9e0e4b..4988c444 100644
--- a/Ink Canvas/MainWindow_cs/MW_Timer.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Timer.cs
@@ -1,5 +1,4 @@
-using Ink_Canvas.Helpers;
-using System;
+using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
@@ -12,6 +11,7 @@ using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
+using Ink_Canvas.Helpers;
namespace Ink_Canvas
{
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index 9c1a8393..7aedfd43 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -1,4 +1,3 @@
-using Ink_Canvas.Helpers;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -8,6 +7,8 @@ using System.Windows.Controls;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
+using System.Windows.Threading;
+using Ink_Canvas.Helpers;
using Point = System.Windows.Point;
namespace Ink_Canvas
@@ -162,13 +163,13 @@ namespace Ink_Canvas
return;
}
- LogHelper.WriteLogToFile($"MainWindow_StylusDown 被调用,笔尾状态: {e.StylusDevice.Inverted}, 当前 drawingShapeMode: {drawingShapeMode}, 当前 EditingMode: {inkCanvas.EditingMode}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"MainWindow_StylusDown 被调用,笔尾状态: {e.StylusDevice.Inverted}, 当前 drawingShapeMode: {drawingShapeMode}, 当前 EditingMode: {inkCanvas.EditingMode}");
// 新增:根据是否为笔尾自动切换橡皮擦/画笔模式
if (e.StylusDevice.Inverted)
{
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
- LogHelper.WriteLogToFile("检测到笔尾,设置 EditingMode 为 EraseByPoint", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("检测到笔尾,设置 EditingMode 为 EraseByPoint");
}
else
{
@@ -177,18 +178,18 @@ namespace Ink_Canvas
{
// 确保几何绘制模式下不切换到Ink模式,避免触摸轨迹被收集
inkCanvas.EditingMode = InkCanvasEditingMode.None;
- LogHelper.WriteLogToFile("几何绘制模式,设置 EditingMode 为 None", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("几何绘制模式,设置 EditingMode 为 None");
return;
}
// 修复:保持当前的线擦模式,不要强制切换到Ink模式
if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByStroke)
{
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
- LogHelper.WriteLogToFile("设置 EditingMode 为 Ink", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("设置 EditingMode 为 Ink");
}
else
{
- LogHelper.WriteLogToFile("保持当前线擦模式", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("保持当前线擦模式");
}
}
SetCursorBasedOnEditingMode(inkCanvas);
@@ -230,14 +231,14 @@ namespace Ink_Canvas
{
try
{
- LogHelper.WriteLogToFile($"MainWindow_StylusUp 被调用,EditingMode: {inkCanvas.EditingMode}, EnableInkFade: {Settings.Canvas.EnableInkFade}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"MainWindow_StylusUp 被调用,EditingMode: {inkCanvas.EditingMode}, EnableInkFade: {Settings.Canvas.EnableInkFade}");
var stroke = GetStrokeVisual(e.StylusDevice.Id).Stroke;
- LogHelper.WriteLogToFile($"获取到墨迹,StylusPoints数量: {stroke.StylusPoints.Count}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"获取到墨迹,StylusPoints数量: {stroke.StylusPoints.Count}");
// 正常模式:添加到画布并参与墨迹纠正
// 墨迹渐隐功能现在在 StrokeCollected 事件中统一处理所有输入方式
- LogHelper.WriteLogToFile("StylusUp: 添加墨迹到画布", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("StylusUp: 添加墨迹到画布");
inkCanvas.Strokes.Add(stroke);
await Task.Delay(5); // 避免渲染墨迹完成前预览墨迹被删除导致墨迹闪烁
@@ -340,7 +341,7 @@ namespace Ink_Canvas
#endregion
- private int lastTouchDownTime = 0, lastTouchUpTime = 0;
+
private Point iniP = new Point(0, 0);
@@ -398,10 +399,10 @@ namespace Ink_Canvas
private InkCanvasEditingMode palmEraserLastEditingMode = InkCanvasEditingMode.Ink;
private bool palmEraserLastIsHighlighter;
private bool palmEraserWasEnabledBeforeMultiTouch;
- private bool palmEraserTouchDownHandled = false; // 新增:标记手掌擦触摸按下是否已处理
+ private bool palmEraserTouchDownHandled; // 新增:标记手掌擦触摸按下是否已处理
private DateTime palmEraserActivationTime; // 新增:记录手掌擦激活时间
private const int PALM_ERASER_TIMEOUT_MS = 3000; // 修改:减少手掌擦超时时间(3秒)
- private System.Windows.Threading.DispatcherTimer palmEraserRecoveryTimer; // 新增:手掌擦恢复定时器
+ private DispatcherTimer palmEraserRecoveryTimer; // 新增:手掌擦恢复定时器
private HashSet palmEraserTouchIds = new HashSet(); // 新增:记录参与手掌擦的触摸点ID
private void inkCanvas_PreviewTouchDown(object sender, TouchEventArgs e)
@@ -528,7 +529,7 @@ namespace Ink_Canvas
StartPalmEraserRecoveryTimer();
// 记录日志
- LogHelper.WriteLogToFile($"Palm eraser activated - Sensitivity: {Settings.Canvas.PalmEraserSensitivity}, Touch bounds: {bounds.Width}x{bounds.Height}, Aspect ratio: {aspectRatio:F2}, Touch points: {dec.Count}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"Palm eraser activated - Sensitivity: {Settings.Canvas.PalmEraserSensitivity}, Touch bounds: {bounds.Width}x{bounds.Height}, Aspect ratio: {aspectRatio:F2}, Touch points: {dec.Count}");
}
}
@@ -623,7 +624,7 @@ namespace Ink_Canvas
break;
}
- LogHelper.WriteLogToFile($"Palm eraser recovered to mode: {palmEraserLastEditingMode}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"Palm eraser recovered to mode: {palmEraserLastEditingMode}");
}
}
catch (Exception ex)
@@ -648,7 +649,7 @@ namespace Ink_Canvas
ViewboxFloatingBar.IsHitTestVisible = true;
BlackboardUIGridForInkReplay.IsHitTestVisible = true;
- LogHelper.WriteLogToFile("Palm eraser state reset completed", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("Palm eraser state reset completed");
}
// 新增:超时检测 - 如果手掌擦激活时间过长,强制重置状态
@@ -697,7 +698,7 @@ namespace Ink_Canvas
// 停止恢复定时器
StopPalmEraserRecoveryTimer();
- LogHelper.WriteLogToFile("Palm eraser timeout recovery completed", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("Palm eraser timeout recovery completed");
}
}
// 修复:几何绘制模式下,触摸抬手时应该正确处理,而不是简单模拟鼠标事件
@@ -983,7 +984,7 @@ namespace Ink_Canvas
{
if (palmEraserRecoveryTimer == null)
{
- palmEraserRecoveryTimer = new System.Windows.Threading.DispatcherTimer();
+ palmEraserRecoveryTimer = new DispatcherTimer();
palmEraserRecoveryTimer.Interval = TimeSpan.FromMilliseconds(1000); // 每秒检查一次
palmEraserRecoveryTimer.Tick += PalmEraserRecoveryTimer_Tick;
}
@@ -1033,7 +1034,7 @@ namespace Ink_Canvas
break;
}
- LogHelper.WriteLogToFile($"Palm eraser timer recovery to mode: {palmEraserLastEditingMode}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"Palm eraser timer recovery to mode: {palmEraserLastEditingMode}");
}
}
catch (Exception ex)
@@ -1055,7 +1056,7 @@ namespace Ink_Canvas
// 停止定时器
StopPalmEraserRecoveryTimer();
- LogHelper.WriteLogToFile("Palm eraser timer recovery completed", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("Palm eraser timer recovery completed");
}
}
}
diff --git a/Ink Canvas/MainWindow_cs/MW_TrayIcon.cs b/Ink Canvas/MainWindow_cs/MW_TrayIcon.cs
index 96796023..b20cb2d7 100644
--- a/Ink Canvas/MainWindow_cs/MW_TrayIcon.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TrayIcon.cs
@@ -1,12 +1,12 @@
-using Hardcodet.Wpf.TaskbarNotification;
-using Ink_Canvas.Helpers;
-using iNKORE.UI.WPF.Modern.Controls;
-using System;
+using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Forms;
using System.Windows.Interop;
+using Hardcodet.Wpf.TaskbarNotification;
+using Ink_Canvas.Helpers;
+using iNKORE.UI.WPF.Modern.Controls;
using Application = System.Windows.Application;
using ContextMenu = System.Windows.Controls.ContextMenu;
using MenuItem = System.Windows.Controls.MenuItem;
diff --git a/Ink Canvas/Properties/AssemblyInfo.cs b/Ink Canvas/Properties/AssemblyInfo.cs
index 36053414..4b4d635f 100644
--- a/Ink Canvas/Properties/AssemblyInfo.cs
+++ b/Ink Canvas/Properties/AssemblyInfo.cs
@@ -49,5 +49,5 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.7.8.4")]
-[assembly: AssemblyFileVersion("1.7.8.4")]
+[assembly: AssemblyVersion("1.7.9.0")]
+[assembly: AssemblyFileVersion("1.7.9.0")]
diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs
index fc4e687a..8efdf432 100644
--- a/Ink Canvas/Resources/Settings.cs
+++ b/Ink Canvas/Resources/Settings.cs
@@ -1,7 +1,7 @@
-using Newtonsoft.Json;
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
+using Newtonsoft.Json;
namespace Ink_Canvas
{
@@ -93,11 +93,11 @@ namespace Ink_Canvas
[JsonProperty("clearCanvasAlsoClearImages")]
public bool ClearCanvasAlsoClearImages { get; set; } = true;
[JsonProperty("showCircleCenter")]
- public bool ShowCircleCenter { get; set; } = false;
+ public bool ShowCircleCenter { get; set; }
// 墨迹渐隐功能设置
[JsonProperty("enableInkFade")]
- public bool EnableInkFade { get; set; } = false; // 是否启用墨迹渐隐功能
+ public bool EnableInkFade { get; set; } // 是否启用墨迹渐隐功能
[JsonProperty("inkFadeTime")]
public int InkFadeTime { get; set; } = 3000; // 墨迹渐隐时间(毫秒)
@@ -152,7 +152,7 @@ namespace Ink_Canvas
[JsonProperty("skippedVersion")]
public string SkippedVersion { get; set; } = "";
[JsonProperty("isEnableNibMode")]
- public bool IsEnableNibMode { get; set; } = false;
+ public bool IsEnableNibMode { get; set; }
[JsonProperty("isFoldAtStartup")]
public bool IsFoldAtStartup { get; set; }
[JsonProperty("crashAction")]
@@ -225,10 +225,10 @@ namespace Ink_Canvas
public bool IsShowClearAndMouseButton { get; set; } = true;
[JsonProperty("eraserDisplayOption")]
- public int EraserDisplayOption { get; set; } = 0;
+ public int EraserDisplayOption { get; set; }
[JsonProperty("isShowQuickColorPalette")]
- public bool IsShowQuickColorPalette { get; set; } = false;
+ public bool IsShowQuickColorPalette { get; set; }
[JsonProperty("quickColorPaletteDisplayMode")]
public int QuickColorPaletteDisplayMode { get; set; } = 1;
diff --git a/Ink Canvas/Windows/AddCustomIconWindow.xaml.cs b/Ink Canvas/Windows/AddCustomIconWindow.xaml.cs
index a214c9f2..060c5b9d 100644
--- a/Ink Canvas/Windows/AddCustomIconWindow.xaml.cs
+++ b/Ink Canvas/Windows/AddCustomIconWindow.xaml.cs
@@ -1,8 +1,8 @@
-using Microsoft.Win32;
using System;
using System.IO;
using System.Windows;
using System.Windows.Media.Imaging;
+using Microsoft.Win32;
namespace Ink_Canvas
{
diff --git a/Ink Canvas/Windows/AddPickNameBackgroundWindow.xaml.cs b/Ink Canvas/Windows/AddPickNameBackgroundWindow.xaml.cs
index bc602748..f9aa8951 100644
--- a/Ink Canvas/Windows/AddPickNameBackgroundWindow.xaml.cs
+++ b/Ink Canvas/Windows/AddPickNameBackgroundWindow.xaml.cs
@@ -1,8 +1,8 @@
-using Microsoft.Win32;
using System;
using System.IO;
using System.Windows;
using System.Windows.Media.Imaging;
+using Microsoft.Win32;
namespace Ink_Canvas
{
diff --git a/Ink Canvas/Windows/CountdownTimerWindow.xaml b/Ink Canvas/Windows/CountdownTimerWindow.xaml
index 1a8bfe8e..8c785503 100644
--- a/Ink Canvas/Windows/CountdownTimerWindow.xaml
+++ b/Ink Canvas/Windows/CountdownTimerWindow.xaml
@@ -179,12 +179,12 @@
-
+
-
+
@@ -194,12 +194,12 @@
-
+
-
+
@@ -215,7 +215,7 @@
-
+
-
+
-
+
diff --git a/Ink Canvas/Windows/CountdownTimerWindow.xaml.cs b/Ink Canvas/Windows/CountdownTimerWindow.xaml.cs
index 5b1ce454..6e00b4c5 100644
--- a/Ink Canvas/Windows/CountdownTimerWindow.xaml.cs
+++ b/Ink Canvas/Windows/CountdownTimerWindow.xaml.cs
@@ -1,6 +1,4 @@
-using Ink_Canvas.Helpers;
-using iNKORE.UI.WPF.Modern.Controls;
-using System;
+using System;
using System.ComponentModel;
using System.Media;
using System.Timers;
@@ -9,6 +7,7 @@ using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;
+using Ink_Canvas.Helpers;
using Application = System.Windows.Application;
using MouseEventArgs = System.Windows.Input.MouseEventArgs;
using Timer = System.Timers.Timer;
@@ -57,7 +56,7 @@ namespace Ink_Canvas
TextBlockSecond.Text = "00";
timer.Stop();
isTimerRunning = false;
- SymbolIconStart.Symbol = Symbol.Play;
+ FontIconStart.Glyph = "";
BtnStartCover.Visibility = Visibility.Visible;
TextBlockHour.Foreground = new SolidColorBrush(StringToColor("#FF5B5D5F"));
BorderStopTime.Visibility = Visibility.Collapsed;
@@ -92,7 +91,7 @@ namespace Ink_Canvas
private void Grid_MouseUp(object sender, MouseButtonEventArgs e)
{
if (isTimerRunning) return;
- if (ProcessBarTime.Visibility == Visibility.Visible && isTimerRunning == false)
+ if (ProcessBarTime.Visibility == Visibility.Visible && !isTimerRunning)
{
ProcessBarTime.Visibility = Visibility.Collapsed;
GridAdjustHour.Visibility = Visibility.Visible;
@@ -208,12 +207,12 @@ namespace Ink_Canvas
if (WindowState == WindowState.Normal)
{
WindowState = WindowState.Maximized;
- SymbolIconFullscreen.Symbol = Symbol.BackToWindow;
+ FontIconFullscreen.Glyph = "";
}
else
{
WindowState = WindowState.Normal;
- SymbolIconFullscreen.Symbol = Symbol.FullScreen;
+ FontIconFullscreen.Glyph = "";
}
}
@@ -238,7 +237,7 @@ namespace Ink_Canvas
BtnStartCover.Visibility = Visibility.Collapsed;
BorderStopTime.Visibility = Visibility.Collapsed;
TextBlockHour.Foreground = new SolidColorBrush(StringToColor("#FF5B5D5F"));
- SymbolIconStart.Symbol = Symbol.Play;
+ FontIconStart.Glyph = "";
isTimerRunning = false;
timer.Stop();
isPaused = false;
@@ -288,7 +287,7 @@ namespace Ink_Canvas
startTime += DateTime.Now - pauseTime;
ProcessBarTime.IsPaused = false;
TextBlockHour.Foreground = Brushes.Black;
- SymbolIconStart.Symbol = Symbol.Pause;
+ FontIconStart.Glyph = "";
isPaused = false;
timer.Start();
UpdateStopTime();
@@ -300,7 +299,7 @@ namespace Ink_Canvas
pauseTime = DateTime.Now;
ProcessBarTime.IsPaused = true;
TextBlockHour.Foreground = new SolidColorBrush(StringToColor("#FF5B5D5F"));
- SymbolIconStart.Symbol = Symbol.Play;
+ FontIconStart.Glyph = "";
BorderStopTime.Visibility = Visibility.Collapsed;
isPaused = true;
timer.Stop();
@@ -312,7 +311,7 @@ namespace Ink_Canvas
totalSeconds = ((hour * 60) + minute) * 60 + second;
ProcessBarTime.IsPaused = false;
TextBlockHour.Foreground = Brushes.Black;
- SymbolIconStart.Symbol = Symbol.Pause;
+ FontIconStart.Glyph = "";
BtnResetCover.Visibility = Visibility.Collapsed;
if (totalSeconds <= 10)
diff --git a/Ink Canvas/Windows/HasNewUpdateWindow.xaml.cs b/Ink Canvas/Windows/HasNewUpdateWindow.xaml.cs
index 53a4a06b..41a7b7c8 100644
--- a/Ink Canvas/Windows/HasNewUpdateWindow.xaml.cs
+++ b/Ink Canvas/Windows/HasNewUpdateWindow.xaml.cs
@@ -1,7 +1,4 @@
-using Ink_Canvas.Helpers;
-using iNKORE.UI.WPF.Modern.Controls;
-using MdXaml;
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -13,6 +10,9 @@ using System.Windows;
using System.Windows.Controls;
using System.Windows.Interop;
using System.Windows.Media;
+using Ink_Canvas.Helpers;
+using iNKORE.UI.WPF.Modern.Controls;
+using MdXaml;
namespace Ink_Canvas
{
diff --git a/Ink Canvas/Windows/HistoryRollbackWindow.xaml.cs b/Ink Canvas/Windows/HistoryRollbackWindow.xaml.cs
index 15e96c61..b9a749a4 100644
--- a/Ink Canvas/Windows/HistoryRollbackWindow.xaml.cs
+++ b/Ink Canvas/Windows/HistoryRollbackWindow.xaml.cs
@@ -1,4 +1,3 @@
-using Ink_Canvas.Helpers;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -8,6 +7,8 @@ using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
+using Ink_Canvas.Helpers;
+
// Added for OrderByDescending
namespace Ink_Canvas
diff --git a/Ink Canvas/Windows/HotkeyItem.xaml.cs b/Ink Canvas/Windows/HotkeyItem.xaml.cs
index 4f498877..146791e3 100644
--- a/Ink Canvas/Windows/HotkeyItem.xaml.cs
+++ b/Ink Canvas/Windows/HotkeyItem.xaml.cs
@@ -2,6 +2,7 @@ using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
+using System.Windows.Media;
namespace Ink_Canvas.Windows
{
@@ -79,20 +80,20 @@ namespace Ink_Canvas.Windows
if (_currentKey == Key.None)
{
CurrentHotkeyTextBlock.Text = "未设置";
- CurrentHotkeyTextBlock.Foreground = System.Windows.Media.Brushes.Gray;
+ CurrentHotkeyTextBlock.Foreground = Brushes.Gray;
}
else
{
var modifiersText = _currentModifiers == ModifierKeys.None ? "" : $"{_currentModifiers}+";
CurrentHotkeyTextBlock.Text = $"{modifiersText}{_currentKey}";
- CurrentHotkeyTextBlock.Foreground = System.Windows.Media.Brushes.Black;
+ CurrentHotkeyTextBlock.Foreground = Brushes.Black;
}
}
private void StartHotkeyCapture()
{
BtnSetHotkey.Content = "请按键...";
- BtnSetHotkey.Background = System.Windows.Media.Brushes.Orange;
+ BtnSetHotkey.Background = Brushes.Orange;
// 设置焦点以捕获键盘事件
Focus();
@@ -105,7 +106,7 @@ namespace Ink_Canvas.Windows
private void StopHotkeyCapture()
{
BtnSetHotkey.Content = "设置";
- BtnSetHotkey.Background = System.Windows.Media.Brushes.DodgerBlue;
+ BtnSetHotkey.Background = Brushes.DodgerBlue;
// 移除键盘事件处理器
KeyDown -= HotkeyItem_KeyDown;
diff --git a/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs b/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs
index ea00e278..b21ee2c5 100644
--- a/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs
+++ b/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs
@@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
+using System.Reflection;
using System.Windows;
+using System.Windows.Controls;
using System.Windows.Input;
using Ink_Canvas.Helpers;
@@ -57,7 +59,7 @@ namespace Ink_Canvas.Windows
{
try
{
- LogHelper.WriteLogToFile("开始初始化快捷键项", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("开始初始化快捷键项");
// 初始化快捷键项并设置HotkeyName
_hotkeyItems["Undo"] = UndoHotkey;
@@ -114,7 +116,7 @@ namespace Ink_Canvas.Windows
_hotkeyItems["Exit"] = ExitHotkey;
ExitHotkey.HotkeyName = "Exit";
- LogHelper.WriteLogToFile($"成功初始化 {_hotkeyItems.Count} 个快捷键项", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"成功初始化 {_hotkeyItems.Count} 个快捷键项");
}
catch (Exception ex)
{
@@ -128,7 +130,7 @@ namespace Ink_Canvas.Windows
{
// 首先尝试从配置文件获取快捷键信息
var configHotkeys = _hotkeyManager.GetHotkeysFromConfigFile();
- LogHelper.WriteLogToFile($"配置文件中的快捷键数量: {configHotkeys.Count}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"配置文件中的快捷键数量: {configHotkeys.Count}");
// 显示配置文件中的快捷键
foreach (var hotkey in configHotkeys)
@@ -136,7 +138,7 @@ namespace Ink_Canvas.Windows
if (_hotkeyItems.TryGetValue(hotkey.Name, out var hotkeyItem))
{
hotkeyItem.SetCurrentHotkey(hotkey.Key, hotkey.Modifiers);
- LogHelper.WriteLogToFile($"从配置文件设置快捷键项: {hotkey.Name} -> {hotkey.Modifiers}+{hotkey.Key}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"从配置文件设置快捷键项: {hotkey.Name} -> {hotkey.Modifiers}+{hotkey.Key}");
}
}
@@ -148,7 +150,7 @@ namespace Ink_Canvas.Windows
{
// 根据DefaultKey和DefaultModifiers设置默认显示值
SetDefaultHotkeyForItem(hotkeyItem);
- LogHelper.WriteLogToFile($"设置默认显示值: {hotkeyItem.HotkeyName}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"设置默认显示值: {hotkeyItem.HotkeyName}");
}
}
}
@@ -243,7 +245,7 @@ namespace Ink_Canvas.Windows
{
try
{
- LogHelper.WriteLogToFile($"收到快捷键变更事件: {e.HotkeyName} -> {e.Modifiers}+{e.Key}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"收到快捷键变更事件: {e.HotkeyName} -> {e.Modifiers}+{e.Key}");
// 检查快捷键冲突
if (IsHotkeyConflict(e.Key, e.Modifiers, e.HotkeyName))
@@ -305,30 +307,30 @@ namespace Ink_Canvas.Windows
{
try
{
- LogHelper.WriteLogToFile($"开始更新快捷键: {hotkeyName} -> {modifiers}+{key}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"开始更新快捷键: {hotkeyName} -> {modifiers}+{key}");
// 先注销原有的快捷键(如果存在)
_hotkeyManager.UnregisterHotkey(hotkeyName);
- LogHelper.WriteLogToFile($"已注销原有快捷键: {hotkeyName}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"已注销原有快捷键: {hotkeyName}");
// 根据快捷键名称获取对应的动作
var action = GetActionForHotkey(hotkeyName);
if (action != null)
{
- LogHelper.WriteLogToFile($"找到快捷键动作: {hotkeyName}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"找到快捷键动作: {hotkeyName}");
// 直接注册新的快捷键
if (_hotkeyManager.RegisterHotkey(hotkeyName, key, modifiers, action))
{
- LogHelper.WriteLogToFile($"成功注册新快捷键: {hotkeyName} -> {modifiers}+{key}", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile($"成功注册新快捷键: {hotkeyName} -> {modifiers}+{key}");
// 立即保存到配置文件
_hotkeyManager.SaveHotkeysToSettings();
- LogHelper.WriteLogToFile($"已保存快捷键配置", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("已保存快捷键配置");
// 更新UI显示
LoadCurrentHotkeys();
- LogHelper.WriteLogToFile($"已更新UI显示", LogHelper.LogType.Info);
+ LogHelper.WriteLogToFile("已更新UI显示");
LogHelper.WriteLogToFile($"快捷键 {hotkeyName} 已更新为 {modifiers}+{key} 并保存", LogHelper.LogType.Event);
}
@@ -403,7 +405,7 @@ namespace Ink_Canvas.Windows
{
// 通过反射访问主窗口的penType字段
var penTypeField = _mainWindow.GetType().GetField("penType",
- System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+ BindingFlags.NonPublic | BindingFlags.Instance);
if (penTypeField != null)
{
@@ -411,7 +413,7 @@ namespace Ink_Canvas.Windows
// 调用CheckPenTypeUIState方法更新UI状态
var checkPenTypeMethod = _mainWindow.GetType().GetMethod("CheckPenTypeUIState",
- System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+ BindingFlags.NonPublic | BindingFlags.Instance);
if (checkPenTypeMethod != null)
{
@@ -436,7 +438,7 @@ namespace Ink_Canvas.Windows
{
// 通过反射访问主窗口的设置面板
var settingsBorder = _mainWindow.GetType().GetField("BorderSettings",
- System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.GetValue(_mainWindow) as System.Windows.Controls.Border;
+ BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(_mainWindow) as Border;
if (settingsBorder != null)
{
@@ -445,7 +447,7 @@ namespace Ink_Canvas.Windows
// 隐藏设置蒙版
var settingsMask = _mainWindow.GetType().GetField("BorderSettingsMask",
- System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.GetValue(_mainWindow) as System.Windows.Controls.Border;
+ BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(_mainWindow) as Border;
if (settingsMask != null)
{
@@ -467,7 +469,7 @@ namespace Ink_Canvas.Windows
{
// 通过反射访问主窗口的设置面板
var settingsBorder = _mainWindow.GetType().GetField("BorderSettings",
- System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.GetValue(_mainWindow) as System.Windows.Controls.Border;
+ BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(_mainWindow) as Border;
if (settingsBorder != null)
{
@@ -476,7 +478,7 @@ namespace Ink_Canvas.Windows
// 显示设置蒙版
var settingsMask = _mainWindow.GetType().GetField("BorderSettingsMask",
- System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.GetValue(_mainWindow) as System.Windows.Controls.Border;
+ BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(_mainWindow) as Border;
if (settingsMask != null)
{
diff --git a/Ink Canvas/Windows/NamesInputWindow.xaml.cs b/Ink Canvas/Windows/NamesInputWindow.xaml.cs
index ab020adc..9e9a637a 100644
--- a/Ink Canvas/Windows/NamesInputWindow.xaml.cs
+++ b/Ink Canvas/Windows/NamesInputWindow.xaml.cs
@@ -1,7 +1,7 @@
-using Ink_Canvas.Helpers;
-using System.ComponentModel;
+using System.ComponentModel;
using System.IO;
using System.Windows;
+using Ink_Canvas.Helpers;
namespace Ink_Canvas
{
diff --git a/Ink Canvas/Windows/OperatingGuideWindow.xaml b/Ink Canvas/Windows/OperatingGuideWindow.xaml
index 67c81734..351d6962 100644
--- a/Ink Canvas/Windows/OperatingGuideWindow.xaml
+++ b/Ink Canvas/Windows/OperatingGuideWindow.xaml
@@ -80,7 +80,7 @@
-
+
-
+
diff --git a/Ink Canvas/Windows/OperatingGuideWindow.xaml.cs b/Ink Canvas/Windows/OperatingGuideWindow.xaml.cs
index 3357980f..566ab053 100644
--- a/Ink Canvas/Windows/OperatingGuideWindow.xaml.cs
+++ b/Ink Canvas/Windows/OperatingGuideWindow.xaml.cs
@@ -1,7 +1,6 @@
-using Ink_Canvas.Helpers;
-using iNKORE.UI.WPF.Modern.Controls;
-using System.Windows;
+using System.Windows;
using System.Windows.Input;
+using Ink_Canvas.Helpers;
namespace Ink_Canvas
{
@@ -31,12 +30,12 @@ namespace Ink_Canvas
if (WindowState == WindowState.Normal)
{
WindowState = WindowState.Maximized;
- SymbolIconFullscreen.Symbol = Symbol.BackToWindow;
+ FontIconFullscreen.Glyph = "";
}
else
{
WindowState = WindowState.Normal;
- SymbolIconFullscreen.Symbol = Symbol.FullScreen;
+ FontIconFullscreen.Glyph = "";
}
}
diff --git a/Ink Canvas/Windows/PluginSettingsWindow.xaml.cs b/Ink Canvas/Windows/PluginSettingsWindow.xaml.cs
index 3fa180fa..96395e9b 100644
--- a/Ink Canvas/Windows/PluginSettingsWindow.xaml.cs
+++ b/Ink Canvas/Windows/PluginSettingsWindow.xaml.cs
@@ -1,9 +1,3 @@
-using Ink_Canvas.Helpers;
-using Ink_Canvas.Helpers.Plugins;
-using Ink_Canvas.Helpers.Plugins.BuiltIn;
-using Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher;
-using iNKORE.UI.WPF.Modern.Controls;
-using Microsoft.Win32;
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
@@ -12,6 +6,12 @@ using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Threading;
+using Ink_Canvas.Helpers;
+using Ink_Canvas.Helpers.Plugins;
+using Ink_Canvas.Helpers.Plugins.BuiltIn;
+using Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher;
+using iNKORE.UI.WPF.Modern.Controls;
+using Microsoft.Win32;
using MessageBox = System.Windows.MessageBox;
namespace Ink_Canvas.Windows
@@ -68,11 +68,11 @@ namespace Ink_Canvas.Windows
}
}
- public string Name => SelectedPlugin?.Name ?? string.Empty;
+ public new string Name => SelectedPlugin?.Name ?? string.Empty;
public string Version => SelectedPlugin?.Version?.ToString() ?? string.Empty;
public string Author => SelectedPlugin?.Author ?? string.Empty;
public string Description => SelectedPlugin?.Description ?? string.Empty;
- public bool IsEnabled => SelectedPlugin is PluginBase plugin && plugin.IsEnabled;
+ public new bool IsEnabled => SelectedPlugin is PluginBase plugin && plugin.IsEnabled;
public bool IsBuiltIn => SelectedPlugin?.IsBuiltIn ?? false;
///
diff --git a/Ink Canvas/Windows/RandWindow.xaml b/Ink Canvas/Windows/RandWindow.xaml
index f1bada9c..135d1dc2 100644
--- a/Ink Canvas/Windows/RandWindow.xaml
+++ b/Ink Canvas/Windows/RandWindow.xaml
@@ -98,7 +98,7 @@
-
+
@@ -113,7 +113,7 @@
-
+
@@ -127,7 +127,7 @@
-
+
@@ -137,7 +137,7 @@
-
+
diff --git a/Ink Canvas/Windows/RandWindow.xaml.cs b/Ink Canvas/Windows/RandWindow.xaml.cs
index aa391d8f..c4e07ac7 100644
--- a/Ink Canvas/Windows/RandWindow.xaml.cs
+++ b/Ink Canvas/Windows/RandWindow.xaml.cs
@@ -1,7 +1,4 @@
-using Ink_Canvas.Helpers;
-using iNKORE.UI.WPF.Modern.Controls;
-using Microsoft.VisualBasic;
-using System;
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
@@ -11,6 +8,8 @@ using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
+using Ink_Canvas.Helpers;
+using Microsoft.VisualBasic;
using MessageBox = iNKORE.UI.WPF.Modern.Controls.MessageBox;
namespace Ink_Canvas
@@ -24,7 +23,7 @@ namespace Ink_Canvas
{
InitializeComponent();
AnimationsHelper.ShowWithSlideFromBottomAndFade(this, 0.25);
- BorderBtnHelp.Visibility = settings.RandSettings.DisplayRandWindowNamesInputBtn == false ? Visibility.Collapsed : Visibility.Visible;
+ BorderBtnHelp.Visibility = !settings.RandSettings.DisplayRandWindowNamesInputBtn ? Visibility.Collapsed : Visibility.Visible;
RandMaxPeopleOneTime = settings.RandSettings.RandWindowOnceMaxStudents;
RandDoneAutoCloseWaitTime = (int)settings.RandSettings.RandWindowOnceCloseLatency * 1000;
@@ -69,7 +68,7 @@ namespace Ink_Canvas
isAutoClose = IsAutoClose;
PeopleControlPane.Opacity = 0.4;
PeopleControlPane.IsHitTestVisible = false;
- BorderBtnHelp.Visibility = settings.RandSettings.DisplayRandWindowNamesInputBtn == false ? Visibility.Collapsed : Visibility.Visible;
+ BorderBtnHelp.Visibility = !settings.RandSettings.DisplayRandWindowNamesInputBtn ? Visibility.Collapsed : Visibility.Visible;
RandMaxPeopleOneTime = settings.RandSettings.RandWindowOnceMaxStudents;
RandDoneAutoCloseWaitTime = (int)settings.RandSettings.RandWindowOnceCloseLatency * 1000;
@@ -100,7 +99,7 @@ namespace Ink_Canvas
if (RandMaxPeopleOneTime != -1 && TotalCount >= RandMaxPeopleOneTime) return;
TotalCount++;
LabelNumberCount.Text = TotalCount.ToString();
- SymbolIconStart.Symbol = Symbol.People;
+ FontIconStart.Glyph = "";
BorderBtnAdd.Opacity = 1;
BorderBtnMinus.Opacity = 1;
}
@@ -112,7 +111,7 @@ namespace Ink_Canvas
LabelNumberCount.Text = TotalCount.ToString();
if (TotalCount == 1)
{
- SymbolIconStart.Symbol = Symbol.Contact;
+ FontIconStart.Glyph = "";
}
}
diff --git a/Ink Canvas/Windows/ScreenshotSelectorWindow.xaml b/Ink Canvas/Windows/ScreenshotSelectorWindow.xaml
index 00b0bf05..d82fcbd6 100644
--- a/Ink Canvas/Windows/ScreenshotSelectorWindow.xaml
+++ b/Ink Canvas/Windows/ScreenshotSelectorWindow.xaml
@@ -20,71 +20,157 @@
Fill="Black"
Opacity="0.3" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-