add editor, fix some bugs

WIP
This commit is contained in:
Alex Bezdieniezhnykh
2024-09-10 17:10:54 +03:00
parent b4bedb7520
commit 52371ace3a
16 changed files with 498 additions and 148 deletions
+38 -23
View File
@@ -13,7 +13,8 @@ namespace Azaion.Annotator.Controls;
public class CanvasEditor : Canvas
{
private Point _lastPos;
public SelectionState SelectionState { get; set; } = SelectionState.None;
private readonly Rectangle _newAnnotationRect;
private Point _newAnnotationStartPos;
@@ -30,6 +31,19 @@ public class CanvasEditor : Canvas
public FormState FormState { get; set; } = null!;
public IMediator Mediator { get; set; } = null!;
public static readonly DependencyProperty GetTimeFuncProp =
DependencyProperty.Register(
nameof(GetTimeFunc),
typeof(Func<TimeSpan>),
typeof(CanvasEditor),
new PropertyMetadata(null));
public Func<TimeSpan> GetTimeFunc
{
get => (Func<TimeSpan>)GetValue(GetTimeFuncProp);
set => SetValue(GetTimeFuncProp, value);
}
private AnnotationClass _currentAnnClass = null!;
public AnnotationClass CurrentAnnClass
{
@@ -84,11 +98,7 @@ public class CanvasEditor : Canvas
Stroke = new SolidColorBrush(Colors.Gray),
Fill = new SolidColorBrush(Color.FromArgb(128, 128, 128, 128)),
};
Loaded += Init;
}
private void Init(object sender, RoutedEventArgs e)
{
KeyDown += (_, args) =>
{
Console.WriteLine($"pressed {args.Key}");
@@ -98,15 +108,21 @@ public class CanvasEditor : Canvas
MouseUp += CanvasMouseUp;
SizeChanged += CanvasResized;
Cursor = Cursors.Cross;
_horizontalLine.X1 = 0;
_horizontalLine.X2 = ActualWidth;
_verticalLine.Y1 = 0;
_verticalLine.Y2 = ActualHeight;
Children.Add(_newAnnotationRect);
Children.Add(_horizontalLine);
Children.Add(_verticalLine);
Children.Add(_classNameHint);
Loaded += Init;
}
private void Init(object sender, RoutedEventArgs e)
{
_horizontalLine.X1 = 0;
_horizontalLine.X2 = ActualWidth;
_verticalLine.Y1 = 0;
_verticalLine.Y2 = ActualHeight;
}
private void CanvasMouseDown(object sender, MouseButtonEventArgs e)
@@ -125,22 +141,22 @@ public class CanvasEditor : Canvas
if (e.LeftButton != MouseButtonState.Pressed)
return;
if (FormState.SelectionState == SelectionState.NewAnnCreating)
if (SelectionState == SelectionState.NewAnnCreating)
NewAnnotationCreatingMove(sender, e);
if (FormState.SelectionState == SelectionState.AnnResizing)
if (SelectionState == SelectionState.AnnResizing)
AnnotationResizeMove(sender, e);
if (FormState.SelectionState == SelectionState.AnnMoving)
if (SelectionState == SelectionState.AnnMoving)
AnnotationPositionMove(sender, e);
}
private void CanvasMouseUp(object sender, MouseButtonEventArgs e)
{
if (FormState.SelectionState == SelectionState.NewAnnCreating)
if (SelectionState == SelectionState.NewAnnCreating)
CreateAnnotation(e.GetPosition(this));
FormState.SelectionState = SelectionState.None;
SelectionState = SelectionState.None;
e.Handled = true;
}
@@ -154,7 +170,7 @@ public class CanvasEditor : Canvas
private void AnnotationResizeStart(object sender, MouseEventArgs e)
{
FormState.SelectionState = SelectionState.AnnResizing;
SelectionState = SelectionState.AnnResizing;
_lastPos = e.GetPosition(this);
_curRec = (Rectangle)sender;
_curAnn = (AnnotationControl)((Grid)_curRec.Parent).Parent;
@@ -163,7 +179,7 @@ public class CanvasEditor : Canvas
private void AnnotationResizeMove(object sender, MouseEventArgs e)
{
if (FormState.SelectionState != SelectionState.AnnResizing)
if (SelectionState != SelectionState.AnnResizing)
return;
var currentPos = e.GetPosition(this);
@@ -224,13 +240,13 @@ public class CanvasEditor : Canvas
_curAnn.IsSelected = true;
FormState.SelectionState = SelectionState.AnnMoving;
SelectionState = SelectionState.AnnMoving;
e.Handled = true;
}
private void AnnotationPositionMove(object sender, MouseEventArgs e)
{
if (FormState.SelectionState != SelectionState.AnnMoving)
if (SelectionState != SelectionState.AnnMoving)
return;
var currentPos = e.GetPosition(this);
@@ -255,12 +271,12 @@ public class CanvasEditor : Canvas
SetTop(_newAnnotationRect, _newAnnotationStartPos.Y);
_newAnnotationRect.MouseMove += NewAnnotationCreatingMove;
FormState.SelectionState = SelectionState.NewAnnCreating;
SelectionState = SelectionState.NewAnnCreating;
}
private void NewAnnotationCreatingMove(object sender, MouseEventArgs e)
{
if (FormState.SelectionState != SelectionState.NewAnnCreating)
if (SelectionState != SelectionState.NewAnnCreating)
return;
var currentPos = e.GetPosition(this);
@@ -284,8 +300,7 @@ public class CanvasEditor : Canvas
if (width < MIN_SIZE || height < MIN_SIZE)
return;
var mainWindow = (MainWindow)((Window)((Grid)Parent).Parent).Owner;
var time = TimeSpan.FromMilliseconds(mainWindow.VideoView.MediaPlayer.Time);
var time = GetTimeFunc();
CreateAnnotation(CurrentAnnClass, time, new CanvasLabel
{
Width = width,