Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/ios.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarinofaggiana <marino@marinofaggiana.com>2019-02-20 17:28:24 +0300
committermarinofaggiana <marino@marinofaggiana.com>2019-02-20 17:28:24 +0300
commit4133665ef9246e905d534599bd1817a712d38526 (patch)
tree338595e13574cc39cd4f5cad157d02f806d7256d /Libraries external
parent5c90fce25baeee6d7412f651937beb0d480ab670 (diff)
clear code
Diffstat (limited to 'Libraries external')
-rwxr-xr-xLibraries external/TOScrollBar/TOScrollBar.h123
-rwxr-xr-xLibraries external/TOScrollBar/TOScrollBar.m691
-rwxr-xr-xLibraries external/TOScrollBar/TOScrollBarGestureRecognizer.h27
-rwxr-xr-xLibraries external/TOScrollBar/TOScrollBarGestureRecognizer.m75
-rwxr-xr-xLibraries external/TOScrollBar/UIScrollView+TOScrollBar.h43
-rwxr-xr-xLibraries external/TOScrollBar/UIScrollView+TOScrollBar.m51
6 files changed, 0 insertions, 1010 deletions
diff --git a/Libraries external/TOScrollBar/TOScrollBar.h b/Libraries external/TOScrollBar/TOScrollBar.h
deleted file mode 100755
index 9d4668807..000000000
--- a/Libraries external/TOScrollBar/TOScrollBar.h
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// TOScrollBar.h
-//
-// Copyright 2016-2017 Timothy Oliver. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-// IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-#import <UIKit/UIKit.h>
-#import "UIScrollView+TOScrollBar.h"
-
-typedef NS_ENUM(NSInteger, TOScrollBarStyle) {
- TOScrollBarStyleDefault,
- TOScrollBarStyleDark
-};
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface TOScrollBar : UIView
-
-/* The visual style of the scroll bar, either light or dark */
-@property (nonatomic, assign) TOScrollBarStyle style;
-
-/** Aligns the scroll bar to the top of the scroll view content offset.
- Set this to `YES` when using this in a view controller with iOS 11 large titles. */
-@property (nonatomic, assign) BOOL insetForLargeTitles;
-
-/** The amount of padding above and below the scroll bar (Only top and bottom values are counted. Default is {20,20} ) */
-@property (nonatomic, assign) UIEdgeInsets verticalInset;
-
-/** The inset, in points of the middle of track from the edge of the scroll view */
-@property (nonatomic, assign) CGFloat edgeInset;
-
-/** The tint color of the track */
-@property (nonatomic, strong) UIColor *trackTintColor;
-
-/** The width in points, of the track (Default value is 2.0) */
-@property (nonatomic, assign) CGFloat trackWidth;
-
-/** The tint color of the handle (Defaults to the system tint color) */
-@property (nonatomic, strong, nullable) UIColor *handleTintColor;
-
-/** The width in points, of the handle. (Default value is 4.0) */
-@property (nonatomic, assign) CGFloat handleWidth;
-
-/** The minimum height in points the handle may be in relation to the content height. (Default value is 64.0) */
-@property (nonatomic, assign) CGFloat handleMinimiumHeight;
-
-/** The user is currently dragging the handle */
-@property (nonatomic, assign, readonly) BOOL dragging;
-
-/** The minimum required scale of the scroll view's content height before the scroll bar is shown (Default is 5.0) */
-@property (nonatomic, assign) CGFloat minimumContentHeightScale;
-
-/** The scroll view in which this scroll bar has been added. */
-@property (nonatomic, weak, readonly) UIScrollView *scrollView;
-
-/** When enabled, the scroll bar will only respond to direct touches to the handle control.
- Touches to the track will be passed to the UI controls beneath it.
- Default is NO. */
-@property (nonatomic, assign) BOOL handleExclusiveInteractionEnabled;
-
-/**
- Creates a new instance of the scroll bar view
-
- @param style The initial style of the scroll bar upon creation
- */
-- (instancetype)initWithStyle:(TOScrollBarStyle)style;
-
-/**
- Adds the scroll bar to a scroll view
-
- @param scrollView The scroll view that will receive this scroll bar
- */
-- (void)addToScrollView:(UIScrollView *)scrollView;
-
-/**
- Removes the scroll bar from the scroll view and resets the scroll view's state
- */
-- (void)removeFromScrollView;
-
-/**
- If added to a table view, this convienience method will compute the appropriate
- inset values for the table separator so they don't underlap the scroll bar
-
- @param inset The original separator inset value of the table view
- */
-- (UIEdgeInsets)adjustedTableViewSeparatorInsetForInset:(UIEdgeInsets)inset;
-
-/**
- If added to a table view, this convienience method will compute the appropriate
- insets values for each cell's layout margins in order to appropriately push the cell's
- content inwards
-
- @param layoutMargins The current `layoutMargins` value of the `UITableViewCell` instance.
- @param offset If desired, any additional horizontal offset for this specific use case
-
- */
-- (UIEdgeInsets)adjustedTableViewCellLayoutMarginsForMargins:(UIEdgeInsets)layoutMargins manualOffset:(CGFloat)offset;
-
-/**
- Shows or hides the scroll bar from the scroll view with an optional animation
- */
-- (void)setHidden:(BOOL)hidden animated:(BOOL)animated;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
diff --git a/Libraries external/TOScrollBar/TOScrollBar.m b/Libraries external/TOScrollBar/TOScrollBar.m
deleted file mode 100755
index fd1d3fc84..000000000
--- a/Libraries external/TOScrollBar/TOScrollBar.m
+++ /dev/null
@@ -1,691 +0,0 @@
-//
-// TOScrollBar.m
-//
-// Copyright 2016-2017 Timothy Oliver. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-// IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-#import "TOScrollBar.h"
-#import "UIScrollView+TOScrollBar.h"
-#import "TOScrollBarGestureRecognizer.h"
-
-/** Default values for the scroll bar */
-static const CGFloat kTOScrollBarTrackWidth = 2.0f; // The default width of the scrollable space indicator
-static const CGFloat kTOScrollBarHandleWidth = 4.0f; // The default width of the handle control
-static const CGFloat kTOScrollBarEdgeInset = 7.5f; // The distance from the edge of the view to the center of the track
-static const CGFloat kTOScrollBarHandleMinHeight = 64.0f; // The minimum usable size to which the handle can shrink
-static const CGFloat kTOScrollBarWidth = 20.0f; // The width of this control (44 is minimum recommended tapping space) TWS how handleWidth
-static const CGFloat kTOScrollBarVerticalPadding = 10.0f; // The default padding at the top and bottom of the view
-static const CGFloat kTOScrollBarMinimumContentScale = 5.0f; // The minimum scale of the content view before showing the scroll view is necessary
-
-/************************************************************************/
-
-// A struct to hold the scroll view's previous state before this bar was applied
-struct TOScrollBarScrollViewState {
- BOOL showsVerticalScrollIndicator;
-};
-typedef struct TOScrollBarScrollViewState TOScrollBarScrollViewState;
-
-/************************************************************************/
-// Private interface exposure for scroll view category
-
-@interface UIScrollView () //TOScrollBar
-- (void)setTo_scrollBar:(TOScrollBar *)scrollBar;
-@end
-
-/************************************************************************/
-
-@interface TOScrollBar () <UIGestureRecognizerDelegate> {
- TOScrollBarScrollViewState _scrollViewState;
-}
-
-@property (nonatomic, weak, readwrite) UIScrollView *scrollView; // The parent scroll view in which we belong
-
-@property (nonatomic, assign) BOOL userHidden; // View was explicitly hidden by the user as opposed to us
-
-@property (nonatomic, strong) UIImageView *trackView; // The track indicating the scrollable distance
-@property (nonatomic, strong) UIImageView *handleView; // The handle that may be dragged in the scroll bar
-
-@property (nonatomic, assign, readwrite) BOOL dragging; // The user is presently dragging the handle
-@property (nonatomic, assign) CGFloat yOffset; // The offset from the center of the thumb
-
-@property (nonatomic, assign) CGFloat originalYOffset; // The original placement of the scroll bar when the user started dragging
-@property (nonatomic, assign) CGFloat originalHeight; // The original height of the scroll bar when the user started dragging
-@property (nonatomic, assign) CGFloat originalTopInset; // The original safe area inset of the scroll bar when the user started dragging
-
-@property (nonatomic, assign) CGFloat horizontalOffset; // The horizontal offset when the edge inset is too small for the touch region
-
-@property (nonatomic, assign) BOOL disabled; // Disabled when there's not enough scroll content to merit showing this
-
-@property (nonatomic, strong) UIImpactFeedbackGenerator *feedbackGenerator; // Taptic feedback for iPhone 7 and above
-
-@property (nonatomic, strong) TOScrollBarGestureRecognizer *gestureRecognizer; // Our custom recognizer for handling user interactions with the scroll bar
-
-@end
-
-/************************************************************************/
-
-@implementation TOScrollBar
-
-#pragma mark - Class Creation -
-
-- (instancetype)initWithStyle:(TOScrollBarStyle)style
-{
- if (self = [super initWithFrame:CGRectZero]) {
- _style = style;
- [self setUpInitialProperties];
- }
-
- return self;
-}
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
- if (self = [super initWithFrame:frame]) {
- [self setUpInitialProperties];
- }
-
- return self;
-}
-
-- (instancetype)initWithCoder:(NSCoder *)aDecoder
-{
- if (self = [super initWithCoder:aDecoder]) {
- [self setUpInitialProperties];
- }
-
- return self;
-}
-
-#pragma mark - Set-up -
-
-- (void)setUpInitialProperties
-{
- _trackWidth = kTOScrollBarTrackWidth;
- _handleWidth = kTOScrollBarHandleWidth;
- _edgeInset = kTOScrollBarEdgeInset;
- _handleMinimiumHeight = kTOScrollBarHandleMinHeight;
- _minimumContentHeightScale = kTOScrollBarMinimumContentScale;
- _verticalInset = UIEdgeInsetsMake(kTOScrollBarVerticalPadding, 0.0f, kTOScrollBarVerticalPadding, 0.0f);
- _feedbackGenerator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleLight];
- _gestureRecognizer = [[TOScrollBarGestureRecognizer alloc] initWithTarget:self action:@selector(scrollBarGestureRecognized:)];
-}
-
-- (void)setUpViews
-{
- if (self.trackView || self.handleView) {
- return;
- }
-
- self.backgroundColor = [UIColor clearColor];
-
- // Create and add the track view
- self.trackView = [[UIImageView alloc] initWithImage:[TOScrollBar verticalCapsuleImageWithWidth:self.trackWidth]];
- [self addSubview:self.trackView];
-
- // Add the handle view
- self.handleView = [[UIImageView alloc] initWithImage:[TOScrollBar verticalCapsuleImageWithWidth:self.handleWidth]];
- [self addSubview:self.handleView];
-
- // Add the initial styling
- [self configureViewsForStyle:self.style];
-
- // Add gesture recognizer
- [self addGestureRecognizer:self.gestureRecognizer];
-}
-
-- (void)configureViewsForStyle:(TOScrollBarStyle)style
-{
- BOOL dark = (style == TOScrollBarStyleDark);
-
- CGFloat whiteColor = 0.0f;
- if (dark) {
- whiteColor = 1.0f;
- }
- self.trackView.tintColor = [UIColor colorWithWhite:whiteColor alpha:0.1f];
-}
-
-- (void)dealloc
-{
- [self restoreScrollView:self.scrollView];
-}
-
-- (void)configureScrollView:(UIScrollView *)scrollView
-{
- if (scrollView == nil) {
- return;
- }
-
- // Make a copy of the scroll view's state and then configure
- _scrollViewState.showsVerticalScrollIndicator = self.scrollView.showsVerticalScrollIndicator;
- scrollView.showsVerticalScrollIndicator = NO;
-
- //Key-value Observers
- [scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
- [scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];
-}
-
-- (void)restoreScrollView:(UIScrollView *)scrollView
-{
- if (scrollView == nil) {
- return;
- }
-
- // Restore the scroll view's state
- scrollView.showsVerticalScrollIndicator = _scrollView.showsVerticalScrollIndicator;
-
- // Remove the observers
- [scrollView removeObserver:self forKeyPath:@"contentOffset"];
- [scrollView removeObserver:self forKeyPath:@"contentSize"];
-}
-
-- (void)willMoveToSuperview:(UIView *)newSuperview
-{
- [super willMoveToSuperview:newSuperview];
- [self setUpViews];
-}
-
-#pragma mark - Content Layout -
-
-- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
- change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
-{
- [self updateStateForScrollView];
- if (self.hidden) { return; }
- [self layoutInScrollView];
- [self setNeedsLayout];
-}
-
-- (CGFloat)heightOfHandleForContentSize
-{
- if (_scrollView == nil) {
- return _handleMinimiumHeight;
- }
-
- CGFloat heightRatio = self.scrollView.frame.size.height / self.scrollView.contentSize.height;
- CGFloat height = self.frame.size.height * heightRatio;
-
- return MAX(floorf(height), _handleMinimiumHeight);
-}
-
-- (void)updateStateForScrollView
-{
- CGRect frame = _scrollView.frame;
- CGSize contentSize = _scrollView.contentSize;
- self.disabled = (contentSize.height / frame.size.height) < _minimumContentHeightScale;
- [self setHidden:(self.disabled || self.userHidden) animated:NO];
-}
-
-- (void)layoutInScrollView
-{
- CGRect scrollViewFrame = _scrollView.frame;
- UIEdgeInsets insets = _scrollView.contentInset;
- CGPoint contentOffset = _scrollView.contentOffset;
- CGFloat halfWidth = (kTOScrollBarWidth * 0.5f);
-
- if (@available(iOS 11.0, *)) {
- insets = _scrollView.adjustedContentInset;
- }
-
- // Contract the usable space by the scroll view's content inset (eg navigation/tool bars)
- scrollViewFrame.size.height -= (insets.top + insets.bottom);
-
- CGFloat largeTitleDelta = 0.0f;
- if (_insetForLargeTitles) {
- largeTitleDelta = fabs(MIN(insets.top + contentOffset.y, 0.0f));
- }
-
- // Work out the final height be further contracting by the padding
- CGFloat height = (scrollViewFrame.size.height - (_verticalInset.top + _verticalInset.bottom)) - largeTitleDelta;
-
- // Work out how much we have to offset the track by to make sure all of the parent view
- // is visible at the edge of the screen (Or else we'll be unable to tap properly)
- CGFloat horizontalOffset = halfWidth - _edgeInset;
- self.horizontalOffset = (horizontalOffset > 0.0f) ? horizontalOffset : 0.0f;
-
- // Work out the frame for the scroll view
- CGRect frame = CGRectZero;
-
- // Size
- frame.size.width = kTOScrollBarWidth;
- frame.size.height = (_dragging ? _originalHeight : height);
-
- // Horizontal placement
- frame.origin.x = scrollViewFrame.size.width - (_edgeInset + halfWidth);
- if (@available(iOS 11.0, *)) { frame.origin.x -= _scrollView.safeAreaInsets.right; }
- frame.origin.x = MIN(frame.origin.x, scrollViewFrame.size.width - kTOScrollBarWidth);
-
- // Vertical placement in scroll view
- if (_dragging) {
- frame.origin.y = _originalYOffset;
- }
- else {
- frame.origin.y = _verticalInset.top;
- frame.origin.y += insets.top;
- frame.origin.y += largeTitleDelta;
- }
- frame.origin.y += contentOffset.y;
-
- // Set the frame
- self.frame = frame;
-
- // Bring the scroll bar to the front in case other subviews were subsequently added over it
- [self.superview bringSubviewToFront:self];
-}
-
-- (void)layoutSubviews
-{
- CGRect frame = self.frame;
-
- // The frame of the track
- CGRect trackFrame = CGRectZero;
- trackFrame.size.width = _trackWidth;
- trackFrame.size.height = frame.size.height;
- trackFrame.origin.x = ceilf(((frame.size.width - _trackWidth) * 0.5f) + _horizontalOffset);
- self.trackView.frame = CGRectIntegral(trackFrame);
-
- // Don't handle automatic layout when dragging; we'll do that manually elsewhere
- if (self.dragging || self.disabled) {
- return;
- }
-
- // The frame of the handle
- CGRect handleFrame = CGRectZero;
- handleFrame.size.width = _handleWidth;
- handleFrame.size.height = [self heightOfHandleForContentSize];
- handleFrame.origin.x = ceilf(((frame.size.width - _handleWidth) * 0.5f) + _horizontalOffset);
-
- // Work out the y offset of the handle
- UIEdgeInsets contentInset = _scrollView.contentInset;
- if (@available(iOS 11.0, *)) {
- contentInset = _scrollView.safeAreaInsets;
- }
-
- CGPoint contentOffset = _scrollView.contentOffset;
- CGSize contentSize = _scrollView.contentSize;
- CGRect scrollViewFrame = _scrollView.frame;
-
- CGFloat scrollableHeight = (contentSize.height + contentInset.top + contentInset.bottom) - scrollViewFrame.size.height;
- CGFloat scrollProgress = (contentOffset.y + contentInset.top) / scrollableHeight;
- handleFrame.origin.y = (frame.size.height - handleFrame.size.height) * scrollProgress;
-
- // If the scroll view expanded beyond its scrollable range, shrink the handle to match the rubber band effect
- if (contentOffset.y < -contentInset.top) { // The top
- handleFrame.size.height -= (-contentOffset.y - contentInset.top);
- handleFrame.size.height = MAX(handleFrame.size.height, (_trackWidth * 2 + 2));
- }
- else if (contentOffset.y + scrollViewFrame.size.height > contentSize.height + contentInset.bottom) { // The bottom
- CGFloat adjustedContentOffset = contentOffset.y + scrollViewFrame.size.height;
- CGFloat delta = adjustedContentOffset - (contentSize.height + contentInset.bottom);
- handleFrame.size.height -= delta;
- handleFrame.size.height = MAX(handleFrame.size.height, (_trackWidth * 2 + 2));
- handleFrame.origin.y = frame.size.height - handleFrame.size.height;
- }
-
- // Clamp to the bounds of the frame
- handleFrame.origin.y = MAX(handleFrame.origin.y, 0.0f);
- handleFrame.origin.y = MIN(handleFrame.origin.y, (frame.size.height - handleFrame.size.height));
-
- self.handleView.frame = handleFrame;
-}
-
-- (void)setScrollYOffsetForHandleYOffset:(CGFloat)yOffset animated:(BOOL)animated
-{
- CGFloat heightRange = _trackView.frame.size.height - _handleView.frame.size.height;
- yOffset = MAX(0.0f, yOffset);
- yOffset = MIN(heightRange, yOffset);
-
- CGFloat positionRatio = yOffset / heightRange;
-
- CGRect frame = _scrollView.frame;
- UIEdgeInsets inset = _scrollView.contentInset;
- CGSize contentSize = _scrollView.contentSize;
-
- if (@available(iOS 11.0, *)) {
- inset = _scrollView.adjustedContentInset;
- }
- inset.top = _originalTopInset;
-
- CGFloat totalScrollSize = (contentSize.height + inset.top + inset.bottom) - frame.size.height;
- CGFloat scrollOffset = totalScrollSize * positionRatio;
- scrollOffset -= inset.top;
-
- CGPoint contentOffset = _scrollView.contentOffset;
- contentOffset.y = scrollOffset;
-
- // Animate to help coax the large title navigation bar to behave
- if (@available(iOS 11.0, *)) {
- [UIView animateWithDuration:animated ? 0.1f : 0.00001f animations:^{
- [self.scrollView setContentOffset:contentOffset animated:NO];
- }];
- }
- else {
- [self.scrollView setContentOffset:contentOffset animated:NO];
- }
-}
-
-#pragma mark - Scroll View Integration -
-
-- (void)addToScrollView:(UIScrollView *)scrollView
-{
- if (scrollView == self.scrollView) {
- return;
- }
-
- // Restore the previous scroll view
- [self restoreScrollView:self.scrollView];
-
- // Assign the new scroll view
- self.scrollView = scrollView;
-
- // Apply the observers/settings to the new scroll view
- [self configureScrollView:scrollView];
-
- // Add the scroll bar to the scroll view's content view
- [self.scrollView addSubview:self];
-
- // Add ourselves as a property of the scroll view
- [self.scrollView setTo_scrollBar:self];
-
- // Begin layout
- [self layoutInScrollView];
-}
-
-- (void)removeFromScrollView
-{
- [self restoreScrollView:self.scrollView];
- [self removeFromSuperview];
- [self.scrollView setTo_scrollBar:nil];
- self.scrollView = nil;
-}
-
-- (UIEdgeInsets)adjustedTableViewSeparatorInsetForInset:(UIEdgeInsets)inset
-{
- inset.right = _edgeInset * 2.0f;
- return inset;
-}
-
-- (UIEdgeInsets)adjustedTableViewCellLayoutMarginsForMargins:(UIEdgeInsets)layoutMargins manualOffset:(CGFloat)offset
-{
- layoutMargins.right = (_edgeInset * 2.0f) + 15.0f; // Magic system number is 20, but we can't infer that from here on time
- layoutMargins.right += offset;
- return layoutMargins;
-}
-
-#pragma mark - User Interaction -
-- (void)scrollBarGestureRecognized:(TOScrollBarGestureRecognizer *)recognizer
-{
- CGPoint touchPoint = [recognizer locationInView:self];
-
- switch (recognizer.state) {
- case UIGestureRecognizerStateBegan:
- [self gestureBeganAtPoint:touchPoint];
- break;
- case UIGestureRecognizerStateChanged:
- [self gestureMovedToPoint:touchPoint];
- break;
- case UIGestureRecognizerStateEnded:
- case UIGestureRecognizerStateCancelled:
- [self gestureEnded];
- break;
- default:
- break;
- }
-}
-
-- (void)gestureBeganAtPoint:(CGPoint)touchPoint
-{
- if (self.disabled) {
- return;
- }
-
- // Warm-up the feedback generator
- [_feedbackGenerator prepare];
-
- self.scrollView.scrollEnabled = NO;
- self.dragging = YES;
-
- // Capture the original position
- self.originalHeight = self.frame.size.height;
- self.originalYOffset = self.frame.origin.y - self.scrollView.contentOffset.y;
-
- if (@available(iOS 11.0, *)) {
- self.originalTopInset = _scrollView.adjustedContentInset.top;
- } else {
- self.originalTopInset = _scrollView.contentInset.top;
- }
-
- // Check if the user tapped inside the handle
- CGRect handleFrame = self.handleView.frame;
- if (touchPoint.y > (handleFrame.origin.y - 20) &&
- touchPoint.y < handleFrame.origin.y + (handleFrame.size.height + 20))
- {
- self.yOffset = (touchPoint.y - handleFrame.origin.y);
- return;
- }
-
- if (!self.handleExclusiveInteractionEnabled) {
- // User tapped somewhere else, animate the handle to that point
- CGFloat halfHeight = (handleFrame.size.height * 0.5f);
-
- CGFloat destinationYOffset = touchPoint.y - halfHeight;
- destinationYOffset = MAX(0.0f, destinationYOffset);
- destinationYOffset = MIN(self.frame.size.height - halfHeight, destinationYOffset);
-
- self.yOffset = (touchPoint.y - destinationYOffset);
- handleFrame.origin.y = destinationYOffset;
-
- [UIView animateWithDuration:0.2f
- delay:0.0f
- usingSpringWithDamping:1.0f
- initialSpringVelocity:0.1f options:UIViewAnimationOptionBeginFromCurrentState
- animations:^{
- self.handleView.frame = handleFrame;
- } completion:nil];
-
- [self setScrollYOffsetForHandleYOffset:floorf(destinationYOffset) animated:NO];
- }
-}
-
-- (void)gestureMovedToPoint:(CGPoint)touchPoint
-{
- if (self.disabled) {
- return;
- }
-
- CGFloat delta = 0.0f;
- CGRect handleFrame = _handleView.frame;
- CGRect trackFrame = _trackView.frame;
- CGFloat minimumY = 0.0f;
- CGFloat maximumY = trackFrame.size.height - handleFrame.size.height;
-
- if (self.handleExclusiveInteractionEnabled) {
- if (touchPoint.y < (handleFrame.origin.y - 20) ||
- touchPoint.y > handleFrame.origin.y + (handleFrame.size.height + 20))
- {
- // This touch is not on the handle; eject.
- return;
- }
- }
-
- // Apply the updated Y value plus the previous offset
- delta = handleFrame.origin.y;
- handleFrame.origin.y = touchPoint.y - _yOffset;
-
- //Clamp the handle, and adjust the y offset to counter going outside the bounds
- if (handleFrame.origin.y < minimumY) {
- _yOffset += handleFrame.origin.y;
- _yOffset = MAX(minimumY, _yOffset);
- handleFrame.origin.y = minimumY;
- }
- else if (handleFrame.origin.y > maximumY) {
- CGFloat handleOverflow = CGRectGetMaxY(handleFrame) - trackFrame.size.height;
- _yOffset += handleOverflow;
- _yOffset = MIN(self.yOffset, handleFrame.size.height);
- handleFrame.origin.y = MIN(handleFrame.origin.y, maximumY);
- }
-
- _handleView.frame = handleFrame;
-
- delta -= handleFrame.origin.y;
- delta = fabs(delta);
-
- // If the delta is not 0.0, but we're at either extreme,
- // this is first frame we've since reaching that point.
- // Play a taptic feedback impact
- if (delta > FLT_EPSILON && (CGRectGetMinY(handleFrame) < FLT_EPSILON || CGRectGetMinY(handleFrame) >= maximumY - FLT_EPSILON)) {
- [_feedbackGenerator impactOccurred];
- }
-
- // If the user is doing really granualar swipes, add a subtle amount
- // of vertical animation so the scroll view isn't jumping on each frame
- [self setScrollYOffsetForHandleYOffset:floorf(handleFrame.origin.y) animated:NO]; //(delta < 0.51f)
-}
-
-- (void)gestureEnded
-{
- self.scrollView.scrollEnabled = YES;
- self.dragging = NO;
-
- [UIView animateWithDuration:0.5f delay:0.0f usingSpringWithDamping:1.0f initialSpringVelocity:0.5f options:0 animations:^{
- [self layoutInScrollView];
- [self layoutIfNeeded];
- } completion:nil];
-}
-
-- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
-{
- if (!self.handleExclusiveInteractionEnabled) {
- return [super pointInside:point withEvent:event];
- }
- else {
- CGFloat handleMinY = CGRectGetMinY(self.handleView.frame);
- CGFloat handleMaxY = CGRectGetMaxY(self.handleView.frame);
- return (0 <= point.x) && (handleMinY <= point.y) && (point.y <= handleMaxY);
- }
-}
-
-- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
-{
- UIView *result = [super hitTest:point withEvent:event];
-
- if (self.disabled || self.dragging) {
- return result;
- }
-
- // If the user contacts the screen in a swiping motion,
- // the scroll view will automatically highjack the touch
- // event unless we explicitly override it here.
-
- self.scrollView.scrollEnabled = (result != self);
- return result;
-}
-
-#pragma mark - Accessors -
-- (void)setStyle:(TOScrollBarStyle)style
-{
- _style = style;
- [self configureViewsForStyle:style];
-}
-
-- (UIColor *)trackTintColor { return self.trackView.tintColor; }
-
-- (void)setTrackTintColor:(UIColor *)trackTintColor
-{
- self.trackView.tintColor = trackTintColor;
-}
-
-- (UIColor *)handleTintColor { return self.handleView.tintColor; }
-
-- (void)setHandleTintColor:(UIColor *)handleTintColor
-{
- self.handleView.tintColor = handleTintColor;
-}
-
-- (void)setHidden:(BOOL)hidden
-{
- self.userHidden = hidden;
- [self setHidden:hidden animated:NO];
-}
-
-- (void)setHidden:(BOOL)hidden animated:(BOOL)animated
-{
- // Override. It cannot be shown if it's disabled
- if (_disabled) {
- super.hidden = YES;
- return;
- }
-
- // Simply show or hide it if we're not animating
- if (animated == NO) {
- super.hidden = hidden;
- return;
- }
-
- // Show it if we're going to animate it
- if (self.hidden && hidden == NO) {
- super.hidden = NO;
- [self layoutInScrollView];
- [self setNeedsLayout];
- }
-
- CGRect fromFrame = self.frame;
- CGRect toFrame = self.frame;
-
- CGFloat widestElement = MAX(_trackWidth, _handleWidth);
- CGFloat hiddenOffset = fromFrame.origin.x + _edgeInset + (widestElement * 2.0f);
- if (hidden == NO) {
- fromFrame.origin.x = hiddenOffset;
- }
- else {
- toFrame.origin.x = hiddenOffset;
- }
-
- self.frame = fromFrame;
- [UIView animateWithDuration:0.3f
- delay:0.0f
- usingSpringWithDamping:1.0f
- initialSpringVelocity:0.1f
- options:UIViewAnimationOptionBeginFromCurrentState
- animations:^{
- self.frame = toFrame;
- } completion:^(BOOL finished) {
- super.hidden = hidden;
- }];
-
-}
-
-#pragma mark - Image Generation -
-+ (UIImage *)verticalCapsuleImageWithWidth:(CGFloat)width
-{
- UIImage *image = nil;
- CGFloat radius = width * 0.5f;
- CGRect frame = (CGRect){0, 0, width+1, width+1};
-
- UIGraphicsBeginImageContextWithOptions(frame.size, NO, 0.0f);
- [[UIBezierPath bezierPathWithRoundedRect:frame cornerRadius:radius] fill];
- image = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
-
- image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(radius, radius, radius, radius) resizingMode:UIImageResizingModeStretch];
- image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
-
- return image;
-}
-
-@end
diff --git a/Libraries external/TOScrollBar/TOScrollBarGestureRecognizer.h b/Libraries external/TOScrollBar/TOScrollBarGestureRecognizer.h
deleted file mode 100755
index f7f693d13..000000000
--- a/Libraries external/TOScrollBar/TOScrollBarGestureRecognizer.h
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// TOScrollBarGestureRecognizer.h
-//
-// Copyright 2017 Timothy Oliver. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-// IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-#import <UIKit/UIKit.h>
-
-@interface TOScrollBarGestureRecognizer : UIGestureRecognizer
-
-@end
diff --git a/Libraries external/TOScrollBar/TOScrollBarGestureRecognizer.m b/Libraries external/TOScrollBar/TOScrollBarGestureRecognizer.m
deleted file mode 100755
index 9068d13f8..000000000
--- a/Libraries external/TOScrollBar/TOScrollBarGestureRecognizer.m
+++ /dev/null
@@ -1,75 +0,0 @@
-//
-// TOScrollBarGestureRecognizer.h
-//
-// Copyright 2017 Timothy Oliver. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-// IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-#import "TOScrollBarGestureRecognizer.h"
-#import <UIKit/UIGestureRecognizerSubclass.h>
-#import "TOScrollBar.h"
-
-@interface TOScrollBarGestureRecognizer ()
-
-@property (nonatomic, readonly) TOScrollBar *scrollBar; // The scroll bar this recognizer is attached to
-
-@end
-
-@implementation TOScrollBarGestureRecognizer
-
-#pragma mark - Gesture Recognizer Filtering -
-- (BOOL)canPreventGestureRecognizer:(UIGestureRecognizer *)preventedGestureRecognizer
-{
- // Ensure that the pan gesture recognizer from the scroll view doesn't override the scroll bar
- UIView *view = preventedGestureRecognizer.view;
- if ([view isEqual:self.scrollBar.scrollView]) {
- return YES;
- }
-
- return NO;
-}
-
-#pragma mark - Touch Interaction -
-- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
-{
- self.state = UIGestureRecognizerStateBegan;
-}
-
-- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
-{
- self.state = UIGestureRecognizerStateChanged;
-}
-
-- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
-{
- self.state = UIGestureRecognizerStateEnded;
-}
-
-- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
-{
- self.state = UIGestureRecognizerStateCancelled;
-}
-
-#pragma mark - Accessors -
-- (TOScrollBar *)scrollBar
-{
- if ([self.view isKindOfClass:[TOScrollBar class]] == NO) { return nil; }
- return (TOScrollBar *)self.view;
-}
-
-@end
diff --git a/Libraries external/TOScrollBar/UIScrollView+TOScrollBar.h b/Libraries external/TOScrollBar/UIScrollView+TOScrollBar.h
deleted file mode 100755
index 1cc51d33d..000000000
--- a/Libraries external/TOScrollBar/UIScrollView+TOScrollBar.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// UIScrollView+TOScrollBar.h
-//
-// Copyright 2016 Timothy Oliver. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-// IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-#import <UIKit/UIKit.h>
-
-@class TOScrollBar;
-
-@interface UIScrollView (TOScrollBar)
-
-/** The scroll bar view currently added to this scroll view */
-@property (nullable, nonatomic, readonly) TOScrollBar *to_scrollBar;
-
-/**
- Adds a new scroll bar instance to this scroll bar
- @param scrollBar The scroll bar in which to add
- */
-- (void)to_addScrollBar:(nullable TOScrollBar *)scrollBar;
-
-/**
- Removes the current scroll bar (if any) from the scroll bar
- */
-- (void)to_removeScrollbar;
-
-@end
diff --git a/Libraries external/TOScrollBar/UIScrollView+TOScrollBar.m b/Libraries external/TOScrollBar/UIScrollView+TOScrollBar.m
deleted file mode 100755
index b0db1a2f1..000000000
--- a/Libraries external/TOScrollBar/UIScrollView+TOScrollBar.m
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// UIScrollView+TOScrollBar.m
-//
-// Copyright 2016 Timothy Oliver. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-// IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-#import <objc/runtime.h>
-#import "UIScrollView+TOScrollBar.h"
-#import "TOScrollBar.h"
-
-static void * TOScrollBarPropertyKey = &TOScrollBarPropertyKey;
-
-@implementation UIScrollView (TOScrollBar)
-
-- (TOScrollBar *)to_scrollBar
-{
- return objc_getAssociatedObject(self, TOScrollBarPropertyKey);
-}
-
-- (void)setTo_scrollBar:(TOScrollBar *)scrollBar
-{
- objc_setAssociatedObject(self, TOScrollBarPropertyKey, scrollBar, OBJC_ASSOCIATION_RETAIN);
-}
-
-- (void)to_addScrollBar:(TOScrollBar *)scrollBar
-{
- [scrollBar addToScrollView:self];
-}
-
-- (void)to_removeScrollbar
-{
- [self.to_scrollBar removeFromScrollView];
-}
-
-@end