|
@@ -2,8 +2,10 @@ using Avalonia;
|
|
|
using Avalonia.Controls;
|
|
|
using Avalonia.Input;
|
|
|
using Avalonia.Media;
|
|
|
+using PicView.Avalonia.UI;
|
|
|
using PicView.Avalonia.ViewModels;
|
|
|
using PicView.Avalonia.WindowBehavior;
|
|
|
+using R3;
|
|
|
|
|
|
namespace PicView.Avalonia.MacOS.Views;
|
|
|
|
|
@@ -57,9 +59,64 @@ public partial class MacOSTitlebar : UserControl
|
|
|
catch (Exception) { }
|
|
|
#endif
|
|
|
}
|
|
|
+
|
|
|
+ Observable.EveryValueChanged(this, x => x.RotationContextMenu.IsOpen, UIHelper.GetFrameProvider)
|
|
|
+ .Subscribe(_ =>
|
|
|
+ {
|
|
|
+ UpdateRotation();
|
|
|
+ });
|
|
|
+
|
|
|
+ RotateRightButton.PointerPressed += (_, e) =>
|
|
|
+ {
|
|
|
+ OpenContextMenu(e);
|
|
|
+ };
|
|
|
+ FlipButton.PointerPressed += (_, e) =>
|
|
|
+ {
|
|
|
+ OpenContextMenu(e);
|
|
|
+ };
|
|
|
};
|
|
|
PointerPressed += (_, e) => MoveWindow(e);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ private void OpenContextMenu(PointerPressedEventArgs e)
|
|
|
+ {
|
|
|
+ if (!e.GetCurrentPoint(this).Properties.IsRightButtonPressed)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Context menu doesn't want to be opened normally
|
|
|
+ RotationContextMenu.Open();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void UpdateRotation()
|
|
|
+ {
|
|
|
+ if (DataContext is not MainViewModel vm)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Rotation0Item.IsChecked = false;
|
|
|
+ Rotation90Item.IsChecked = false;
|
|
|
+ Rotation180Item.IsChecked = false;
|
|
|
+ Rotation270Item.IsChecked = false;
|
|
|
+ switch (vm.GlobalSettings.RotationAngle.CurrentValue)
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ Rotation0Item.IsChecked = true;
|
|
|
+ break;
|
|
|
+ case 90:
|
|
|
+ Rotation90Item.IsChecked = true;
|
|
|
+ break;
|
|
|
+ case 180:
|
|
|
+ Rotation180Item.IsChecked = true;
|
|
|
+ break;
|
|
|
+ case 270:
|
|
|
+ Rotation270Item.IsChecked = true;
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
private void MoveWindow(PointerPressedEventArgs e)
|
|
|
{
|