1 /* 2 * Copyright (C) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef FOUNDATION_ACE_INTERFACE_INNERKITS_PROPERTIES_IMAGE_ANALYZER_H 17 #define FOUNDATION_ACE_INTERFACE_INNERKITS_PROPERTIES_IMAGE_ANALYZER_H 18 19 #include <array> 20 #include <cstdint> 21 #include <functional> 22 #include <optional> 23 #include <set> 24 #include <string> 25 #include <vector> 26 27 #include "base/geometry/calc_dimension.h" 28 #include "base/geometry/matrix4.h" 29 #include "base/geometry/ng/offset_t.h" 30 #include "base/geometry/ng/vector.h" 31 #include "base/memory/ace_type.h" 32 #include "core/components/common/layout/constants.h" 33 #include "third_party/node/src/js_native_api_types.h" 34 #include "core/components_ng/property/measure_property.h" 35 36 namespace OHOS::Ace { 37 enum class ImageAnalyzerState; 38 using OnAnalyzedCallback = std::optional<std::function<void(ImageAnalyzerState)>>; 39 using OnTextSelectedCallback = std::function<void()>; 40 using OnNotifySelectedStatusCallback = std::function<void(bool)>; 41 42 enum class ImageAnalyzerType { 43 SUBJECT = 0, 44 TEXT, 45 }; 46 47 enum class ImageAnalyzerHolder { 48 IMAGE = 0, 49 CANVAS, 50 XCOMPONENT, 51 VIDEO_CUSTOM, 52 VIDEO_DEFAULT, 53 WEB, 54 OTHERS, 55 }; 56 57 enum class ImageAnalyzerState { 58 UNSUPPORTED = 0, 59 ONGOING, 60 STOPPED, 61 FINISHED 62 }; 63 64 enum class Status { 65 SELECTED = 0, 66 UNSELECTED, 67 MENU_SHOW, 68 MENU_HIDE 69 }; 70 71 struct TouchInfo { 72 TouchPoint touchPoint; 73 TouchType touchType = TouchType::CANCEL; 74 }; 75 76 struct PixelMapInfo { 77 float width = 0.0f; 78 float height = 0.0f; 79 NG::OffsetF overlayOffset = { 0.0f, 0.0f }; 80 }; 81 82 struct AIButtonConfig { 83 std::vector<float> buttonOffset = {0.0f, 0.0f, 0.0f, 0.0f}; 84 bool isShow = true; 85 }; 86 87 struct ImageAnalyzerConfig { 88 NG::MarginProperty aiButtonMargin; 89 std::set<ImageAnalyzerType> types; 90 std::string tag; 91 bool isShowAIButton = true; 92 }; 93 94 struct ImageAnalyzerInnerConfig { 95 float contentWidth = 0.0f; 96 float contentHeight = 0.0f; 97 float pixelMapWidth = 0.0f; 98 float pixelMapHeight = 0.0f; 99 NG::OffsetF overlayOffset = { 0.0f, 0.0f }; 100 ImageAnalyzerHolder holder = ImageAnalyzerHolder::OTHERS; 101 ImageFit imageFit = ImageFit::COVER; 102 Matrix4 transformMat = Matrix4::CreateIdentity(); 103 OnAnalyzedCallback onAnalyzed; 104 Status selectedStatus = Status::SELECTED; 105 Status menuStatus = Status::MENU_SHOW; 106 OnTextSelectedCallback onTextSelected; 107 void* pixelmapNapiVal = nullptr; 108 OHOS::Ace::TouchInfo touchInfo; 109 OnNotifySelectedStatusCallback onNotifySelectedStatus = nullptr; 110 UpdateFromInfoImageAnalyzerInnerConfig111 void UpdateFromInfo(const PixelMapInfo& info) 112 { 113 contentWidth = info.width; 114 contentHeight = info.height; 115 pixelMapWidth = info.width; 116 pixelMapHeight = info.height; 117 overlayOffset = info.overlayOffset; 118 } 119 }; 120 } // namespace OHOS::Ace 121 #endif // FOUNDATION_ACE_INTERFACE_INNERKITS_PROPERTIES_IMAGE_ANALYZER_H