blob: 2bdde791c62cab261db81399065b9121323580f0 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterSemanticsScrollView.h"
#import "flutter/shell/platform/darwin/ios/framework/Source/SemanticsObject.h"
@interface FlutterSemanticsScrollView ()
@property(nonatomic, assign) SemanticsObject* semanticsObject;
@end
@implementation FlutterSemanticsScrollView
- (instancetype)initWithSemanticsObject:(SemanticsObject*)semanticsObject {
self = [super initWithFrame:CGRectZero];
if (self) {
_semanticsObject = semanticsObject;
}
return self;
}
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event {
return nil;
}
// The following methods are explicitly forwarded to the wrapped SemanticsObject because the
// forwarding logic above doesn't apply to them since they are also implemented in the
// UIScrollView class, the base class.
- (BOOL)isAccessibilityElement {
if (![_semanticsObject isAccessibilityBridgeAlive]) {
return NO;
}
if ([_semanticsObject isAccessibilityElement]) {
return YES;
}
if (self.contentSize.width > self.frame.size.width ||
self.contentSize.height > self.frame.size.height) {
// In SwitchControl or VoiceControl, the isAccessibilityElement must return YES
// in order to use scroll actions.
return !_semanticsObject.bridge->isVoiceOverRunning();
} else {
return NO;
}
}
- (NSString*)accessibilityLabel {
return [_semanticsObject accessibilityLabel];
}
- (NSAttributedString*)accessibilityAttributedLabel {
return [_semanticsObject accessibilityAttributedLabel];
}
- (NSString*)accessibilityValue {
return [_semanticsObject accessibilityValue];
}
- (NSAttributedString*)accessibilityAttributedValue {
return [_semanticsObject accessibilityAttributedValue];
}
- (NSString*)accessibilityHint {
return [_semanticsObject accessibilityHint];
}
- (NSAttributedString*)accessibilityAttributedHint {
return [_semanticsObject accessibilityAttributedHint];
}
- (BOOL)accessibilityActivate {
return [_semanticsObject accessibilityActivate];
}
- (void)accessibilityIncrement {
[_semanticsObject accessibilityIncrement];
}
- (void)accessibilityDecrement {
[_semanticsObject accessibilityDecrement];
}
- (BOOL)accessibilityScroll:(UIAccessibilityScrollDirection)direction {
return [_semanticsObject accessibilityScroll:direction];
}
- (BOOL)accessibilityPerformEscape {
return [_semanticsObject accessibilityPerformEscape];
}
- (void)accessibilityElementDidBecomeFocused {
[_semanticsObject accessibilityElementDidBecomeFocused];
}
- (void)accessibilityElementDidLoseFocus {
[_semanticsObject accessibilityElementDidLoseFocus];
}
- (id)accessibilityContainer {
return [_semanticsObject accessibilityContainer];
}
- (NSInteger)accessibilityElementCount {
return [[_semanticsObject children] count];
}
@end