addResetImageReq

Signed-off-by: hw_wyx <wuyinxiao@huawei.com>
Change-Id: If74bc49f06ef71400e5a70efe67fc2889e4147ce
This commit is contained in:
hw_wyx 2024-07-09 20:01:55 +08:00
parent d56c373c08
commit e389ccb54d
14 changed files with 105 additions and 21 deletions

View File

@ -503,8 +503,8 @@ class ImageTransitionModifier extends ModifierWithKey<object> {
}
}
class ImageSrcModifier extends ModifierWithKey<ResourceStr | PixelMap | DrawableDescriptor> {
constructor(value: ResourceStr | PixelMap | DrawableDescriptor) {
class ImageSrcModifier extends ModifierWithKey<ResourceStr | PixelMap | DrawableDescriptor | ImageContent> {
constructor(value: ResourceStr | PixelMap | DrawableDescriptor | ImageContent) {
super(value);
}
static identity: Symbol = Symbol('imageShowSrc');

View File

@ -219,6 +219,11 @@ var DynamicRangeMode ;
DynamicRangeMode [DynamicRangeMode ["STANDARD"] = 2] = "STANDARD";
})(DynamicRangeMode || (DynamicRangeMode = {}));
var ImageContent;
(function (ImageContent) {
ImageContent[ImageContent["EMPTY"] = 0] = "EMPTY";
})(ImageContent || (ImageContent = {}));
var ImageRepeat;
(function (ImageRepeat) {
ImageRepeat[ImageRepeat["NoRepeat"] = 0] = "NoRepeat";

View File

@ -86,6 +86,15 @@ void PushDimensionsToVector(std::vector<ArkUIStringAndFloat>& results,
}
}
bool ImageBridge::CheckIsCard()
{
auto container = Container::Current();
CHECK_NULL_RETURN(container, false);
auto context = PipelineBase::GetCurrentContext();
CHECK_NULL_RETURN(context, false);
return context->IsFormRender() && !container->IsDynamicRender();
}
ArkUINativeModuleValue ImageBridge::SetImageShowSrc(ArkUIRuntimeCallInfo* runtimeCallInfo)
{
EcmaVM* vm = runtimeCallInfo->GetVM();
@ -95,13 +104,13 @@ ArkUINativeModuleValue ImageBridge::SetImageShowSrc(ArkUIRuntimeCallInfo* runtim
auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
auto container = Container::Current();
CHECK_NULL_RETURN(container, panda::NativePointerRef::New(vm, nullptr));
auto context = PipelineBase::GetCurrentContext();
CHECK_NULL_RETURN(context, panda::NativePointerRef::New(vm, nullptr));
bool isCard = context->IsFormRender() && !container->IsDynamicRender();
bool isCard = CheckIsCard();
std::string src;
int32_t resId = 0;
if (info[1]->IsNumber()) {
GetArkUINodeModifiers()->getImageModifier()->resetImageContent(nativeNode);
return panda::JSValueRef::Undefined(vm);
}
if (info[0]->IsObject()) {
Framework::JSRef<Framework::JSObject> jsObj = Framework::JSRef<Framework::JSObject>::Cast(info[0]);
Framework::JSRef<Framework::JSVal> tmp = jsObj->GetProperty("id");

View File

@ -21,6 +21,7 @@
namespace OHOS::Ace::NG {
class ImageBridge {
public:
static bool CheckIsCard();
static ArkUINativeModuleValue SetImageShowSrc(ArkUIRuntimeCallInfo *runtimeCallInfo);
static ArkUINativeModuleValue SetCopyOption(ArkUIRuntimeCallInfo *runtimeCallInfo);
static ArkUINativeModuleValue ResetCopyOption(ArkUIRuntimeCallInfo *runtimeCallInfo);

View File

@ -278,8 +278,21 @@ bool JSImage::CheckIsCard()
return container->IsFormRender() && !container->IsDynamicRender();
}
bool JSImage::CheckResetImage(const JSCallbackInfo& info)
{
int32_t parseRes = -1;
if (info.Length() < 1 || !ParseJsInteger(info[0], parseRes)) {
return false;
}
ImageModel::GetInstance()->ResetImage();
return true;
}
void JSImage::CreateImage(const JSCallbackInfo& info, bool isImageSpan)
{
if (CheckResetImage(info)) {
return;
}
bool isCard = CheckIsCard();
// Interim programme

View File

@ -30,6 +30,7 @@ class JSImage : public JSViewAbstract, public JSInteractableView {
public:
static void Create(const JSCallbackInfo& info);
static bool CheckIsCard();
static bool CheckResetImage(const JSCallbackInfo& info);
static void CreateImage(const JSCallbackInfo& info, bool isImageSpan = false);
static void CreateImageAnimation(std::vector<RefPtr<PixelMap>>& pixelMaps,
int32_t duration, int32_t iterations);

View File

@ -61,6 +61,7 @@ public:
void SetImageAnalyzerConfig(void* config) override {}
void SetImageAIOptions(void* config) override {}
void SetSmoothEdge(float value) override {}
void ResetImage() override {}
void SetDynamicRangeMode(DynamicRangeMode dynamicRangeMode) override {}
void SetEnhancedImageQuality(AIImageQuality imageQuality) override {}
void CreateAnimation(const std::vector<ImageProperties>& imageList, int32_t duration, int32_t iteration) override {}

View File

@ -68,6 +68,7 @@ public:
virtual void SetOnError(std::function<void(const LoadImageFailEvent &info)> &&callback) = 0;
virtual void SetSvgAnimatorFinishEvent(std::function<void()> &&callback) = 0;
virtual void Create(const ImageInfoConfig& imageInfoConfig, RefPtr<PixelMap>& pixMap) = 0;
virtual void ResetImage() = 0;
virtual void CreateAnimation(const std::vector<ImageProperties>& imageList,
int32_t duration, int32_t iteration) = 0;
virtual void SetImageSourceSize(const std::pair<Dimension, Dimension> &size) = 0;

View File

@ -109,11 +109,42 @@ void ImageModelNG::Create(const ImageInfoConfig& imageInfoConfig, RefPtr<PixelMa
frameNode->RemoveChild(imageFrameNode);
}
}
pattern->SetNeedLoadAlt(true);
pattern->SetImageType(ImagePattern::ImageType::BASE);
ACE_UPDATE_LAYOUT_PROPERTY(ImageLayoutProperty, ImageSourceInfo, srcInfo);
}
void ImageModelNG::ResetImage()
{
auto *stack = ViewStackProcessor::GetInstance();
auto nodeId = stack->ClaimNodeId();
RefPtr<FrameNode> frameNode;
frameNode = FrameNode::GetOrCreateFrameNode(
V2::IMAGE_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<ImagePattern>(); });
stack->Push(frameNode);
ImageSourceInfo sourceInfo("");
sourceInfo.SetIsFromReset(true);
ACE_UPDATE_NODE_LAYOUT_PROPERTY(ImageLayoutProperty, ImageSourceInfo, sourceInfo, frameNode);
frameNode->MarkDirtyNode(PROPERTY_UPDATE_RENDER);
auto pattern = frameNode->GetPattern<ImagePattern>();
CHECK_NULL_VOID(pattern);
pattern->SetNeedLoadAlt(false);
pattern->ResetImageAndAlt();
}
void ImageModelNG::ResetImage(FrameNode* frameNode)
{
ImageSourceInfo sourceInfo("");
sourceInfo.SetIsFromReset(true);
ACE_UPDATE_NODE_LAYOUT_PROPERTY(ImageLayoutProperty, ImageSourceInfo, sourceInfo, frameNode);
frameNode->MarkDirtyNode(PROPERTY_UPDATE_RENDER);
auto pattern = frameNode->GetPattern<ImagePattern>();
CHECK_NULL_VOID(pattern);
pattern->SetNeedLoadAlt(false);
pattern->ResetImageAndAlt();
}
void ImageModelNG::SetInitialSrc(FrameNode *frameNode, const std::string &src, const std::string &bundleName,
const std::string &moduleName, bool isUriPureNumber)
{

View File

@ -28,6 +28,7 @@ namespace OHOS::Ace::NG {
class ACE_EXPORT ImageModelNG : public OHOS::Ace::ImageModel {
public:
void Create(const ImageInfoConfig& imageInfoConfig, RefPtr<PixelMap>& pixMap) override;
void ResetImage() override;
void CreateAnimation(const std::vector<ImageProperties>& imageList, int32_t duration, int32_t iteration) override;
bool GetIsAnimation() override;
void SetAlt(const ImageSourceInfo &src) override;
@ -69,6 +70,7 @@ public:
static RefPtr<FrameNode> CreateFrameNode(int32_t nodeId, const std::string& src, RefPtr<PixelMap>& pixMap,
const std::string& bundleName, const std::string& moduleName, bool isUriPureNumber = false);
static void InitImage(FrameNode *frameNode, std::string& src);
static void ResetImage(FrameNode* frameNode);
static void SetInitialSrc(FrameNode* frameNode, const std::string& src, const std::string& bundleName,
const std::string& moduleName, bool isUriPureNumber = false);
static void SetInitialPixelMap(FrameNode* frameNode, RefPtr<PixelMap>& pixMap);

View File

@ -614,6 +614,7 @@ void ImagePattern::LoadImage(
void ImagePattern::LoadAltImage(const ImageSourceInfo& altImageSourceInfo)
{
CHECK_NULL_VOID(GetNeedLoadAlt());
LoadNotifier altLoadNotifier(CreateDataReadyCallbackForAlt(), CreateLoadSuccessCallbackForAlt(), nullptr);
if (!altLoadingCtx_ || altLoadingCtx_->GetSourceInfo() != altImageSourceInfo ||
(altLoadingCtx_ && altImageSourceInfo.IsSvg())) {

View File

@ -337,6 +337,16 @@ public:
return loadInVipChannel_;
}
bool GetNeedLoadAlt()
{
return needLoadAlt_;
}
void SetNeedLoadAlt(bool needLoadAlt)
{
needLoadAlt_ = needLoadAlt;
}
void SetLoadInVipChannel(bool loadInVipChannel)
{
loadInVipChannel_ = loadInVipChannel;
@ -483,6 +493,7 @@ private:
CopyOptions copyOption_ = CopyOptions::None;
ImageInterpolation interpolation_ = ImageInterpolation::LOW;
bool needLoadAlt_ = true;
RefPtr<ImageLoadingContext> loadingCtx_;
RefPtr<CanvasImage> image_;

View File

@ -26,10 +26,10 @@
extern "C" {
#endif
#define ARKUI_FULL_API_VERSION 117
#define ARKUI_FULL_API_VERSION 118
// When changing ARKUI_BASIC_API_VERSION, ARKUI_FULL_API_VERSION must be
// increased as well.
#define ARKUI_NODE_API_VERSION 117
#define ARKUI_NODE_API_VERSION 118
#define ARKUI_BASIC_API_VERSION 8
#define ARKUI_EXTENDED_API_VERSION 8
@ -2033,6 +2033,7 @@ struct ArkUIImageModifier {
void (*analyzerConfig)(ArkUINodeHandle node, void* config);
void (*setDrawingColorFilter)(ArkUINodeHandle node, void* colorFilter);
void* (*getDrawingColorFilter)(ArkUINodeHandle node);
void (*resetImageContent)(ArkUINodeHandle node);
void (*resetImageSrc)(ArkUINodeHandle node);
void (*setInitialPixelMap)(ArkUINodeHandle node, ArkUI_Int64 pixelMap);
void (*setAltSourceInfo)(ArkUINodeHandle node, const ArkUIImageSourceInfo* sourceInfo);

View File

@ -791,6 +791,13 @@ void AnalyzerConfig(ArkUINodeHandle node, void* config)
ImageModelNG::SetImageAnalyzerConfig(frameNode, config);
}
void ResetImageContent(ArkUINodeHandle node)
{
auto* frameNode = reinterpret_cast<FrameNode*>(node);
CHECK_NULL_VOID(frameNode);
ImageModelNG::ResetImage(frameNode);
}
void ResetImageSrc(ArkUINodeHandle node)
{
auto* frameNode = reinterpret_cast<FrameNode*>(node);
@ -866,18 +873,18 @@ const ArkUIImageModifier* GetImageModifier()
ResetCopyOption, SetAutoResize, ResetAutoResize, SetObjectRepeat, ResetObjectRepeat, SetRenderMode,
ResetRenderMode, SetSyncLoad, ResetSyncLoad, SetObjectFit, ResetObjectFit, SetFitOriginalSize,
ResetFitOriginalSize, SetSourceSize, ResetSourceSize, SetMatchTextDirection, ResetMatchTextDirection,
SetFillColor, ResetFillColor, SetAlt, ResetAlt, SetImageInterpolation, ResetImageInterpolation,
SetColorFilter, ResetColorFilter, SetImageSyncLoad, ResetImageSyncLoad, SetImageObjectFit,
ResetImageObjectFit, SetImageFitOriginalSize, ResetImageFitOriginalSize, SetImageDraggable,
ResetImageDraggable, SetImageBorderRadius, ResetImageBorderRadius, SetImageBorder, ResetImageBorder,
SetImageOpacity, ResetImageOpacity, SetEdgeAntialiasing, ResetEdgeAntialiasing, SetResizable,
ResetResizable, SetDynamicRangeMode, ResetDynamicRangeMode, SetEnhancedImageQuality,
ResetEnhancedImageQuality, GetImageSrc, GetAutoResize, GetObjectRepeat, GetObjectFit,
GetImageInterpolation, GetColorFilter, GetAlt, GetImageDraggable, GetRenderMode, SetImageResizable,
GetImageResizable, GetFitOriginalSize, GetFillColor, SetPixelMap, SetPixelMapArray, SetResourceSrc,
EnableAnalyzer, SetImagePrivacySensitve, ResetImagePrivacySensitve, AnalyzerConfig, SetDrawingColorFilter,
GetDrawingColorFilter, ResetImageSrc, SetInitialPixelMap, SetAltSourceInfo, SetOnComplete, SetOnError,
ResetOnError, SetImageOnFinish, ResetImageOnFinish };
SetFillColor, ResetFillColor, SetAlt, ResetAlt, SetImageInterpolation, ResetImageInterpolation, SetColorFilter,
ResetColorFilter, SetImageSyncLoad, ResetImageSyncLoad, SetImageObjectFit, ResetImageObjectFit,
SetImageFitOriginalSize, ResetImageFitOriginalSize, SetImageDraggable, ResetImageDraggable,
SetImageBorderRadius, ResetImageBorderRadius, SetImageBorder, ResetImageBorder, SetImageOpacity,
ResetImageOpacity, SetEdgeAntialiasing, ResetEdgeAntialiasing, SetResizable, ResetResizable,
SetDynamicRangeMode, ResetDynamicRangeMode, SetEnhancedImageQuality, ResetEnhancedImageQuality, GetImageSrc,
GetAutoResize, GetObjectRepeat, GetObjectFit, GetImageInterpolation, GetColorFilter, GetAlt, GetImageDraggable,
GetRenderMode, SetImageResizable, GetImageResizable, GetFitOriginalSize, GetFillColor, SetPixelMap,
SetPixelMapArray, SetResourceSrc, EnableAnalyzer, SetImagePrivacySensitve, ResetImagePrivacySensitve,
AnalyzerConfig, SetDrawingColorFilter, GetDrawingColorFilter, ResetImageContent, ResetImageSrc,
SetInitialPixelMap, SetAltSourceInfo, SetOnComplete, SetOnError, ResetOnError, SetImageOnFinish,
ResetImageOnFinish };
return &modifier;
}