mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-09-09 06:00:43 +00:00
1) Set the ascender/descender of an ASTextNode when the attributeString is set. Previously ascender/descender were only being computed in `setValuesFromLayoutable` and only when the attribute string was not nil. May make sense to remove the computation from `setValuesFromLayoutable` entirely. 2) Remove ability to allow different children of a stack spec to aling to different baselines. This wasn't working before and I'm not convinced it is possible to do properly/useful enough to invest the time. 3) Have all stack spec run `ASStackBaselinePositionedLayout::compute` to compute the stack's ascender and descender. Even if the stack isn't aligning its children to a baseline, the stack itself may be a child of another stack that IS aligning to a baseline.
71 lines
2.5 KiB
Objective-C
71 lines
2.5 KiB
Objective-C
/*
|
|
* Copyright (c) 2014-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*
|
|
*/
|
|
|
|
#import "ASStackLayoutSpec.h"
|
|
|
|
typedef struct {
|
|
ASStackLayoutDirection direction;
|
|
CGFloat spacing;
|
|
ASStackLayoutJustifyContent justifyContent;
|
|
ASStackLayoutAlignItems alignItems;
|
|
BOOL baselineRelativeArrangement;
|
|
} ASStackLayoutSpecStyle;
|
|
|
|
inline CGFloat stackDimension(const ASStackLayoutDirection direction, const CGSize size)
|
|
{
|
|
return (direction == ASStackLayoutDirectionVertical) ? size.height : size.width;
|
|
}
|
|
|
|
inline CGFloat crossDimension(const ASStackLayoutDirection direction, const CGSize size)
|
|
{
|
|
return (direction == ASStackLayoutDirectionVertical) ? size.width : size.height;
|
|
}
|
|
|
|
inline BOOL compareCrossDimension(const ASStackLayoutDirection direction, const CGSize a, const CGSize b)
|
|
{
|
|
return crossDimension(direction, a) < crossDimension(direction, b);
|
|
}
|
|
|
|
inline CGPoint directionPoint(const ASStackLayoutDirection direction, const CGFloat stack, const CGFloat cross)
|
|
{
|
|
return (direction == ASStackLayoutDirectionVertical) ? CGPointMake(cross, stack) : CGPointMake(stack, cross);
|
|
}
|
|
|
|
inline CGSize directionSize(const ASStackLayoutDirection direction, const CGFloat stack, const CGFloat cross)
|
|
{
|
|
return (direction == ASStackLayoutDirectionVertical) ? CGSizeMake(cross, stack) : CGSizeMake(stack, cross);
|
|
}
|
|
|
|
inline ASSizeRange directionSizeRange(const ASStackLayoutDirection direction,
|
|
const CGFloat stackMin,
|
|
const CGFloat stackMax,
|
|
const CGFloat crossMin,
|
|
const CGFloat crossMax)
|
|
{
|
|
return {directionSize(direction, stackMin, crossMin), directionSize(direction, stackMax, crossMax)};
|
|
}
|
|
|
|
inline ASStackLayoutAlignItems alignment(ASStackLayoutAlignSelf childAlignment, ASStackLayoutAlignItems stackAlignment)
|
|
{
|
|
switch (childAlignment) {
|
|
case ASStackLayoutAlignSelfCenter:
|
|
return ASStackLayoutAlignItemsCenter;
|
|
case ASStackLayoutAlignSelfEnd:
|
|
return ASStackLayoutAlignItemsEnd;
|
|
case ASStackLayoutAlignSelfStart:
|
|
return ASStackLayoutAlignItemsStart;
|
|
case ASStackLayoutAlignSelfStretch:
|
|
return ASStackLayoutAlignItemsStretch;
|
|
case ASStackLayoutAlignSelfAuto:
|
|
default:
|
|
return stackAlignment;
|
|
}
|
|
}
|