mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-04-05 17:37:51 +08:00
402 lines
14 KiB
C#
402 lines
14 KiB
C#
using CPF.Mac.CoreGraphics;
|
|
using CPF.Mac.Foundation;
|
|
using CPF.Mac.ObjCRuntime;
|
|
using System;
|
|
using System.ComponentModel;
|
|
|
|
namespace CPF.Mac.AppKit
|
|
{
|
|
[Register("NSTextBlock", true)]
|
|
public class NSTextBlock : NSObject
|
|
{
|
|
private static readonly IntPtr selContentWidthHandle = Selector.GetHandle("contentWidth");
|
|
|
|
private static readonly IntPtr selContentWidthValueTypeHandle = Selector.GetHandle("contentWidthValueType");
|
|
|
|
private static readonly IntPtr selVerticalAlignmentHandle = Selector.GetHandle("verticalAlignment");
|
|
|
|
private static readonly IntPtr selSetVerticalAlignment_Handle = Selector.GetHandle("setVerticalAlignment:");
|
|
|
|
private static readonly IntPtr selBackgroundColorHandle = Selector.GetHandle("backgroundColor");
|
|
|
|
private static readonly IntPtr selSetBackgroundColor_Handle = Selector.GetHandle("setBackgroundColor:");
|
|
|
|
private static readonly IntPtr selSetValueTypeForDimension_Handle = Selector.GetHandle("setValue:type:forDimension:");
|
|
|
|
private static readonly IntPtr selValueForDimension_Handle = Selector.GetHandle("valueForDimension:");
|
|
|
|
private static readonly IntPtr selValueTypeForDimension_Handle = Selector.GetHandle("valueTypeForDimension:");
|
|
|
|
private static readonly IntPtr selSetContentWidthType_Handle = Selector.GetHandle("setContentWidth:type:");
|
|
|
|
private static readonly IntPtr selSetWidthTypeForLayerEdge_Handle = Selector.GetHandle("setWidth:type:forLayer:edge:");
|
|
|
|
private static readonly IntPtr selSetWidthTypeForLayer_Handle = Selector.GetHandle("setWidth:type:forLayer:");
|
|
|
|
private static readonly IntPtr selWidthForLayerEdge_Handle = Selector.GetHandle("widthForLayer:edge:");
|
|
|
|
private static readonly IntPtr selWidthValueTypeForLayerEdge_Handle = Selector.GetHandle("widthValueTypeForLayer:edge:");
|
|
|
|
private static readonly IntPtr selSetBorderColorForEdge_Handle = Selector.GetHandle("setBorderColor:forEdge:");
|
|
|
|
private static readonly IntPtr selSetBorderColor_Handle = Selector.GetHandle("setBorderColor:");
|
|
|
|
private static readonly IntPtr selBorderColorForEdge_Handle = Selector.GetHandle("borderColorForEdge:");
|
|
|
|
private static readonly IntPtr selRectForLayoutAtPointInRectTextContainerCharacterRange_Handle = Selector.GetHandle("rectForLayoutAtPoint:inRect:textContainer:characterRange:");
|
|
|
|
private static readonly IntPtr selBoundsRectForContentRectInRectTextContainerCharacterRange_Handle = Selector.GetHandle("boundsRectForContentRect:inRect:textContainer:characterRange:");
|
|
|
|
private static readonly IntPtr selDrawBackgroundWithFrameInViewCharacterRangeLayoutManager_Handle = Selector.GetHandle("drawBackgroundWithFrame:inView:characterRange:layoutManager:");
|
|
|
|
private static readonly IntPtr class_ptr = Class.GetHandle("NSTextBlock");
|
|
|
|
private object __mt_BackgroundColor_var;
|
|
|
|
public override IntPtr ClassHandle => class_ptr;
|
|
|
|
public virtual double ContentWidth
|
|
{
|
|
[Export("contentWidth")]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
return Messaging.Double_objc_msgSend(base.Handle, selContentWidthHandle);
|
|
}
|
|
return Messaging.Double_objc_msgSendSuper(base.SuperHandle, selContentWidthHandle);
|
|
}
|
|
}
|
|
|
|
public virtual NSTextBlockValueType ContentWidthValueType
|
|
{
|
|
[Export("contentWidthValueType")]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
return (NSTextBlockValueType)Messaging.UInt64_objc_msgSend(base.Handle, selContentWidthValueTypeHandle);
|
|
}
|
|
return (NSTextBlockValueType)Messaging.UInt64_objc_msgSendSuper(base.SuperHandle, selContentWidthValueTypeHandle);
|
|
}
|
|
}
|
|
|
|
public virtual NSTextBlockVerticalAlignment VerticalAlignment
|
|
{
|
|
[Export("verticalAlignment")]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
return (NSTextBlockVerticalAlignment)Messaging.UInt64_objc_msgSend(base.Handle, selVerticalAlignmentHandle);
|
|
}
|
|
return (NSTextBlockVerticalAlignment)Messaging.UInt64_objc_msgSendSuper(base.SuperHandle, selVerticalAlignmentHandle);
|
|
}
|
|
[Export("setVerticalAlignment:")]
|
|
set
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_UInt64(base.Handle, selSetVerticalAlignment_Handle, (ulong)value);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_UInt64(base.SuperHandle, selSetVerticalAlignment_Handle, (ulong)value);
|
|
}
|
|
}
|
|
}
|
|
|
|
public virtual NSColor BackgroundColor
|
|
{
|
|
[Export("backgroundColor")]
|
|
get
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
return (NSColor)(__mt_BackgroundColor_var = ((!IsDirectBinding) ? ((NSColor)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selBackgroundColorHandle))) : ((NSColor)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selBackgroundColorHandle)))));
|
|
}
|
|
[Export("setBackgroundColor:")]
|
|
set
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (value == null)
|
|
{
|
|
throw new ArgumentNullException("value");
|
|
}
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetBackgroundColor_Handle, value.Handle);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetBackgroundColor_Handle, value.Handle);
|
|
}
|
|
__mt_BackgroundColor_var = value;
|
|
}
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
|
[Export("init")]
|
|
public NSTextBlock()
|
|
: 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 NSTextBlock(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 NSTextBlock(NSObjectFlag t)
|
|
: base(t)
|
|
{
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
|
public NSTextBlock(IntPtr handle)
|
|
: base(handle)
|
|
{
|
|
}
|
|
|
|
[Export("setValue:type:forDimension:")]
|
|
public virtual void SetValue(double val, NSTextBlockValueType type, NSTextBlockDimension dimension)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_Double_UInt64_UInt64(base.Handle, selSetValueTypeForDimension_Handle, val, (ulong)type, (ulong)dimension);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_Double_UInt64_UInt64(base.SuperHandle, selSetValueTypeForDimension_Handle, val, (ulong)type, (ulong)dimension);
|
|
}
|
|
}
|
|
|
|
[Export("valueForDimension:")]
|
|
public virtual double GetValue(NSTextBlockDimension dimension)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
return Messaging.Double_objc_msgSend_UInt64(base.Handle, selValueForDimension_Handle, (ulong)dimension);
|
|
}
|
|
return Messaging.Double_objc_msgSendSuper_UInt64(base.SuperHandle, selValueForDimension_Handle, (ulong)dimension);
|
|
}
|
|
|
|
[Export("valueTypeForDimension:")]
|
|
public virtual NSTextBlockValueType GetValueType(NSTextBlockDimension dimension)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
return (NSTextBlockValueType)Messaging.UInt64_objc_msgSend_UInt64(base.Handle, selValueTypeForDimension_Handle, (ulong)dimension);
|
|
}
|
|
return (NSTextBlockValueType)Messaging.UInt64_objc_msgSendSuper_UInt64(base.SuperHandle, selValueTypeForDimension_Handle, (ulong)dimension);
|
|
}
|
|
|
|
[Export("setContentWidth:type:")]
|
|
public virtual void SetContentWidth(double val, NSTextBlockValueType type)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_Double_UInt64(base.Handle, selSetContentWidthType_Handle, val, (ulong)type);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_Double_UInt64(base.SuperHandle, selSetContentWidthType_Handle, val, (ulong)type);
|
|
}
|
|
}
|
|
|
|
[Export("setWidth:type:forLayer:edge:")]
|
|
public virtual void SetWidth(double val, NSTextBlockValueType type, NSTextBlockLayer layer, NSRectEdge edge)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_Double_UInt64_Int64_int(base.Handle, selSetWidthTypeForLayerEdge_Handle, val, (ulong)type, (long)layer, (int)edge);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_Double_UInt64_Int64_int(base.SuperHandle, selSetWidthTypeForLayerEdge_Handle, val, (ulong)type, (long)layer, (int)edge);
|
|
}
|
|
}
|
|
|
|
[Export("setWidth:type:forLayer:")]
|
|
public virtual void SetWidth(double val, NSTextBlockValueType type, NSTextBlockLayer layer)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_Double_UInt64_Int64(base.Handle, selSetWidthTypeForLayer_Handle, val, (ulong)type, (long)layer);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_Double_UInt64_Int64(base.SuperHandle, selSetWidthTypeForLayer_Handle, val, (ulong)type, (long)layer);
|
|
}
|
|
}
|
|
|
|
[Export("widthForLayer:edge:")]
|
|
public virtual double GetWidth(NSTextBlockLayer layer, NSRectEdge edge)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
return Messaging.Double_objc_msgSend_Int64_int(base.Handle, selWidthForLayerEdge_Handle, (long)layer, (int)edge);
|
|
}
|
|
return Messaging.Double_objc_msgSendSuper_Int64_int(base.SuperHandle, selWidthForLayerEdge_Handle, (long)layer, (int)edge);
|
|
}
|
|
|
|
[Export("widthValueTypeForLayer:edge:")]
|
|
public virtual NSTextBlockValueType WidthValueTypeForLayer(NSTextBlockLayer layer, NSRectEdge edge)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
return (NSTextBlockValueType)Messaging.UInt64_objc_msgSend_Int64_int(base.Handle, selWidthValueTypeForLayerEdge_Handle, (long)layer, (int)edge);
|
|
}
|
|
return (NSTextBlockValueType)Messaging.UInt64_objc_msgSendSuper_Int64_int(base.SuperHandle, selWidthValueTypeForLayerEdge_Handle, (long)layer, (int)edge);
|
|
}
|
|
|
|
[Export("setBorderColor:forEdge:")]
|
|
public virtual void SetBorderColor(NSColor color, NSRectEdge edge)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (color == null)
|
|
{
|
|
throw new ArgumentNullException("color");
|
|
}
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_IntPtr_int(base.Handle, selSetBorderColorForEdge_Handle, color.Handle, (int)edge);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_IntPtr_int(base.SuperHandle, selSetBorderColorForEdge_Handle, color.Handle, (int)edge);
|
|
}
|
|
}
|
|
|
|
[Export("setBorderColor:")]
|
|
public virtual void SetBorderColor(NSColor color)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (color == null)
|
|
{
|
|
throw new ArgumentNullException("color");
|
|
}
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetBorderColor_Handle, color.Handle);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetBorderColor_Handle, color.Handle);
|
|
}
|
|
}
|
|
|
|
[Export("borderColorForEdge:")]
|
|
public virtual NSColor GetBorderColor(NSRectEdge edge)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (IsDirectBinding)
|
|
{
|
|
return (NSColor)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_int(base.Handle, selBorderColorForEdge_Handle, (int)edge));
|
|
}
|
|
return (NSColor)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_int(base.SuperHandle, selBorderColorForEdge_Handle, (int)edge));
|
|
}
|
|
|
|
[Export("rectForLayoutAtPoint:inRect:textContainer:characterRange:")]
|
|
public virtual CGRect GetRectForLayout(CGPoint startingPoint, CGRect rect, NSTextContainer textContainer, NSRange charRange)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (textContainer == null)
|
|
{
|
|
throw new ArgumentNullException("textContainer");
|
|
}
|
|
CGRect retval;
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.CGRect_objc_msgSend_stret_CGPoint_CGRect_IntPtr_NSRange(out retval, base.Handle, selRectForLayoutAtPointInRectTextContainerCharacterRange_Handle, startingPoint, rect, textContainer.Handle, charRange);
|
|
}
|
|
else
|
|
{
|
|
Messaging.CGRect_objc_msgSendSuper_stret_CGPoint_CGRect_IntPtr_NSRange(out retval, base.SuperHandle, selRectForLayoutAtPointInRectTextContainerCharacterRange_Handle, startingPoint, rect, textContainer.Handle, charRange);
|
|
}
|
|
return retval;
|
|
}
|
|
|
|
[Export("boundsRectForContentRect:inRect:textContainer:characterRange:")]
|
|
public virtual CGRect GetBoundsRect(CGRect contentRect, CGRect rect, NSTextContainer textContainer, NSRange charRange)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (textContainer == null)
|
|
{
|
|
throw new ArgumentNullException("textContainer");
|
|
}
|
|
CGRect retval;
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.CGRect_objc_msgSend_stret_CGRect_CGRect_IntPtr_NSRange(out retval, base.Handle, selBoundsRectForContentRectInRectTextContainerCharacterRange_Handle, contentRect, rect, textContainer.Handle, charRange);
|
|
}
|
|
else
|
|
{
|
|
Messaging.CGRect_objc_msgSendSuper_stret_CGRect_CGRect_IntPtr_NSRange(out retval, base.SuperHandle, selBoundsRectForContentRectInRectTextContainerCharacterRange_Handle, contentRect, rect, textContainer.Handle, charRange);
|
|
}
|
|
return retval;
|
|
}
|
|
|
|
[Export("drawBackgroundWithFrame:inView:characterRange:layoutManager:")]
|
|
public virtual void DrawBackground(CGRect frameRect, NSView controlView, NSRange charRange, NSLayoutManager layoutManager)
|
|
{
|
|
NSApplication.EnsureUIThread();
|
|
if (controlView == null)
|
|
{
|
|
throw new ArgumentNullException("controlView");
|
|
}
|
|
if (layoutManager == null)
|
|
{
|
|
throw new ArgumentNullException("layoutManager");
|
|
}
|
|
if (IsDirectBinding)
|
|
{
|
|
Messaging.void_objc_msgSend_CGRect_IntPtr_NSRange_IntPtr(base.Handle, selDrawBackgroundWithFrameInViewCharacterRangeLayoutManager_Handle, frameRect, controlView.Handle, charRange, layoutManager.Handle);
|
|
}
|
|
else
|
|
{
|
|
Messaging.void_objc_msgSendSuper_CGRect_IntPtr_NSRange_IntPtr(base.SuperHandle, selDrawBackgroundWithFrameInViewCharacterRangeLayoutManager_Handle, frameRect, controlView.Handle, charRange, layoutManager.Handle);
|
|
}
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
base.Dispose(disposing);
|
|
if (base.Handle == IntPtr.Zero)
|
|
{
|
|
__mt_BackgroundColor_var = null;
|
|
}
|
|
}
|
|
}
|
|
}
|