PopupImpl.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Android.App;
  6. using Android.Content;
  7. using Android.Graphics;
  8. using Android.OS;
  9. using Android.Runtime;
  10. using Android.Views;
  11. using Android.Widget;
  12. using Avalonia.Controls;
  13. using Avalonia.Platform;
  14. namespace Avalonia.Android.Platform.SkiaPlatform
  15. {
  16. class PopupImpl : TopLevelImpl, IPopupImpl
  17. {
  18. private Point _position;
  19. private bool _isAdded;
  20. Action IWindowBaseImpl.Activated { get; set; }
  21. public Action<Point> PositionChanged { get; set; }
  22. public Action Deactivated { get; set; }
  23. public PopupImpl() : base(ActivityTracker.Current, true)
  24. {
  25. }
  26. private Size _clientSize = new Size(1, 1);
  27. public void Resize(Size value)
  28. {
  29. if (View == null)
  30. return;
  31. _clientSize = value;
  32. UpdateParams();
  33. }
  34. public void SetMinMaxSize(Size minSize, Size maxSize)
  35. {
  36. }
  37. public IScreenImpl Screen { get; }
  38. public Point Position
  39. {
  40. get { return _position; }
  41. set
  42. {
  43. _position = value;
  44. PositionChanged?.Invoke(_position);
  45. UpdateParams();
  46. }
  47. }
  48. WindowManagerLayoutParams CreateParams() => new WindowManagerLayoutParams(0,
  49. WindowManagerFlags.NotTouchModal, Format.Translucent)
  50. {
  51. Gravity = GravityFlags.Left | GravityFlags.Top,
  52. WindowAnimations = 0,
  53. X = (int) _position.X,
  54. Y = (int) _position.Y,
  55. Width = Math.Max(1, (int) _clientSize.Width),
  56. Height = Math.Max(1, (int) _clientSize.Height)
  57. };
  58. void UpdateParams()
  59. {
  60. if (_isAdded)
  61. ActivityTracker.Current?.WindowManager?.UpdateViewLayout(View, CreateParams());
  62. }
  63. public override void Show()
  64. {
  65. if (_isAdded)
  66. return;
  67. ActivityTracker.Current.WindowManager.AddView(View, CreateParams());
  68. _isAdded = true;
  69. }
  70. public override void Hide()
  71. {
  72. if (_isAdded)
  73. {
  74. var wm = View.Context.ApplicationContext.GetSystemService(Context.WindowService)
  75. .JavaCast<IWindowManager>();
  76. wm.RemoveView(View);
  77. _isAdded = false;
  78. }
  79. }
  80. public override void Dispose()
  81. {
  82. Hide();
  83. base.Dispose();
  84. }
  85. public void Activate()
  86. {
  87. }
  88. public void BeginMoveDrag()
  89. {
  90. //Not supported
  91. }
  92. public void BeginResizeDrag(WindowEdge edge)
  93. {
  94. //Not supported
  95. }
  96. }
  97. }