Tool.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using PixiEditor.Helpers;
  2. using PixiEditor.Helpers.Extensions;
  3. using PixiEditor.Models.Controllers;
  4. using PixiEditor.Models.Tools.ToolSettings;
  5. using PixiEditor.Models.Tools.ToolSettings.Toolbars;
  6. using System.Windows.Input;
  7. using SkiaSharp;
  8. using PixiEditor.Models.DataHolders;
  9. namespace PixiEditor.Models.Tools
  10. {
  11. public abstract class Tool : NotifyableObject
  12. {
  13. public KeyCombination Shortcut { get; set; }
  14. public virtual string ToolName => GetType().Name.Replace("Tool", string.Empty);
  15. public virtual string DisplayName => ToolName.AddSpacesBeforeUppercaseLetters();
  16. public virtual string ImagePath => $"/Images/Tools/{ToolName}Image.png";
  17. public virtual bool HideHighlight { get; }
  18. public virtual bool RequiresPreciseMouseData { get; }
  19. public abstract string Tooltip { get; }
  20. public string ActionDisplay
  21. {
  22. get => actionDisplay;
  23. set
  24. {
  25. actionDisplay = value;
  26. RaisePropertyChanged("ActionDisplay");
  27. }
  28. }
  29. public bool IsActive
  30. {
  31. get => isActive;
  32. set
  33. {
  34. isActive = value;
  35. RaisePropertyChanged("IsActive");
  36. }
  37. }
  38. public Cursor Cursor { get; set; } = Cursors.Arrow;
  39. public Toolbar Toolbar { get; set; } = new EmptyToolbar();
  40. public ToolSession Session { get; set; }
  41. private bool isActive;
  42. private string actionDisplay = string.Empty;
  43. public virtual void OnKeyDown(Key key) { }
  44. public virtual void OnKeyUp(Key key) { }
  45. public virtual void BeforeUse() { }
  46. /// <summary>
  47. /// Called when the tool finished executing
  48. /// </summary>
  49. /// <param name="sessionRect">A rectangle which was created during session</param>
  50. public virtual void AfterUse(SKRectI sessionRect) { }
  51. public virtual void UpdateActionDisplay(bool ctrlIsDown, bool shiftIsDown, bool altIsDown) { }
  52. }
  53. }