mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-29 09:20:32 +00:00
[ASLayout] General Layout Cleanup (#2920)
* Remove duplicate import * Move `ASLayoutController` related code out of CoreGraphics+ASConvenience * Further cleanup * Move private layout files to Privat/Layout * Move ASLayoutElementStylePrivate into Private/Layout * Further cleanup * Move tvOS related files to tvOS folder * Further cleanup
This commit is contained in:
committed by
GitHub
parent
9a5f6d3ece
commit
d9be4783e5
@@ -9,7 +9,9 @@
|
||||
//
|
||||
|
||||
#import "ASAbstractLayoutController.h"
|
||||
|
||||
#import "ASAssert.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
extern ASRangeTuningParameters const ASRangeTuningParametersZero = {};
|
||||
@@ -19,6 +21,68 @@ extern BOOL ASRangeTuningParametersEqualToRangeTuningParameters(ASRangeTuningPar
|
||||
return lhs.leadingBufferScreenfuls == rhs.leadingBufferScreenfuls && lhs.trailingBufferScreenfuls == rhs.trailingBufferScreenfuls;
|
||||
}
|
||||
|
||||
extern ASDirectionalScreenfulBuffer ASDirectionalScreenfulBufferHorizontal(ASScrollDirection scrollDirection,
|
||||
ASRangeTuningParameters rangeTuningParameters)
|
||||
{
|
||||
ASDirectionalScreenfulBuffer horizontalBuffer = {0, 0};
|
||||
BOOL movingRight = ASScrollDirectionContainsRight(scrollDirection);
|
||||
|
||||
horizontalBuffer.positiveDirection = movingRight ? rangeTuningParameters.leadingBufferScreenfuls
|
||||
: rangeTuningParameters.trailingBufferScreenfuls;
|
||||
horizontalBuffer.negativeDirection = movingRight ? rangeTuningParameters.trailingBufferScreenfuls
|
||||
: rangeTuningParameters.leadingBufferScreenfuls;
|
||||
return horizontalBuffer;
|
||||
}
|
||||
|
||||
extern ASDirectionalScreenfulBuffer ASDirectionalScreenfulBufferVertical(ASScrollDirection scrollDirection,
|
||||
ASRangeTuningParameters rangeTuningParameters)
|
||||
{
|
||||
ASDirectionalScreenfulBuffer verticalBuffer = {0, 0};
|
||||
BOOL movingDown = ASScrollDirectionContainsDown(scrollDirection);
|
||||
|
||||
verticalBuffer.positiveDirection = movingDown ? rangeTuningParameters.leadingBufferScreenfuls
|
||||
: rangeTuningParameters.trailingBufferScreenfuls;
|
||||
verticalBuffer.negativeDirection = movingDown ? rangeTuningParameters.trailingBufferScreenfuls
|
||||
: rangeTuningParameters.leadingBufferScreenfuls;
|
||||
return verticalBuffer;
|
||||
}
|
||||
|
||||
extern CGRect CGRectExpandHorizontally(CGRect rect, ASDirectionalScreenfulBuffer buffer)
|
||||
{
|
||||
CGFloat negativeDirectionWidth = buffer.negativeDirection * rect.size.width;
|
||||
CGFloat positiveDirectionWidth = buffer.positiveDirection * rect.size.width;
|
||||
rect.size.width = negativeDirectionWidth + rect.size.width + positiveDirectionWidth;
|
||||
rect.origin.x -= negativeDirectionWidth;
|
||||
return rect;
|
||||
}
|
||||
|
||||
extern CGRect CGRectExpandVertically(CGRect rect, ASDirectionalScreenfulBuffer buffer)
|
||||
{
|
||||
CGFloat negativeDirectionHeight = buffer.negativeDirection * rect.size.height;
|
||||
CGFloat positiveDirectionHeight = buffer.positiveDirection * rect.size.height;
|
||||
rect.size.height = negativeDirectionHeight + rect.size.height + positiveDirectionHeight;
|
||||
rect.origin.y -= negativeDirectionHeight;
|
||||
return rect;
|
||||
}
|
||||
|
||||
extern CGRect CGRectExpandToRangeWithScrollableDirections(CGRect rect, ASRangeTuningParameters tuningParameters,
|
||||
ASScrollDirection scrollableDirections, ASScrollDirection scrollDirection)
|
||||
{
|
||||
// Can scroll horizontally - expand the range appropriately
|
||||
if (ASScrollDirectionContainsHorizontalDirection(scrollableDirections)) {
|
||||
ASDirectionalScreenfulBuffer horizontalBuffer = ASDirectionalScreenfulBufferHorizontal(scrollDirection, tuningParameters);
|
||||
rect = CGRectExpandHorizontally(rect, horizontalBuffer);
|
||||
}
|
||||
|
||||
// Can scroll vertically - expand the range appropriately
|
||||
if (ASScrollDirectionContainsVerticalDirection(scrollableDirections)) {
|
||||
ASDirectionalScreenfulBuffer verticalBuffer = ASDirectionalScreenfulBufferVertical(scrollDirection, tuningParameters);
|
||||
rect = CGRectExpandVertically(rect, verticalBuffer);
|
||||
}
|
||||
|
||||
return rect;
|
||||
}
|
||||
|
||||
@interface ASAbstractLayoutController () {
|
||||
std::vector<std::vector<ASRangeTuningParameters>> _tuningParameters;
|
||||
CGSize _viewportSize;
|
||||
|
||||
Reference in New Issue
Block a user