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 #include "core/interfaces/native/node/rating_modifier.h"
16 #include "core/components_ng/pattern/rating/rating_model_ng.h"
17 #include "core/pipeline/base/element_register.h"
18 #include "core/components_ng/base/frame_node.h"
19 #include "core/components_ng/base/view_abstract.h"
20 #include "core/components/common/layout/constants.h"
21 
22 namespace OHOS::Ace::NG {
23 constexpr int32_t STARS_DEFAULT = 5;
24 constexpr double STEPS_DEFAULT = 0.5;
SetStars(ArkUINodeHandle node,int32_t value)25 void SetStars(ArkUINodeHandle node, int32_t value)
26 {
27     auto* frameNode = reinterpret_cast<FrameNode*>(node);
28     CHECK_NULL_VOID(frameNode);
29     RatingModelNG::SetStars(frameNode, value);
30 }
31 
SetRatingStepSize(ArkUINodeHandle node,ArkUI_Float32 value)32 void SetRatingStepSize(ArkUINodeHandle node, ArkUI_Float32 value)
33 {
34     auto* frameNode = reinterpret_cast<FrameNode*>(node);
35     CHECK_NULL_VOID(frameNode);
36     RatingModelNG::SetStepSize(frameNode, value);
37 }
SetStarStyle(ArkUINodeHandle node,const char * backgroundUri,const char * foregroundUri,const char * secondaryUri)38 void SetStarStyle(ArkUINodeHandle node,
39     const char* backgroundUri, const char* foregroundUri, const char* secondaryUri)
40 {
41     auto* frameNode = reinterpret_cast<FrameNode*>(node);
42     CHECK_NULL_VOID(frameNode);
43     std::string backgroundUriStr = backgroundUri;
44     if (backgroundUriStr.empty()) {
45         RatingModelNG::SetBackgroundSrc(frameNode, "", true);
46     } else {
47         RatingModelNG::SetBackgroundSrc(frameNode, backgroundUriStr, false);
48     }
49 
50     std::string foregroundUriStr = foregroundUri;
51     if (foregroundUriStr.empty()) {
52         RatingModelNG::SetForegroundSrc(frameNode, "", true);
53     } else {
54         RatingModelNG::SetForegroundSrc(frameNode, foregroundUriStr, false);
55     }
56 
57     std::string secondaryUriStr = secondaryUri;
58     if (!secondaryUriStr.empty()) {
59         RatingModelNG::SetSecondarySrc(frameNode, secondaryUriStr, false);
60     } else if (!backgroundUriStr.empty()) {
61         RatingModelNG::SetSecondarySrc(frameNode, backgroundUriStr, false);
62     } else {
63         RatingModelNG::SetSecondarySrc(frameNode, "", true);
64     }
65 }
66 
ResetStars(ArkUINodeHandle node)67 void ResetStars(ArkUINodeHandle node)
68 {
69     auto* frameNode = reinterpret_cast<FrameNode*>(node);
70     CHECK_NULL_VOID(frameNode);
71     RatingModelNG::SetStars(frameNode, STARS_DEFAULT);
72 }
73 
ResetRatingStepSize(ArkUINodeHandle node)74 void ResetRatingStepSize(ArkUINodeHandle node)
75 {
76     auto* frameNode = reinterpret_cast<FrameNode*>(node);
77     CHECK_NULL_VOID(frameNode);
78     RatingModelNG::SetStepSize(frameNode, STEPS_DEFAULT);
79 }
80 
ResetStarStyle(ArkUINodeHandle node)81 void ResetStarStyle(ArkUINodeHandle node)
82 {
83     auto* frameNode = reinterpret_cast<FrameNode*>(node);
84     CHECK_NULL_VOID(frameNode);
85     RatingModelNG::SetBackgroundSrc(frameNode, "", true);
86     RatingModelNG::SetForegroundSrc(frameNode, "", true);
87     RatingModelNG::SetSecondarySrc(frameNode, "", true);
88 }
89 
90 namespace NodeModifier {
GetRatingModifier()91 const ArkUIRatingModifier* GetRatingModifier()
92 {
93     static const ArkUIRatingModifier modifier = {SetStars, SetRatingStepSize, SetStarStyle,
94         ResetStars, ResetRatingStepSize, ResetStarStyle};
95     return &modifier;
96 }
97 
GetCJUIRatingModifier()98 const CJUIRatingModifier* GetCJUIRatingModifier()
99 {
100     static const CJUIRatingModifier modifier = {SetStars, SetRatingStepSize, SetStarStyle,
101         ResetStars, ResetRatingStepSize, ResetStarStyle};
102     return &modifier;
103 }
104 }
105 }