chromium/ios/chrome/browser/shared/ui/util/transparent_link_button.h

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

#ifndef IOS_CHROME_BROWSER_SHARED_UI_UTIL_TRANSPARENT_LINK_BUTTON_H_
#define IOS_CHROME_BROWSER_SHARED_UI_UTIL_TRANSPARENT_LINK_BUTTON_H_

#import <UIKit/UIKit.h>

class GURL;

// Minimum height and width for a link's tappable area.  On touch-down events,
// the portion of the button directly on top of the link text will be
// highlighted with a gray overlay.
extern const CGFloat kLinkTapAreaMinimum;

// Transparent button that is overlaid on link portions of text.
@interface TransparentLinkButton : UIButton

// TransparentLinkButtons must be created via |+buttonsForLinkFrames:URL:`.
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithCoder:(NSCoder*)coder NS_UNAVAILABLE;
- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;

// Creates TransparentLinkButtons with `URL` for each NSValue-wrapped CGRect in
// `linkFrames` and returns them in an NSArray.  The links returned by this
// function will be styled such that their touch-down styling will be shared.
// Only the first button in the array will be accessible, and `label` will be
// set as its accessibility label. This is done to ensure that VoiceOver mode
// does not have multiple accessibility elements with the same accessibility
// label and the same action.  `lineHeight` is used to limit the overlap from
// increasing the TransparentLinkButtons to satisfy a11y guidelines for a
// minimum touch area.
+ (NSArray*)buttonsForLinkFrames:(NSArray*)linkFrames
                             URL:(const GURL&)URL
                      lineHeight:(CGFloat)lineHeight
              accessibilityLabel:(NSString*)label
                 accessibilityID:(NSString*)accessibilityID;

// The URL passed upon initialization.
@property(nonatomic, readonly) GURL URL;

// If set to YES, updates the button's background to a semi-opaque color to
// verify the button's location over the text.  The default is NO.
@property(nonatomic, assign, getter=isDebug) BOOL debug;

@end

#endif  // IOS_CHROME_BROWSER_SHARED_UI_UTIL_TRANSPARENT_LINK_BUTTON_H_