mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-04-05 17:37:51 +08:00
265 lines
8.0 KiB
C#
265 lines
8.0 KiB
C#
using CPF.Mac.CoreAnimation;
|
|
using CPF.Mac.Foundation;
|
|
using CPF.Mac.ObjCRuntime;
|
|
using System;
|
|
using System.ComponentModel;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace CPF.Mac.AppKit
|
|
{
|
|
[Register("NSAnimationContext", true)]
|
|
public class NSAnimationContext : NSObject
|
|
{
|
|
private static readonly IntPtr selCurrentContextHandle = Selector.GetHandle("currentContext");
|
|
|
|
private static readonly IntPtr selDurationHandle = Selector.GetHandle("duration");
|
|
|
|
private static readonly IntPtr selSetDuration_Handle = Selector.GetHandle("setDuration:");
|
|
|
|
private static readonly IntPtr selCompletionHandlerHandle = Selector.GetHandle("completionHandler");
|
|
|
|
private static readonly IntPtr selSetCompletionHandler_Handle = Selector.GetHandle("setCompletionHandler:");
|
|
|
|
private static readonly IntPtr selTimingFunctionHandle = Selector.GetHandle("timingFunction");
|
|
|
|
private static readonly IntPtr selSetTimingFunction_Handle = Selector.GetHandle("setTimingFunction:");
|
|
|
|
private static readonly IntPtr selAllowsImplicitAnimationHandle = Selector.GetHandle("allowsImplicitAnimation");
|
|
|
|
private static readonly IntPtr selSetAllowsImplicitAnimation_Handle = Selector.GetHandle("setAllowsImplicitAnimation:");
|
|
|
|
private static readonly IntPtr selBeginGroupingHandle = Selector.GetHandle("beginGrouping");
|
|
|
|
private static readonly IntPtr selEndGroupingHandle = Selector.GetHandle("endGrouping");
|
|
|
|
private static readonly IntPtr selRunAnimationGroupCompletionHandler_Handle = Selector.GetHandle("runAnimationGroup:completionHandler:");
|
|
|
|
private static readonly IntPtr class_ptr = Class.GetHandle("NSAnimationContext");
|
|
|
|
private static object __mt_CurrentContext_var_static;
|
|
|
|
private object __mt_TimingFunction_var;
|
|
|
|
public override IntPtr ClassHandle => class_ptr;
|
|
|
|
public static NSAnimationContext CurrentContext
|
|
{
|
|
[Export("currentContext")]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
return (NSAnimationContext)(__mt_CurrentContext_var_static = (NSAnimationContext)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selCurrentContextHandle)));
|
|
}
|
|
}
|
|
|
|
public virtual double Duration
|
|
{
|
|
[Export("duration")]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
return Messaging.Double_objc_msgSend(base.Handle, selDurationHandle);
|
|
}
|
|
return Messaging.Double_objc_msgSendSuper(base.SuperHandle, selDurationHandle);
|
|
}
|
|
[Export("setDuration:")]
|
|
set
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_Double(base.Handle, selSetDuration_Handle, value);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_Double(base.SuperHandle, selSetDuration_Handle, value);
|
|
}
|
|
}
|
|
}
|
|
|
|
public unsafe virtual NSAction CompletionHandler
|
|
{
|
|
[Export("completionHandler")]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
BlockLiteral* ptr = (BlockLiteral*)((!IsDirectBinding) ? ((void*)Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selCompletionHandlerHandle)) : ((void*)Messaging.IntPtr_objc_msgSend(base.Handle, selCompletionHandlerHandle)));
|
|
if (ptr == null)
|
|
{
|
|
return null;
|
|
}
|
|
return (NSAction)((ptr->global_handle != IntPtr.Zero) ? GCHandle.FromIntPtr(ptr->global_handle).Target : GCHandle.FromIntPtr(ptr->local_handle).Target);
|
|
}
|
|
[Export("setCompletionHandler:")]
|
|
set
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (value == null)
|
|
{
|
|
throw new ArgumentNullException("value");
|
|
}
|
|
BlockLiteral blockLiteral = default(BlockLiteral);
|
|
BlockLiteral* ptr = &blockLiteral;
|
|
blockLiteral.SetupBlock(Trampolines.SDNSAction.Handler, value);
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetCompletionHandler_Handle, (IntPtr)(void*)ptr);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetCompletionHandler_Handle, (IntPtr)(void*)ptr);
|
|
}
|
|
ptr->CleanupBlock();
|
|
}
|
|
}
|
|
|
|
public virtual CAMediaTimingFunction TimingFunction
|
|
{
|
|
[Export("timingFunction")]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
return (CAMediaTimingFunction)(__mt_TimingFunction_var = ((!IsDirectBinding) ? ((CAMediaTimingFunction)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selTimingFunctionHandle))) : ((CAMediaTimingFunction)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selTimingFunctionHandle)))));
|
|
}
|
|
[Export("setTimingFunction:")]
|
|
set
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (value == null)
|
|
{
|
|
throw new ArgumentNullException("value");
|
|
}
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetTimingFunction_Handle, value.Handle);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetTimingFunction_Handle, value.Handle);
|
|
}
|
|
__mt_TimingFunction_var = value;
|
|
}
|
|
}
|
|
|
|
[MountainLion]
|
|
public virtual bool AllowsImplicitAnimation
|
|
{
|
|
[MountainLion]
|
|
[Export("allowsImplicitAnimation")]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
return Messaging.bool_objc_msgSend(base.Handle, selAllowsImplicitAnimationHandle);
|
|
}
|
|
return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selAllowsImplicitAnimationHandle);
|
|
}
|
|
[MountainLion]
|
|
[Export("setAllowsImplicitAnimation:")]
|
|
set
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_bool(base.Handle, selSetAllowsImplicitAnimation_Handle, value);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_bool(base.SuperHandle, selSetAllowsImplicitAnimation_Handle, value);
|
|
}
|
|
}
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
|
[Export("init")]
|
|
public NSAnimationContext()
|
|
: base(NSObjectFlag.Empty)
|
|
{
|
|
if (IsDirectBinding)
|
|
{
|
|
base.Handle = Messaging.IntPtr_objc_msgSend(base.Handle, Selector.Init);
|
|
}
|
|
else
|
|
{
|
|
base.Handle = Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, Selector.Init);
|
|
}
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
|
[Export("initWithCoder:")]
|
|
public NSAnimationContext(NSCoder coder)
|
|
: base(NSObjectFlag.Empty)
|
|
{
|
|
if (IsDirectBinding)
|
|
{
|
|
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, Selector.InitWithCoder, coder.Handle);
|
|
}
|
|
else
|
|
{
|
|
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, Selector.InitWithCoder, coder.Handle);
|
|
}
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
|
public NSAnimationContext(NSObjectFlag t)
|
|
: base(t)
|
|
{
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
|
public NSAnimationContext(IntPtr handle)
|
|
: base(handle)
|
|
{
|
|
}
|
|
|
|
[Export("beginGrouping")]
|
|
public static void BeginGrouping()
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
Messaging.void_objc_msgSend(class_ptr, selBeginGroupingHandle);
|
|
}
|
|
|
|
[Export("endGrouping")]
|
|
public static void EndGrouping()
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
Messaging.void_objc_msgSend(class_ptr, selEndGroupingHandle);
|
|
}
|
|
|
|
[Export("runAnimationGroup:completionHandler:")]
|
|
public unsafe static void RunAnimation(Action<NSAnimationContext> changes, NSAction completionHandler)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (changes == null)
|
|
{
|
|
throw new ArgumentNullException("changes");
|
|
}
|
|
if (completionHandler == null)
|
|
{
|
|
throw new ArgumentNullException("completionHandler");
|
|
}
|
|
BlockLiteral blockLiteral = default(BlockLiteral);
|
|
BlockLiteral* ptr = &blockLiteral;
|
|
blockLiteral.SetupBlock(Trampolines.SDActionArity1V0.Handler, changes);
|
|
BlockLiteral blockLiteral2 = default(BlockLiteral);
|
|
BlockLiteral* ptr2 = &blockLiteral2;
|
|
blockLiteral2.SetupBlock(Trampolines.SDNSAction.Handler, completionHandler);
|
|
Messaging.void_objc_msgSend_IntPtr_IntPtr(class_ptr, selRunAnimationGroupCompletionHandler_Handle, (IntPtr)(void*)ptr, (IntPtr)(void*)ptr2);
|
|
ptr->CleanupBlock();
|
|
ptr2->CleanupBlock();
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
base.Dispose(disposing);
|
|
if (base.Handle == IntPtr.Zero)
|
|
{
|
|
__mt_TimingFunction_var = null;
|
|
}
|
|
}
|
|
}
|
|
}
|