[fix] 修復鼠標的形狀繪製Bug

This commit is contained in:
Dubi906w 2024-05-05 13:11:40 +08:00
parent 58af55147b
commit 0b798cea4f
8 changed files with 245 additions and 58 deletions

View File

@ -632,5 +632,9 @@
<ItemGroup>
<Resource Include="Resources\Icons-Fluent\party.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\new-icons\redo.png" />
<Resource Include="Resources\new-icons\undo.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -1867,12 +1867,12 @@
</ui:SimpleStackPanel>
</Border>
</Grid>
<ui:SimpleStackPanel MouseDown="Border_MouseDown" MouseUp="SymbolIconUndo_MouseUp" Background="Transparent" Orientation="Vertical" HorizontalAlignment="Center" Margin="0,-2" IsEnabled="{Binding ElementName=BtnUndo, Path=IsEnabled}" Width="28">
<Image Source="/Resources/Icons-png/undo.png" RenderOptions.BitmapScalingMode="HighQuality" Width="28" Opacity="{Binding ElementName=BtnUndo, Path=IsEnabled, Converter={StaticResource IsEnabledToOpacityConverter}}" Height="17" Margin="0,3,0,0"/>
<ui:SimpleStackPanel MouseLeave="FloatingBarIcons_MouseUp_MouseLeave" MouseDown="FloatingBarIcons_MouseDown_New" MouseUp="SymbolIconUndo_MouseUp" IsHitTestVisible="{Binding ElementName=BtnUndo, Path=IsEnabled}" Background="Transparent" Orientation="Vertical" HorizontalAlignment="Center" Margin="0,-2" IsEnabled="{Binding ElementName=BtnUndo, Path=IsEnabled}" Width="28">
<Image Source="/Resources/new-icons/undo.png" RenderOptions.BitmapScalingMode="HighQuality" Width="28" Opacity="{Binding ElementName=BtnUndo, Path=IsEnabled, Converter={StaticResource IsEnabledToOpacityConverter}}" Height="17" Margin="0,3,0,0"/>
<TextBlock x:Name="UndoToolbarTextBlock" Text="撤销" Opacity="{Binding ElementName=BtnUndo, Path=IsEnabled, Converter={StaticResource IsEnabledToOpacityConverter}}" Foreground="Black" FontSize="8" Margin="0,1,0,0" TextAlignment="Center"/>
</ui:SimpleStackPanel>
<ui:SimpleStackPanel MouseDown="Border_MouseDown" MouseUp="SymbolIconRedo_MouseUp" Background="Transparent" Orientation="Vertical" HorizontalAlignment="Center" IsEnabled="{Binding ElementName=BtnRedo, Path=IsEnabled}" Width="28" Margin="0,-2">
<Image Source="/Resources/Icons-png/redo.png" RenderOptions.BitmapScalingMode="HighQuality" Width="28" Opacity="{Binding ElementName=BtnRedo, Path=IsEnabled, Converter={StaticResource IsEnabledToOpacityConverter}}" Height="17" Margin="0,3,0,0"/>
<ui:SimpleStackPanel MouseLeave="FloatingBarIcons_MouseUp_MouseLeave" MouseDown="FloatingBarIcons_MouseDown_New" MouseUp="SymbolIconRedo_MouseUp" IsHitTestVisible="{Binding ElementName=BtnUndo, Path=IsEnabled}" Background="Transparent" Orientation="Vertical" HorizontalAlignment="Center" IsEnabled="{Binding ElementName=BtnRedo, Path=IsEnabled}" Width="28" Margin="0,-2">
<Image Source="/Resources/new-icons/redo.png" RenderOptions.BitmapScalingMode="HighQuality" Width="28" Opacity="{Binding ElementName=BtnRedo, Path=IsEnabled, Converter={StaticResource IsEnabledToOpacityConverter}}" Height="17" Margin="0,3,0,0"/>
<TextBlock x:Name="RedoToolbarTextBlock" Text="重做" Opacity="{Binding ElementName=BtnRedo, Path=IsEnabled, Converter={StaticResource IsEnabledToOpacityConverter}}" Foreground="Black" FontSize="8" Margin="0,1,0,0" TextAlignment="Center"/>
</ui:SimpleStackPanel>
<ui:SimpleStackPanel MouseLeave="FloatingBarIcons_MouseUp_MouseLeave" MouseDown="FloatingBarIcons_MouseDown_New" MouseUp="CursorWithDelIcon_Click"

