Revert "improve:橡皮光标"

This reverts commit 91f206aad0.
This commit is contained in:
2025-07-19 14:10:29 +08:00
parent 91f206aad0
commit 8972e42fee
2 changed files with 140 additions and 84 deletions
+18 -66
View File
@@ -6,7 +6,6 @@ using System.Windows.Controls;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using Ink_Canvas.Helpers;
using System.Windows.Shapes;
@@ -38,7 +37,6 @@ namespace Ink_Canvas {
private DrawingVisual eraserVisual = new DrawingVisual();
private VisualCanvas eraserOverlayCanvas = null;
private Border eraserVisualBorder = null; // 用于显示橡皮擦视觉反馈的Border
private Image eraserImage = null; // 用于显示橡皮擦DrawingGroup的Image
// 兼容性属性:模拟原有的EraserOverlay_DrawingVisual
private VisualCanvas EraserOverlay_DrawingVisual => eraserOverlayCanvas;
@@ -335,7 +333,7 @@ namespace Ink_Canvas {
// 获取或创建橡皮擦视觉反馈Border
if (eraserVisualBorder == null) {
eraserVisualBorder = new Border {
Background = new SolidColorBrush(Colors.Transparent),
Background = new SolidColorBrush(Colors.White),
BorderBrush = new SolidColorBrush(Colors.Transparent),
BorderThickness = new Thickness(0),
IsHitTestVisible = false,
@@ -357,76 +355,30 @@ namespace Ink_Canvas {
}
if (eraserVisualBorder != null) {
// 计算橡皮擦尺寸
double eraserWidth, eraserHeight;
// 更新橡皮擦位置和大小
if (isCurrentEraserCircle) {
eraserWidth = currentEraserSize;
eraserHeight = currentEraserSize;
} else {
// 矩形橡皮擦,使用与原来相同的逻辑
eraserWidth = currentEraserSize;
eraserHeight = currentEraserSize * 56 / 38;
}
// 更新Border尺寸
eraserVisualBorder.Width = eraserWidth;
eraserVisualBorder.Height = eraserHeight;
var radius = currentEraserSize / 2;
eraserVisualBorder.Width = currentEraserSize;
eraserVisualBorder.Height = currentEraserSize;
eraserVisualBorder.CornerRadius = new CornerRadius(radius);
// 使用Margin来定位,因为Border在Grid中
eraserVisualBorder.Margin = new Thickness(
position.X - eraserWidth / 2,
position.Y - eraserHeight / 2,
position.X - radius,
position.Y - radius,
0, 0);
// 创建或更新Image来显示橡皮擦样式
if (eraserImage == null) {
eraserImage = new Image {
Stretch = Stretch.Fill
};
RenderOptions.SetBitmapScalingMode(eraserImage, BitmapScalingMode.HighQuality);
eraserVisualBorder.Child = eraserImage;
}
// 获取橡皮擦DrawingGroup资源并转换为BitmapSource
DrawingGroup eraserDrawing = null;
try {
if (isCurrentEraserCircle) {
eraserDrawing = FindResource("EraserCircleDrawingGroup") as DrawingGroup;
} else {
eraserDrawing = FindResource("EraserDrawingGroup") as DrawingGroup;
}
} catch (Exception ex) {
Trace.WriteLine($"Advanced Eraser: Failed to find eraser drawing resource - {ex.Message}");
// 如果找不到资源,使用简单的矩形作为后备
eraserDrawing = new DrawingGroup();
var geometry = new RectangleGeometry(new Rect(0, 0, 1, 1));
var brush = new SolidColorBrush(Colors.White);
eraserDrawing.Children.Add(new GeometryDrawing(brush, null, geometry));
}
// 矩形橡皮擦,使用与原来相同的逻辑
var height = currentEraserSize / 0.6;
eraserVisualBorder.Width = currentEraserSize;
eraserVisualBorder.Height = height;
eraserVisualBorder.CornerRadius = new CornerRadius(0);
if (eraserDrawing != null) {
// 将DrawingGroup转换为BitmapSource
var drawingVisual = new DrawingVisual();
using (var context = drawingVisual.RenderOpen()) {
// 应用变换矩阵
var transform = new MatrixTransform();
var scaleX = eraserWidth / (isCurrentEraserCircle ? 56.0 : 38.0);
var scaleY = eraserHeight / 56.0;
transform.Matrix = new Matrix(scaleX, 0, 0, scaleY, 0, 0);
context.PushTransform(transform);
// 绘制橡皮擦DrawingGroup
context.DrawDrawing(eraserDrawing);
context.Pop(); // 弹出变换
}
// 将DrawingVisual转换为BitmapSource
var bitmap = new RenderTargetBitmap(
(int)eraserWidth, (int)eraserHeight,
96, 96, PixelFormats.Pbgra32);
bitmap.Render(drawingVisual);
eraserImage.Source = bitmap;
// 使用Margin来定位,因为Border在Grid中
eraserVisualBorder.Margin = new Thickness(
position.X - currentEraserSize / 2,
position.Y - height / 2,
0, 0);
}
eraserVisualBorder.Visibility = Visibility.Visible;
+118 -14
View File
@@ -1,35 +1,139 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- 新版矩形橡皮擦 - 更现代的设计 -->
<DrawingGroup x:Key="EraserDrawingGroup" ClipGeometry="M0,0 V56 H38 V0 H0 Z">
<GeometryDrawing Brush="#FFF2EEEB" Geometry="F1 M38,56z M0,0z M0,4C0,1.79086,1.79086,0,4,0L34,0C36.2091,0,38,1.79086,38,4L38,52C38,54.2091,36.2091,56,34,56L4,56C1.79086,56,0,54.2091,0,52L0,4z" />
<GeometryDrawing Brush="#FFCDCDCD" Geometry="F0 M38,56z M0,0z M34,1L4,1C2.34315,1,1,2.34315,1,4L1,52C1,53.6569,2.34315,55,4,55L34,55C35.6569,55,37,53.6569,37,52L37,4C37,2.34315,35.6569,1,34,1z M4,0C1.79086,0,0,1.79086,0,4L0,52C0,54.2091,1.79086,56,4,56L34,56C36.2091,56,38,54.2091,38,52L38,4C38,1.79086,36.2091,0,34,0L4,0z" />
<GeometryDrawing Brush="#FFD1CFCD" Geometry="F1 M38,56z M0,0z M12,19.5C12,18.1193,13.1193,17,14.5,17L14.5,17C15.8807,17,17,18.1193,17,19.5L17,36.5C17,37.8807,15.8807,39,14.5,39L14.5,39C13.1193,39,12,37.8807,12,36.5L12,19.5z" />
<GeometryDrawing Geometry="F0 M38,56z M0,0z M11.5,19.5C11.5,17.8431 12.8431,16.5 14.5,16.5 16.1569,16.5 17.5,17.8431 17.5,19.5L17.5,36.5C17.5,38.1569 16.1569,39.5 14.5,39.5 12.8431,39.5 11.5,38.1569 11.5,36.5L11.5,19.5z M14.5,17.5C13.3954,17.5,12.5,18.3954,12.5,19.5L12.5,36.5C12.5,37.6046 13.3954,38.5 14.5,38.5 15.6046,38.5 16.5,37.6046 16.5,36.5L16.5,19.5C16.5,18.3954,15.6046,17.5,14.5,17.5z">
<!-- 主体背景 - 使用渐变效果 -->
<GeometryDrawing Geometry="F1 M38,56z M0,0z M0,4C0,1.79086,1.79086,0,4,0L34,0C36.2091,0,38,1.79086,38,4L38,52C38,54.2091,36.2091,56,34,56L4,56C1.79086,56,0,54.2091,0,52L0,4z">
<GeometryDrawing.Brush>
<SolidColorBrush Color="#FF6F6F6F" Opacity="0.25" />
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="#FFF8F6F4" Offset="0"/>
<GradientStop Color="#FFE8E4E0" Offset="1"/>
</LinearGradientBrush>
</GeometryDrawing.Brush>
</GeometryDrawing>
<GeometryDrawing Brush="#FFD1CFCD" Geometry="F1 M38,56z M0,0z M21,19.5C21,18.1193,22.1193,17,23.5,17L23.5,17C24.8807,17,26,18.1193,26,19.5L26,36.5C26,37.8807,24.8807,39,23.5,39L23.5,39C22.1193,39,21,37.8807,21,36.5L21,19.5z" />
<!-- 边框 - 更精细的边框设计 -->
<GeometryDrawing Geometry="F0 M38,56z M0,0z M34,1L4,1C2.34315,1,1,2.34315,1,4L1,52C1,53.6569,2.34315,55,4,55L34,55C35.6569,55,37,53.6569,37,52L37,4C37,2.34315,35.6569,1,34,1z M4,0C1.79086,0,0,1.79086,0,4L0,52C0,54.2091,1.79086,56,4,56L34,56C36.2091,56,38,54.2091,38,52L38,4C38,1.79086,36.2091,0,34,0L4,0z">
<GeometryDrawing.Brush>
<SolidColorBrush Color="#FFB8B4B0" Opacity="0.8"/>
</GeometryDrawing.Brush>
</GeometryDrawing>
<!-- 左侧纹理条 -->
<GeometryDrawing Brush="#FFD4D0CC" Geometry="F1 M38,56z M0,0z M12,19.5C12,18.1193,13.1193,17,14.5,17L14.5,17C15.8807,17,17,18.1193,17,19.5L17,36.5C17,37.8807,15.8807,39,14.5,39L14.5,39C13.1193,39,12,37.8807,12,36.5L12,19.5z" />
<!-- 左侧纹理条阴影 -->
<GeometryDrawing Geometry="F0 M38,56z M0,0z M11.5,19.5C11.5,17.8431 12.8431,16.5 14.5,16.5 16.1569,16.5 17.5,17.8431 17.5,19.5L17.5,36.5C17.5,38.1569 16.1569,39.5 14.5,39.5 12.8431,39.5 11.5,38.1569 11.5,36.5L11.5,19.5z M14.5,17.5C13.3954,17.5,12.5,18.3954,12.5,19.5L12.5,36.5C12.5,37.6046 13.3954,38.5 14.5,38.5 15.6046,38.5 16.5,37.6046 16.5,36.5L16.5,19.5C16.5,18.3954,15.6046,17.5,14.5,17.5z">
<GeometryDrawing.Brush>
<SolidColorBrush Color="#FF8A8680" Opacity="0.3" />
</GeometryDrawing.Brush>
</GeometryDrawing>
<!-- 右侧纹理条 -->
<GeometryDrawing Brush="#FFD4D0CC" Geometry="F1 M38,56z M0,0z M21,19.5C21,18.1193,22.1193,17,23.5,17L23.5,17C24.8807,17,26,18.1193,26,19.5L26,36.5C26,37.8807,24.8807,39,23.5,39L23.5,39C22.1193,39,21,37.8807,21,36.5L21,19.5z" />
<!-- 右侧纹理条阴影 -->
<GeometryDrawing Geometry="F0 M38,56z M0,0z M20.5,19.5C20.5,17.8431 21.8431,16.5 23.5,16.5 25.1569,16.5 26.5,17.8431 26.5,19.5L26.5,36.5C26.5,38.1569 25.1569,39.5 23.5,39.5 21.8431,39.5 20.5,38.1569 20.5,36.5L20.5,19.5z M23.5,17.5C22.3954,17.5,21.5,18.3954,21.5,19.5L21.5,36.5C21.5,37.6046 22.3954,38.5 23.5,38.5 24.6046,38.5 25.5,37.6046 25.5,36.5L25.5,19.5C25.5,18.3954,24.6046,17.5,23.5,17.5z">
<GeometryDrawing.Brush>
<SolidColorBrush Color="#FF6F6F6F" Opacity="0.25" />
<SolidColorBrush Color="#FF8A8680" Opacity="0.3" />
</GeometryDrawing.Brush>
</GeometryDrawing>
<!-- 高光效果 -->
<GeometryDrawing Geometry="F1 M38,56z M0,0z M2,4C2,2.89543,2.89543,2,4,2L34,2C35.1046,2,36,2.89543,36,4L36,12L2,12L2,4z">
<GeometryDrawing.Brush>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#40FFFFFF" Offset="0"/>
<GradientStop Color="#00FFFFFF" Offset="1"/>
</LinearGradientBrush>
</GeometryDrawing.Brush>
</GeometryDrawing>
</DrawingGroup>
<!-- 新版圆形橡皮擦 - 更现代的设计 -->
<DrawingGroup x:Key="EraserCircleDrawingGroup" ClipGeometry="M0,0 V56 H56 V0 H0 Z">
<GeometryDrawing Brush="#FFF2EEEB" Geometry="F1 M56,56z M0,0z M0,28C0,12.536,12.536,0,28,0L28,0C43.464,0,56,12.536,56,28L56,28C56,43.464,43.464,56,28,56L28,56C12.536,56,0,43.464,0,28L0,28z" />
<GeometryDrawing Brush="#FFCDCDCD" Geometry="F0 M56,56z M0,0z M1,28C1,42.9117 13.0883,55 28,55 42.9117,55 55,42.9117 55,28 55,13.0883 42.9117,1 28,1 13.0883,1 1,13.0883 1,28z M28,0C12.536,0 0,12.536 0,28 0,43.464 12.536,56 28,56 43.464,56 56,43.464 56,28 56,12.536 43.464,0 28,0z" />
<GeometryDrawing Brush="#FFD1CFCD" Geometry="F1 M56,56z M0,0z M21,19.5C21,18.1193,22.1193,17,23.5,17L23.5,17C24.8807,17,26,18.1193,26,19.5L26,36.5C26,37.8807,24.8807,39,23.5,39L23.5,39C22.1193,39,21,37.8807,21,36.5L21,19.5z" />
<GeometryDrawing Geometry="F0 M56,56z M0,0z M20.5,19.5C20.5,17.8431 21.8431,16.5 23.5,16.5 25.1569,16.5 26.5,17.8431 26.5,19.5L26.5,36.5C26.5,38.1569 25.1569,39.5 23.5,39.5 21.8431,39.5 20.5,38.1569 20.5,36.5L20.5,19.5z M23.5,17.5C22.3954,17.5,21.5,18.3954,21.5,19.5L21.5,36.5C21.5,37.6046 22.3954,38.5 23.5,38.5 24.6046,38.5 25.5,37.6046 25.5,36.5L25.5,19.5C25.5,18.3954,24.6046,17.5,23.5,17.5z">
<!-- 主体背景 - 使用径向渐变效果 -->
<GeometryDrawing Geometry="F1 M56,56z M0,0z M0,28C0,12.536,12.536,0,28,0L28,0C43.464,0,56,12.536,56,28L56,28C56,43.464,43.464,56,28,56L28,56C12.536,56,0,43.464,0,28L0,28z">
<GeometryDrawing.Brush>
<SolidColorBrush Color="#FF6F6F6F" Opacity="0.25" />
<RadialGradientBrush Center="0.3,0.3" RadiusX="0.8" RadiusY="0.8">
<GradientStop Color="#FFFCFAF8" Offset="0"/>
<GradientStop Color="#FFE8E4E0" Offset="0.7"/>
<GradientStop Color="#FFD4D0CC" Offset="1"/>
</RadialGradientBrush>
</GeometryDrawing.Brush>
</GeometryDrawing>
<GeometryDrawing Brush="#FFD1CFCD" Geometry="F1 M56,56z M0,0z M30,19.5C30,18.1193,31.1193,17,32.5,17L32.5,17C33.8807,17,35,18.1193,35,19.5L35,36.5C35,37.8807,33.8807,39,32.5,39L32.5,39C31.1193,39,30,37.8807,30,36.5L30,19.5z" />
<!-- 边框 - 更精细的边框设计 -->
<GeometryDrawing Geometry="F0 M56,56z M0,0z M1,28C1,42.9117 13.0883,55 28,55 42.9117,55 55,42.9117 55,28 55,13.0883 42.9117,1 28,1 13.0883,1 1,13.0883 1,28z M28,0C12.536,0 0,12.536 0,28 0,43.464 12.536,56 28,56 43.464,56 56,43.464 56,28 56,12.536 43.464,0 28,0z">
<GeometryDrawing.Brush>
<SolidColorBrush Color="#FFB8B4B0" Opacity="0.8"/>
</GeometryDrawing.Brush>
</GeometryDrawing>
<!-- 左侧纹理条 -->
<GeometryDrawing Brush="#FFD4D0CC" Geometry="F1 M56,56z M0,0z M21,19.5C21,18.1193,22.1193,17,23.5,17L23.5,17C24.8807,17,26,18.1193,26,19.5L26,36.5C26,37.8807,24.8807,39,23.5,39L23.5,39C22.1193,39,21,37.8807,21,36.5L21,19.5z" />
<!-- 左侧纹理条阴影 -->
<GeometryDrawing Geometry="F0 M56,56z M0,0z M20.5,19.5C20.5,17.8431 21.8431,16.5 23.5,16.5 25.1569,16.5 26.5,17.8431 26.5,19.5L26.5,36.5C26.5,38.1569 25.1569,39.5 23.5,39.5 21.8431,39.5 20.5,38.1569 20.5,36.5L20.5,19.5z M23.5,17.5C22.3954,17.5,21.5,18.3954,21.5,19.5L21.5,36.5C21.5,37.6046 22.3954,38.5 23.5,38.5 24.6046,38.5 25.5,37.6046 25.5,36.5L25.5,19.5C25.5,18.3954,24.6046,17.5,23.5,17.5z">
<GeometryDrawing.Brush>
<SolidColorBrush Color="#FF8A8680" Opacity="0.3" />
</GeometryDrawing.Brush>
</GeometryDrawing>
<!-- 右侧纹理条 -->
<GeometryDrawing Brush="#FFD4D0CC" Geometry="F1 M56,56z M0,0z M30,19.5C30,18.1193,31.1193,17,32.5,17L32.5,17C33.8807,17,35,18.1193,35,19.5L35,36.5C35,37.8807,33.8807,39,32.5,39L32.5,39C31.1193,39,30,37.8807,30,36.5L30,19.5z" />
<!-- 右侧纹理条阴影 -->
<GeometryDrawing Geometry="F0 M56,56z M0,0z M29.5,19.5C29.5,17.8431 30.8431,16.5 32.5,16.5 34.1569,16.5 35.5,17.8431 35.5,19.5L35.5,36.5C35.5,38.1569 34.1569,39.5 32.5,39.5 30.8431,39.5 29.5,38.1569 29.5,36.5L29.5,19.5z M32.5,17.5C31.3954,17.5,30.5,18.3954,30.5,19.5L30.5,36.5C30.5,37.6046 31.3954,38.5 32.5,38.5 33.6046,38.5 34.5,37.6046 34.5,36.5L34.5,19.5C34.5,18.3954,33.6046,17.5,32.5,17.5z">
<GeometryDrawing.Brush>
<SolidColorBrush Color="#FF6F6F6F" Opacity="0.25" />
<SolidColorBrush Color="#FF8A8680" Opacity="0.3" />
</GeometryDrawing.Brush>
</GeometryDrawing>
<!-- 高光效果 -->
<GeometryDrawing Geometry="F1 M56,56z M0,0z M14,14C20.6274,14,26,19.3726,26,26C26,32.6274,20.6274,38,14,38C7.37258,38,2,32.6274,2,26C2,19.3726,7.37258,14,14,14z">
<GeometryDrawing.Brush>
<RadialGradientBrush Center="0.3,0.3" RadiusX="0.6" RadiusY="0.6">
<GradientStop Color="#60FFFFFF" Offset="0"/>
<GradientStop Color="#20FFFFFF" Offset="0.7"/>
<GradientStop Color="#00FFFFFF" Offset="1"/>
</RadialGradientBrush>
</GeometryDrawing.Brush>
</GeometryDrawing>
<!-- 内部阴影效果 -->
<GeometryDrawing Geometry="F0 M56,56z M0,0z M3,28C3,41.8071 14.1929,53 28,53 41.8071,53 53,41.8071 53,28 53,14.1929 41.8071,3 28,3 14.1929,3 3,14.1929 3,28z M28,2C13.6406,2 2,13.6406 2,28 2,42.3594 13.6406,54 28,54 42.3594,54 54,42.3594 54,28 54,13.6406 42.3594,2 28,2z">
<GeometryDrawing.Brush>
<SolidColorBrush Color="#FF6B6760" Opacity="0.2"/>
</GeometryDrawing.Brush>
</GeometryDrawing>
</DrawingGroup>
<!-- 新增:现代化的橡皮擦预览圆圈 -->
<DrawingGroup x:Key="EraserPreviewCircle" ClipGeometry="M0,0 V100 H100 V0 H0 Z">
<GeometryDrawing Geometry="F1 M100,100z M0,0z M0,50C0,22.386,22.386,0,50,0L50,0C77.614,0,100,22.386,100,50L100,50C100,77.614,77.614,100,50,100L50,100C22.386,100,0,77.614,0,50L0,50z">
<GeometryDrawing.Brush>
<SolidColorBrush Color="#40FF6B6B" />
</GeometryDrawing.Brush>
</GeometryDrawing>
<GeometryDrawing Geometry="F0 M100,100z M0,0z M2,50C2,76.5097 23.4903,98 50,98 76.5097,98 98,76.5097 98,50 98,23.4903 76.5097,2 50,2 23.4903,2 2,23.4903 2,50z M50,0C22.386,0 0,22.386 0,50 0,77.614 22.386,100 50,100 77.614,100 100,77.614 100,50 100,22.386 77.614,0 50,0z">
<GeometryDrawing.Brush>
<SolidColorBrush Color="#80FF4444" />
</GeometryDrawing.Brush>
</GeometryDrawing>
</DrawingGroup>
<!-- 新增:现代化的橡皮擦预览矩形 -->
<DrawingGroup x:Key="EraserPreviewRectangle" ClipGeometry="M0,0 V100 H75 V0 H0 Z">
<GeometryDrawing Geometry="F1 M75,100z M0,0z M0,8C0,3.58172,3.58172,0,8,0L67,0C71.4183,0,75,3.58172,75,8L75,92C75,96.4183,71.4183,100,67,100L8,100C3.58172,100,0,96.4183,0,92L0,8z">
<GeometryDrawing.Brush>
<SolidColorBrush Color="#40FF6B6B" />
</GeometryDrawing.Brush>
</GeometryDrawing>
<GeometryDrawing Geometry="F0 M75,100z M0,0z M67,2L8,2C4.68629,2,2,4.68629,2,8L2,92C2,95.3137,4.68629,98,8,98L67,98C70.3137,98,73,95.3137,73,92L73,8C73,4.68629,70.3137,2,67,2z M8,0C3.58172,0,0,3.58172,0,8L0,92C0,96.4183,3.58172,100,8,100L67,100C71.4183,100,75,96.4183,75,92L75,8C75,3.58172,71.4183,0,67,0L8,0z">
<GeometryDrawing.Brush>
<SolidColorBrush Color="#80FF4444" />
</GeometryDrawing.Brush>
</GeometryDrawing>
</DrawingGroup>