| // 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. | |
| #ifndef FLUTTER_LIB_UI_SEMANTICS_STRING_ATTRIBUTE_H_ | |
| #define FLUTTER_LIB_UI_SEMANTICS_STRING_ATTRIBUTE_H_ | |
| #include "flutter/lib/ui/dart_wrapper.h" | |
| #include "third_party/tonic/dart_library_natives.h" | |
| namespace flutter { | |
| struct StringAttribute; | |
| using StringAttributePtr = std::shared_ptr<flutter::StringAttribute>; | |
| using StringAttributes = std::vector<StringAttributePtr>; | |
| // When adding a new StringAttributeType, the classes in these file must be | |
| // updated as well. | |
| // * engine/src/flutter/lib/ui/semantics.dart | |
| // * engine/src/flutter/lib/web_ui/lib/semantics.dart | |
| // * engine/src/flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java | |
| // * engine/src/flutter/lib/web_ui/test/engine/semantics/semantics_api_test.dart | |
| // * engine/src/flutter/testing/dart/semantics_test.dart | |
| enum class StringAttributeType : int32_t { | |
| kSpellOut, | |
| kLocale, | |
| }; | |
| //------------------------------------------------------------------------------ | |
| /// The c++ representation of the StringAttribute, this struct serves as an | |
| /// abstract interface for the subclasses and should not be used directly. | |
| struct StringAttribute { | |
| virtual ~StringAttribute() = default; | |
| int32_t start = -1; | |
| int32_t end = -1; | |
| StringAttributeType type; | |
| }; | |
| //------------------------------------------------------------------------------ | |
| /// Indicates the string needs to be spelled out character by character when the | |
| /// assistive technologies announce the string. | |
| struct SpellOutStringAttribute : StringAttribute {}; | |
| //------------------------------------------------------------------------------ | |
| /// Indicates the string needs to be treated as a specific language when the | |
| /// assistive technologies announce the string. | |
| struct LocaleStringAttribute : StringAttribute { | |
| std::string locale; | |
| }; | |
| //------------------------------------------------------------------------------ | |
| /// The peer class for all of the StringAttribute subclasses in semantics.dart. | |
| class NativeStringAttribute | |
| : public RefCountedDartWrappable<NativeStringAttribute> { | |
| DEFINE_WRAPPERTYPEINFO(); | |
| FML_FRIEND_MAKE_REF_COUNTED(NativeStringAttribute); | |
| public: | |
| ~NativeStringAttribute() override; | |
| //---------------------------------------------------------------------------- | |
| /// The init method for SpellOutStringAttribute constructor | |
| static void initSpellOutStringAttribute(Dart_Handle string_attribute_handle, | |
| int32_t start, | |
| int32_t end); | |
| //---------------------------------------------------------------------------- | |
| /// The init method for LocaleStringAttribute constructor | |
| static void initLocaleStringAttribute(Dart_Handle string_attribute_handle, | |
| int32_t start, | |
| int32_t end, | |
| std::string locale); | |
| //---------------------------------------------------------------------------- | |
| /// Returns the c++ representataion of StringAttribute. | |
| const StringAttributePtr GetAttribute() const; | |
| private: | |
| NativeStringAttribute(); | |
| StringAttributePtr attribute_; | |
| }; | |
| } // namespace flutter | |
| #endif // FLUTTER_LIB_UI_SEMANTICS_STRING_ATTRIBUTE_H_ |