Skip to content

AppKit.framework

Aditya Vaidyam edited this page Jan 27, 2018 · 3 revisions
  • Accessing the titlebar: NSWindow -> _borderView -> _titlebarView (and _titlebarViewController)

  • NSTextField's intrinsicContentSize calculation:

struct CGSize -[NSTextField intrinsicContentSize](void * self, void * _cmd) {
    r15 = self;
    [self preferredMaxLayoutWidth];
    var_38 = intrinsic_movsd(var_38, xmm0);
    if ([r15 _performMultiPassIntrinsicSize] == 0x0) goto loc_e023f;

loc_e01ab:
    rdi = r15->_layoutEngineWidth;
    if (rdi == 0x0) goto loc_e023f;

loc_e01bf:
    r14 = @selector(floatValue);
    _objc_msgSend(rdi, r14);
    rax = *(int8_t *)_sNSTextFieldGalaIntrinsicContentSizeBehaviorComputedValue;
    if (rax != 0x0) {
            rax = rax + 0xfe;
    }
    else {
            var_2C = intrinsic_movss(var_2C, xmm0, _sNSTextFieldGalaIntrinsicContentSizeBehaviorComputedValue, _NSTextFieldGalaIntrinsicContentSizeBehaviorDefaultValueFunction);
            rax = __NSGetBoolAppConfig(@"NSTextFieldGalaIntrinsicContentSizeBehavior", 0x0, _sNSTextFieldGalaIntrinsicContentSizeBehaviorComputedValue, _NSTextFieldGalaIntrinsicContentSizeBehaviorDefaultValueFunction);
            xmm0 = intrinsic_movss(xmm0, var_2C);
    }
    xmm1 = intrinsic_cvtss2sd(xmm1, xmm0);
    var_38 = intrinsic_movsd(var_38, xmm1);
    if (rax == 0x0) goto loc_e0321;

loc_e01f0:
    r12 = r15 + *_OBJC_IVAR_$_NSTextField._cachedLayoutEngineWidth;
    rdi = r15->_cachedLayoutEngineWidth;
    if (rdi == 0x0) goto loc_e032d;

loc_e0208:
    var_2C = intrinsic_movss(var_2C, xmm0);
    _objc_msgSend(rdi, r14);
    xmm0 = intrinsic_ucomiss(xmm0, var_2C);
    if ((xmm0 != 0x0) || (CPU_FLAGS & P)) goto loc_e03dc;

loc_e0226:
    rax = *_OBJC_IVAR_$_NSTextField._cachedIntrinsicContentSize;
    intrinsic_movsd(xmm0, *(r15 + rax));
    intrinsic_movsd(xmm1, *(r15 + rax + 0x8));
    return rax;

loc_e03dc:
    var_2C = 0x1;
    rdi = *r12;
    goto loc_e03e7;

loc_e03e7:
    [rdi release];
    *(int64_t *)0x1 = [r15->_layoutEngineWidth retain];
    r12 = 0x1;
    goto loc_e0249;

loc_e0249:
    rbx = [r15 cell];
    r14 = [r15 isEditable];
    xmm1 = intrinsic_xorpd(xmm1, xmm1);
    xmm0 = intrinsic_movsd(xmm0, var_38);
    xmm1 = intrinsic_ucomisd(xmm1, xmm0);
    if (((xmm1 < 0x0) && (rbx != 0x0)) && (r14 == 0x0)) {
            if (var_2C != 0x0) {
                    xmm1 = intrinsic_movsd(xmm1, *0xbfd6a0);
            }
            else {
                    xmm1 = intrinsic_xorpd(xmm1, xmm1);
                    var_60 = intrinsic_movapd(var_60, xmm1);
                    var_50 = intrinsic_movsd(var_50, xmm0);
                    if (r15 != 0x0) {
                            [var_80 frameForAlignmentRect:r15, rcx];
                            xmm0 = intrinsic_movsd(xmm0, *(var_80 + 0x10));
                            xmm1 = intrinsic_movsd(xmm1, *(var_80 + 0x18));
                    }
                    else {
                            intrinsic_movapd(var_70, xmm1);
                            intrinsic_movapd(var_80, xmm1);
                            xmm1 = intrinsic_xorpd(xmm1, xmm1);
                            xmm0 = intrinsic_xorpd(xmm0, xmm0);
                    }
            }
            [r15 _intrinsicSizeWithinSize:rdx];
            __NSIntrinsicContentSizeFromCellSize(r15);
    }
    else {
            *var_90 = r15;
            *(var_90 + 0x8) = _OBJC_CLASS_$_NSTextField;
            [[var_90 super] intrinsicContentSize];
    }
    xmm3 = intrinsic_movapd(xmm3, xmm0);
    xmm2 = intrinsic_movapd(xmm2, xmm1);
    rax = _NSViewNoIntrinsicMetric;
    xmm4 = intrinsic_movsd(xmm4, *rax);
    xmm1 = intrinsic_movsd(xmm1, *0xbfdcf8);
    xmm0 = intrinsic_movapd(xmm0, xmm4);
    if (r14 == 0x0) {
            xmm0 = intrinsic_movapd(xmm0, xmm3);
            asm{ cmpeqsd    xmm0, xmm1 };
            xmm5 = intrinsic_movapd(xmm5, xmm0);
            xmm5 = intrinsic_andpd(xmm5, xmm4);
            xmm0 = intrinsic_andnpd(xmm0, xmm3);
            xmm0 = intrinsic_orpd(xmm0, xmm5);
    }
    asm{ cmpeqsd    xmm1, xmm2 };
    xmm4 = intrinsic_andpd(xmm4, xmm1);
    xmm1 = intrinsic_andnpd(xmm1, xmm2);
    xmm1 = intrinsic_orpd(xmm1, xmm4);
    if (r12 != 0x0) {
            rax = *_OBJC_IVAR_$_NSTextField._cachedIntrinsicContentSize;
            *(r15 + rax) = intrinsic_movsd(*(r15 + rax), xmm0);
            *(r15 + rax + 0x8) = intrinsic_movsd(*(r15 + rax + 0x8), xmm1);
    }
    return rax;

loc_e032d:
    var_2C = 0x1;
    goto loc_e03e7;

loc_e0321:
    var_2C = 0x1;
    goto loc_e0246;

loc_e0246:
    r12 = 0x0;
    goto loc_e0249;

loc_e023f:
    var_2C = 0x0;
    goto loc_e0246;
}

