chromium/ios/chrome/browser/shared/ui/elements/extended_touch_target_button.mm

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "ios/chrome/browser/shared/ui/elements/extended_touch_target_button.h"

@implementation ExtendedTouchTargetButton

- (instancetype)initWithFrame:(CGRect)frame {
  self = [super initWithFrame:frame];
  if (self) {
    self.pointerInteractionEnabled = YES;
    _minimumDiameter = 44;
  }
  return self;
}

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event {
  // Point is in `bounds` coordinates, but `center` is in the `superview`
  // coordinates. Compute center in `bounds` coords.
  CGPoint center =
      CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
  CGFloat distance = sqrt((center.x - point.x) * (center.x - point.x) +
                          ((center.y - point.y) * (center.y - point.y)));
  if (distance < self.minimumDiameter / 2) {
    return YES;
  }
  return [super pointInside:point withEvent:event];
}

@end