RotationNavigation.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using Avalonia.Threading;
  2. using PicView.Avalonia.Gallery;
  3. using PicView.Avalonia.ViewModels;
  4. using PicView.Avalonia.WindowBehavior;
  5. using PicView.Core.Gallery;
  6. namespace PicView.Avalonia.ImageTransformations.Rotation;
  7. public static class RotationNavigation
  8. {
  9. public static async Task RotateRight(MainViewModel? vm)
  10. {
  11. if (vm is null)
  12. {
  13. return;
  14. }
  15. if (GalleryFunctions.IsFullGalleryOpen)
  16. {
  17. return;
  18. }
  19. await Dispatcher.UIThread.InvokeAsync(() => { vm.ImageViewer.Rotate(false); });
  20. }
  21. public static async Task RotateTo(MainViewModel? vm, int angle)
  22. {
  23. await Dispatcher.UIThread.InvokeAsync(() => { vm.ImageViewer.Rotate(angle); });
  24. vm.GlobalSettings.RotationAngle.Value = angle;
  25. await WindowResizing.SetSizeAsync(vm);
  26. }
  27. public static async Task RotateLeft(MainViewModel? vm)
  28. {
  29. if (vm is null)
  30. {
  31. return;
  32. }
  33. if (GalleryFunctions.IsFullGalleryOpen)
  34. {
  35. return;
  36. }
  37. await Dispatcher.UIThread.InvokeAsync(() => { vm.ImageViewer.Rotate(true); });
  38. }
  39. public static void Flip(MainViewModel vm)
  40. {
  41. Dispatcher.UIThread.Invoke(() => { vm.ImageViewer.Flip(true); });
  42. if (vm.PicViewer.ScaleX.CurrentValue == 1)
  43. {
  44. vm.PicViewer.ScaleX.Value = -1;
  45. vm.Translation.IsFlipped.Value = vm.Translation.UnFlip.CurrentValue;
  46. }
  47. else
  48. {
  49. vm.PicViewer.ScaleX.Value = 1;
  50. vm.Translation.IsFlipped.Value = vm.Translation.Flip.CurrentValue;
  51. }
  52. }
  53. /// <summary>
  54. /// Navigates up or rotates the image based on current state
  55. /// </summary>
  56. public static async Task NavigateUp(MainViewModel? vm)
  57. {
  58. if (vm is null)
  59. {
  60. return;
  61. }
  62. if (GalleryFunctions.IsFullGalleryOpen)
  63. {
  64. GalleryNavigation.NavigateGallery(Direction.Up, vm);
  65. return;
  66. }
  67. await Dispatcher.UIThread.InvokeAsync(() =>
  68. {
  69. if (vm.GlobalSettings.IsScrollingEnabled.CurrentValue)
  70. {
  71. vm.ImageViewer.ImageScrollViewer.LineUp();
  72. }
  73. else
  74. {
  75. vm.ImageViewer.Rotate(true);
  76. }
  77. });
  78. }
  79. /// <summary>
  80. /// Navigates down or rotates the image based on current state
  81. /// </summary>
  82. public static async Task NavigateDown(MainViewModel? vm)
  83. {
  84. if (vm is null)
  85. {
  86. return;
  87. }
  88. if (GalleryFunctions.IsFullGalleryOpen)
  89. {
  90. GalleryNavigation.NavigateGallery(Direction.Down, vm);
  91. return;
  92. }
  93. await Dispatcher.UIThread.InvokeAsync(() =>
  94. {
  95. if (vm.GlobalSettings.IsScrollingEnabled.CurrentValue)
  96. {
  97. vm.ImageViewer.ImageScrollViewer.LineDown();
  98. }
  99. else
  100. {
  101. vm.ImageViewer.Rotate(false);
  102. }
  103. });
  104. }
  105. }