1 /* 2 * Copyright (c) 2020-2021 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 /** 17 * @addtogroup UI_Components 18 * @{ 19 * 20 * @brief Defines UI components such as buttons, texts, images, lists, and progress bars. 21 * 22 * @since 1.0 23 * @version 1.0 24 */ 25 26 /** 27 * @file ui_label_button.h 28 * 29 * @brief Declares a label button. 30 * 31 * @since 1.0 32 * @version 1.0 33 */ 34 35 #ifndef GRAPHIC_LITE_UI_LABEL_BUTTON_H 36 #define GRAPHIC_LITE_UI_LABEL_BUTTON_H 37 38 #include "common/text.h" 39 #include "components/ui_button.h" 40 #include "gfx_utils/graphic_log.h" 41 42 namespace OHOS { 43 /** 44 * @brief Provides the functions related to a label button. 45 * 46 * @since 1.0 47 * @version 1.0 48 */ 49 class UILabelButton : public UIButton { 50 public: 51 /** 52 * @brief A constructor used to create a <b>UILabelButton</b> instance. 53 * 54 * @since 1.0 55 * @version 1.0 56 */ 57 UILabelButton(); 58 59 /** 60 * @brief A destructor used to delete the <b>UILabelButton</b> instance. 61 * 62 * @since 1.0 63 * @version 1.0 64 */ 65 virtual ~UILabelButton(); 66 67 /** 68 * @brief Draws a label button. 69 * 70 * @since 1.0 71 * @version 1.0 72 */ 73 void OnDraw(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea) override; 74 75 /** 76 * @brief Obtains the view type. 77 * 78 * @return Returns <b>UI_LABEL_BUTTON</b>, as defined in {@link UIViewType}. 79 * @since 1.0 80 * @version 1.0 81 */ GetViewType()82 UIViewType GetViewType() const override 83 { 84 return UI_LABEL_BUTTON; 85 } 86 87 /** 88 * @brief Sets the text for this label button. 89 * 90 * @param text Indicates the pointer to the text. 91 * @since 1.0 92 * @version 1.0 93 */ SetText(const char * text)94 void SetText(const char* text) 95 { 96 InitLabelButtonText(); 97 labelButtonText_->SetText(text); 98 } 99 100 /** 101 * @brief Obtains the text of this label button. 102 * 103 * @return Returns the text. 104 * @since 1.0 105 * @version 1.0 106 */ GetText()107 const char* GetText() const 108 { 109 return (labelButtonText_ == nullptr) ? nullptr : labelButtonText_->GetText(); 110 } 111 112 /** 113 * @brief Sets the position for this label relative to the button holding it. 114 * 115 * @param x Indicates the offset distance by which this label is moved on the x-axis. 116 * @param y Indicates the offset distance by which this label is moved on the y-axis. 117 * @since 1.0 118 * @version 1.0 119 */ SetLabelPosition(int16_t x,int16_t y)120 void SetLabelPosition(int16_t x, int16_t y) 121 { 122 offset_.x = x; 123 offset_.y = y; 124 } 125 126 /** 127 * @brief Obtains the position of this label relative to the button holding it. 128 * 129 * @return Returns the position of this label. 130 * @since 1.0 131 * @version 1.0 132 */ GetLabelPosition()133 Point GetLabelPosition() const 134 { 135 return offset_; 136 } 137 138 /** 139 * @brief Sets the alignment mode for this text. 140 * 141 * @param align Indicates the text alignment mode to set, as defined in {@link UITextLanguageAlignment}. 142 * @since 1.0 143 * @version 1.0 144 */ SetAlign(UITextLanguageAlignment align)145 void SetAlign(UITextLanguageAlignment align) 146 { 147 InitLabelButtonText(); 148 labelButtonText_->SetAlign(align, TEXT_ALIGNMENT_CENTER); 149 } 150 151 /** 152 * @brief Obtains the alignment mode of this text. 153 * 154 * @return Returns the text alignment mode, as defined in {@link UITextLanguageAlignment}. 155 * @since 1.0 156 * @version 1.0 157 */ GetAlign()158 UITextLanguageAlignment GetAlign() 159 { 160 InitLabelButtonText(); 161 return labelButtonText_->GetHorAlign(); 162 } 163 164 /** 165 * @brief Sets the direction for this text. 166 * 167 * @param direct Indicates the text direction to set, as defined in {@link UITextLanguageDirect}. 168 * @since 1.0 169 * @version 1.0 170 */ SetDirect(UITextLanguageDirect direct)171 void SetDirect(UITextLanguageDirect direct) 172 { 173 InitLabelButtonText(); 174 labelButtonText_->SetDirect(direct); 175 } 176 177 /** 178 * @brief Obtains the direction of this text. 179 * 180 * @return Returns the text direction, as defined in {@link UITextLanguageDirect}. 181 * @since 1.0 182 * @version 1.0 183 */ GetDirect()184 UITextLanguageDirect GetDirect() 185 { 186 InitLabelButtonText(); 187 return labelButtonText_->GetDirect(); 188 } 189 190 /** 191 * @brief Sets the style for this label. 192 * 193 * @param labelStyle Indicates the label style to set. 194 * @since 1.0 195 * @version 1.0 196 */ SetLabelStyle(Style & labelStyle)197 void SetLabelStyle(Style& labelStyle) 198 { 199 labelStyle_ = labelStyle; 200 } 201 202 /** 203 * @brief Sets a style for this label. 204 * 205 * @param key Indicates the key of the style to set. 206 * @param value Indicates the value matching the key. 207 * @since 1.0 208 * @version 1.0 209 */ SetLabelStyle(uint8_t key,int64_t value)210 void SetLabelStyle(uint8_t key, int64_t value) 211 { 212 labelStyle_.SetStyle(key, value); 213 } 214 215 /** 216 * @brief Obtains the style of this label. 217 * 218 * @return Returns the label style. 219 * @since 1.0 220 * @version 1.0 221 */ GetLabelStyle()222 const Style& GetLabelStyle() const 223 { 224 return labelStyle_; 225 } 226 227 /** 228 * @brief Obtains the value of a style of this label. 229 * 230 * @param key Indicates the key of the style. 231 * @return Returns the value of the style. 232 * @since 1.0 233 * @version 1.0 234 */ GetLabelStyle(uint8_t key)235 int64_t GetLabelStyle(uint8_t key) const 236 { 237 return labelStyle_.GetStyle(key); 238 } 239 240 /** 241 * @brief Sets the color for this text. 242 * 243 * @param color Indicates the text color to set. 244 * @since 1.0 245 * @version 1.0 246 */ SetTextColor(ColorType color)247 void SetTextColor(ColorType color) 248 { 249 labelStyle_.textColor_ = color; 250 } 251 252 /** 253 * @brief Sets the font for this text. 254 * 255 * @param name Indicates the pointer to the font name. 256 * @param size Indicates the font size to set. 257 * @since 1.0 258 * @version 1.0 259 */ SetFont(const char * name,uint8_t size)260 void SetFont(const char* name, uint8_t size) 261 { 262 InitLabelButtonText(); 263 labelButtonText_->SetFont(name, size); 264 } 265 266 /** 267 * @brief Sets the font ID. 268 * 269 * @param fontId Indicates the font ID composed of the font name and size. 270 * @since 1.0 271 * @version 1.0 272 */ SetFontId(uint16_t fontId)273 void SetFontId(uint16_t fontId) 274 { 275 InitLabelButtonText(); 276 labelButtonText_->SetFontId(fontId); 277 } 278 279 /** 280 * @brief Obtains the font ID. 281 * 282 * @return Returns the front ID composed of the font name and size. 283 * @since 1.0 284 * @version 1.0 285 */ GetFontId()286 uint16_t GetFontId() 287 { 288 InitLabelButtonText(); 289 return labelButtonText_->GetFontId(); 290 } 291 292 protected: InitLabelButtonText()293 virtual void InitLabelButtonText() 294 { 295 if (labelButtonText_ == nullptr) { 296 labelButtonText_ = new Text(); 297 if (labelButtonText_ == nullptr) { 298 GRAPHIC_LOGE("new Text fail"); 299 return; 300 } 301 labelButtonText_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); 302 } 303 } 304 305 Text* labelButtonText_; 306 307 private: 308 Style labelStyle_; 309 Point offset_; /* Text draw position offset */ 310 }; 311 } // namespace OHOS 312 #endif // GRAPHIC_LITE_UI_LABEL_BUTTON_H 313