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_button.h 28a3e0fd82Sopenharmony_ci * 29a3e0fd82Sopenharmony_ci * @brief Defines the attributes and common functions of a button. 30a3e0fd82Sopenharmony_ci * 31a3e0fd82Sopenharmony_ci * @since 1.0 32a3e0fd82Sopenharmony_ci * @version 1.0 33a3e0fd82Sopenharmony_ci */ 34a3e0fd82Sopenharmony_ci 35a3e0fd82Sopenharmony_ci#ifndef GRAPHIC_LITE_UI_BUTTON_H 36a3e0fd82Sopenharmony_ci#define GRAPHIC_LITE_UI_BUTTON_H 37a3e0fd82Sopenharmony_ci 38a3e0fd82Sopenharmony_ci#include "animator/animator.h" 39a3e0fd82Sopenharmony_ci#include "common/image.h" 40a3e0fd82Sopenharmony_ci#include "components/ui_view.h" 41a3e0fd82Sopenharmony_ci 42a3e0fd82Sopenharmony_cinamespace OHOS { 43a3e0fd82Sopenharmony_ci/** 44a3e0fd82Sopenharmony_ci * @brief Represents a button. 45a3e0fd82Sopenharmony_ci * 46a3e0fd82Sopenharmony_ci * This component responds to the press and release events. 47a3e0fd82Sopenharmony_ci * 48a3e0fd82Sopenharmony_ci * @since 1.0 49a3e0fd82Sopenharmony_ci * @version 1.0 50a3e0fd82Sopenharmony_ci */ 51a3e0fd82Sopenharmony_ciclass UIButton : public UIView { 52a3e0fd82Sopenharmony_cipublic: 53a3e0fd82Sopenharmony_ci /** 54a3e0fd82Sopenharmony_ci * @brief A constructor used to create a <b>UIButton</b> instance. 55a3e0fd82Sopenharmony_ci * 56a3e0fd82Sopenharmony_ci * @since 1.0 57a3e0fd82Sopenharmony_ci * @version 1.0 58a3e0fd82Sopenharmony_ci */ 59a3e0fd82Sopenharmony_ci UIButton(); 60a3e0fd82Sopenharmony_ci 61a3e0fd82Sopenharmony_ci /** 62a3e0fd82Sopenharmony_ci * @brief A constructor used to create a <b>UIButton</b> instance based on the button ID. 63a3e0fd82Sopenharmony_ci * 64a3e0fd82Sopenharmony_ci * Buttons sharing the same ID are in the same batch. 65a3e0fd82Sopenharmony_ci * 66a3e0fd82Sopenharmony_ci * @param id Indicates the button ID. 67a3e0fd82Sopenharmony_ci * @since 1.0 68a3e0fd82Sopenharmony_ci * @version 1.0 69a3e0fd82Sopenharmony_ci */ 70a3e0fd82Sopenharmony_ci explicit UIButton(const char* id) : UIButton() 71a3e0fd82Sopenharmony_ci { 72a3e0fd82Sopenharmony_ci id_ = id; 73a3e0fd82Sopenharmony_ci } 74a3e0fd82Sopenharmony_ci 75a3e0fd82Sopenharmony_ci /** 76a3e0fd82Sopenharmony_ci * @brief A destructor used to delete the <b>UIButton</b> instance. 77a3e0fd82Sopenharmony_ci * 78a3e0fd82Sopenharmony_ci * @since 1.0 79a3e0fd82Sopenharmony_ci * @version 1.0 80a3e0fd82Sopenharmony_ci */ 81a3e0fd82Sopenharmony_ci virtual ~UIButton(); 82a3e0fd82Sopenharmony_ci 83a3e0fd82Sopenharmony_ci /** 84a3e0fd82Sopenharmony_ci * @brief Obtains the component type. 85a3e0fd82Sopenharmony_ci * 86a3e0fd82Sopenharmony_ci * @return Returns the component type, as defined in {@link UIViewType}. 87a3e0fd82Sopenharmony_ci * @since 1.0 88a3e0fd82Sopenharmony_ci * @version 1.0 89a3e0fd82Sopenharmony_ci */ 90a3e0fd82Sopenharmony_ci UIViewType GetViewType() const override 91a3e0fd82Sopenharmony_ci { 92a3e0fd82Sopenharmony_ci return UI_BUTTON; 93a3e0fd82Sopenharmony_ci } 94a3e0fd82Sopenharmony_ci 95a3e0fd82Sopenharmony_ci /** 96a3e0fd82Sopenharmony_ci * @fn virtual bool UIButton::OnPreDraw(Rect& invalidatedArea) override 97a3e0fd82Sopenharmony_ci * 98a3e0fd82Sopenharmony_ci * @brief Do something before draw, this function will be invoked mainly to check if this view need 99a3e0fd82Sopenharmony_ci * to cover invalidate area so render manager can decide which layer to draw firstly. 100a3e0fd82Sopenharmony_ci * @param [in] invalidate area. 101a3e0fd82Sopenharmony_ci * @returns True if need cover. 102a3e0fd82Sopenharmony_ci */ 103a3e0fd82Sopenharmony_ci bool OnPreDraw(Rect& invalidatedArea) const override; 104a3e0fd82Sopenharmony_ci 105a3e0fd82Sopenharmony_ci#if DEFAULT_ANIMATION 106a3e0fd82Sopenharmony_ci /** 107a3e0fd82Sopenharmony_ci * @fn virtual bool UIButton::OnPostDraw(BufferInfo& gfxDstBuffer, Rect& invalidatedArea) override 108a3e0fd82Sopenharmony_ci * 109a3e0fd82Sopenharmony_ci * @brief Do something after draw. 110a3e0fd82Sopenharmony_ci * @param [in] invalidate area. 111a3e0fd82Sopenharmony_ci */ 112a3e0fd82Sopenharmony_ci void OnPostDraw(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea) override; 113a3e0fd82Sopenharmony_ci#endif 114a3e0fd82Sopenharmony_ci /** 115a3e0fd82Sopenharmony_ci * @fn virtual void UIButton::OnDraw(const Rect& invalidatedArea) override; 116a3e0fd82Sopenharmony_ci * 117a3e0fd82Sopenharmony_ci * @brief Executes the draw action 118a3e0fd82Sopenharmony_ci * 119a3e0fd82Sopenharmony_ci * @param [in] invalidatedArea The rectangle to draw, with coordinates relative to this drawable.. 120a3e0fd82Sopenharmony_ci */ 121a3e0fd82Sopenharmony_ci void OnDraw(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea) override; 122a3e0fd82Sopenharmony_ci 123a3e0fd82Sopenharmony_ci /** 124a3e0fd82Sopenharmony_ci * @fn virtual void UIButton::OnPressEvent(const PressEvent& event) override; 125a3e0fd82Sopenharmony_ci * 126a3e0fd82Sopenharmony_ci * @brief Executes the press event action 127a3e0fd82Sopenharmony_ci * 128a3e0fd82Sopenharmony_ci * @param [in] event The press event, contain press position. 129a3e0fd82Sopenharmony_ci * 130a3e0fd82Sopenharmony_ci * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 131a3e0fd82Sopenharmony_ci */ 132a3e0fd82Sopenharmony_ci bool OnPressEvent(const PressEvent& event) override; 133a3e0fd82Sopenharmony_ci 134a3e0fd82Sopenharmony_ci /** 135a3e0fd82Sopenharmony_ci * @fn virtual void UIButton::OnReleaseEvent(const ReleaseEvent& event) override; 136a3e0fd82Sopenharmony_ci * 137a3e0fd82Sopenharmony_ci * @brief Executes the press release event action 138a3e0fd82Sopenharmony_ci * 139a3e0fd82Sopenharmony_ci * @param [in] event The press release event. 140a3e0fd82Sopenharmony_ci */ 141a3e0fd82Sopenharmony_ci bool OnReleaseEvent(const ReleaseEvent& event) override; 142a3e0fd82Sopenharmony_ci 143a3e0fd82Sopenharmony_ci /** 144a3e0fd82Sopenharmony_ci * @fn virtual void UIButton::OnCancelEvent(const CancelEvent& event) override; 145a3e0fd82Sopenharmony_ci * 146a3e0fd82Sopenharmony_ci * @brief Executes the cancel event action 147a3e0fd82Sopenharmony_ci * 148a3e0fd82Sopenharmony_ci * @param [in] event The cancel event. 149a3e0fd82Sopenharmony_ci */ 150a3e0fd82Sopenharmony_ci bool OnCancelEvent(const CancelEvent& event) override; 151a3e0fd82Sopenharmony_ci 152a3e0fd82Sopenharmony_ci /** 153a3e0fd82Sopenharmony_ci * @brief Enumerates the images for different button states. 154a3e0fd82Sopenharmony_ci * 155a3e0fd82Sopenharmony_ci * You can define a different image for each button state. 156a3e0fd82Sopenharmony_ci * 157a3e0fd82Sopenharmony_ci * @since 1.0 158a3e0fd82Sopenharmony_ci * @version 1.0 159a3e0fd82Sopenharmony_ci */ 160a3e0fd82Sopenharmony_ci enum ButtonImageSrc : uint8_t { 161a3e0fd82Sopenharmony_ci /* An enum constant representing the Button image default option */ 162a3e0fd82Sopenharmony_ci BTN_IMAGE_DEFAULT, 163a3e0fd82Sopenharmony_ci /* An enum constant representing the Button image triggered option */ 164a3e0fd82Sopenharmony_ci BTN_IMAGE_TRIGGERED, 165a3e0fd82Sopenharmony_ci /* An enum constant representing the Button Image Number option */ 166a3e0fd82Sopenharmony_ci BTN_IMG_NUM, 167a3e0fd82Sopenharmony_ci }; 168a3e0fd82Sopenharmony_ci 169a3e0fd82Sopenharmony_ci /** 170a3e0fd82Sopenharmony_ci * @brief Sets the image for this button. 171a3e0fd82Sopenharmony_ci * 172a3e0fd82Sopenharmony_ci * @param defaultImgSrc Indicates the default image. 173a3e0fd82Sopenharmony_ci * @param triggeredImgSrc Indicates the image for a button when it is triggered. 174a3e0fd82Sopenharmony_ci * @since 1.0 175a3e0fd82Sopenharmony_ci * @version 1.0 176a3e0fd82Sopenharmony_ci */ 177a3e0fd82Sopenharmony_ci void SetImageSrc(const char* defaultImgSrc, const char* triggeredImgSrc); 178a3e0fd82Sopenharmony_ci 179a3e0fd82Sopenharmony_ci /** 180a3e0fd82Sopenharmony_ci * @brief Sets the image for this button. 181a3e0fd82Sopenharmony_ci * 182a3e0fd82Sopenharmony_ci * @param defaultImgSrc Indicates the default image. 183a3e0fd82Sopenharmony_ci * @param triggeredImgSrc Indicates the image for a button when it is triggered. 184a3e0fd82Sopenharmony_ci * @since 1.0 185a3e0fd82Sopenharmony_ci * @version 1.0 186a3e0fd82Sopenharmony_ci */ 187a3e0fd82Sopenharmony_ci void SetImageSrc(const ImageInfo* defaultImgSrc, const ImageInfo* triggeredImgSrc); 188a3e0fd82Sopenharmony_ci 189a3e0fd82Sopenharmony_ci /** 190a3e0fd82Sopenharmony_ci * @brief Sets the position for this image. 191a3e0fd82Sopenharmony_ci * 192a3e0fd82Sopenharmony_ci * @param x Indicates the x-coordinate to set. 193a3e0fd82Sopenharmony_ci * @param y Indicates the y-coordinate to set. 194a3e0fd82Sopenharmony_ci * @since 1.0 195a3e0fd82Sopenharmony_ci * @version 1.0 196a3e0fd82Sopenharmony_ci */ 197a3e0fd82Sopenharmony_ci void SetImagePosition(const int16_t x, const int16_t y) 198a3e0fd82Sopenharmony_ci { 199a3e0fd82Sopenharmony_ci imgX_ = x; 200a3e0fd82Sopenharmony_ci imgY_ = y; 201a3e0fd82Sopenharmony_ci } 202a3e0fd82Sopenharmony_ci 203a3e0fd82Sopenharmony_ci /** 204a3e0fd82Sopenharmony_ci * @brief Obtains the x-coordinate of this image. 205a3e0fd82Sopenharmony_ci * 206a3e0fd82Sopenharmony_ci * @return Returns the x-coordinate of this image. 207a3e0fd82Sopenharmony_ci * @since 1.0 208a3e0fd82Sopenharmony_ci * @version 1.0 209a3e0fd82Sopenharmony_ci */ 210a3e0fd82Sopenharmony_ci int16_t GetImageX() const 211a3e0fd82Sopenharmony_ci { 212a3e0fd82Sopenharmony_ci return imgX_; 213a3e0fd82Sopenharmony_ci } 214a3e0fd82Sopenharmony_ci 215a3e0fd82Sopenharmony_ci /** 216a3e0fd82Sopenharmony_ci * @brief Obtains the y-coordinate of this image. 217a3e0fd82Sopenharmony_ci * 218a3e0fd82Sopenharmony_ci * @return Returns the y-coordinate of this image. 219a3e0fd82Sopenharmony_ci * @since 1.0 220a3e0fd82Sopenharmony_ci * @version 1.0 221a3e0fd82Sopenharmony_ci */ 222a3e0fd82Sopenharmony_ci int16_t GetImageY() const 223a3e0fd82Sopenharmony_ci { 224a3e0fd82Sopenharmony_ci return imgY_; 225a3e0fd82Sopenharmony_ci } 226a3e0fd82Sopenharmony_ci 227a3e0fd82Sopenharmony_ci /** 228a3e0fd82Sopenharmony_ci * @brief Obtains the image for the current button state. 229a3e0fd82Sopenharmony_ci * 230a3e0fd82Sopenharmony_ci * @return Returns the image for the current button state. 231a3e0fd82Sopenharmony_ci * @since 1.0 232a3e0fd82Sopenharmony_ci * @version 1.0 233a3e0fd82Sopenharmony_ci */ 234a3e0fd82Sopenharmony_ci const Image* GetCurImageSrc() const; 235a3e0fd82Sopenharmony_ci 236a3e0fd82Sopenharmony_ci /** 237a3e0fd82Sopenharmony_ci * @brief Enumerates the states of this button. 238a3e0fd82Sopenharmony_ci * 239a3e0fd82Sopenharmony_ci * The button has three states. 240a3e0fd82Sopenharmony_ci * 241a3e0fd82Sopenharmony_ci * @since 1.0 242a3e0fd82Sopenharmony_ci * @version 1.0 243a3e0fd82Sopenharmony_ci */ 244a3e0fd82Sopenharmony_ci enum ButtonState : uint8_t { 245a3e0fd82Sopenharmony_ci /* An enum constant representing the Button state released option */ 246a3e0fd82Sopenharmony_ci RELEASED = 0, 247a3e0fd82Sopenharmony_ci /* An enum constant representing the Button state pressed option */ 248a3e0fd82Sopenharmony_ci PRESSED, 249a3e0fd82Sopenharmony_ci /* An enum constant representing the Button state inactive option */ 250a3e0fd82Sopenharmony_ci INACTIVE, 251a3e0fd82Sopenharmony_ci /* An enum constant representing the Button state Number option */ 252a3e0fd82Sopenharmony_ci BTN_STATE_NUM, 253a3e0fd82Sopenharmony_ci }; 254a3e0fd82Sopenharmony_ci 255a3e0fd82Sopenharmony_ci /** 256a3e0fd82Sopenharmony_ci * @brief Obtains the width of this image. 257a3e0fd82Sopenharmony_ci * 258a3e0fd82Sopenharmony_ci * @return Returns the image width. 259a3e0fd82Sopenharmony_ci * @since 1.0 260a3e0fd82Sopenharmony_ci * @version 1.0 261a3e0fd82Sopenharmony_ci */ 262a3e0fd82Sopenharmony_ci int16_t GetWidth() override 263a3e0fd82Sopenharmony_ci { 264a3e0fd82Sopenharmony_ci Style* style = buttonStyles_[state_]; 265a3e0fd82Sopenharmony_ci return GetRelativeRect().GetWidth() - (style->paddingLeft_ + style->paddingRight_) - 266a3e0fd82Sopenharmony_ci (style->borderWidth_ * 2); /* 2: left and right border */ 267a3e0fd82Sopenharmony_ci } 268a3e0fd82Sopenharmony_ci 269a3e0fd82Sopenharmony_ci /** 270a3e0fd82Sopenharmony_ci * @brief Obtains the height of this button. 271a3e0fd82Sopenharmony_ci * 272a3e0fd82Sopenharmony_ci * @return Returns the image height. 273a3e0fd82Sopenharmony_ci * @since 1.0 274a3e0fd82Sopenharmony_ci * @version 1.0 275a3e0fd82Sopenharmony_ci */ 276a3e0fd82Sopenharmony_ci int16_t GetHeight() override 277a3e0fd82Sopenharmony_ci { 278a3e0fd82Sopenharmony_ci Style* style = buttonStyles_[state_]; 279a3e0fd82Sopenharmony_ci return GetRelativeRect().GetHeight() - (style->paddingTop_ + style->paddingBottom_) - 280a3e0fd82Sopenharmony_ci (style->borderWidth_ * 2); /* 2: top and bottom border */ 281a3e0fd82Sopenharmony_ci } 282a3e0fd82Sopenharmony_ci 283a3e0fd82Sopenharmony_ci /** 284a3e0fd82Sopenharmony_ci * @brief Sets the width for this button. 285a3e0fd82Sopenharmony_ci * 286a3e0fd82Sopenharmony_ci * @param width Indicates the width to set. 287a3e0fd82Sopenharmony_ci * @since 1.0 288a3e0fd82Sopenharmony_ci * @version 1.0 289a3e0fd82Sopenharmony_ci */ 290a3e0fd82Sopenharmony_ci void SetWidth(int16_t width) override 291a3e0fd82Sopenharmony_ci { 292a3e0fd82Sopenharmony_ci contentWidth_ = width; 293a3e0fd82Sopenharmony_ci UIView::SetWidth(width); /* 2: left and right border */ 294a3e0fd82Sopenharmony_ci } 295a3e0fd82Sopenharmony_ci 296a3e0fd82Sopenharmony_ci /** 297a3e0fd82Sopenharmony_ci * @brief Sets the height for this image. 298a3e0fd82Sopenharmony_ci * 299a3e0fd82Sopenharmony_ci * @param height Indicates the height to set. 300a3e0fd82Sopenharmony_ci * @since 1.0 301a3e0fd82Sopenharmony_ci * @version 1.0 302a3e0fd82Sopenharmony_ci */ 303a3e0fd82Sopenharmony_ci void SetHeight(int16_t height) override 304a3e0fd82Sopenharmony_ci { 305a3e0fd82Sopenharmony_ci contentHeight_ = height; 306a3e0fd82Sopenharmony_ci UIView::SetHeight(height); /* 2: top and bottom border */ 307a3e0fd82Sopenharmony_ci } 308a3e0fd82Sopenharmony_ci 309a3e0fd82Sopenharmony_ci /** 310a3e0fd82Sopenharmony_ci * @brief Obtains a rectangular area that contains coordinate information. 311a3e0fd82Sopenharmony_ci * 312a3e0fd82Sopenharmony_ci * @return Returns the rectangle area. 313a3e0fd82Sopenharmony_ci * @since 1.0 314a3e0fd82Sopenharmony_ci * @version 1.0 315a3e0fd82Sopenharmony_ci */ 316a3e0fd82Sopenharmony_ci Rect GetContentRect() override 317a3e0fd82Sopenharmony_ci { 318a3e0fd82Sopenharmony_ci Rect contentRect; 319a3e0fd82Sopenharmony_ci Style* style = buttonStyles_[state_]; 320a3e0fd82Sopenharmony_ci contentRect.SetX(GetRect().GetX() + style->paddingLeft_ + style->borderWidth_); 321a3e0fd82Sopenharmony_ci contentRect.SetY(GetRect().GetY() + style->paddingTop_ + style->borderWidth_); 322a3e0fd82Sopenharmony_ci contentRect.SetWidth(GetWidth()); 323a3e0fd82Sopenharmony_ci contentRect.SetHeight(GetHeight()); 324a3e0fd82Sopenharmony_ci return contentRect; 325a3e0fd82Sopenharmony_ci } 326a3e0fd82Sopenharmony_ci 327a3e0fd82Sopenharmony_ci Rect GetOrigContentRect() override 328a3e0fd82Sopenharmony_ci { 329a3e0fd82Sopenharmony_ci Rect contentRect; 330a3e0fd82Sopenharmony_ci Style* style = buttonStyles_[state_]; 331a3e0fd82Sopenharmony_ci contentRect.SetX(GetOrigRect().GetX() + style->paddingLeft_ + style->borderWidth_); 332a3e0fd82Sopenharmony_ci contentRect.SetY(GetOrigRect().GetY() + style->paddingTop_ + style->borderWidth_); 333a3e0fd82Sopenharmony_ci contentRect.SetWidth(GetWidth()); 334a3e0fd82Sopenharmony_ci contentRect.SetHeight(GetHeight()); 335a3e0fd82Sopenharmony_ci return contentRect; 336a3e0fd82Sopenharmony_ci } 337a3e0fd82Sopenharmony_ci 338a3e0fd82Sopenharmony_ci /** 339a3e0fd82Sopenharmony_ci * @brief Obtains the value of a style. 340a3e0fd82Sopenharmony_ci * 341a3e0fd82Sopenharmony_ci * @param key Indicates the key of the style. 342a3e0fd82Sopenharmony_ci * @return Returns the value of the style. 343a3e0fd82Sopenharmony_ci * @since 1.0 344a3e0fd82Sopenharmony_ci * @version 1.0 345a3e0fd82Sopenharmony_ci */ 346a3e0fd82Sopenharmony_ci int64_t GetStyle(uint8_t key) const override; 347a3e0fd82Sopenharmony_ci 348a3e0fd82Sopenharmony_ci /** 349a3e0fd82Sopenharmony_ci * @brief Sets the view style. 350a3e0fd82Sopenharmony_ci * @param style Indicates the view style. 351a3e0fd82Sopenharmony_ci * @since 1.0 352a3e0fd82Sopenharmony_ci * @version 1.0 353a3e0fd82Sopenharmony_ci */ 354a3e0fd82Sopenharmony_ci void SetStyle(Style& style) override 355a3e0fd82Sopenharmony_ci { 356a3e0fd82Sopenharmony_ci UIView::SetStyle(style); 357a3e0fd82Sopenharmony_ci } 358a3e0fd82Sopenharmony_ci 359a3e0fd82Sopenharmony_ci /** 360a3e0fd82Sopenharmony_ci * @brief Sets a style. 361a3e0fd82Sopenharmony_ci * 362a3e0fd82Sopenharmony_ci * @param key Indicates the key of the style to set. 363a3e0fd82Sopenharmony_ci * @param value Indicates the value matching the key. 364a3e0fd82Sopenharmony_ci * @since 1.0 365a3e0fd82Sopenharmony_ci * @version 1.0 366a3e0fd82Sopenharmony_ci */ 367a3e0fd82Sopenharmony_ci void SetStyle(uint8_t key, int64_t value) override; 368a3e0fd82Sopenharmony_ci 369a3e0fd82Sopenharmony_ci /** 370a3e0fd82Sopenharmony_ci * @brief Obtains the style of a button in a specific state. 371a3e0fd82Sopenharmony_ci * 372a3e0fd82Sopenharmony_ci * @param key Indicates the key of the style. 373a3e0fd82Sopenharmony_ci * @param state Indicates the button state, as enumerated in {@link ButtonState}. 374a3e0fd82Sopenharmony_ci * @return Returns the style of the button in the specific state. 375a3e0fd82Sopenharmony_ci * @since 1.0 376a3e0fd82Sopenharmony_ci * @version 1.0 377a3e0fd82Sopenharmony_ci */ 378a3e0fd82Sopenharmony_ci int64_t GetStyleForState(uint8_t key, ButtonState state) const; 379a3e0fd82Sopenharmony_ci 380a3e0fd82Sopenharmony_ci /** 381a3e0fd82Sopenharmony_ci * @brief Sets the style for a button in a specific state. 382a3e0fd82Sopenharmony_ci * 383a3e0fd82Sopenharmony_ci * @param key Indicates the key of the style to set. 384a3e0fd82Sopenharmony_ci * @param value Indicates the value matching the key. 385a3e0fd82Sopenharmony_ci * @param state Indicates the button state, as enumerated in {@link ButtonState}. 386a3e0fd82Sopenharmony_ci * @since 1.0 387a3e0fd82Sopenharmony_ci * @version 1.0 388a3e0fd82Sopenharmony_ci */ 389a3e0fd82Sopenharmony_ci void SetStyleForState(uint8_t key, int64_t value, ButtonState state); 390a3e0fd82Sopenharmony_ci 391a3e0fd82Sopenharmony_ci /** 392a3e0fd82Sopenharmony_ci * @brief Disables this button. 393a3e0fd82Sopenharmony_ci * 394a3e0fd82Sopenharmony_ci * @since 1.0 395a3e0fd82Sopenharmony_ci * @version 1.0 396a3e0fd82Sopenharmony_ci */ 397a3e0fd82Sopenharmony_ci void Disable(); 398a3e0fd82Sopenharmony_ci 399a3e0fd82Sopenharmony_ci /** 400a3e0fd82Sopenharmony_ci * @brief Enables this button. 401a3e0fd82Sopenharmony_ci * 402a3e0fd82Sopenharmony_ci * @since 1.0 403a3e0fd82Sopenharmony_ci * @version 1.0 404a3e0fd82Sopenharmony_ci */ 405a3e0fd82Sopenharmony_ci void Enable(); 406a3e0fd82Sopenharmony_ci 407a3e0fd82Sopenharmony_ci /** 408a3e0fd82Sopenharmony_ci * @brief Sets the state for a button. After the setting, calling {@link SetStyle} 409a3e0fd82Sopenharmony_ci * will change the style of this button, but not its state. 410a3e0fd82Sopenharmony_ci * 411a3e0fd82Sopenharmony_ci * @param state Indicates the button state, as enumerated in {@link ButtonState}. 412a3e0fd82Sopenharmony_ci * @since 1.0 413a3e0fd82Sopenharmony_ci * @version 1.0 414a3e0fd82Sopenharmony_ci */ 415a3e0fd82Sopenharmony_ci void SetStateForStyle(ButtonState state) 416a3e0fd82Sopenharmony_ci { 417a3e0fd82Sopenharmony_ci styleState_ = state; 418a3e0fd82Sopenharmony_ci } 419a3e0fd82Sopenharmony_ci 420a3e0fd82Sopenharmony_ci#if DEFAULT_ANIMATION 421a3e0fd82Sopenharmony_ci void EnableButtonAnimation(bool enable) 422a3e0fd82Sopenharmony_ci { 423a3e0fd82Sopenharmony_ci enableAnimation_ = enable; 424a3e0fd82Sopenharmony_ci } 425a3e0fd82Sopenharmony_ci 426a3e0fd82Sopenharmony_ci /** 427a3e0fd82Sopenharmony_ci * @brief Obtains the value of a style. 428a3e0fd82Sopenharmony_ci * 429a3e0fd82Sopenharmony_ci * @param enableAnimation. 430a3e0fd82Sopenharmony_ci * @return Returns enableAnimation_. 431a3e0fd82Sopenharmony_ci */ 432a3e0fd82Sopenharmony_ci bool GetEnableButtonAnimation() const 433a3e0fd82Sopenharmony_ci { 434a3e0fd82Sopenharmony_ci return enableAnimation_; 435a3e0fd82Sopenharmony_ci } 436a3e0fd82Sopenharmony_ci#endif 437a3e0fd82Sopenharmony_ci 438a3e0fd82Sopenharmony_ciprotected: 439a3e0fd82Sopenharmony_ci Image* defaultImgSrc_; 440a3e0fd82Sopenharmony_ci Image* triggeredImgSrc_; 441a3e0fd82Sopenharmony_ci ButtonImageSrc currentImgSrc_; 442a3e0fd82Sopenharmony_ci int16_t imgX_; 443a3e0fd82Sopenharmony_ci int16_t imgY_; 444a3e0fd82Sopenharmony_ci int16_t contentWidth_; 445a3e0fd82Sopenharmony_ci int16_t contentHeight_; 446a3e0fd82Sopenharmony_ci void SetState(ButtonState state); 447a3e0fd82Sopenharmony_ci bool InitImage(); 448a3e0fd82Sopenharmony_ci 449a3e0fd82Sopenharmony_ci ButtonState state_; 450a3e0fd82Sopenharmony_ci ButtonState styleState_; 451a3e0fd82Sopenharmony_ci Style* buttonStyles_[BTN_STATE_NUM]; 452a3e0fd82Sopenharmony_ci#if DEFAULT_ANIMATION 453a3e0fd82Sopenharmony_ci bool enableAnimation_; 454a3e0fd82Sopenharmony_ci friend class ButtonAnimator; 455a3e0fd82Sopenharmony_ci class ButtonAnimator final : public AnimatorCallback { 456a3e0fd82Sopenharmony_ci public: 457a3e0fd82Sopenharmony_ci ButtonAnimator() = delete; 458a3e0fd82Sopenharmony_ci ButtonAnimator(const ButtonAnimator&) = delete; 459a3e0fd82Sopenharmony_ci ButtonAnimator& operator=(const ButtonAnimator&) = delete; 460a3e0fd82Sopenharmony_ci ButtonAnimator(ButtonAnimator&&) = delete; 461a3e0fd82Sopenharmony_ci ButtonAnimator& operator=(ButtonAnimator&&) = delete; 462a3e0fd82Sopenharmony_ci ButtonAnimator(UIButton& button) : animator_(this, nullptr, 0, false), button_(button) {} 463a3e0fd82Sopenharmony_ci ~ButtonAnimator() {} 464a3e0fd82Sopenharmony_ci 465a3e0fd82Sopenharmony_ci void Start(); 466a3e0fd82Sopenharmony_ci void DrawMask(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea); 467a3e0fd82Sopenharmony_ci void Callback(UIView* view) override; 468a3e0fd82Sopenharmony_ci void OnStop(UIView& view) override; 469a3e0fd82Sopenharmony_ci 470a3e0fd82Sopenharmony_ci private: 471a3e0fd82Sopenharmony_ci Animator animator_; 472a3e0fd82Sopenharmony_ci bool isReverseAnimation_ = false; 473a3e0fd82Sopenharmony_ci float scale_ = 1.0f; 474a3e0fd82Sopenharmony_ci UIButton& button_; 475a3e0fd82Sopenharmony_ci } animator_; 476a3e0fd82Sopenharmony_ci#endif 477a3e0fd82Sopenharmony_ci bool buttonStyleAllocFlag_; 478a3e0fd82Sopenharmony_ci 479a3e0fd82Sopenharmony_ciprivate: 480a3e0fd82Sopenharmony_ci /** Sets up the theme styles */ 481a3e0fd82Sopenharmony_ci void SetupThemeStyles(); 482a3e0fd82Sopenharmony_ci 483a3e0fd82Sopenharmony_ci void DrawImg(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea, OpacityType opaScale); 484a3e0fd82Sopenharmony_ci}; 485a3e0fd82Sopenharmony_ci} // namespace OHOS 486a3e0fd82Sopenharmony_ci#endif // GRAPHIC_LITE_UI_BUTTON_H 487