WindowImpl.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System;
  2. using System.Linq.Expressions;
  3. using Avalonia.Controls;
  4. using Avalonia.Gtk3.Interop;
  5. using Avalonia.Platform;
  6. using System.Runtime.InteropServices;
  7. namespace Avalonia.Gtk3
  8. {
  9. class WindowImpl : WindowBaseImpl, IWindowImpl
  10. {
  11. public WindowImpl() : base(Native.GtkWindowNew(GtkWindowType.TopLevel))
  12. {
  13. }
  14. public void SetTitle(string title)
  15. {
  16. using (var t = new Utf8Buffer(title))
  17. Native.GtkWindowSetTitle(GtkWidget, t);
  18. }
  19. public WindowState WindowState
  20. {
  21. get
  22. {
  23. var state = Native.GdkWindowGetState(Native.GtkWidgetGetWindow(GtkWidget));
  24. if (state.HasFlag(GdkWindowState.Iconified))
  25. return WindowState.Minimized;
  26. if (state.HasFlag(GdkWindowState.Maximized))
  27. return WindowState.Maximized;
  28. return WindowState.Normal;
  29. }
  30. set
  31. {
  32. if (value == WindowState.Minimized)
  33. Native.GtkWindowIconify(GtkWidget);
  34. else if (value == WindowState.Maximized)
  35. Native.GtkWindowMaximize(GtkWidget);
  36. else
  37. {
  38. Native.GtkWindowUnmaximize(GtkWidget);
  39. Native.GtkWindowDeiconify(GtkWidget);
  40. }
  41. }
  42. }
  43. public IDisposable ShowDialog()
  44. {
  45. Native.GtkWindowSetModal(GtkWidget, true);
  46. Show();
  47. return new EmptyDisposable();
  48. }
  49. public void SetSystemDecorations(bool enabled) => Native.GtkWindowSetDecorated(GtkWidget, enabled);
  50. public void SetIcon(IWindowIconImpl icon) => Native.GtkWindowSetIcon(GtkWidget, (Pixbuf) icon);
  51. public void SetCoverTaskbarWhenMaximized(bool enable)
  52. {
  53. //Why do we even have that?
  54. }
  55. public void ShowTaskbarIcon(bool value) => Native.GtkWindowSetSkipTaskbarHint(GtkWidget, !value);
  56. public void CanResize(bool value) => Native.GtkWindowSetResizable(GtkWidget, value);
  57. class EmptyDisposable : IDisposable
  58. {
  59. public void Dispose()
  60. {
  61. }
  62. }
  63. }
  64. }