CPF/CPF.Android/WindowImpl.cs
2023-11-21 23:05:03 +08:00

175 lines
6.3 KiB
C#

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using CPF.Controls;
using CPF.Drawing;
using CPF.Platform;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CPF.Android
{
public class WindowImpl : PopupImpl, IWindowImpl
{
public WindowImpl()
{
WindowType = WindowManagerTypes.DrawnApplication;
WindowFlags = WindowManagerFlags.LayoutNoLimits;
}
public Func<bool> Closing { get; set; }
public Action Closed { get; set; }
WindowState windowState;
public WindowState WindowState
{
get => windowState; set
{
if (this.LayoutParameters != null && Parent != null)
{
//if (windowState == WindowState.FullScreen)
//{
// //(Context as Activity).RequestWindowFeature(WindowFeatures.DefaultFeatures);
// (Context as Activity).Window.SetFlags(WindowManagerFlags.ForceNotFullscreen, WindowManagerFlags.ForceNotFullscreen);
//}
if (value == WindowState.Maximized || value == WindowState.FullScreen)
{
var size = Screen.WorkingArea.Size;
var main = (Context as CpfActivity).Main;
if (main != null)
{
size = new Size(main.Width, main.Height);
}
UpdateLayout(0, 0, (int)size.Width, (int)size.Height);
}
else if (value == WindowState.Normal)
{
if (normalRect.HasValue)
{
//Left = (int)normalRect.Value.Left;
//Top = (int)normalRect.Value.Top;
//LayoutParameters.Width = (int)normalRect.Value.Width;
//LayoutParameters.Height = (int)normalRect.Value.Height;
UpdateLayout((int)normalRect.Value.Left, (int)normalRect.Value.Top, (int)normalRect.Value.Width, (int)normalRect.Value.Height);
}
}
//else if (value == WindowState.FullScreen)
//{
// //(Context as Activity).RequestWindowFeature(WindowFeatures.NoTitle);//设置无标题
// (Context as Activity).Window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen);
// UpdateLayout(0, 0, (Context as Activity).Window.DecorView.Width, (Context as Activity).Window.DecorView.Height);
//}
}
this.Visibility = value == WindowState.Minimized ? ViewStates.Gone : ViewStates.Visible;
windowState = value;
}
}
protected override void OnVisibilityChanged(global::Android.Views.View changedView, [GeneratedEnum] ViewStates visibility)
{
base.OnVisibilityChanged(changedView, visibility);
windowState = visibility == ViewStates.Gone ? WindowState.Minimized : WindowState.Normal;
WindowStateChanged();
}
Rect? normalRect;
public override void SetVisible(bool visible)
{
//if ((windowState == WindowState.Maximized || windowState == WindowState.FullScreen) && visible)
//{
// Root.LayoutManager.ExecuteLayoutPass();
// var margin = new WindowManagerLayoutParams(WindowType, WindowFlags, global::Android.Graphics.Format.Rgbx8888);
// margin.Gravity = GravityFlags.Left | GravityFlags.Top;
// CpfActivity.CurrentActivity.WindowManager.AddView(this, margin);
//}
//else
//{
base.SetVisible(visible);
if (visible)
{
normalRect = new Rect(this.Left, this.Top, this.Width, this.Height);
}
//}
}
protected override void OnLayout(bool changed, int left, int top, int right, int bottom)
{
base.OnLayout(changed, left, top, right, bottom);
if (Width != (Context as Activity).Window.DecorView.Width && Height != (Context as Activity).Window.DecorView.Height && Location.X != 0 && Location.Y != 0)
{
normalRect = new Rect(Location.X, Location.Y, Width, Height);
}
}
protected override void OnMove()
{
if (Width != (Context as Activity).Window.DecorView.Width && Height != (Context as Activity).Window.DecorView.Height && Location.X != 0 && Location.Y != 0)
{
normalRect = new Rect(Location.X, Location.Y, Width, Height);
}
}
public Action WindowStateChanged { get; set; }
public bool IsMain { get; set; }
public void Close()
{
if (Closing())
{
return;
}
base.SetVisible(false);
Closed();
}
public void SetFullscreen(bool fullscreen)
{
//if (fullscreen)
//{
// (Context as Activity).RequestWindowFeature(WindowFeatures.NoTitle);//设置无标题
// (Context as Activity).Window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen);//设置全屏
//}
//else
//{
// (Context as Activity).RequestWindowFeature(WindowFeatures.DefaultFeatures);
// (Context as Activity).Window.SetFlags(WindowManagerFlags.ForceNotFullscreen, WindowManagerFlags.ForceNotFullscreen);
//}
}
public void SetIcon(Image image)
{
}
public void SetTitle(string text)
{
}
public void ShowDialog(Controls.Window window)
{
//SetVisible(true);
Root.Visibility = CPF.Visibility.Visible;
}
public void ShowInTaskbar(bool value)
{
}
public void TopMost(bool value)
{
}
public void SetEnable(bool enable)
{
}
}
}