mirror of
https://github.com/zoriya/react-native-svg.git
synced 2025-12-06 07:06:11 +00:00
Changed `requireNativeComponent` to `codegenNativeComponent` so that upcoming changes (Static View Configs, Bridgeless Mode and idk what more) in `react-native` are available in the library. Also, types and native components are now taken directly from `fabric` folder to make sure the values passed to the native components are the ones defined in props. It should work on all supported versions since `codegenNativeComponent` function exists from RN v. 0.61.0. Suggested by @RSNara and @cipolleschi Reason for [`5394bbb` (#1847)](5394bbbced): - on `Paper`, `Animated` uses `setNativeProps` method when we set `useNativeDriver` to `false`, and does not rerender the component. Therefore, new transform lands only in `SvgView` and is parsed in `RCTViewManager.m` . - on `Fabric`, the same code makes the components rerender. Due to this, information about new transform is passed to the `SvgView` child: `G` , making it apply translations from the transform in its `updateProps` method. - other than `Animated` use-case, on both archs, if we just passed `transform` prop to `Svg` component, it would end up in double transformations now as well. All of those changes are due to https://github.com/software-mansion/react-native-svg/pull/1895, which added proper parsing of RN style `transform` prop (array of transformations objects) therefore making `G` properly handle `transform` prop passed from `Svg`. Reason for [`19bcb24` (#1847)](19bcb2464b): Same as https://github.com/software-mansion/react-native-screens/pull/1624
65 lines
1.5 KiB
C++
65 lines
1.5 KiB
C++
/*
|
|
* Copyright (c) Meta Platforms, Inc. and 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 <jsi/jsi.h>
|
|
#include <react/renderer/imagemanager/ImageRequest.h>
|
|
#include <react/renderer/imagemanager/primitives.h>
|
|
|
|
#ifdef ANDROID
|
|
#include <react/renderer/mapbuffer/MapBuffer.h>
|
|
#include <react/renderer/mapbuffer/MapBufferBuilder.h>
|
|
#endif
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
/*
|
|
* State for <Image> component.
|
|
*/
|
|
class JSI_EXPORT RNSVGImageState final {
|
|
public:
|
|
RNSVGImageState(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
|
|
RNSVGImageState(RNSVGImageState const &previousState, folly::dynamic data){};
|
|
|
|
/*
|
|
* Empty implementation for Android because it doesn't use this class.
|
|
*/
|
|
folly::dynamic getDynamic() const {
|
|
return {};
|
|
};
|
|
|
|
MapBuffer getMapBuffer() const {
|
|
return MapBufferBuilder::EMPTY();
|
|
};
|
|
#endif
|
|
|
|
private:
|
|
ImageSource imageSource_;
|
|
std::shared_ptr<ImageRequest> imageRequest_;
|
|
};
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|