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_view.h 28 * 29 * @brief Declares the base class of a view, providing basic view attributes and operations. All views are derived 30 * from this class. 31 * 32 * @since 1.0 33 * @version 1.0 34 */ 35 36 #ifndef GRAPHIC_LITE_UI_VIEW_H 37 #define GRAPHIC_LITE_UI_VIEW_H 38 39 #include "events/cancel_event.h" 40 #include "events/click_event.h" 41 #include "events/drag_event.h" 42 #include "events/event.h" 43 #include "events/long_press_event.h" 44 #include "events/press_event.h" 45 #include "events/release_event.h" 46 #if ENABLE_ROTATE_INPUT 47 #include "events/rotate_event.h" 48 #endif 49 #include "gfx_utils/color.h" 50 #include "gfx_utils/geometry2d.h" 51 #include "gfx_utils/graphic_buffer.h" 52 #include "gfx_utils/graphic_log.h" 53 #include "gfx_utils/heap_base.h" 54 #include "gfx_utils/image_info.h" 55 #include "gfx_utils/style.h" 56 #include "gfx_utils/transform.h" 57 58 namespace OHOS { 59 /* Enumerates view types. */ 60 enum UIViewType : uint8_t { 61 UI_ROOT_VIEW = 0, 62 UI_VIEW_GROUP, 63 UI_LABEL, 64 UI_ARC_LABEL, 65 UI_EDIT_TEXT, 66 UI_LABEL_BUTTON, 67 UI_CHECK_BOX, 68 UI_TOGGLE_BUTTON, 69 UI_RADIO_BUTTON, 70 UI_IMAGE_VIEW, 71 UI_BOX_PROGRESS, 72 UI_SLIDER, 73 UI_CIRCLE_PROGRESS, 74 UI_SCROLL_VIEW, 75 UI_LIST, 76 UI_DIGITAL_CLOCK, 77 UI_ANALOG_CLOCK, 78 UI_PICKER, 79 UI_SWIPE_VIEW, 80 UI_TIME_PICKER, 81 UI_ABSTRACT_CLOCK, 82 UI_ABSTRACT_PROGRESS, 83 UI_ABSTRACT_SCROLL, 84 UI_AXIS, 85 UI_BUTTON, 86 UI_CANVAS, 87 UI_CHART, 88 UI_IMAGE_ANIMATOR_VIEW, 89 UI_REPEAT_BUTTON, 90 UI_TEXTURE_MAPPER, 91 UI_DIALOG, 92 UI_QRCODE, 93 UI_NUMBER_MAX 94 }; 95 96 #if ENABLE_DEBUG 97 const char* const VIEW_TYPE_STRING[UI_NUMBER_MAX] = { 98 "RootView", "UIViewGroup", "UILabel", "UIArcLabel", 99 "UIEditText", "UILabelButton", "UICheckBox", "UIToggleButton", 100 "UIRadioButton", "UIImageView", "UIBoxProgress", "UISlider", 101 "UICircleProgress", "UIScrollView", "UIList", "UIDigitalClock", 102 "UIAnalogClock", "UIPicker", "UISwipeView", "UITimePicker", 103 "UIAbstractClock", "UIAbstractProgress", "UIAbstractScroll", "UIAxis", 104 "UIButton", "UICanvas", "UIChart", "UIImageAnimatorView", 105 "UIRepeatButton", "UITextureMapper", "UIDialog", "UIQrcode", 106 }; 107 #endif // ENABLE_DEBUG 108 109 /** 110 * @brief Defines the base class of a view, providing basic view attributes and operations. All views are derived 111 * from this class. 112 * 113 * @since 1.0 114 * @version 1.0 115 */ 116 class UIView : public HeapBase { 117 public: 118 /** 119 * @brief Defines a click event listener. You need to register this listener with the view to listen to 120 * click events. 121 * 122 * @since 1.0 123 * @version 1.0 124 */ 125 class OnClickListener : public HeapBase { 126 public: 127 /** 128 * @brief Called when a view is clicked. 129 * @param view Indicates the view clicked. 130 * @param event Indicates the click event. 131 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 132 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 133 * it is transferred to the parent view after local processing is complete.) 134 * @since 1.0 135 * @version 1.0 136 */ OnClick(UIView & view,const ClickEvent & event)137 virtual bool OnClick(UIView& view, const ClickEvent& event) 138 { 139 return false; 140 } 141 142 /** 143 * @brief A destructor used to delete the <b>OnClickListener</b> instance. 144 * @since 1.0 145 * @version 1.0 146 */ ~OnClickListener()147 virtual ~OnClickListener() {} 148 }; 149 150 /** 151 * @brief Defines a long-press event listener. You need to register this listener with the view to listen to 152 * long-press events. 153 * 154 * @since 1.0 155 * @version 1.0 156 */ 157 class OnLongPressListener : public HeapBase { 158 public: 159 /** 160 * @brief Called when a view is long pressed. 161 * @param view Indicates the view long pressed. 162 * @param event Indicates the long-press event. 163 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 164 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 165 * it is transferred to the parent view after local processing is complete.) 166 * @since 1.0 167 * @version 1.0 168 */ OnLongPress(UIView & view,const LongPressEvent & event)169 virtual bool OnLongPress(UIView& view, const LongPressEvent& event) 170 { 171 return false; 172 } 173 174 /** 175 * @brief A destructor used to delete the <b>OnLongPressListener</b> instance. 176 * @since 1.0 177 * @version 1.0 178 */ ~OnLongPressListener()179 virtual ~OnLongPressListener() {} 180 }; 181 182 /** 183 * @brief Defines a drag event listener. You need to register this listener with the view to listen to drag events. 184 * 185 * @since 1.0 186 * @version 1.0 187 */ 188 class OnDragListener : public HeapBase { 189 public: 190 /** 191 * @brief Called when a view starts to drag. 192 * @param view Indicates the view dragged. 193 * @param event Indicates the drag event. 194 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 195 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 196 * it is transferred to the parent view after local processing is complete.) 197 * @since 1.0 198 * @version 1.0 199 */ OnDragStart(UIView & view,const DragEvent & event)200 virtual bool OnDragStart(UIView& view, const DragEvent& event) 201 { 202 return false; 203 } 204 205 /** 206 * @brief Called when a view is being dragged. 207 * @param view Indicates the view dragged. 208 * @param event Indicates the drag event. 209 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 210 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 211 * it is transferred to the parent view after local processing is complete.) 212 * @since 1.0 213 * @version 1.0 214 */ OnDrag(UIView & view,const DragEvent & event)215 virtual bool OnDrag(UIView& view, const DragEvent& event) 216 { 217 return false; 218 } 219 220 /** 221 * @brief Called when a view stops dragging. 222 * @param view Indicates the view dragged. 223 * @param event Indicates the drag event. 224 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 225 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 226 * it is transferred to the parent view after local processing is complete.) 227 * @since 1.0 228 * @version 1.0 229 */ OnDragEnd(UIView & view,const DragEvent & event)230 virtual bool OnDragEnd(UIView& view, const DragEvent& event) 231 { 232 return false; 233 } 234 235 /** 236 * @brief A destructor used to delete the <b>OnDragListener</b> instance. 237 * @since 1.0 238 * @version 1.0 239 */ ~OnDragListener()240 virtual ~OnDragListener() {} 241 }; 242 243 /** 244 * @brief Defines a touch event listener. You need to register this listener with the view to listen to touch 245 * events. 246 * 247 * @since 1.0 248 * @version 1.0 249 */ 250 class OnTouchListener : public HeapBase { 251 public: 252 /** 253 * @brief Called when a view is pressed. 254 * @param view Indicates the view pressed. 255 * @param event Indicates the press event. 256 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 257 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 258 * it is transferred to the parent view after local processing is complete.) 259 * @since 1.0 260 * @version 1.0 261 */ OnPress(UIView & view,const PressEvent & event)262 virtual bool OnPress(UIView& view, const PressEvent& event) 263 { 264 return false; 265 } 266 267 /** 268 * @brief Called when a view is released. 269 * @param view Indicates the view released. 270 * @param event Indicates the release event. 271 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 272 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 273 * it is transferred to the parent view after local processing is complete.) 274 * @since 1.0 275 * @version 1.0 276 */ OnRelease(UIView & view,const ReleaseEvent & event)277 virtual bool OnRelease(UIView& view, const ReleaseEvent& event) 278 { 279 return false; 280 } 281 282 /** 283 * @brief Called when a click event on a view is canceled. 284 * @param view Indicates the view on which a click event is canceled. 285 * @param event Indicates the cancel event. 286 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 287 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 288 * it is transferred to the parent view after local processing is complete.) 289 * @since 1.0 290 * @version 1.0 291 */ OnCancel(UIView & view,const CancelEvent & event)292 virtual bool OnCancel(UIView& view, const CancelEvent& event) 293 { 294 return false; 295 } 296 297 /** 298 * @brief A destructor used to delete the <b>OnTouchListener</b> instance. 299 * @since 1.0 300 * @version 1.0 301 */ ~OnTouchListener()302 virtual ~OnTouchListener() {} 303 }; 304 305 #if ENABLE_ROTATE_INPUT 306 /** 307 * @brief Defines a rotation event listener. 308 * You need to register this listener with the view to listen for rotation events. 309 * @since 5.0 310 * @version 3.0 311 */ 312 class OnRotateListener : public HeapBase { 313 public: 314 /** 315 * @brief Called when the view starts to rotate. 316 * @param view Indicates the view that responds to the rotation event. 317 * @param event Indicates the rotation event. 318 * @return Returns <b>true</b> if the rotation event is consumed; returns <b>false</b> otherwise. 319 * @since 6 320 */ OnRotateStart(UIView & view,const RotateEvent & event)321 virtual bool OnRotateStart(UIView& view, const RotateEvent& event) 322 { 323 return false; 324 } 325 326 /** 327 * @brief Called when a rotation event occurs on a view. 328 * @param view Indicates the view that responds to the rotation event. 329 * @param event Indicates the rotation event. 330 * @return Returns <b>true</b> if the rotation event is consumed; returns <b>false</b> otherwise. 331 * @since 5.0 332 * @version 3.0 333 */ OnRotate(UIView & view,const RotateEvent & event)334 virtual bool OnRotate(UIView& view, const RotateEvent& event) 335 { 336 return false; 337 } 338 339 /** 340 * @brief Called when the view stops rotating. 341 * @param view Indicates the view that responds to the rotation event. 342 * @param event Indicates the rotation event. 343 * @return Returns <b>true</b> if the rotation event is consumed; returns <b>false</b> otherwise. 344 * @since 6 345 */ OnRotateEnd(UIView & view,const RotateEvent & event)346 virtual bool OnRotateEnd(UIView& view, const RotateEvent& event) 347 { 348 return false; 349 } 350 351 /** 352 * @brief A destructor used to delete an <b>OnRotateListener</b> instance. 353 * @since 5.0 354 * @version 3.0 355 */ ~OnRotateListener()356 virtual ~OnRotateListener() {} 357 }; 358 359 /** 360 * @brief Called when the view starts to rotate. 361 * @param event Indicates the rotation event. 362 * @since 6 363 */ 364 virtual bool OnRotateStartEvent(const RotateEvent& event); 365 366 /** 367 * @brief Called when a rotation event occurs on the view. 368 * @param event Indicates the rotation event. 369 * @since 5.0 370 * @version 3.0 371 */ 372 virtual bool OnRotateEvent(const RotateEvent& event); 373 374 /** 375 * @brief Called when the view stops rotating. 376 * @param event Indicates the rotation event. 377 * @since 6 378 */ 379 virtual bool OnRotateEndEvent(const RotateEvent& event); 380 381 /** 382 * @brief Sets a rotation event listener for the view. 383 * @param onRotateListener Indicates the pointer to the rotation event listener to set. 384 * @since 5.0 385 * @version 3.0 386 */ 387 void SetOnRotateListener(OnRotateListener* onRotateListener); 388 389 /** 390 * @brief Obtains the rotation event listener for the view. 391 * @return Returns the rotation event listener. 392 * @since 5.0 393 * @version 3.0 394 */ GetOnRotateListener()395 OnRotateListener*& GetOnRotateListener() 396 { 397 return onRotateListener_; 398 } 399 #endif 400 401 /** 402 * @brief Stores extra information about a <b>UIView</b> instance. 403 * @param elementPtr Indicates the void pointer to the extra information about the <b>UIView</b> instance. 404 * @since 5.0 405 * @version 3.0 406 */ 407 struct ViewExtraMsg { 408 void* elementPtr; 409 }; 410 411 /** 412 * @brief A default constructor used to create an <b>UIView</b> instance. 413 * @since 1.0 414 * @version 1.0 415 */ 416 UIView(); 417 418 /** 419 * @brief A constructor used to create an <b>UIView</b> instance. 420 * @param id Indicates the pointer to the view ID. 421 * @since 1.0 422 * @version 1.0 423 */ UIView(const char * id)424 explicit UIView(const char* id) : UIView() 425 { 426 id_ = id; 427 } 428 429 /** 430 * @brief A destructor used to delete the <b>UIView</b> instance. 431 * @since 1.0 432 * @version 1.0 433 */ 434 virtual ~UIView(); 435 436 /** 437 * @brief Called before a view is drawn. This function is used to check whether the invalidated area 438 * can be fully cover by this view so as to optimize the drawing process. 439 * @param invalidatedArea Indicates the area to judge and returns the covered area when partly coverd. 440 * @return Returns <b>true</b> if the invalidated area is fully covered; returns <b>false</b> otherwise. 441 * @since 1.0 442 * @version 1.0 443 */ 444 virtual bool OnPreDraw(Rect& invalidatedArea) const; 445 446 /** 447 * @brief Called when a view is drawn. 448 * @param invalidatedArea Indicates the area to draw. 449 * @since 1.0 450 * @version 1.0 451 */ 452 virtual void OnDraw(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea); 453 454 /** 455 * @brief Called after a view is drawn. 456 * @param invalidatedArea Indicates the area in which the view is drawn. 457 * @since 1.0 458 * @version 1.0 459 */ 460 virtual void OnPostDraw(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea); 461 462 /** 463 * @brief Remeasures the view size. 464 * @since 1.0 465 * @version 1.0 466 */ ReMeasure()467 virtual void ReMeasure() {} 468 469 /** 470 * @brief Refreshes the invalidated area of the view. 471 * @since 1.0 472 * @version 1.0 473 */ 474 void Invalidate(); 475 476 /** 477 * @brief Refreshes a view in a specified invalidated area. 478 * @param invalidatedArea Indicates the area to refresh. 479 * @since 1.0 480 * @version 1.0 481 */ 482 void InvalidateRect(const Rect& invalidatedArea, UIView* view = nullptr); 483 484 /** 485 * @brief Called when the view is long pressed. 486 * @param event Indicates the long-press event. 487 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 488 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 489 * it is transferred to the parent view after local processing is complete.) 490 * @since 1.0 491 * @version 1.0 492 */ 493 virtual bool OnLongPressEvent(const LongPressEvent& event); 494 495 /** 496 * @brief Called when the view starts to drag. 497 * @param event Indicates the drag event. 498 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 499 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 500 * it is transferred to the parent view after local processing is complete.) 501 * @since 1.0 502 * @version 1.0 503 */ 504 virtual bool OnDragStartEvent(const DragEvent& event); 505 506 /** 507 * @brief Called when the view is being dragged. 508 * @param event Indicates the drag event. 509 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 510 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 511 * it is transferred to the parent view after local processing is complete.) 512 * @since 1.0 513 * @version 1.0 514 */ 515 virtual bool OnDragEvent(const DragEvent& event); 516 517 /** 518 * @brief Called when the view stops dragging. 519 * @param event Indicates the drag event. 520 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 521 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 522 * it is transferred to the parent view after local processing is complete.) 523 * @since 1.0 524 * @version 1.0 525 */ 526 virtual bool OnDragEndEvent(const DragEvent& event); 527 528 /** 529 * @brief Called when the view is clicked. 530 * @param event Indicates the click event. 531 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 532 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 533 * it is transferred to the parent view after local processing is complete.) 534 * @since 1.0 535 * @version 1.0 536 */ 537 virtual bool OnClickEvent(const ClickEvent& event); 538 539 /** 540 * @brief Called when the view is pressed. 541 * @param event Indicates the press event. 542 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 543 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 544 * it is transferred to the parent view after local processing is complete.) 545 * @since 1.0 546 * @version 1.0 547 */ 548 virtual bool OnPressEvent(const PressEvent& event); 549 550 /** 551 * @brief Called when the view is released. 552 * @param event Indicates the release event. 553 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 554 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 555 * it is transferred to the parent view after local processing is complete.) 556 * @since 1.0 557 * @version 1.0 558 */ 559 virtual bool OnReleaseEvent(const ReleaseEvent& event); 560 561 /** 562 * @brief Called when a click event on the view is canceled. 563 * @param event Indicates the cancel event. 564 * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise. 565 * (If an event is consumed, it is not transferred to the parent view. If an event is not consumed, 566 * it is transferred to the parent view after local processing is complete.) 567 * @since 1.0 568 * @version 1.0 569 */ 570 virtual bool OnCancelEvent(const CancelEvent& event); 571 572 /** 573 * @brief Sets a drag event listener for the view. 574 * @param onDragListener Indicates the pointer to the drag event listener to set. 575 * @since 1.0 576 * @version 1.0 577 */ 578 void SetOnDragListener(OnDragListener* onDragListener); 579 580 /** 581 * @brief Obtains the drag event listener for the view. 582 * @return Returns the drag event listener. 583 * @since 1.0 584 * @version 1.0 585 */ 586 OnDragListener*& GetOnDragListener(); 587 588 /** 589 * @brief Sets a click event listener for the view. 590 * @param onClickListener Indicates the pointer to the click event listener to set. 591 * @since 1.0 592 * @version 1.0 593 */ 594 void SetOnClickListener(OnClickListener* onClickListener); 595 596 /** 597 * @brief Obtains the click event listener for the view. 598 * @return Returns the click event listener. 599 * @since 1.0 600 * @version 1.0 601 */ 602 OnClickListener*& GetOnClickListener(); 603 604 /** 605 * @brief Sets a long-press event listener for the view. 606 * @param onLongPressListener Indicates the pointer to the long-press event listener to set. 607 * @since 1.0 608 * @version 1.0 609 */ 610 void SetOnLongPressListener(OnLongPressListener* onLongPressListener); 611 612 /** 613 * @brief Obtains the long-press event listener for the view. 614 * @return Returns the long-press event listener. 615 * @since 1.0 616 * @version 1.0 617 */ 618 OnLongPressListener*& GetOnLongPressListener(); 619 620 /** 621 * @brief Sets a touch event listener for the view. 622 * @param onTouchListener Indicates the pointer to the touch event listener to set. 623 * @since 1.0 624 * @version 1.0 625 */ 626 void SetOnTouchListener(OnTouchListener* onTouchListener); 627 628 /** 629 * @brief Obtains the touch event listener for the view. 630 * @return Returns the touch event listener. 631 * @since 1.0 632 * @version 1.0 633 */ 634 OnTouchListener*& GetTouchListener(); 635 636 /** 637 * @brief Obtains the top-level view based on specified coordinates. 638 * @param point Indicates the coordinates to specify. 639 * @param last Indicates the double pointer to the view that contains the specified coordinates. 640 * @since 1.0 641 * @version 1.0 642 */ 643 virtual void GetTargetView(const Point& point, UIView** last); 644 645 /** 646 * @brief Obtains the current view and target view based on specified coordinates. The obtained current view must 647 * include the specified coordinates and is a visible top view that can respond to touch events, and the 648 * obtained target view must be the top view that includes the specified coordinates. 649 * @param point Indicates the specified coordinates. 650 * @param current Indicates the double pointer to the current view to obtain. 651 * <b>nullptr</b> indicates that the target view fails to be obtained. 652 * @param target Indicates the double pointer to the target view to obtain. 653 * <b>nullptr</b> indicates that the target view fails to be obtained. 654 * @since 5.0 655 * @version 3.0 656 */ 657 virtual void GetTargetView(const Point& point, UIView** current, UIView** target); 658 659 /** 660 * @brief Sets the parent view for the view. 661 * @param parent Indicates the pointer to the parent view to set. 662 * @since 1.0 663 * @version 1.0 664 */ 665 void SetParent(UIView* parent); 666 667 /** 668 * @brief Obtains the parent view of the view. 669 * @return Returns the pointer to the parent view. 670 * @since 1.0 671 * @version 1.0 672 */ 673 UIView* GetParent() const; 674 675 /** 676 * @brief Sets the next sibling view for the view. 677 * @param sibling Indicates the pointer to the next sibling view to set. 678 * @since 1.0 679 * @version 1.0 680 */ 681 void SetNextSibling(UIView* sibling); 682 683 /** 684 * @brief Obtains the next sibling view of the view. 685 * @return Returns the pointer to the next sibling view. 686 * @since 1.0 687 * @version 1.0 688 */ 689 UIView* GetNextSibling() const; 690 691 /** 692 * @brief Sets whether the view is visible. 693 * @param visible Specifies whether to set the view visible. Value <b>true</b> means to set the view visible, 694 * and <b>false</b> means the opposite. 695 * @since 1.0 696 * @version 1.0 697 */ 698 virtual void SetVisible(bool visible); 699 700 /** 701 * @brief Checks whether the view is visible. 702 * @return Returns <b>true</b> if the view is visible; returns <b>false</b> otherwise. 703 * @since 1.0 704 * @version 1.0 705 */ 706 bool IsVisible() const; 707 708 /** 709 * @brief Sets whether the view is touchable. 710 * @param touchable Specifies whether to set the view touchable. Value <b>true</b> means to set the view touchable, 711 * and <b>false</b> means the opposite. 712 * @since 1.0 713 * @version 1.0 714 */ 715 void SetTouchable(bool touch); 716 717 /** 718 * @brief Checks whether the view is touchable. 719 * @return Returns <b>true</b> if the view is touchable; returns <b>false</b> otherwise. 720 * @since 1.0 721 * @version 1.0 722 */ 723 bool IsTouchable() const; 724 725 /** 726 * @brief Sets whether the view is draggable. 727 * @param draggable Specifies whether to set the view draggable. Value <b>true</b> means to set the view draggable, 728 * and <b>false</b> means the opposite. 729 * @since 1.0 730 * @version 1.0 731 */ 732 void SetDraggable(bool draggable); 733 734 /** 735 * @brief Checks whether the view is draggable. 736 * @return Returns <b>true</b> if the view is draggable; returns <b>false</b> otherwise. 737 * @since 1.0 738 * @version 1.0 739 */ 740 bool IsDraggable() const; 741 742 /** 743 * @brief Sets whether to transfer the drag event to the parent view for processing when the view is being dragged. 744 * @param dragParentInstead Specifies whether to transfer the event to the parent view for processing. 745 * Value <b>true</b> means to transfer the event to the parent view for processing, 746 * and <b>false</b> means the opposite. 747 * @since 1.0 748 * @version 1.0 749 */ 750 void SetDragParentInstead(bool dragParentInstead); 751 752 /** 753 * @brief Obtains whether the view transfers a drag event to the parent view for processing. 754 * @return Returns <b>true</b> if the view transfers the event to the parent view for processing; 755 * returns <b>false</b> otherwise. 756 * @since 1.0 757 * @version 1.0 758 */ 759 bool IsDragParentInstead() const; 760 761 /** 762 * @brief Obtains the absolute rectangle area of the view. When the view has deformation such as rotation, 763 * the rectangle area is the intersection set of the absolute rectangle area and deformation matrix. 764 * @return Returns the absolute rectangle area. 765 * @since 1.0 766 * @version 1.0 767 */ 768 Rect GetRect() const; 769 770 /** 771 * @brief Obtains the visible absolute rectangle area of the view. 772 * @return Returns the visible absolute rectangle area. 773 * @since 1.0 774 * @version 1.0 775 */ 776 Rect GetVisibleRect() const; 777 778 /** 779 * @brief Obtains the valid absolute rectangle area of the view. The valid area refers to the area where the view 780 * can be displayed. Generally, the valid area is the same as the visible view area, but they may be 781 * different in the grid layout. 782 * @return Returns the valid absolute rectangle area. 783 * @since 1.0 784 * @version 1.0 785 */ 786 Rect GetMaskedRect() const; 787 788 /** 789 * @brief Obtains the absolute rectangle area of the view. 790 * @return Returns the absolute rectangle area. 791 * @since 1.0 792 * @version 1.0 793 */ 794 Rect GetOrigRect() const; 795 796 /** 797 * @brief Obtains the content of the absolute rectangle area of the view. This area excludes padding. 798 * @return Returns the content of the absolute rectangle area. 799 * @since 1.0 800 * @version 1.0 801 */ 802 virtual Rect GetContentRect(); 803 804 virtual Rect GetOrigContentRect(); 805 806 /** 807 * @brief Obtains the rectangular area of the view relative to the parent view, that is, the rectangular area 808 * relative to the coordinates of the parent view. 809 * @return Returns the rectangle area relative to the parent view. 810 * @since 1.0 811 * @version 1.0 812 */ 813 Rect GetRelativeRect() const; 814 815 /** 816 * @brief Adjusts the size of the visible area. This operation may affect the final display size. 817 * @param x Indicates the new x-coordinate. 818 * @param y Indicates the new y-coordinate. 819 * @param width Indicates the new width. 820 * @param height Indicates the new height. 821 * @since 1.0 822 * @version 1.0 823 */ 824 void ResizeVisibleArea(int16_t x, int16_t y, int16_t width, int16_t height); 825 826 /** 827 * @brief Sets the width for the view. 828 * @param width Indicates the width to set. 829 * @since 1.0 830 * @version 1.0 831 */ 832 virtual void SetWidth(int16_t width); 833 834 /** 835 * @brief Sets a percentage that represents the proportion of the view's width to the parent view's width. 836 * @param widthPercent Indicates the percentage to set, the decimal form of which ranges from 0 to 1. 837 * @since 5.0 838 * @version 3.0 839 */ 840 virtual void SetWidthPercent(float widthPercent); 841 842 /** 843 * @brief Obtains the width for the view. 844 * @return Returns the view width. 845 * @since 1.0 846 * @version 1.0 847 */ 848 virtual int16_t GetWidth(); 849 850 /** 851 * @brief Sets the height for the view. 852 * @param height Indicates the height to set. 853 * @since 1.0 854 * @version 1.0 855 */ 856 virtual void SetHeight(int16_t height); 857 858 /** 859 * @brief Sets a percentage that represents the proportion of the view's hieght to the parent view's hieght. 860 * @param widthPercent Indicates the percentage to set, the decimal form of which ranges from 0 to 1. 861 * @since 5.0 862 * @version 3.0 863 */ 864 virtual void SetHeightPercent(float heightPercent); 865 866 /** 867 * @brief Obtains the height for the view. 868 * @return Returns the view height. 869 * @since 1.0 870 * @version 1.0 871 */ 872 virtual int16_t GetHeight(); 873 874 /** 875 * @brief Adjusts the size of the view. 876 * @param width Indicates the new width. 877 * @param height Indicates the new height. 878 * @since 1.0 879 * @version 1.0 880 */ 881 virtual void Resize(int16_t width, int16_t height); 882 883 /** 884 * @brief Adjusts the size of the view based on specified percentages. 885 * @param widthPercent Indicates the percentage that represents the proportion of the view's width 886 * to the parent view's width to set, the decimal form of which ranges from 0 to 1. 887 * @param heightPercent Indicates the percentage that represents the proportion of the view's height 888 * to the parent view's height to set, the decimal form of which ranges from 0 to 1. 889 * @since 5.0 890 * @version 3.0 891 */ 892 virtual void ResizePercent(float widthPercent, float heightPercent); 893 894 /** 895 * @brief Sets the x-coordinate for the view. 896 * @param x Indicates the x-coordinate to set. 897 * @since 1.0 898 * @version 1.0 899 */ 900 virtual void SetX(int16_t x); 901 902 /** 903 * @brief Sets a percentage that represents the proportion of the view's x-coordinate 904 * to the parent view's x-coordinate. 905 * @param xPercent Indicates the percentage to set, the decimal form of which ranges from 0 to 1. 906 * @since 5.0 907 * @version 3.0 908 */ 909 virtual void SetXPercent(float xPercent); 910 911 /** 912 * @brief Obtains the x-coordinate for the view. 913 * @return Returns the x-coordinate. 914 * @since 1.0 915 * @version 1.0 916 */ 917 int16_t GetX() const; 918 919 /** 920 * @brief Sets the y-coordinate for the view. 921 * @param y Indicates the y-coordinate to set. 922 * @since 1.0 923 * @version 1.0 924 */ 925 virtual void SetY(int16_t y); 926 927 /** 928 * @brief Sets a percentage that represents the proportion of the view's y-coordinate 929 * to the parent view's y-coordinate. 930 * @param yPercent Indicates the percentage to set, the decimal form of which ranges from 0 to 1. 931 * @since 5.0 932 * @version 3.0 933 */ 934 virtual void SetYPercent(float yPercent); 935 936 /** 937 * @brief Obtains the y-coordinate for the view. 938 * @return Returns the y-coordinate. 939 * @since 1.0 940 * @version 1.0 941 */ 942 int16_t GetY() const; 943 944 /** 945 * @brief 获取组件设置margin属性后margin的宽度,包括组件宽度加marginLeft 加 marginRight. 946 * @return margin的宽度 947 * @since 6 948 */ 949 int16_t GetWidthWithMargin(); 950 951 /** 952 * @brief 获取组件设置margin属性后margin的高度度,包括组件宽度加marginTop 加 marginBottom. 953 * @return margin的高度 954 * @since 6 955 */ 956 int16_t GetHeightWithMargin(); 957 958 /** 959 * @brief Sets the position for the view. 960 * @param x Indicates the x-coordinate to set. 961 * @param y Indicates the y-coordinate to set. 962 * @since 1.0 963 * @version 1.0 964 */ 965 virtual void SetPosition(int16_t x, int16_t y); 966 967 /** 968 * @brief Sets the position percentages for the view. 969 * @param xPercent Indicates the percentage that represents the proportion of the view's x-coordinate 970 * to the parent view's x-coordinate to set, the decimal form of which ranges from 0 to 1. 971 * @param yPercent Indicates the percentage that represents the proportion of the view's y-coordinate 972 * to the parent view's y-coordinate to set, the decimal form of which ranges from 0 to 1. 973 * @since 5.0 974 * @version 3.0 975 */ 976 virtual void SetPositionPercent(float xPercent, float yPercent); 977 978 /** 979 * @brief Adjusts the position and size of the view. 980 * @param x Indicates the new x-coordinate. 981 * @param y Indicates the new y-coordinate. 982 * @param width Indicates the new width. 983 * @param height Indicates the new height. 984 * @since 1.0 985 * @version 1.0 986 */ 987 virtual void SetPosition(int16_t x, int16_t y, int16_t width, int16_t height); 988 989 /** 990 * @brief Sets the position and size percentages for the view. 991 * @param xPercent Indicates the percentage that represents the proportion of the view's x-coordinate 992 * to the parent view's x-coordinate to set, the decimal form of which ranges from 0 to 1. 993 * @param yPercent Indicates the percentage that represents the proportion of the view's y-coordinate 994 * to the parent view's y-coordinate, the decimal form of which ranges from 0 to 1. 995 * @param widthPercent Indicates the percentage that represents the proportion of the view's width 996 * to the parent view's width, the decimal form of which ranges from 0 to 1. 997 * @param heightPercent Indicates the percentage that represents the proportion of the view's height 998 * to the parent view's height, the decimal form of which ranges from 0 to 1. 999 * @since 5.0 1000 * @version 3.0 1001 */ 1002 virtual void SetPositionPercent(float xPercent, float yPercent, float widthPercent, float heightPercent); 1003 1004 /** 1005 * @brief Checks whether the view is a container view. 1006 * @return Returns <b>true</b> if the view is a container view; returns <b>false</b> otherwise. 1007 * @since 1.0 1008 * @version 1.0 1009 */ 1010 bool IsViewGroup() const; 1011 1012 /** 1013 * @brief Sets whether to intercept the input event. If intercepted, the view does not transfer the input event to 1014 * the parent view after local processing. 1015 * @param isIntercept Specifies whether to intercept the input event. Value <b>true</b> means to intercept the input 1016 * event, and <b>false</b> means the opposite. 1017 * @since 1.0 1018 * @version 1.0 1019 */ 1020 void SetIntercept(bool isIntercept); 1021 1022 /** 1023 * @brief Gets whether to intercept the input event. If intercepted, the view does not transfer the input event to 1024 * the parent view after local processing. 1025 * @return Returns <b>true</b> if intercept the input event, and <b>false</b> means the opposite. 1026 * @since 1.0 1027 * @version 1.0 1028 */ 1029 bool IsIntercept(); 1030 1031 /** 1032 * @brief Sets the affine transformation matrix. 1033 * @param transMap Indicates the transformation matrix. 1034 * @since 1.0 1035 * @version 1.0 1036 */ 1037 void SetTransformMap(const TransformMap& transMap); 1038 1039 /** 1040 * @brief Obtains an affine transformation matrix. 1041 * @return Returns the transform matrix. 1042 * @since 1.0 1043 * @version 1.0 1044 */ 1045 TransformMap& GetTransformMap(); 1046 1047 /** 1048 * @brief Obtains the child view of a specified ID. 1049 * @return Returns the pointer to the child view. 1050 * @since 1.0 1051 * @version 1.0 1052 */ 1053 virtual UIView* GetChildById(const char* id) const; 1054 1055 /** 1056 * @brief Sets the view ID. 1057 * @param id Indicates the pointer to the view ID. 1058 * @since 1.0 1059 * @version 1.0 1060 */ 1061 void SetViewId(const char* id); 1062 1063 /** 1064 * @brief Obtains the view ID. 1065 * @return Returns the pointer to the view ID. 1066 * @since 1.0 1067 * @version 1.0 1068 */ 1069 const char* GetViewId() const; 1070 1071 /** 1072 * @brief Sets the view index. 1073 * @param index Indicates the view index to set. 1074 * @since 1.0 1075 * @version 1.0 1076 */ 1077 void SetViewIndex(int16_t index); 1078 1079 /** 1080 * @brief Obtains the view index. 1081 * @return Returns the view index. 1082 * @since 1.0 1083 * @version 1.0 1084 */ 1085 int16_t GetViewIndex() const; 1086 1087 /** 1088 * @brief Obtains the view type. 1089 * @return Returns the view type. 1090 * @since 1.0 1091 * @version 1.0 1092 */ 1093 virtual UIViewType GetViewType() const; 1094 1095 /** 1096 * @brief Lays out all child views according to the preset arrangement mode. 1097 * @param needInvalidate Specifies whether to refresh the invalidated area after the layout is complete. 1098 * Value <b>true</b> means to refresh the invalidated area after the layout is complete, 1099 * and <b>false</b> means the opposite. 1100 * @since 1.0 1101 * @version 1.0 1102 */ 1103 virtual void LayoutChildren(bool neeInvalidate = false) {} 1104 1105 /** 1106 * @brief Lays out the view in the center of the parent view. 1107 * @param xOffset Indicates the offset added to the x-axis after the view is placed. A positive number indicates 1108 * the offset to the right, and a negative number indicates the offset to the left. 1109 * @param yOffset Indicates the offset added to the y-axis after the view is placed. A positive number indicates 1110 * the offset to the bottom, and a negative number indicates the offset to the top. 1111 * @since 1.0 1112 * @version 1.0 1113 */ 1114 void LayoutCenterOfParent(int16_t xOffSet = 0, int16_t yOffset = 0); 1115 1116 /** 1117 * @brief Lays out the view on the left of the parent view. 1118 * @param offset Indicates the offset added to the x-axis after the view is placed. A positive number indicates 1119 * the offset to the right, and a negative number indicates the offset to the left. 1120 * @since 1.0 1121 * @version 1.0 1122 */ 1123 void LayoutLeftOfParent(int16_t offset = 0); 1124 1125 /** 1126 * @brief Lays out the view on the right of the parent view. 1127 * @param offset Indicates the offset added to the x-axis after the view is placed. A positive number indicates 1128 * the offset to the left, and a negative number indicates the offset to the right. 1129 * @since 1.0 1130 * @version 1.0 1131 */ 1132 void LayoutRightOfParent(int16_t offset = 0); 1133 1134 /** 1135 * @brief Lays out the view on the top of the parent view. 1136 * @param offset Indicates the offset added to the y-axis after the view is placed. A positive number indicates 1137 * the offset to the bottom, and a negative number indicates the offset to the top. 1138 * @since 1.0 1139 * @version 1.0 1140 */ 1141 void LayoutTopOfParent(int16_t offset = 0); 1142 1143 /** 1144 * @brief Lays out the view on the bottom of the parent view. 1145 * @param offset Indicates the offset added to the y-axis after the view is placed. A positive number indicates 1146 * the offset to the top, and a negative number indicates the offset to the bottom. 1147 * @since 1.0 1148 * @version 1.0 1149 */ 1150 void LayoutBottomOfParent(int16_t offset = 0); 1151 1152 /** 1153 * @brief Aligns the view with the left of a sibling view. 1154 * @param id Indicates the pointer to the ID of the sibling view. 1155 * @param offset Indicates the offset added to the x-axis after the view is placed. A positive number indicates 1156 * the offset to the right, and a negative number indicates the offset to the left. 1157 * @since 1.0 1158 * @version 1.0 1159 */ 1160 void AlignLeftToSibling(const char* id, int16_t offset = 0); 1161 1162 /** 1163 * @brief Aligns the view with the right of a sibling view. 1164 * @param id Indicates the pointer to the ID of the sibling view. 1165 * @param offset Indicates the offset added to the x-axis after the view is placed. A positive number indicates 1166 * the offset to the left, and a negative number indicates the offset to the right. 1167 * @since 1.0 1168 * @version 1.0 1169 */ 1170 void AlignRightToSibling(const char* id, int16_t offset = 0); 1171 1172 /** 1173 * @brief Aligns the view with the top of a sibling view. 1174 * @param id Indicates the pointer to the ID of the sibling view. 1175 * @param offset Indicates the offset added to the y-axis after the view is placed. A positive number indicates 1176 * the offset to the bottom, and a negative number indicates the offset to the top. 1177 * @since 1.0 1178 * @version 1.0 1179 */ 1180 void AlignTopToSibling(const char* id, int16_t offset = 0); 1181 1182 /** 1183 * @brief Aligns the view with the bottom of a sibling view. 1184 * @param id Indicates the pointer to the ID of the sibling view. 1185 * @param offset Indicates the offset added to the y-axis after the view is placed. A positive number indicates 1186 * the offset to the top, and a negative number indicates the offset to the bottom. 1187 * @since 1.0 1188 * @version 1.0 1189 */ 1190 void AlignBottomToSibling(const char* id, int16_t offset = 0); 1191 1192 /** 1193 * @brief Aligns the view with the center of a sibling view in the x-axis. 1194 * @param id Indicates the pointer to the ID of the sibling view. 1195 * @param offset Indicates the offset added to the x-axis after the view is placed. A positive number indicates 1196 * the offset to the right, and a negative number indicates the offset to the left. 1197 * @since 1.0 1198 * @version 1.0 1199 */ 1200 void AlignHorCenterToSibling(const char* id, int16_t offset = 0); 1201 1202 /** 1203 * @brief Aligns the view with the center of a sibling view in the y-axis. 1204 * @param id Indicates the pointer to the ID of the sibling view. 1205 * @param offset Indicates the offset added to the y-axis after the view is placed. A positive number indicates 1206 * the offset to the bottom, and a negative number indicates the offset to the top. 1207 * @since 1.0 1208 * @version 1.0 1209 */ 1210 void AlignVerCenterToSibling(const char* id, int16_t offset = 0); 1211 1212 /** 1213 * @brief Lays out the view on the left of a sibling view. 1214 * @param id Indicates the pointer to the ID of the sibling view. 1215 * @param offset Indicates the offset added to the x-axis after the view is placed. A positive number indicates 1216 * the offset to the left, and a negative number indicates the offset to the right. 1217 * @since 1.0 1218 * @version 1.0 1219 */ 1220 void LayoutLeftToSibling(const char* id, int16_t offset = 0); 1221 1222 /** 1223 * @brief Lays out the view on the right of a sibling view. 1224 * @param id Indicates the pointer to the ID of the sibling view. 1225 * @param offset Indicates the offset added to the x-axis after the view is placed. A positive number indicates 1226 * the offset to the right, and a negative number indicates the offset to the left. 1227 * @since 1.0 1228 * @version 1.0 1229 */ 1230 void LayoutRightToSibling(const char* id, int16_t offset = 0); 1231 1232 /** 1233 * @brief Lays out the view on the above of a sibling view. 1234 * @param id Indicates the pointer to the ID of the sibling view. 1235 * @param offset Indicates the offset added to the y-axis after the view is placed. A positive number indicates 1236 * the offset to the top, and a negative number indicates the offset to the bottom. 1237 * @since 1.0 1238 * @version 1.0 1239 */ 1240 void LayoutTopToSibling(const char* id, int16_t offset = 0); 1241 1242 /** 1243 * @brief Lays out the view on the below of a sibling view. 1244 * @param id Indicates the pointer to the ID of the sibling view. 1245 * @param offset Indicates the offset added to the y-axis after the view is placed. A positive number indicates 1246 * the offset to the bottom, and a negative number indicates the offset to the top. 1247 * @since 1.0 1248 * @version 1.0 1249 */ 1250 void LayoutBottomToSibling(const char* id, int16_t offset = 0); 1251 1252 /** 1253 * @brief Sets the view style. 1254 * @param style Indicates the view style. 1255 * @since 1.0 1256 * @version 1.0 1257 */ 1258 virtual void SetStyle(Style& style); 1259 1260 /** 1261 * @brief Sets a style. 1262 * 1263 * @param key Indicates the key of the style to set. 1264 * @param value Indicates the value matching the key. 1265 * @since 1.0 1266 * @version 1.0 1267 */ 1268 virtual void SetStyle(uint8_t key, int64_t value); 1269 1270 /** 1271 * @brief Obtains the value of a style. 1272 * 1273 * @param key Indicates the key of the style. 1274 * @return Returns the value of the style. 1275 * @since 1.0 1276 * @version 1.0 1277 */ 1278 virtual int64_t GetStyle(uint8_t key) const; 1279 1280 /** 1281 * @brief Obtains the view style. This function applies to scenarios where the style does not need to be modified, 1282 * which saves memory. 1283 * @return Returns the view style. 1284 * @since 1.0 1285 * @version 1.0 1286 */ 1287 const Style& GetStyleConst() const; 1288 1289 /** 1290 * @brief Sets the opacity for the view. 1291 * 1292 * @param opaScale Indicates the opacity to set. 1293 * @since 1.0 1294 * @version 1.0 1295 */ 1296 void SetOpaScale(uint8_t opaScale); 1297 1298 /** 1299 * @brief Obtains the view opacity. 1300 * 1301 * @return Returns the view opacity. 1302 * @since 1.0 1303 * @version 1.0 1304 */ 1305 uint8_t GetOpaScale() const; 1306 1307 /** 1308 * @brief Obtains the extra message about a <b>UIView</b> instance. This field is ignored by the graphics 1309 * framework and can be anything you set. 1310 * 1311 * @return Returns the pointer to the extra message about the <b>UIView</b> instance. 1312 * @since 5.0 1313 * @version 3.0 1314 */ 1315 ViewExtraMsg* GetExtraMsg(); 1316 1317 /** 1318 * @brief Sets the extra message about a <b>UIView</b> instance. This field is ignored by the graphics 1319 * framework and can be anything you set. 1320 * 1321 * @param extraMsg Indicates the extra message to set. 1322 * @since 5.0 1323 * @version 3.0 1324 */ 1325 void SetExtraMsg(ViewExtraMsg* extraMsg); 1326 1327 /** 1328 * @brief Rotates the view in 2d. 1329 * @param angle Indicates the rotation angle. 1330 * @param pivot Indicates the coordinates of the rotation pivot. 1331 * @since 5.0 1332 * @version 3.0 1333 */ 1334 void Rotate(int16_t angle, const Vector2<float>& pivot); 1335 1336 /** 1337 * @brief Rotates the view in 3d. 1338 * @param angle Indicates the rotation angle. 1339 * @param pivotStart Indicates the coordinates of the rotation start pivot. 1340 * @param pivotEnd Indicates the coordinates of the rotation end pivot. 1341 * @since 5.0 1342 * @version 3.0 1343 */ 1344 void Rotate(int16_t angle, const Vector3<float>& pivotStart, const Vector3<float>& pivotEnd); 1345 1346 /** 1347 * @brief Scales the view in 2d. 1348 * 1349 * @param scale Indicates the scale factor on x- and y- axes. 1350 * @param pivot Indicates the scaling pivot. 1351 * @since 5.0 1352 * @version 3.0 1353 */ 1354 void Scale(const Vector2<float>& scale, const Vector2<float>& pivot); 1355 1356 /** 1357 * @brief Scales the view in 3d. 1358 * 1359 * @param scale Indicates the scale factor on x- and y- axes. 1360 * @param pivot Indicates the scaling pivot. 1361 * @since 5.0 1362 * @version 3.0 1363 */ 1364 void Scale(const Vector3<float>& scale, const Vector3<float>& pivot); 1365 1366 /** 1367 * @brief Shears the view in 3d. 1368 * 1369 * @param shearX Indicates the shear parameters around x- axes, 1370 * which means many it shears in y and z direction(current invalid). 1371 * @param shearY Indicates the shear parameters around y- axes, 1372 * which means many it shears in x and z direction(current invalid). 1373 * @param shaerZ Indicates the shear parameters around z- axes, 1374 * which means many it shears in x and y. 1375 * @since 5.0 1376 * @version 3.0 1377 */ 1378 void Shear(const Vector2<float>& shearX, const Vector2<float>& shearY, const Vector2<float>& shearZ); 1379 1380 void Translate(const Vector2<int16_t>& trans); 1381 1382 void Translate(const Vector3<int16_t>& trans); 1383 1384 bool IsTransInvalid(); 1385 1386 void SetCameraDistance(int16_t distance); 1387 1388 void SetCameraPosition(const Vector2<float>& position); 1389 1390 void ResetTransParameter(); 1391 1392 #if ENABLE_ROTATE_INPUT 1393 /** 1394 * @brief Requests the focus on the view. 1395 * 1396 * @since 5.0 1397 * @version 3.0 1398 */ 1399 virtual void RequestFocus(); 1400 1401 /** 1402 * @brief Clears the focus on the view. 1403 * 1404 * @since 5.0 1405 * @version 3.0 1406 */ 1407 virtual void ClearFocus(); 1408 #endif 1409 #if ENABLE_FOCUS_MANAGER 1410 /** 1411 * @brief 设置视图是否可获焦. 1412 * 1413 * @param focusable 是否可获焦. 1414 * @since 5.0 1415 * @version 3.0 1416 */ 1417 void SetFocusable(bool focusable); 1418 1419 /** 1420 * @brief 获取视图是否可获焦. 1421 * 1422 * @return 是否可获焦. 1423 * @since 5.0 1424 * @version 3.0 1425 */ 1426 bool IsFocusable() const; 1427 1428 /** 1429 * @brief 组件获焦响应 1430 * 1431 * @since 5.0 1432 * @version 3.0 1433 */ 1434 virtual void Focus(); 1435 1436 /** 1437 * @brief 组件失焦响应 1438 * 1439 * @since 5.0 1440 * @version 3.0 1441 */ 1442 virtual void Blur(); 1443 1444 /** 1445 * @brief 焦点改变事件监听类,开发者需要向视图组件注册该类实现事件的监听. 1446 * 1447 * @since 5.0 1448 * @version 3.0 1449 */ 1450 class OnFocusListener : public HeapBase { 1451 public: 1452 /** 1453 * @brief 回调函数,视图获焦时触发. 1454 * @param view 获焦的视图 1455 * @since 5.0 1456 * @version 3.0 1457 */ OnFocus(UIView & view)1458 virtual bool OnFocus(UIView& view) 1459 { 1460 return false; 1461 } 1462 1463 /** 1464 * @brief 回调函数,视图失焦时触发. 1465 * @param view 失焦的视图 1466 * @since 5.0 1467 * @version 3.0 1468 */ OnBlur(UIView & view)1469 virtual bool OnBlur(UIView& view) 1470 { 1471 return false; 1472 } 1473 1474 /** 1475 * @brief 析构函数. 1476 * @since 5.0 1477 * @version 3.0 1478 */ ~OnFocusListener()1479 virtual ~OnFocusListener() {} 1480 }; 1481 1482 /** 1483 * @brief 设置当前视图焦点改变事件监听者. 1484 * @param onFocusListener 焦点改变事件监听者. 1485 * @since 5.0 1486 * @version 3.0 1487 */ 1488 void SetOnFocusListener(OnFocusListener* onFocusListener); 1489 1490 /** 1491 * @brief 获取当前视图焦点改变事件监听者. 1492 * @return 焦点改变事件监听者. 1493 * @since 5.0 1494 * @version 3.0 1495 */ 1496 OnFocusListener* GetOnFocusListener() const; 1497 #endif 1498 1499 /** 1500 * @brief 获取当前视图的bitmap截图.请注意该接口会申请内存,请在需要释放时使用{@link ImageCacheFree()}接口. 1501 * @param info bitmap存储对象,获取的截图将被存到该引用中. 1502 * @param colorMode 截图格式,默认状态下为带透明度的ARGB8888. 1503 * @return bitmap是否获取成功. 1504 * @since 5.0 1505 * @version 3.0 1506 */ 1507 bool GetBitmap(ImageInfo& bitmap, ColorMode colorMode = ARGB8888); 1508 1509 bool IsOnViewTree(); 1510 1511 /** 1512 * @brief Set view zIndex order 1513 * @param zIndex specifies the stack order of an view. The default is zero. 1514 * The greater order is in front of the lower order. 1515 */ 1516 void SetZIndex(int16_t zIndex); 1517 1518 /** 1519 * @brief Get zIndex value of the view 1520 * @return the zIndex order value 1521 */ 1522 int16_t GetZIndex(); 1523 1524 /** 1525 * @brief Sets the next render sibling view for the view. 1526 * @param sibling Indicates the pointer to the next render sibling view to set. 1527 */ 1528 void SetNextRenderSibling(UIView* renderSibling); 1529 1530 /** 1531 * @brief Obtains the next render sibling view of the view. 1532 * @return Returns the pointer to the next render sibling view. 1533 */ 1534 UIView* GetNextRenderSibling() const; 1535 1536 protected: 1537 bool touchable_ : 1; 1538 bool visible_ : 1; 1539 bool draggable_ : 1; 1540 bool dragParentInstead_ : 1; 1541 bool isViewGroup_ : 1; 1542 bool needRedraw_ : 1; 1543 bool styleAllocFlag_ : 1; 1544 bool isIntercept_ : 1; 1545 #if ENABLE_FOCUS_MANAGER 1546 bool focusable_ : 1; 1547 #endif 1548 uint8_t opaScale_; 1549 int16_t index_; 1550 int16_t zIndex_; 1551 const char* id_; 1552 UIView* parent_; 1553 UIView* nextSibling_; 1554 UIView* nextRenderSibling_; 1555 Style* style_; 1556 TransformMap* transMap_; 1557 OnClickListener* onClickListener_; 1558 OnLongPressListener* onLongPressListener_; 1559 OnDragListener* onDragListener_; 1560 OnTouchListener* onTouchListener_; 1561 #if ENABLE_FOCUS_MANAGER 1562 OnFocusListener* onFocusListener_; 1563 #endif 1564 #if ENABLE_ROTATE_INPUT 1565 OnRotateListener* onRotateListener_; 1566 #endif 1567 ViewExtraMsg* viewExtraMsg_; 1568 1569 uint8_t GetMixOpaScale() const; 1570 bool IsInvalid(float percent); 1571 void DrawViewBounds(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea); 1572 void UpdateRectInfo(uint8_t key, const Rect& rect); 1573 1574 private: 1575 Rect rect_; 1576 Rect* visibleRect_; 1577 void SetupThemeStyles(); 1578 }; 1579 } // namespace OHOS 1580 #endif // GRAPHIC_LITE_UI_VIEW_H 1581