mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-04-05 17:37:51 +08:00
328 lines
13 KiB
C#
328 lines
13 KiB
C#
using CPF.Mac.Foundation;
|
|
using CPF.Mac.ObjCRuntime;
|
|
using System;
|
|
using System.ComponentModel;
|
|
|
|
namespace CPF.Mac.AppKit
|
|
{
|
|
[Register("NSTextInputContext", true)]
|
|
public class NSTextInputContext : NSObject
|
|
{
|
|
|
|
private const string selAcceptsGlyphInfo = "acceptsGlyphInfo";
|
|
|
|
private static readonly IntPtr selAcceptsGlyphInfoHandle = Selector.GetHandle("acceptsGlyphInfo");
|
|
|
|
private const string selActivate = "activate";
|
|
|
|
private static readonly IntPtr selActivateHandle = Selector.GetHandle("activate");
|
|
|
|
private const string selAllowedInputSourceLocales = "allowedInputSourceLocales";
|
|
|
|
private static readonly IntPtr selAllowedInputSourceLocalesHandle = Selector.GetHandle("allowedInputSourceLocales");
|
|
|
|
private const string selClient = "client";
|
|
|
|
private static readonly IntPtr selClientHandle = Selector.GetHandle("client");
|
|
|
|
private const string selCurrentInputContext = "currentInputContext";
|
|
|
|
private static readonly IntPtr selCurrentInputContextHandle = Selector.GetHandle("currentInputContext");
|
|
|
|
private const string selDeactivate = "deactivate";
|
|
|
|
private static readonly IntPtr selDeactivateHandle = Selector.GetHandle("deactivate");
|
|
|
|
private const string selDiscardMarkedText = "discardMarkedText";
|
|
|
|
private static readonly IntPtr selDiscardMarkedTextHandle = Selector.GetHandle("discardMarkedText");
|
|
|
|
private const string selHandleEvent_ = "handleEvent:";
|
|
|
|
private static readonly IntPtr selHandleEvent_Handle = Selector.GetHandle("handleEvent:");
|
|
|
|
private const string selInitWithClient_ = "initWithClient:";
|
|
|
|
private static readonly IntPtr selInitWithClient_Handle = Selector.GetHandle("initWithClient:");
|
|
|
|
private const string selInvalidateCharacterCoordinates = "invalidateCharacterCoordinates";
|
|
|
|
private static readonly IntPtr selInvalidateCharacterCoordinatesHandle = Selector.GetHandle("invalidateCharacterCoordinates");
|
|
|
|
private const string selKeyboardInputSources = "keyboardInputSources";
|
|
|
|
private static readonly IntPtr selKeyboardInputSourcesHandle = Selector.GetHandle("keyboardInputSources");
|
|
|
|
private const string selLocalizedNameForInputSource_ = "localizedNameForInputSource:";
|
|
|
|
private static readonly IntPtr selLocalizedNameForInputSource_Handle = Selector.GetHandle("localizedNameForInputSource:");
|
|
|
|
private const string selSelectedKeyboardInputSource = "selectedKeyboardInputSource";
|
|
|
|
private static readonly IntPtr selSelectedKeyboardInputSourceHandle = Selector.GetHandle("selectedKeyboardInputSource");
|
|
|
|
private const string selSetAcceptsGlyphInfo_ = "setAcceptsGlyphInfo:";
|
|
|
|
private static readonly IntPtr selSetAcceptsGlyphInfo_Handle = Selector.GetHandle("setAcceptsGlyphInfo:");
|
|
|
|
private const string selSetAllowedInputSourceLocales_ = "setAllowedInputSourceLocales:";
|
|
|
|
private static readonly IntPtr selSetAllowedInputSourceLocales_Handle = Selector.GetHandle("setAllowedInputSourceLocales:");
|
|
|
|
private const string selSetSelectedKeyboardInputSource_ = "setSelectedKeyboardInputSource:";
|
|
|
|
private static readonly IntPtr selSetSelectedKeyboardInputSource_Handle = Selector.GetHandle("setSelectedKeyboardInputSource:");
|
|
|
|
private static readonly IntPtr class_ptr = Class.GetHandle("NSTextInputContext");
|
|
|
|
private static NSString _KeyboardSelectionDidChangeNotification;
|
|
|
|
public override IntPtr ClassHandle => class_ptr;
|
|
|
|
public virtual bool AcceptsGlyphInfo
|
|
{
|
|
[Export("acceptsGlyphInfo")]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (base.IsDirectBinding)
|
|
{
|
|
return Messaging.bool_objc_msgSend(base.Handle, selAcceptsGlyphInfoHandle);
|
|
}
|
|
return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selAcceptsGlyphInfoHandle);
|
|
}
|
|
[Export("setAcceptsGlyphInfo:")]
|
|
set
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (base.IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_bool(base.Handle, selSetAcceptsGlyphInfo_Handle, value);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_bool(base.SuperHandle, selSetAcceptsGlyphInfo_Handle, value);
|
|
}
|
|
}
|
|
}
|
|
|
|
public virtual string[] AllowedInputSourceLocales
|
|
{
|
|
[Export("allowedInputSourceLocales", ArgumentSemantic.Copy)]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (base.IsDirectBinding)
|
|
{
|
|
return NSArray.StringArrayFromHandle(Messaging.IntPtr_objc_msgSend(base.Handle, selAllowedInputSourceLocalesHandle));
|
|
}
|
|
return NSArray.StringArrayFromHandle(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selAllowedInputSourceLocalesHandle));
|
|
}
|
|
[Export("setAllowedInputSourceLocales:", ArgumentSemantic.Copy)]
|
|
set
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
NSArray nSArray = (value == null) ? null : NSArray.FromStrings(value);
|
|
if (base.IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetAllowedInputSourceLocales_Handle, nSArray?.Handle ?? IntPtr.Zero);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetAllowedInputSourceLocales_Handle, nSArray?.Handle ?? IntPtr.Zero);
|
|
}
|
|
nSArray?.Dispose();
|
|
}
|
|
}
|
|
|
|
//public virtual NSTextInputClient Client
|
|
//{
|
|
// [Export("client")]
|
|
// get
|
|
// {
|
|
// NSApplication.EnsureUIThread();
|
|
// if (base.IsDirectBinding)
|
|
// {
|
|
// return Runtime.GetINativeObject<NSTextInputClient>(Messaging.IntPtr_objc_msgSend(base.Handle, selClientHandle), owns: false);
|
|
// }
|
|
// return Runtime.GetINativeObject<NSTextInputClient>(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selClientHandle), owns: false);
|
|
// }
|
|
//}
|
|
|
|
private static object __mt_CurrentInputContext_var_static;
|
|
|
|
public static NSTextInputContext CurrentInputContext
|
|
{
|
|
[Export("currentInputContext")]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
//return Runtime.GetNSObject<NSTextInputContext>(Messaging.IntPtr_objc_msgSend(class_ptr, selCurrentInputContextHandle));
|
|
return (NSTextInputContext)(__mt_CurrentInputContext_var_static = (NSTextInputContext)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selCurrentInputContextHandle)));
|
|
}
|
|
}
|
|
|
|
public virtual string[] KeyboardInputSources
|
|
{
|
|
[Export("keyboardInputSources")]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (base.IsDirectBinding)
|
|
{
|
|
return NSArray.StringArrayFromHandle(Messaging.IntPtr_objc_msgSend(base.Handle, selKeyboardInputSourcesHandle));
|
|
}
|
|
return NSArray.StringArrayFromHandle(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selKeyboardInputSourcesHandle));
|
|
}
|
|
}
|
|
|
|
public virtual string SelectedKeyboardInputSource
|
|
{
|
|
[Export("selectedKeyboardInputSource")]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (base.IsDirectBinding)
|
|
{
|
|
return NSString.FromHandle(Messaging.IntPtr_objc_msgSend(base.Handle, selSelectedKeyboardInputSourceHandle));
|
|
}
|
|
return NSString.FromHandle(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selSelectedKeyboardInputSourceHandle));
|
|
}
|
|
[Export("setSelectedKeyboardInputSource:")]
|
|
set
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
IntPtr intPtr = NSString.CreateNative(value);
|
|
if (base.IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetSelectedKeyboardInputSource_Handle, intPtr);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetSelectedKeyboardInputSource_Handle, intPtr);
|
|
}
|
|
NSString.ReleaseNative(intPtr);
|
|
}
|
|
}
|
|
|
|
[Field("NSTextInputContextKeyboardSelectionDidChangeNotification", "AppKit")]
|
|
[Advice("Use NSTextInputContext.Notifications.ObserveKeyboardSelectionDidChange helper method instead.")]
|
|
public static NSString KeyboardSelectionDidChangeNotification
|
|
{
|
|
get
|
|
{
|
|
if (_KeyboardSelectionDidChangeNotification == null)
|
|
{
|
|
_KeyboardSelectionDidChangeNotification = Dlfcn.GetStringConstant(Libraries.AppKit.Handle, "NSTextInputContextKeyboardSelectionDidChangeNotification");
|
|
}
|
|
return _KeyboardSelectionDidChangeNotification;
|
|
}
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
|
[Export("init")]
|
|
public NSTextInputContext()
|
|
: base(NSObjectFlag.Empty)
|
|
{
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
|
protected NSTextInputContext(NSObjectFlag t)
|
|
: base(t)
|
|
{
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
|
public NSTextInputContext(IntPtr handle)
|
|
: base(handle)
|
|
{
|
|
}
|
|
|
|
|
|
[Export("activate")]
|
|
public virtual void Activate()
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (base.IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend(base.Handle, selActivateHandle);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper(base.SuperHandle, selActivateHandle);
|
|
}
|
|
}
|
|
|
|
[Export("deactivate")]
|
|
public virtual void Deactivate()
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (base.IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend(base.Handle, selDeactivateHandle);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper(base.SuperHandle, selDeactivateHandle);
|
|
}
|
|
}
|
|
|
|
[Export("discardMarkedText")]
|
|
public virtual void DiscardMarkedText()
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (base.IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend(base.Handle, selDiscardMarkedTextHandle);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper(base.SuperHandle, selDiscardMarkedTextHandle);
|
|
}
|
|
}
|
|
|
|
[Export("handleEvent:")]
|
|
public virtual bool HandleEvent(NSEvent theEvent)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (theEvent == null)
|
|
{
|
|
throw new ArgumentNullException("theEvent");
|
|
}
|
|
if (base.IsDirectBinding)
|
|
{
|
|
return Messaging.bool_objc_msgSend_IntPtr(base.Handle, selHandleEvent_Handle, theEvent.Handle);
|
|
}
|
|
return Messaging.bool_objc_msgSendSuper_IntPtr(base.SuperHandle, selHandleEvent_Handle, theEvent.Handle);
|
|
}
|
|
|
|
[Export("invalidateCharacterCoordinates")]
|
|
public virtual void InvalidateCharacterCoordinates()
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (base.IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend(base.Handle, selInvalidateCharacterCoordinatesHandle);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper(base.SuperHandle, selInvalidateCharacterCoordinatesHandle);
|
|
}
|
|
}
|
|
|
|
[Export("localizedNameForInputSource:")]
|
|
public static string LocalizedNameForInputSource(string inputSourceIdentifier)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (inputSourceIdentifier == null)
|
|
{
|
|
throw new ArgumentNullException("inputSourceIdentifier");
|
|
}
|
|
IntPtr intPtr = NSString.CreateNative(inputSourceIdentifier);
|
|
string result = NSString.FromHandle(Messaging.IntPtr_objc_msgSend_IntPtr(class_ptr, selLocalizedNameForInputSource_Handle, intPtr));
|
|
NSString.ReleaseNative(intPtr);
|
|
return result;
|
|
}
|
|
}
|
|
}
|