View File

@ -309,6 +309,7 @@ namespace Ink_Canvas {
private void SymbolIconUndo_MouseUp(object sender, MouseButtonEventArgs e) {
if (lastBorderMouseDownObject != sender) return;
FloatingBarIcons_MouseUp_New(sender);
if (!BtnUndo.IsEnabled) return;
BtnUndo_Click(BtnUndo, null);
HideSubPanels();
@ -316,6 +317,7 @@ namespace Ink_Canvas {
private void SymbolIconRedo_MouseUp(object sender, MouseButtonEventArgs e) {
if (lastBorderMouseDownObject != sender) return;
FloatingBarIcons_MouseUp_New(sender);
if (!BtnRedo.IsEnabled) return;
BtnRedo_Click(BtnRedo, null);
HideSubPanels();

View File

@ -91,7 +91,7 @@ namespace Ink_Canvas {
private void KeyDrawLine(object sender, ExecutedRoutedEventArgs e) {
if (StackPanelCanvasControls.Visibility == Visibility.Visible) {
BtnDrawLine_Click(lastMouseDownSender, e);
BtnDrawLine_Click(lastMouseDownSender, null);
}
}

View File

@ -27,9 +27,15 @@ namespace Ink_Canvas {
if ((ssp.Name == "Pen_Icon" && inkCanvas.EditingMode == InkCanvasEditingMode.Ink) || (ssp.Name == "Eraser_Icon" && inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) || (ssp.Name == "EraserByStrokes_Icon" && inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke) || (ssp.Name == "SymbolIconSelect" && inkCanvas.EditingMode == InkCanvasEditingMode.Select))
{
ssp.Background = new ImageBrush(new BitmapImage(new Uri("pack://application:,,,/Resources/Icons-png/check-box-background.png"))) { Opacity = 1 };
} else
}
else if (ssp.Name == "SymbolIconDelete")
{
ssp.Background = new ImageBrush(new BitmapImage(new Uri("pack://application:,,,/Resources/Icons-png/pressdown-background.png"))) { Opacity = 1 };
ssp.Background = new SolidColorBrush(Color.FromArgb(26, 153, 27, 27));
}
else
{
// ssp.Background = new ImageBrush(new BitmapImage(new Uri("pack://application:,,,/Resources/Icons-png/pressdown-background.png"))) { Opacity = 1 };
ssp.Background = new SolidColorBrush(Color.FromArgb(20, 0,0,0));
}
}
}

View File

@ -89,14 +89,21 @@ namespace Ink_Canvas {
isLongPressSelected = false;
}
private void BtnDrawLine_Click(object sender, EventArgs e) {
private void BtnDrawLine_Click(object sender, MouseButtonEventArgs e) {
if (lastMouseDownSender == sender) {
forceEraser = true;
drawingShapeMode = 1;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e == null || e.StylusDevice == null)
{ // e == null: 快捷键 alt + L
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
}
lastMouseDownSender = null;
if (isLongPressSelected) {
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) {
@ -108,14 +115,21 @@ namespace Ink_Canvas {
DrawShapePromptToPen();
}
private void BtnDrawDashedLine_Click(object sender, EventArgs e) {
private void BtnDrawDashedLine_Click(object sender, MouseButtonEventArgs e) {
if (lastMouseDownSender == sender) {
forceEraser = true;
drawingShapeMode = 8;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
}
lastMouseDownSender = null;
if (isLongPressSelected) {
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) {
@ -127,14 +141,21 @@ namespace Ink_Canvas {
DrawShapePromptToPen();
}
private void BtnDrawDotLine_Click(object sender, EventArgs e) {
private void BtnDrawDotLine_Click(object sender, MouseButtonEventArgs e) {
if (lastMouseDownSender == sender) {
forceEraser = true;
drawingShapeMode = 18;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
}
lastMouseDownSender = null;
if (isLongPressSelected) {
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) {
@ -146,14 +167,21 @@ namespace Ink_Canvas {
DrawShapePromptToPen();
}
private void BtnDrawArrow_Click(object sender, EventArgs e) {
private void BtnDrawArrow_Click(object sender, MouseButtonEventArgs e) {
if (lastMouseDownSender == sender) {
forceEraser = true;
drawingShapeMode = 2;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
}
lastMouseDownSender = null;
if (isLongPressSelected) {
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) {
@ -165,14 +193,21 @@ namespace Ink_Canvas {
DrawShapePromptToPen();
}
private void BtnDrawParallelLine_Click(object sender, EventArgs e) {
private void BtnDrawParallelLine_Click(object sender, MouseButtonEventArgs e) {
if (lastMouseDownSender == sender) {
forceEraser = true;
drawingShapeMode = 15;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
}
lastMouseDownSender = null;
if (isLongPressSelected) {
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) {
@ -184,180 +219,313 @@ namespace Ink_Canvas {
DrawShapePromptToPen();
}
private void BtnDrawCoordinate1_Click(object sender, EventArgs e) {
private void BtnDrawCoordinate1_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 11;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawCoordinate2_Click(object sender, EventArgs e) {
private void BtnDrawCoordinate2_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 12;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawCoordinate3_Click(object sender, EventArgs e) {
private void BtnDrawCoordinate3_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 13;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawCoordinate4_Click(object sender, EventArgs e) {
private void BtnDrawCoordinate4_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 14;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawCoordinate5_Click(object sender, EventArgs e) {
private void BtnDrawCoordinate5_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 17;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawRectangle_Click(object sender, EventArgs e) {
private void BtnDrawRectangle_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 3;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawRectangleCenter_Click(object sender, EventArgs e) {
private void BtnDrawRectangleCenter_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 19;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawEllipse_Click(object sender, EventArgs e) {
private void BtnDrawEllipse_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 4;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawCircle_Click(object sender, EventArgs e) {
private void BtnDrawCircle_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 5;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawCenterEllipse_Click(object sender, EventArgs e) {
private void BtnDrawCenterEllipse_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 16;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawCenterEllipseWithFocalPoint_Click(object sender, EventArgs e) {
private void BtnDrawCenterEllipseWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 23;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawDashedCircle_Click(object sender, EventArgs e) {
private void BtnDrawDashedCircle_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 10;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawHyperbola_Click(object sender, EventArgs e) {
private void BtnDrawHyperbola_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 24;
drawMultiStepShapeCurrentStep = 0;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawHyperbolaWithFocalPoint_Click(object sender, EventArgs e) {
private void BtnDrawHyperbolaWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 25;
drawMultiStepShapeCurrentStep = 0;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawParabola1_Click(object sender, EventArgs e) {
private void BtnDrawParabola1_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 20;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawParabolaWithFocalPoint_Click(object sender, EventArgs e) {
private void BtnDrawParabolaWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 22;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawParabola2_Click(object sender, EventArgs e) {
private void BtnDrawParabola2_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 21;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawCylinder_Click(object sender, EventArgs e) {
private void BtnDrawCylinder_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 6;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawCone_Click(object sender, EventArgs e) {
private void BtnDrawCone_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 7;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}
private void BtnDrawCuboid_Click(object sender, EventArgs e) {
private void BtnDrawCuboid_Click(object sender, MouseButtonEventArgs e) {
forceEraser = true;
drawingShapeMode = 9;
isFirstTouchCuboid = true;
@ -365,7 +533,14 @@ namespace Ink_Canvas {
CuboidFrontRectEndP = new Point();
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
DrawShapePromptToPen();
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB