From ee535fafe3edc6026928a5ebbdda78147f8992a0 Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Sun, 1 Jul 2018 21:22:22 -0700 Subject: [PATCH] Fabric: Making `fabric/textlayoutmanager` compilable on Android Summary: @public This compiles, but it works only on iOS for now. Reviewed By: mdvacca Differential Revision: D8655540 fbshipit-source-id: 7e9a73fadb317dd62298af6f347344ac4229a8a5 --- ReactCommon/fabric/textlayoutmanager/BUCK | 50 ++++++++++++++--- .../platform/android/TextLayoutManager.cpp | 33 ++++++++++++ .../platform/android/TextLayoutManager.h | 54 +++++++++++++++++++ .../ios}/NSTextStorage+FontScaling.h | 0 .../ios}/NSTextStorage+FontScaling.m | 0 .../ios}/RCTAttributedTextUtils.h | 0 .../ios}/RCTAttributedTextUtils.mm | 0 .../{ => platform/ios}/RCTFontProperties.h | 0 .../{ => platform/ios}/RCTFontUtils.h | 0 .../{ => platform/ios}/RCTFontUtils.mm | 0 .../{ => platform/ios}/RCTTextLayoutManager.h | 0 .../ios}/RCTTextLayoutManager.mm | 0 .../ios}/RCTTextPrimitivesConversions.h | 0 .../{ => platform/ios}/TextLayoutManager.h | 0 .../{ => platform/ios}/TextLayoutManager.mm | 0 15 files changed, 131 insertions(+), 6 deletions(-) create mode 100644 ReactCommon/fabric/textlayoutmanager/platform/android/TextLayoutManager.cpp create mode 100644 ReactCommon/fabric/textlayoutmanager/platform/android/TextLayoutManager.h rename ReactCommon/fabric/textlayoutmanager/{ => platform/ios}/NSTextStorage+FontScaling.h (100%) rename ReactCommon/fabric/textlayoutmanager/{ => platform/ios}/NSTextStorage+FontScaling.m (100%) rename ReactCommon/fabric/textlayoutmanager/{ => platform/ios}/RCTAttributedTextUtils.h (100%) rename ReactCommon/fabric/textlayoutmanager/{ => platform/ios}/RCTAttributedTextUtils.mm (100%) rename ReactCommon/fabric/textlayoutmanager/{ => platform/ios}/RCTFontProperties.h (100%) rename ReactCommon/fabric/textlayoutmanager/{ => platform/ios}/RCTFontUtils.h (100%) rename ReactCommon/fabric/textlayoutmanager/{ => platform/ios}/RCTFontUtils.mm (100%) rename ReactCommon/fabric/textlayoutmanager/{ => platform/ios}/RCTTextLayoutManager.h (100%) rename ReactCommon/fabric/textlayoutmanager/{ => platform/ios}/RCTTextLayoutManager.mm (100%) rename ReactCommon/fabric/textlayoutmanager/{ => platform/ios}/RCTTextPrimitivesConversions.h (100%) rename ReactCommon/fabric/textlayoutmanager/{ => platform/ios}/TextLayoutManager.h (100%) rename ReactCommon/fabric/textlayoutmanager/{ => platform/ios}/TextLayoutManager.mm (100%) diff --git a/ReactCommon/fabric/textlayoutmanager/BUCK b/ReactCommon/fabric/textlayoutmanager/BUCK index 0095affa7..3ea41084b 100644 --- a/ReactCommon/fabric/textlayoutmanager/BUCK +++ b/ReactCommon/fabric/textlayoutmanager/BUCK @@ -13,14 +13,14 @@ rn_xplat_cxx_library( name = "textlayoutmanager", srcs = glob( [ - "**/*.cpp", - "**/*.mm", + "*.cpp", ], - exclude = glob(["tests/**/*.cpp"]), ), - headers = glob( - ["**/*.h"], - exclude = glob(["tests/**/*.h"]), + headers = subdir_glob( + [ + ("", "*.h"), + ], + prefix = "", ), header_namespace = "", exported_headers = subdir_glob( @@ -35,6 +35,24 @@ rn_xplat_cxx_library( "-std=c++14", "-Wall", ], + fbandroid_exported_headers = subdir_glob( + [ + ("", "*.h"), + ("platform/android", "*.h"), + ], + prefix = "fabric/textlayoutmanager", + ), + fbandroid_headers = subdir_glob( + [ + ("platform/android", "**/*.h"), + ], + prefix = "", + ), + fbandroid_srcs = glob( + [ + "platform/android/**/*.cpp", + ], + ), fbobjc_compiler_flags = APPLE_COMPILER_FLAGS, fbobjc_preprocessor_flags = get_debug_preprocessor_flags() + get_apple_inspector_flags(), fbobjc_tests = [ @@ -46,6 +64,26 @@ rn_xplat_cxx_library( "$SDKROOT/System/Library/Frameworks/Foundation.framework", "$SDKROOT/System/Library/Frameworks/UIKit.framework", ], + ios_deps = [ + ], + ios_exported_headers = subdir_glob( + [ + ("platform/ios", "*.h"), + ], + prefix = "fabric/textlayoutmanager", + ), + ios_headers = subdir_glob( + [ + ("platform/ios", "**/*.h"), + ], + prefix = "", + ), + ios_srcs = glob( + [ + "platform/ios/**/*.cpp", + "platform/ios/**/*.mm", + ], + ), macosx_tests_override = [], platforms = (ANDROID, APPLE), preprocessor_flags = [ diff --git a/ReactCommon/fabric/textlayoutmanager/platform/android/TextLayoutManager.cpp b/ReactCommon/fabric/textlayoutmanager/platform/android/TextLayoutManager.cpp new file mode 100644 index 000000000..fd98bfa6b --- /dev/null +++ b/ReactCommon/fabric/textlayoutmanager/platform/android/TextLayoutManager.cpp @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include "TextLayoutManager.h" + +namespace facebook { +namespace react { + +TextLayoutManager::TextLayoutManager() { +} + +TextLayoutManager::~TextLayoutManager() { +} + +void *TextLayoutManager::getNativeTextLayoutManager() const { + return self_; +} + +Size TextLayoutManager::measure( + AttributedString attributedString, + ParagraphAttributes paragraphAttributes, + LayoutConstraints layoutConstraints +) const { + // Not implemented. + return {}; +} + +} // namespace react +} // namespace facebook diff --git a/ReactCommon/fabric/textlayoutmanager/platform/android/TextLayoutManager.h b/ReactCommon/fabric/textlayoutmanager/platform/android/TextLayoutManager.h new file mode 100644 index 000000000..9da164f30 --- /dev/null +++ b/ReactCommon/fabric/textlayoutmanager/platform/android/TextLayoutManager.h @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +#include +#include +#include + +namespace facebook { +namespace react { + +class TextLayoutManager; + +using SharedTextLayoutManager = std::shared_ptr; + +/* + * Cross platform facade for Android-specific TextLayoutManager. + */ +class TextLayoutManager { + +public: + + TextLayoutManager(); + ~TextLayoutManager(); + + /* + * Measures `attributedString` using native text rendering infrastructure. + */ + Size measure( + AttributedString attributedString, + ParagraphAttributes paragraphAttributes, + LayoutConstraints layoutConstraints + ) const; + + /* + * Returns an opaque pointer to platform-specific TextLayoutManager. + * Is used on a native views layer to delegate text rendering to the manager. + */ + void *getNativeTextLayoutManager() const; + +private: + + void *self_; +}; + +} // namespace react +} // namespace facebook diff --git a/ReactCommon/fabric/textlayoutmanager/NSTextStorage+FontScaling.h b/ReactCommon/fabric/textlayoutmanager/platform/ios/NSTextStorage+FontScaling.h similarity index 100% rename from ReactCommon/fabric/textlayoutmanager/NSTextStorage+FontScaling.h rename to ReactCommon/fabric/textlayoutmanager/platform/ios/NSTextStorage+FontScaling.h diff --git a/ReactCommon/fabric/textlayoutmanager/NSTextStorage+FontScaling.m b/ReactCommon/fabric/textlayoutmanager/platform/ios/NSTextStorage+FontScaling.m similarity index 100% rename from ReactCommon/fabric/textlayoutmanager/NSTextStorage+FontScaling.m rename to ReactCommon/fabric/textlayoutmanager/platform/ios/NSTextStorage+FontScaling.m diff --git a/ReactCommon/fabric/textlayoutmanager/RCTAttributedTextUtils.h b/ReactCommon/fabric/textlayoutmanager/platform/ios/RCTAttributedTextUtils.h similarity index 100% rename from ReactCommon/fabric/textlayoutmanager/RCTAttributedTextUtils.h rename to ReactCommon/fabric/textlayoutmanager/platform/ios/RCTAttributedTextUtils.h diff --git a/ReactCommon/fabric/textlayoutmanager/RCTAttributedTextUtils.mm b/ReactCommon/fabric/textlayoutmanager/platform/ios/RCTAttributedTextUtils.mm similarity index 100% rename from ReactCommon/fabric/textlayoutmanager/RCTAttributedTextUtils.mm rename to ReactCommon/fabric/textlayoutmanager/platform/ios/RCTAttributedTextUtils.mm diff --git a/ReactCommon/fabric/textlayoutmanager/RCTFontProperties.h b/ReactCommon/fabric/textlayoutmanager/platform/ios/RCTFontProperties.h similarity index 100% rename from ReactCommon/fabric/textlayoutmanager/RCTFontProperties.h rename to ReactCommon/fabric/textlayoutmanager/platform/ios/RCTFontProperties.h diff --git a/ReactCommon/fabric/textlayoutmanager/RCTFontUtils.h b/ReactCommon/fabric/textlayoutmanager/platform/ios/RCTFontUtils.h similarity index 100% rename from ReactCommon/fabric/textlayoutmanager/RCTFontUtils.h rename to ReactCommon/fabric/textlayoutmanager/platform/ios/RCTFontUtils.h diff --git a/ReactCommon/fabric/textlayoutmanager/RCTFontUtils.mm b/ReactCommon/fabric/textlayoutmanager/platform/ios/RCTFontUtils.mm similarity index 100% rename from ReactCommon/fabric/textlayoutmanager/RCTFontUtils.mm rename to ReactCommon/fabric/textlayoutmanager/platform/ios/RCTFontUtils.mm diff --git a/ReactCommon/fabric/textlayoutmanager/RCTTextLayoutManager.h b/ReactCommon/fabric/textlayoutmanager/platform/ios/RCTTextLayoutManager.h similarity index 100% rename from ReactCommon/fabric/textlayoutmanager/RCTTextLayoutManager.h rename to ReactCommon/fabric/textlayoutmanager/platform/ios/RCTTextLayoutManager.h diff --git a/ReactCommon/fabric/textlayoutmanager/RCTTextLayoutManager.mm b/ReactCommon/fabric/textlayoutmanager/platform/ios/RCTTextLayoutManager.mm similarity index 100% rename from ReactCommon/fabric/textlayoutmanager/RCTTextLayoutManager.mm rename to ReactCommon/fabric/textlayoutmanager/platform/ios/RCTTextLayoutManager.mm diff --git a/ReactCommon/fabric/textlayoutmanager/RCTTextPrimitivesConversions.h b/ReactCommon/fabric/textlayoutmanager/platform/ios/RCTTextPrimitivesConversions.h similarity index 100% rename from ReactCommon/fabric/textlayoutmanager/RCTTextPrimitivesConversions.h rename to ReactCommon/fabric/textlayoutmanager/platform/ios/RCTTextPrimitivesConversions.h diff --git a/ReactCommon/fabric/textlayoutmanager/TextLayoutManager.h b/ReactCommon/fabric/textlayoutmanager/platform/ios/TextLayoutManager.h similarity index 100% rename from ReactCommon/fabric/textlayoutmanager/TextLayoutManager.h rename to ReactCommon/fabric/textlayoutmanager/platform/ios/TextLayoutManager.h diff --git a/ReactCommon/fabric/textlayoutmanager/TextLayoutManager.mm b/ReactCommon/fabric/textlayoutmanager/platform/ios/TextLayoutManager.mm similarity index 100% rename from ReactCommon/fabric/textlayoutmanager/TextLayoutManager.mm rename to ReactCommon/fabric/textlayoutmanager/platform/ios/TextLayoutManager.mm