Flutter Engine
The Flutter Engine
FlutterTextInputSemanticsObject.h
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FLUTTER_SHELL_PLATFORM_DARWIN_MACOS_FRAMEWORK_SOURCE_FLUTTERTEXTINPUTSEMANTICSOBJECT_H_
6#define FLUTTER_SHELL_PLATFORM_DARWIN_MACOS_FRAMEWORK_SOURCE_FLUTTERTEXTINPUTSEMANTICSOBJECT_H_
7
8#import <Cocoa/Cocoa.h>
9
10#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterPlatformNodeDelegateMac.h"
11
12#include "flutter/fml/macros.h"
13#include "flutter/third_party/accessibility/ax/platform/ax_platform_node_base.h"
14
15@class FlutterTextField;
17
18namespace flutter {
19
20//------------------------------------------------------------------------------
21/// The ax platform node for a text field.
23 public:
24 //---------------------------------------------------------------------------
25 /// @brief Creates a FlutterTextPlatformNode that uses a
26 /// FlutterTextField as its NativeViewAccessible.
27 /// @param[in] delegate The delegate that provides accessibility
28 /// data.
29 /// @param[in] view_controller The view_controller that is used for querying
30 /// the information about FlutterView and
31 /// FlutterTextInputPlugin.
33 __weak FlutterViewController* view_controller);
34 ~FlutterTextPlatformNode() override;
35
36 //------------------------------------------------------------------------------
37 /// @brief Gets the frame of this platform node relative to the view of
38 /// FlutterViewController. This is used by the FlutterTextField to get its
39 /// frame rect because the FlutterTextField is a subview of the
40 /// FlutterViewController.view.
41 NSRect GetFrame();
42
43 // |ui::AXPlatformNodeBase|
45
46 private:
47 FlutterTextField* appkit_text_field_;
48 __weak FlutterViewController* view_controller_;
49
50 //------------------------------------------------------------------------------
51 /// @brief Ensures the FlutterTextField is attached to the FlutterView. This
52 /// method returns true if the text field is succesfully attached. If
53 /// this method returns false, that means the FlutterTextField could not
54 /// be attached to the FlutterView. This can happen when the FlutterEngine
55 /// does not have a FlutterViewController or the FlutterView is not loaded
56 /// yet.
57 bool EnsureAttachedToView();
58
59 //------------------------------------------------------------------------------
60 /// @brief Detaches the FlutterTextField from the FlutterView if it is not
61 /// already detached.
62 void EnsureDetachedFromView();
63
64 FML_DISALLOW_COPY_AND_ASSIGN(FlutterTextPlatformNode);
65};
66
67} // namespace flutter
68
69/**
70 * An NSTextField implementation that represents the NativeViewAccessible for the
71 * FlutterTextPlatformNode
72 *
73 * The NSAccessibility protocol does not provide full support for text editing. This
74 * appkit text field is used to get around this problem. The FlutterTextPlatformNode
75 * creates a hidden FlutterTextField, since VoiceOver only provides text editing
76 * announcements for NSTextField subclasses.
77 *
78 * All of the text editing events in this native text field are redirected to the
79 * FlutterTextInputPlugin.
80 */
81@interface FlutterTextField : NSTextField
82
83/**
84 * Initializes a FlutterTextField that uses the FlutterTextInputPlugin as its field editor.
85 * The text field redirects all of the text editing events to the FlutterTextInputPlugin.
86 */
87- (instancetype)initWithPlatformNode:(flutter::FlutterTextPlatformNode*)node
88 fieldEditor:(FlutterTextInputPlugin*)plugin;
89
90/**
91 * Updates the string value and the selection of this text field.
92 *
93 * Calling this method is necessary for macOS to get notified about string and selection
94 * changes.
95 */
96- (void)updateString:(NSString*)string withSelection:(NSRange)selection;
97
98/**
99 * Makes the field editor (plugin) current editor for this TextField, meaning
100 * that the text field will start getting editing events.
101 */
102- (void)startEditing;
103
104@end
105
106#endif // FLUTTER_SHELL_PLATFORM_DARWIN_MACOS_FRAMEWORK_SOURCE_FLUTTERTEXTINPUTSEMANTICSOBJECT_H_
The ax platform node for a text field.
FlutterTextPlatformNode(FlutterPlatformNodeDelegate *delegate, __weak FlutterViewController *view_controller)
Creates a FlutterTextPlatformNode that uses a FlutterTextField as its NativeViewAccessible.
NSRect GetFrame()
Gets the frame of this platform node relative to the view of FlutterViewController....
gfx::NativeViewAccessible GetNativeViewAccessible() override
UnimplementedNativeViewAccessible * NativeViewAccessible