• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 #include "core/components/theme/icon_theme.h"
17 
18 namespace OHOS::Ace {
19 namespace {
20 static std::unordered_map<InternalResource::ResourceId, std::string> RESOURCE_ICON_MAP = {
21     { InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_CLOSE, "container_modal_window_close" },
22     { InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_CLOSE, "container_modal_window_defocus_close" },
23     { InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_MAXIMIZE,
24         "container_modal_window_defocus_maximize" },
25     { InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_MINIMIZE,
26         "container_modal_window_defocus_minimize" },
27     { InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_RECOVER, "container_modal_window_defocus_recover" },
28     { InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_SPLIT_LEFT,
29         "container_modal_window_defocus_split_left" },
30     { InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_MAXIMIZE, "container_modal_window_maximize" },
31     { InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_MINIMIZE, "container_modal_window_minimize" },
32     { InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_RECOVER, "container_modal_window_recover" },
33     { InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_SPLIT_LEFT, "container_modal_window_split_left" },
34     { InternalResource::ResourceId::CLOSE_SVG, "close" },
35     { InternalResource::ResourceId::CORRECT_SVG, "correct" },
36     { InternalResource::ResourceId::DOWN_ARROW_SVG, "down_arrow" },
37     { InternalResource::ResourceId::FA_BLACK_CLOCK_WIDGET_HOUR, "fa_black_clock_widget_hour" },
38     { InternalResource::ResourceId::FA_BLACK_CLOCK_WIDGET_MINUTE, "fa_black_clock_widget_minute" },
39     { InternalResource::ResourceId::FA_BLACK_CLOCK_WIDGET_SECOND, "fa_black_clock_widget_second" },
40     { InternalResource::ResourceId::FA_CLOCK_WIDGET_HOUR, "fa_clock_widget_hour" },
41     { InternalResource::ResourceId::FA_CLOCK_WIDGET_MINUTE, "fa_clock_widget_minute" },
42     { InternalResource::ResourceId::FA_CLOCK_WIDGET_SECOND, "fa_clock_widget_second" },
43     { InternalResource::ResourceId::FULLSCREEN_SVG, "full_screen" },
44     { InternalResource::ResourceId::HIDE_PASSWORD_SVG, "hide_password" },
45     { InternalResource::ResourceId::IC_BACK, "ic_back" },
46     { InternalResource::ResourceId::IC_MORE, "ic_more" },
47     { InternalResource::ResourceId::INDEXER_ARROW_PNG, "indexer_arrow" },
48     { InternalResource::ResourceId::LEFT_ARROW_SVG, "left_arrow" },
49     { InternalResource::ResourceId::PAUSE_SVG, "pause" },
50     { InternalResource::ResourceId::PIECE_DELETE_SVG, "piece_delete" },
51     { InternalResource::ResourceId::PLAY_SVG, "play" },
52     { InternalResource::ResourceId::QUIT_FULLSCREEN_SVG, "exit_full_screen" },
53     { InternalResource::ResourceId::RATE_STAR_BIG_OFF_SVG, "rate_star_big_off" },
54     { InternalResource::ResourceId::RATE_STAR_BIG_ON_SVG, "rate_star_big_on" },
55     { InternalResource::ResourceId::RATE_STAR_SMALL_OFF_SVG, "rate_star_small_off" },
56     { InternalResource::ResourceId::RATE_STAR_SMALL_ON_SVG, "rate_star_small_on" },
57     { InternalResource::ResourceId::RIGHT_ARROW_SVG, "right_arrow" },
58     { InternalResource::ResourceId::SEARCH_SVG, "search" },
59     { InternalResource::ResourceId::SELECT_ARROW_DISABLED_PNG, "select_arrow_disabled" },
60     { InternalResource::ResourceId::SELECT_ARROW_NORMAL_PNG, "select_arrow_normal" },
61     { InternalResource::ResourceId::SEMI_MODAL_BAR_DOWN_SVG, "semi_modal_bar_down" },
62     { InternalResource::ResourceId::SEMI_MODAL_BAR_MIDDLE_SVG, "semi_modal_bar_middle" },
63     { InternalResource::ResourceId::SHARE_SVG, "share" },
64     { InternalResource::ResourceId::SHOW_PASSWORD_SVG, "show_password" },
65     { InternalResource::ResourceId::SIDE_BAR, "ic_public_drawer" },
66     { InternalResource::ResourceId::SPINNER, "ic_public_spinner" },
67     { InternalResource::ResourceId::SPINNER_DISABLE, "ic_public_spinner_disable" },
68     { InternalResource::ResourceId::STEPPER_BACK_ARROW, "stepper_back_arrow" },
69     { InternalResource::ResourceId::STEPPER_NEXT_ARROW, "stepper_next_arrow" },
70     { InternalResource::ResourceId::TRANSLATE_C2E_SVG, "translate_c2e" },
71     { InternalResource::ResourceId::UP_ARROW_SVG, "up_arrow" },
72     { InternalResource::ResourceId::WATCH_DOWN_ARROW_SVG, "watch_down_arrow" },
73     { InternalResource::ResourceId::WATCH_UP_ARROW_SVG, "watch_up_arrow" },
74     { InternalResource::ResourceId::WRONG_SVG, "wrong" },
75     { InternalResource::ResourceId::INPUT_SEARCH_SVG, "ic_public_input_search" },
76     { InternalResource::ResourceId::APP_BAR_BACK_SVG, "app_bar_back" },
77     { InternalResource::ResourceId::APP_BAR_FA_SVG, "app_bar_fa" },
78     { InternalResource::ResourceId::MENU_OK_SVG, "ic_public_ok" }
79 };
80 }
81 
Build(const RefPtr<ThemeConstants> & themeConstants) const82 RefPtr<IconTheme> IconTheme::Builder::Build(const RefPtr<ThemeConstants>& themeConstants) const
83 {
84     RefPtr<IconTheme>theme  = AceType::Claim(new IconTheme());
85     if (!themeConstants) {
86         return theme;
87     }
88     ParsePattern(themeConstants->GetThemeStyle(), theme);
89     return theme;
90 }
91 
ParsePattern(const RefPtr<ThemeStyle> & themeStyle,const RefPtr<IconTheme> & theme) const92 void IconTheme::Builder::ParsePattern(const RefPtr<ThemeStyle>& themeStyle, const RefPtr<IconTheme>& theme) const
93 {
94     if (!themeStyle) {
95         return;
96     }
97     theme->pattern_ = themeStyle->GetAttr<RefPtr<ThemeStyle>>(THEME_PATTERN_ICON, nullptr);
98     if (!theme->pattern_) {
99         LOGW("find pattern of icon fail");
100     }
101 }
102 
GetIconPath(const InternalResource::ResourceId & resourceId) const103 std::string IconTheme::GetIconPath(const InternalResource::ResourceId& resourceId) const
104 {
105     if (!pattern_) {
106         LOGW("pattern of icon is null");
107         return "";
108     }
109     auto iter = RESOURCE_ICON_MAP.find(resourceId);
110     if (iter == RESOURCE_ICON_MAP.end()) {
111         LOGW("Find resourceId:%{public}d fail in resourceMap", resourceId);
112         return "";
113     }
114     return pattern_->GetAttr<std::string>(iter->second, "");
115 }
116 } // namespace OHOS::Ace
117