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