// // MPPowerFunctionLayout.m // MathPad // // Created by Kim Wittenburg on 30.09.14. // Copyright (c) 2014 Kim Wittenburg. All rights reserved. // #import "MPPowerFunctionLayout.h" #define kMPEmptyBoxHeight (CTFontGetDescent((CTFontRef)self.font) + CTFontGetAscent((CTFontRef)self.font) + CTFontGetLeading((CTFontRef)self.font)) #define kMPEmptyBoxYOrigin (-(CTFontGetDescent((CTFontRef)self.font) + CTFontGetLeading((CTFontRef)self.font))) #define kPowerFunctionExponentXOffset 1 #define kPowerFunctionTrailingOffset 2 @implementation MPPowerFunctionLayout - (NSRect)baseBounds { if (NSEqualRects(_baseBounds, NSZeroRect)) { return NSMakeRect(0, kMPEmptyBoxYOrigin, 0, kMPEmptyBoxHeight); } return _baseBounds; } - (MPPowerFunction *)powerFunction { return (MPPowerFunction *)self.function; } - (NSIndexSet *)indexesOfRemainingChildren { return [NSIndexSet indexSetWithIndex:0]; } - (NSPoint)offsetOfChildLayoutAtIndex:(NSUInteger)index { CGFloat y = self.baseBounds.size.height / 2; return NSMakePoint(kPowerFunctionExponentXOffset, y); } - (BOOL)childAtIndexUsesSmallSize:(NSUInteger)index { return YES; } - (NSIndexPath *)indexPathForLocalMousePoint:(NSPoint)point { return [[NSIndexPath indexPathWithIndex:0] indexPathByAddingIndex:0]; } - (NSRect)generateBounds { NSRect exponentBounds = [self childLayoutAtIndex:0].bounds; CGFloat y = self.baseBounds.origin.y; CGFloat height = -y + [self offsetOfChildLayoutAtIndex:0].y + exponentBounds.size.height + exponentBounds.origin.y; CGFloat width = kPowerFunctionExponentXOffset + exponentBounds.size.width + kPowerFunctionTrailingOffset; return NSMakeRect(0, y, width, height); } - (void)draw { MPLayout *exponentLayout = [self childLayoutAtIndex:0]; [exponentLayout drawAtPoint:[self offsetOfChildLayoutAtIndex:0]]; } @end