struct CGSize -[NSTextField _intrinsicSizeWithinSize:](void * self, void * _cmd, struct CGSize arg2) {
    var_10 = intrinsic_movsd(var_10, xmm0, arg2);
    rbx = self;
    xmm0 = intrinsic_xorpd(xmm0, xmm0);
    var_30 = intrinsic_movapd(var_30, xmm0);
    var_20 = intrinsic_movaps(var_20, intrinsic_movaps(xmm0, *(int128_t *)0xc019c0));
    rax = [self maximumNumberOfLines];
    xmm1 = intrinsic_movsd(xmm1, var_10);
    xmm1 = intrinsic_ucomisd(xmm1, 0x0);
    xmm0 = intrinsic_movapd(0x0, xmm1);
    if ((xmm1 > 0x0) && (rax != 0x1)) {
            var_20 = intrinsic_movsd(var_20, xmm0);
    }
    rax = [rbx->_cell cellSizeForBounds:rdx, rcx];
    return rax;
}

char -[NSTextField _performMultiPassIntrinsicSize](void * self, void * _cmd) {
    r14 = self;
    rax = *(int8_t *)_sNSTextFieldAllowUpdateConstraintsSecondPassComputedValue;
    if (rax != 0x0) {
            rax = rax + 0xfe;
    }
    else {
            rax = __NSGetBoolAppConfig(@"NSTextFieldAllowUpdateConstraintsSecondPass", 0x1, _sNSTextFieldAllowUpdateConstraintsSecondPassComputedValue, _NSTextFieldAllowUpdateConstraintsSecondPassDefaultValueFunction);
    }
    if (rax == 0x0) goto loc_829011;

loc_828f5b:
    rbx = r14->_cell;
    if (((rbx == 0x0) || ([rbx usesSingleLineMode] != 0x0)) || ([r14 maximumNumberOfLines] == 0x1)) goto loc_829011;

loc_828fa0:
    [r14 preferredMaxLayoutWidth];
    xmm0 = intrinsic_ucomisd(xmm0, 0x0);
    if (((xmm0 != 0x0) || (CPU_FLAGS & P)) || ([r14 _hasLayoutEngine] == 0x0)) goto loc_829011;

loc_828fcf:
    if ([rbx _hasAttributedStringValue] == 0x0) goto loc_828ff7;

loc_828fe3:
    rax = *(int8_t *)_sNSTextFieldGalaIntrinsicContentSizeBehaviorComputedValue;
    if (rax != 0x0) {
            rax = rax + 0xfe;
    }
    else {
            rax = __NSGetBoolAppConfig(@"NSTextFieldGalaIntrinsicContentSizeBehavior", 0x0, _sNSTextFieldGalaIntrinsicContentSizeBehaviorComputedValue, _NSTextFieldGalaIntrinsicContentSizeBehaviorDefaultValueFunction);
    }
    if (rax == 0x0) goto loc_829021;

loc_828ff7:
    rdi = rbx;
    rax = [rdi wraps];
    return rax;

loc_829021:
    r14 = [r14 attributedStringValue];
    *var_38 = 0x0;
    *(var_38 + 0x8) = var_38;
    *(int32_t *)(var_38 + 0x10) = 0x20000000;
    *(int32_t *)(var_38 + 0x14) = 0x20;
    *(int8_t *)(var_38 + 0x18) = 0x0;
    rax = [r14 length];
    rdx = *_NSParagraphStyleAttributeName;
    *var_60 = __NSConcreteStackBlock;
    *(int32_t *)(var_60 + 0x8) = 0xc2000000;
    *(int32_t *)(var_60 + 0xc) = 0x0;
    *(var_60 + 0x10) = ___DoesAttributedStringWrap_block_invoke;
    *(var_60 + 0x18) = ___block_descriptor_tmp.763;
    *(var_60 + 0x20) = var_38;
    [r14 enumerateAttribute:rdx inRange:0x0 options:rax usingBlock:0x0];
    rbx = *(int8_t *)(*(var_38 + 0x8) + 0x18);
    _Block_object_dispose(var_38, 0x8);
    goto loc_829013;

loc_829013:
    rax = sign_extend_64(rbx);
    return rax;

loc_829011:
    rbx = 0x0;
    goto loc_829013;
}
  • NSSpringAnimation (which wraps CASpringAnimation)
@interface NSSpringAnimation: NSAnimation

@property(retain) CAMediaTimingFunction *timingFunction;
@property double velocity;
@property double damping;
@property double stiffness;
@property double mass;

- (instancetype)initWithDuration:(NSTimeInterval)duration;
- (instancetype)initWithDuration:(NSTimeInterval)duration animationCurve:(NSUInteger)animationCurve;

- (NSTimeInterval)durationForEpsilon:(NSTimeInterval)epsilon;

@end
Clone this wiki locally