yeet
This commit is contained in:
81
node_modules/react-native/ReactCommon/fabric/components/image/BUCK
generated
vendored
Normal file
81
node_modules/react-native/ReactCommon/fabric/components/image/BUCK
generated
vendored
Normal file
@ -0,0 +1,81 @@
|
||||
load("@fbsource//tools/build_defs/apple:flag_defs.bzl", "get_preprocessor_flags_for_build_mode")
|
||||
load(
|
||||
"//tools/build_defs/oss:rn_defs.bzl",
|
||||
"ANDROID",
|
||||
"APPLE",
|
||||
"CXX",
|
||||
"YOGA_CXX_TARGET",
|
||||
"fb_xplat_cxx_test",
|
||||
"get_apple_compiler_flags",
|
||||
"get_apple_inspector_flags",
|
||||
"react_native_xplat_target",
|
||||
"rn_xplat_cxx_library",
|
||||
"subdir_glob",
|
||||
)
|
||||
|
||||
APPLE_COMPILER_FLAGS = get_apple_compiler_flags()
|
||||
|
||||
rn_xplat_cxx_library(
|
||||
name = "image",
|
||||
srcs = glob(
|
||||
["**/*.cpp"],
|
||||
exclude = glob(["tests/**/*.cpp"]),
|
||||
),
|
||||
headers = [],
|
||||
header_namespace = "",
|
||||
exported_headers = subdir_glob(
|
||||
[
|
||||
("", "*.h"),
|
||||
],
|
||||
prefix = "react/components/image",
|
||||
),
|
||||
compiler_flags = [
|
||||
"-fexceptions",
|
||||
"-frtti",
|
||||
"-std=c++14",
|
||||
"-Wall",
|
||||
],
|
||||
fbobjc_compiler_flags = APPLE_COMPILER_FLAGS,
|
||||
fbobjc_labels = ["supermodule:ios/default/public.react_native.infra"],
|
||||
fbobjc_preprocessor_flags = get_preprocessor_flags_for_build_mode() + get_apple_inspector_flags(),
|
||||
macosx_tests_override = [],
|
||||
platforms = (ANDROID, APPLE, CXX),
|
||||
preprocessor_flags = [
|
||||
"-DLOG_TAG=\"ReactNative\"",
|
||||
"-DWITH_FBSYSTRACE=1",
|
||||
],
|
||||
tests = [":tests"],
|
||||
visibility = ["PUBLIC"],
|
||||
deps = [
|
||||
"//xplat/fbsystrace:fbsystrace",
|
||||
"//xplat/folly:headers_only",
|
||||
"//xplat/folly:memory",
|
||||
"//xplat/folly:molly",
|
||||
"//xplat/third-party/glog:glog",
|
||||
YOGA_CXX_TARGET,
|
||||
react_native_xplat_target("fabric/debug:debug"),
|
||||
react_native_xplat_target("fabric/core:core"),
|
||||
react_native_xplat_target("fabric/graphics:graphics"),
|
||||
react_native_xplat_target("fabric/imagemanager:imagemanager"),
|
||||
react_native_xplat_target("fabric/components/view:view"),
|
||||
],
|
||||
)
|
||||
|
||||
fb_xplat_cxx_test(
|
||||
name = "tests",
|
||||
srcs = glob(["tests/**/*.cpp"]),
|
||||
headers = glob(["tests/**/*.h"]),
|
||||
compiler_flags = [
|
||||
"-fexceptions",
|
||||
"-frtti",
|
||||
"-std=c++14",
|
||||
"-Wall",
|
||||
],
|
||||
contacts = ["oncall+react_native@xmail.facebook.com"],
|
||||
platforms = (ANDROID, APPLE, CXX),
|
||||
deps = [
|
||||
":image",
|
||||
"//xplat/folly:molly",
|
||||
"//xplat/third-party/gmock:gtest",
|
||||
],
|
||||
)
|
45
node_modules/react-native/ReactCommon/fabric/components/image/ImageComponentDescriptor.h
generated
vendored
Normal file
45
node_modules/react-native/ReactCommon/fabric/components/image/ImageComponentDescriptor.h
generated
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* 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 <react/components/image/ImageShadowNode.h>
|
||||
#include <react/core/ConcreteComponentDescriptor.h>
|
||||
#include <react/imagemanager/ImageManager.h>
|
||||
#include <react/utils/ContextContainer.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
/*
|
||||
* Descriptor for <Image> component.
|
||||
*/
|
||||
class ImageComponentDescriptor final
|
||||
: public ConcreteComponentDescriptor<ImageShadowNode> {
|
||||
public:
|
||||
ImageComponentDescriptor(ComponentDescriptorParameters const ¶meters)
|
||||
: ConcreteComponentDescriptor(parameters),
|
||||
imageManager_(std::make_shared<ImageManager>(contextContainer_)){};
|
||||
|
||||
void adopt(UnsharedShadowNode shadowNode) const override {
|
||||
ConcreteComponentDescriptor::adopt(shadowNode);
|
||||
|
||||
assert(std::dynamic_pointer_cast<ImageShadowNode>(shadowNode));
|
||||
auto imageShadowNode =
|
||||
std::static_pointer_cast<ImageShadowNode>(shadowNode);
|
||||
|
||||
// `ImageShadowNode` uses `ImageManager` to initiate image loading and
|
||||
// communicate the loading state and results to mounting layer.
|
||||
imageShadowNode->setImageManager(imageManager_);
|
||||
}
|
||||
|
||||
private:
|
||||
const SharedImageManager imageManager_;
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
42
node_modules/react-native/ReactCommon/fabric/components/image/ImageEventEmitter.cpp
generated
vendored
Normal file
42
node_modules/react-native/ReactCommon/fabric/components/image/ImageEventEmitter.cpp
generated
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include "ImageEventEmitter.h"
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
void ImageEventEmitter::onLoadStart() const {
|
||||
dispatchEvent("loadStart");
|
||||
}
|
||||
|
||||
void ImageEventEmitter::onLoad() const {
|
||||
dispatchEvent("load");
|
||||
}
|
||||
|
||||
void ImageEventEmitter::onLoadEnd() const {
|
||||
dispatchEvent("loadEnd");
|
||||
}
|
||||
|
||||
void ImageEventEmitter::onProgress(double progress) const {
|
||||
dispatchEvent("progress", [=](jsi::Runtime &runtime) {
|
||||
auto payload = jsi::Object(runtime);
|
||||
payload.setProperty(runtime, "progress", progress);
|
||||
return payload;
|
||||
});
|
||||
}
|
||||
|
||||
void ImageEventEmitter::onError() const {
|
||||
dispatchEvent("error");
|
||||
}
|
||||
|
||||
void ImageEventEmitter::onPartialLoad() const {
|
||||
dispatchEvent("partialLoad");
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
28
node_modules/react-native/ReactCommon/fabric/components/image/ImageEventEmitter.h
generated
vendored
Normal file
28
node_modules/react-native/ReactCommon/fabric/components/image/ImageEventEmitter.h
generated
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* 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 <react/components/view/ViewEventEmitter.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
class ImageEventEmitter : public ViewEventEmitter {
|
||||
public:
|
||||
using ViewEventEmitter::ViewEventEmitter;
|
||||
|
||||
void onLoadStart() const;
|
||||
void onLoad() const;
|
||||
void onLoadEnd() const;
|
||||
void onProgress(double) const;
|
||||
void onError() const;
|
||||
void onPartialLoad() const;
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
36
node_modules/react-native/ReactCommon/fabric/components/image/ImageProps.cpp
generated
vendored
Normal file
36
node_modules/react-native/ReactCommon/fabric/components/image/ImageProps.cpp
generated
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include <react/components/image/ImageProps.h>
|
||||
#include <react/components/image/conversions.h>
|
||||
#include <react/core/propsConversions.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
ImageProps::ImageProps(const ImageProps &sourceProps, const RawProps &rawProps)
|
||||
: ViewProps(sourceProps, rawProps),
|
||||
sources(convertRawProp(rawProps, "source", sourceProps.sources, {})),
|
||||
defaultSources(convertRawProp(
|
||||
rawProps,
|
||||
"defaultSource",
|
||||
sourceProps.defaultSources,
|
||||
{})),
|
||||
resizeMode(convertRawProp(
|
||||
rawProps,
|
||||
"resizeMode",
|
||||
sourceProps.resizeMode,
|
||||
ImageResizeMode::Stretch)),
|
||||
blurRadius(
|
||||
convertRawProp(rawProps, "blurRadius", sourceProps.blurRadius, {})),
|
||||
capInsets(
|
||||
convertRawProp(rawProps, "capInsets", sourceProps.capInsets, {})),
|
||||
tintColor(
|
||||
convertRawProp(rawProps, "tintColor", sourceProps.tintColor, {})) {}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
32
node_modules/react-native/ReactCommon/fabric/components/image/ImageProps.h
generated
vendored
Normal file
32
node_modules/react-native/ReactCommon/fabric/components/image/ImageProps.h
generated
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include <react/components/view/ViewProps.h>
|
||||
#include <react/graphics/Color.h>
|
||||
#include <react/imagemanager/primitives.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
// TODO (T28334063): Consider for codegen.
|
||||
class ImageProps final : public ViewProps {
|
||||
public:
|
||||
ImageProps() = default;
|
||||
ImageProps(const ImageProps &sourceProps, const RawProps &rawProps);
|
||||
|
||||
#pragma mark - Props
|
||||
|
||||
const ImageSources sources{};
|
||||
const ImageSources defaultSources{};
|
||||
const ImageResizeMode resizeMode{ImageResizeMode::Stretch};
|
||||
const Float blurRadius{};
|
||||
const EdgeInsets capInsets{};
|
||||
const SharedColor tintColor{};
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
86
node_modules/react-native/ReactCommon/fabric/components/image/ImageShadowNode.cpp
generated
vendored
Normal file
86
node_modules/react-native/ReactCommon/fabric/components/image/ImageShadowNode.cpp
generated
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
#include <limits>
|
||||
|
||||
#include <react/components/image/ImageShadowNode.h>
|
||||
#include <react/core/LayoutContext.h>
|
||||
#include "ImageState.h"
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
const char ImageComponentName[] = "Image";
|
||||
|
||||
void ImageShadowNode::setImageManager(const SharedImageManager &imageManager) {
|
||||
ensureUnsealed();
|
||||
imageManager_ = imageManager;
|
||||
}
|
||||
|
||||
void ImageShadowNode::updateStateIfNeeded() {
|
||||
ensureUnsealed();
|
||||
|
||||
auto const &imageSource = getImageSource();
|
||||
auto const ¤tState = getStateData();
|
||||
|
||||
if (currentState.getImageSource() == imageSource) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto state = ImageState{
|
||||
imageSource, imageManager_->requestImage(imageSource, getSurfaceId())};
|
||||
setStateData(std::move(state));
|
||||
}
|
||||
|
||||
ImageSource ImageShadowNode::getImageSource() const {
|
||||
auto sources = getConcreteProps().sources;
|
||||
|
||||
if (sources.size() == 0) {
|
||||
return {
|
||||
/* .type = */ ImageSource::Type::Invalid,
|
||||
};
|
||||
}
|
||||
|
||||
if (sources.size() == 1) {
|
||||
return sources[0];
|
||||
}
|
||||
|
||||
auto layoutMetrics = getLayoutMetrics();
|
||||
auto size = layoutMetrics.getContentFrame().size;
|
||||
auto scale = layoutMetrics.pointScaleFactor;
|
||||
auto targetImageArea = size.width * size.height * scale * scale;
|
||||
auto bestFit = std::numeric_limits<Float>::infinity();
|
||||
|
||||
auto bestSource = ImageSource{};
|
||||
|
||||
for (const auto &source : sources) {
|
||||
auto sourceSize = source.size;
|
||||
auto sourceScale = source.scale == 0 ? scale : source.scale;
|
||||
auto sourceArea =
|
||||
sourceSize.width * sourceSize.height * sourceScale * sourceScale;
|
||||
|
||||
auto fit = std::abs(1 - (sourceArea / targetImageArea));
|
||||
|
||||
if (fit < bestFit) {
|
||||
bestFit = fit;
|
||||
bestSource = source;
|
||||
}
|
||||
}
|
||||
|
||||
return bestSource;
|
||||
}
|
||||
|
||||
#pragma mark - LayoutableShadowNode
|
||||
|
||||
void ImageShadowNode::layout(LayoutContext layoutContext) {
|
||||
updateStateIfNeeded();
|
||||
ConcreteViewShadowNode::layout(layoutContext);
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
59
node_modules/react-native/ReactCommon/fabric/components/image/ImageShadowNode.h
generated
vendored
Normal file
59
node_modules/react-native/ReactCommon/fabric/components/image/ImageShadowNode.h
generated
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* 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 <react/components/image/ImageEventEmitter.h>
|
||||
#include <react/components/image/ImageProps.h>
|
||||
#include <react/components/image/ImageState.h>
|
||||
#include <react/components/view/ConcreteViewShadowNode.h>
|
||||
#include <react/imagemanager/ImageManager.h>
|
||||
#include <react/imagemanager/primitives.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
extern const char ImageComponentName[];
|
||||
|
||||
/*
|
||||
* `ShadowNode` for <Image> component.
|
||||
*/
|
||||
class ImageShadowNode final : public ConcreteViewShadowNode<
|
||||
ImageComponentName,
|
||||
ImageProps,
|
||||
ImageEventEmitter,
|
||||
ImageState> {
|
||||
public:
|
||||
using ConcreteViewShadowNode::ConcreteViewShadowNode;
|
||||
|
||||
/*
|
||||
* Associates a shared `ImageManager` with the node.
|
||||
*/
|
||||
void setImageManager(const SharedImageManager &imageManager);
|
||||
|
||||
static ImageState initialStateData(
|
||||
ShadowNodeFragment const &fragment,
|
||||
SurfaceId const surfaceId,
|
||||
ComponentDescriptor const &componentDescriptor) {
|
||||
auto imageSource = ImageSource{ImageSource::Type::Invalid};
|
||||
return {imageSource, {imageSource, nullptr}};
|
||||
}
|
||||
|
||||
#pragma mark - LayoutableShadowNode
|
||||
|
||||
void layout(LayoutContext layoutContext) override;
|
||||
|
||||
private:
|
||||
ImageSource getImageSource() const;
|
||||
|
||||
SharedImageManager imageManager_;
|
||||
|
||||
void updateStateIfNeeded();
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
22
node_modules/react-native/ReactCommon/fabric/components/image/ImageState.cpp
generated
vendored
Normal file
22
node_modules/react-native/ReactCommon/fabric/components/image/ImageState.cpp
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include "ImageState.h"
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
ImageSource ImageState::getImageSource() const {
|
||||
return imageSource_;
|
||||
}
|
||||
|
||||
ImageRequest const &ImageState::getImageRequest() const {
|
||||
return *imageRequest_;
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
55
node_modules/react-native/ReactCommon/fabric/components/image/ImageState.h
generated
vendored
Normal file
55
node_modules/react-native/ReactCommon/fabric/components/image/ImageState.h
generated
vendored
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* 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 <folly/dynamic.h>
|
||||
#include <react/imagemanager/ImageRequest.h>
|
||||
#include <react/imagemanager/primitives.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
/*
|
||||
* State for <Image> component.
|
||||
*/
|
||||
class ImageState final {
|
||||
public:
|
||||
ImageState(ImageSource const &imageSource, ImageRequest imageRequest)
|
||||
: imageSource_(imageSource),
|
||||
imageRequest_(
|
||||
std::make_shared<ImageRequest>(std::move(imageRequest))){};
|
||||
|
||||
/*
|
||||
* Returns stored ImageSource object.
|
||||
*/
|
||||
ImageSource getImageSource() const;
|
||||
|
||||
/*
|
||||
* Exposes for reading stored `ImageRequest` object.
|
||||
* `ImageRequest` object cannot be copied or moved from `ImageLocalData`.
|
||||
*/
|
||||
ImageRequest const &getImageRequest() const;
|
||||
|
||||
#ifdef ANDROID
|
||||
ImageState(ImageState const &previousState, folly::dynamic data){};
|
||||
|
||||
/*
|
||||
* Empty implementation for Android because it doesn't use this class.
|
||||
*/
|
||||
folly::dynamic getDynamic() const {
|
||||
return {};
|
||||
};
|
||||
#endif
|
||||
|
||||
private:
|
||||
ImageSource imageSource_;
|
||||
std::shared_ptr<ImageRequest> imageRequest_;
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
132
node_modules/react-native/ReactCommon/fabric/components/image/conversions.h
generated
vendored
Normal file
132
node_modules/react-native/ReactCommon/fabric/components/image/conversions.h
generated
vendored
Normal file
@ -0,0 +1,132 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* 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 <better/map.h>
|
||||
#include <folly/dynamic.h>
|
||||
#include <react/graphics/conversions.h>
|
||||
#include <react/imagemanager/primitives.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
inline void fromRawValue(const RawValue &value, ImageSource &result) {
|
||||
if (value.hasType<std::string>()) {
|
||||
result = {
|
||||
/* .type = */ ImageSource::Type::Remote,
|
||||
/* .uri = */ (std::string)value,
|
||||
};
|
||||
return;
|
||||
}
|
||||
|
||||
if (value.hasType<better::map<std::string, RawValue>>()) {
|
||||
auto items = (better::map<std::string, RawValue>)value;
|
||||
result = {};
|
||||
|
||||
result.type = ImageSource::Type::Remote;
|
||||
|
||||
if (items.find("__packager_asset") != items.end()) {
|
||||
result.type = ImageSource::Type::Local;
|
||||
}
|
||||
|
||||
if (items.find("width") != items.end() &&
|
||||
items.find("height") != items.end() &&
|
||||
// The following checks have to be removed after codegen is shipped.
|
||||
// See T45151459.
|
||||
items.at("width").hasType<Float>() &&
|
||||
items.at("height").hasType<Float>()) {
|
||||
result.size = {(Float)items.at("width"), (Float)items.at("height")};
|
||||
}
|
||||
|
||||
if (items.find("scale") != items.end() &&
|
||||
// The following checks have to be removed after codegen is shipped.
|
||||
// See T45151459.
|
||||
items.at("scale").hasType<Float>()) {
|
||||
result.scale = (Float)items.at("scale");
|
||||
} else {
|
||||
result.scale = items.find("deprecated") != items.end() ? 0.0 : 1.0;
|
||||
}
|
||||
|
||||
if (items.find("url") != items.end() &&
|
||||
// The following should be removed after codegen is shipped.
|
||||
// See T45151459.
|
||||
items.at("url").hasType<std::string>()) {
|
||||
result.uri = (std::string)items.at("url");
|
||||
}
|
||||
|
||||
if (items.find("uri") != items.end() &&
|
||||
// The following should be removed after codegen is shipped.
|
||||
// See T45151459.
|
||||
items.at("uri").hasType<std::string>()) {
|
||||
result.uri = (std::string)items.at("uri");
|
||||
}
|
||||
|
||||
if (items.find("bundle") != items.end() &&
|
||||
// The following should be removed after codegen is shipped.
|
||||
// See T45151459.
|
||||
items.at("bundle").hasType<std::string>()) {
|
||||
result.bundle = (std::string)items.at("bundle");
|
||||
result.type = ImageSource::Type::Local;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// The following should be removed after codegen is shipped.
|
||||
// See T45151459.
|
||||
result = {};
|
||||
result.type = ImageSource::Type::Invalid;
|
||||
}
|
||||
|
||||
inline std::string toString(const ImageSource &value) {
|
||||
return "{uri: " + value.uri + "}";
|
||||
}
|
||||
|
||||
inline void fromRawValue(const RawValue &value, ImageResizeMode &result) {
|
||||
assert(value.hasType<std::string>());
|
||||
auto stringValue = (std::string)value;
|
||||
if (stringValue == "cover") {
|
||||
result = ImageResizeMode::Cover;
|
||||
return;
|
||||
}
|
||||
if (stringValue == "contain") {
|
||||
result = ImageResizeMode::Contain;
|
||||
return;
|
||||
}
|
||||
if (stringValue == "stretch") {
|
||||
result = ImageResizeMode::Stretch;
|
||||
return;
|
||||
}
|
||||
if (stringValue == "center") {
|
||||
result = ImageResizeMode::Center;
|
||||
return;
|
||||
}
|
||||
if (stringValue == "repeat") {
|
||||
result = ImageResizeMode::Repeat;
|
||||
return;
|
||||
}
|
||||
abort();
|
||||
}
|
||||
|
||||
inline std::string toString(const ImageResizeMode &value) {
|
||||
switch (value) {
|
||||
case ImageResizeMode::Cover:
|
||||
return "cover";
|
||||
case ImageResizeMode::Contain:
|
||||
return "contain";
|
||||
case ImageResizeMode::Stretch:
|
||||
return "stretch";
|
||||
case ImageResizeMode::Center:
|
||||
return "center";
|
||||
case ImageResizeMode::Repeat:
|
||||
return "repeat";
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
14
node_modules/react-native/ReactCommon/fabric/components/image/tests/ImageTest.cpp
generated
vendored
Normal file
14
node_modules/react-native/ReactCommon/fabric/components/image/tests/ImageTest.cpp
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
TEST(ImageTest, testSomething) {
|
||||
// TODO
|
||||
}
|
Reference in New Issue
Block a user