AUI Framework  master
Cross-platform module-based framework for developing C++20 desktop applications
AView.h
1/*
2 * AUI Framework - Declarative UI toolkit for modern C++20
3 * Copyright (C) 2020-2024 Alex2772 and Contributors
4 *
5 * SPDX-License-Identifier: MPL-2.0
6 *
7 * This Source Code Form is subject to the terms of the Mozilla Public
8 * License, v. 2.0. If a copy of the MPL was not distributed with this
9 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 */
11
12#pragma once
13
14#include <chrono>
15#include <functional>
16#include <array>
17
18#include <glm/glm.hpp>
19
20#include "AUI/Common/ASmallVector.h"
21#include <AUI/ASS/Property/IProperty.h>
22#include <AUI/ASS/Property/ScrollbarAppearance.h>
23#include "AUI/Common/ABoxFields.h"
24#include "AUI/Common/ADeque.h"
25#include "AUI/Common/AObject.h"
26#include "AUI/Common/SharedPtr.h"
27#include "AUI/Platform/ACursor.h"
28#include "AUI/Platform/AInput.h"
29#include "AUI/Reflect/AClass.h"
30#include "AUI/Font/AFontStyle.h"
31#include "AUI/Util/AFieldSignalEmitter.h"
32#include "AUI/Render/ARenderContext.h"
33#include "AUI/Util/IBackgroundEffect.h"
34#include <AUI/ASS/PropertyListRecursive.h>
35#include <AUI/Enum/AOverflow.h>
36#include <AUI/Enum/Visibility.h>
37#include <AUI/Enum/MouseCollisionPolicy.h>
38#include <AUI/Util/ALayoutDirection.h>
39#include <AUI/Action/AMenu.h>
40
41#include <AUI/Event/AScrollEvent.h>
42#include <AUI/Event/AGestureEvent.h>
43#include <AUI/Event/APointerPressedEvent.h>
44#include <AUI/Event/APointerReleasedEvent.h>
45#include <AUI/Event/APointerMoveEvent.h>
46#include <AUI/Render/ITexture.h>
47#include <AUI/Render/IRenderViewToTexture.h>
48#include <AUI/Enum/AFloat.h>
49
50
51class AWindow;
52class AWindowBase;
54class AAnimator;
55class AAssHelper;
56class AStylesheet;
57
76class API_AUI_VIEWS AView: public AObject
77{
78 friend class AViewContainerBase;
79 friend class AViewContainer;
80 friend class IRenderViewToTexture;
81private:
85 _<AAnimator> mAnimator;
86
90 AOverflowMask mOverflowMask = AOverflowMask::ROUNDED_RECT;
91
95 Visibility mVisibility = Visibility::VISIBLE;
96
100 _<AAssHelper> mAssHelper;
101
105 float mBorderRadius = 0;
106
110 MouseCollisionPolicy mMouseCollisionPolicy = MouseCollisionPolicy::DEFAULT;
111
115 aui::float_within_0_1 mOpacity = 1;
116
120 AOverflow mOverflow = AOverflow::VISIBLE;
121
132 _<AStylesheet> mExtraStylesheet;
133
138 virtual void notifyParentEnabledStateChanged(bool enabled);
139
140
145 [[nodiscard]]
146 ALayoutDirection parentLayoutDirection() const noexcept;
147
148
153 bool mMouseEntered = false;
154
160 bool mBlockClicksWhenPressed = true;
161
162protected:
166 AViewContainerBase* mParent = nullptr;
167
171 std::array<ass::prop::IPropertyBase*, int(ass::prop::PropertySlot::COUNT)> mAss;
172
177
182
186 glm::ivec2 mPosition = { 0, 0 };
187
191 glm::ivec2 mSize = { 20, 20 };
192
205 glm::ivec2 mExpanding = {0, 0};
206
207 AOptional<glm::ivec2> mCachedMinContentSize;
208 bool mMarkedMinContentSizeInvalid = false;
209
217 bool mRedrawRequested = false;
218
222 glm::ivec2 mMinSize = {0, 0};
223
227 glm::ivec2 mMaxSize = {0x7fffffff, 0x7fffffff};
228
232 glm::ivec2 mFixedSize = {0, 0};
233
238
243
250
258 bool mSkipUntilLayoutUpdate = true;
259
273 bool transformGestureEventsToDesktop(const glm::ivec2& origin, const AGestureEvent& event);
274
275 void applyAssRule(const ass::PropertyList& propertyList);
276 void applyAssRule(const ass::PropertyListRecursive& propertyList);
277
282 virtual AMenuModel composeContextMenu();
283
292 virtual void onViewGraphSubtreeChanged();
293
294
300 virtual void markPixelDataInvalid(ARect<int> invalidArea);
301
302 virtual void commitStyle();
303
304public:
305 AView();
306 ~AView() override;
310 void redraw();
311
316 AWindowBase* getWindow() const;
317
318 virtual void drawStencilMask(ARenderContext ctx);
319
320
328 virtual void render(ARenderContext ctx);
329
334 virtual void postRender(ARenderContext ctx);
335
336 void popStencilIfNeeded(ARenderContext ctx);
337
338 [[nodiscard]]
339 const AVector<AString>& getAssNames() const noexcept {
340 return mAssNames;
341 }
342
346 [[nodiscard]]
347 glm::ivec2 getPosition() const noexcept
348 {
349 return mPosition;
350 }
351
360 [[nodiscard]]
361 glm::ivec2 getCenterPointInWindow() const noexcept
362 {
363 return getPositionInWindow() + getSize() / 2;
364 }
365
369 [[nodiscard]]
370 glm::ivec2 getSize() const noexcept
371 {
372 return mSize;
373 }
374
378 glm::ivec2 getMinSize() const noexcept {
379 return mMinSize;
380 }
381
382 void setMinSize(glm::ivec2 minSize) noexcept {
383 mMinSize = minSize;
384 }
385
386 virtual void markMinContentSizeInvalid();
387
391 void setExtraStylesheet(_<AStylesheet> extraStylesheet) {
392 mExtraStylesheet = std::move(extraStylesheet);
393 invalidateAssHelper();
394 }
395
399 void setExtraStylesheet(AStylesheet&& extraStylesheet);
400
404 [[nodiscard]]
405 const _<AStylesheet>& extraStylesheet() const noexcept {
406 return mExtraStylesheet;
407 }
408
413 {
414 return mOverflow;
415 }
416 void setOverflow(AOverflow overflow)
417 {
418 mOverflow = overflow;
419 }
420
424 AOverflowMask getOverflowMask() const
425 {
426 return mOverflowMask;
427 }
428 void setOverflowMask(AOverflowMask overflow)
429 {
430 mOverflowMask = overflow;
431 }
432
436 float getBorderRadius() const {
437 return mBorderRadius;
438 }
439 void setBorderRadius(float radius) {
440 mBorderRadius = radius;
441 }
442
443 int getWidth() const
444 {
445 return mSize.x;
446 }
447
448 int getHeight() const
449 {
450 return mSize.y;
451 }
452
457 {
458 return !(mVisibility & Visibility::FLAG_CONSUME_SPACE) ? 0 : mSize.x + getTotalFieldHorizontal();
459 }
460
465 {
466 return !(mVisibility & Visibility::FLAG_CONSUME_SPACE) ? 0 : mSize.y + getTotalFieldVertical();
467 }
468
475 [[nodiscard]]
477 return getMinimumSize() + mMargin.occupiedSize();
478 }
479
484 [[nodiscard]]
486 {
487 ensureAssUpdated();
488 return mMargin;
489 }
490
495 void setMargin(const ABoxFields& margin) {
496 mMargin = margin;
497 }
498
506 virtual bool consumesClick(const glm::ivec2& pos);
507
512 [[nodiscard]]
514 {
515 ensureAssUpdated();
516 return mPadding;
517 }
518
523 void setPadding(const ABoxFields& padding) {
524 mPadding = padding;
525 }
526
530 virtual AString debugString() const;
531
532
536 [[nodiscard]]
538 return mPadding.horizontal() + mMargin.horizontal();
539 }
540
544 [[nodiscard]]
546 return mPadding.vertical() + mMargin.vertical();
547 }
548
552 [[nodiscard]]
553 glm::ivec2 getTotalFieldSize() const {
554 return { getTotalFieldHorizontal(), getTotalFieldVertical() };
555 }
556
557
562 {
563 return mParent;
564 }
565
570 {
571 return mCursor;
572 }
573 void setCursor(AOptional<ACursor> cursor);
574
578 [[nodiscard]]
579 virtual int getContentMinimumWidth();
580
581
585 [[nodiscard]]
586 virtual int getContentMinimumHeight();
587
591 [[nodiscard]]
592 glm::ivec2 getContentMinimumSize() noexcept {
593 if (!mCachedMinContentSize) {
594 glm::ivec2 minContentSize = glm::ivec2(getContentMinimumWidth(), getContentMinimumHeight());
595 mCachedMinContentSize = minContentSize;
596 return minContentSize;
597 }
598 // TODO ignore layout?
599 return *mCachedMinContentSize;
600 }
601
602 [[nodiscard]]
603 bool isContentMinimumSizeInvalidated() noexcept {
604 return !mCachedMinContentSize.hasValue();
605 }
606
607
608 bool hasFocus() const;
609
610
611 virtual int getMinimumWidth();
612 virtual int getMinimumHeight();
613
614 glm::ivec2 getMinimumSize() {
615 return { getMinimumWidth(), getMinimumHeight() };
616 }
617
618 void setMaxSize(const glm::ivec2& maxSize) {
619 mMaxSize = maxSize;
620 }
621
625 [[nodiscard]] const glm::ivec2& getMaxSize() const
626 {
627 return mMaxSize;
628 }
629
630 int getContentWidth() const
631 {
632 return static_cast<int>(mSize.x - mPadding.horizontal());
633 }
634
635 int getContentHeight() const
636 {
637 return static_cast<int>(mSize.y - mPadding.vertical());
638 }
639 [[nodiscard]]
640 const glm::ivec2& getExpanding() const
641 {
642 return mExpanding;
643 }
644
651 void setExpanding(glm::ivec2 expanding)
652 {
653 if (mExpanding == expanding) [[unlikely]] {
654 return;
655 }
656 mExpanding = expanding;
657 if (expandingChanged) emit expandingChanged(expanding);
658 markMinContentSizeInvalid();
659 }
660
667 void setExpanding(int expanding)
668 {
669 setExpanding({expanding, expanding});
670 }
671 void setExpanding()
672 {
673 setExpanding(2);
674 }
675
676 const _<AAnimator>& getAnimator() const {
677 return mAnimator;
678 }
679
680
681
682 void setAnimator(const _<AAnimator>& animator);
683 void getTransform(glm::mat4& transform) const;
684
685 [[nodiscard]]
686 int getExpandingHorizontal() const
687 {
688 return mExpanding.x;
689 }
690
691 [[nodiscard]]
692 int getExpandingVertical() const
693 {
694 return mExpanding.y;
695 }
696
697 [[nodiscard]] aui::float_within_0_1 getOpacity() const {
698 return mOpacity;
699 }
700 void setOpacity(aui::float_within_0_1 opacity) {
701 mOpacity = opacity;
702 }
703
704 virtual void setPosition(glm::ivec2 position);
705
710 void setSizeForced(glm::ivec2 size) {
711 mSize = size;
712 }
713 virtual void setSize(glm::ivec2 size);
714 virtual void setGeometry(int x, int y, int width, int height);
715 void setGeometry(const glm::ivec2& position, const glm::ivec2& size) {
716 setGeometry(position.x, position.y, size.x, size.y);
717 }
718
719 bool isBlockClicksWhenPressed() const noexcept {
720 return mBlockClicksWhenPressed;
721 }
722
723 void setBlockClicksWhenPressed(bool value) noexcept {
724 mBlockClicksWhenPressed = value;
725 }
726
731 const glm::ivec2& getFixedSize() {
732 return mFixedSize;
733 }
734 void setFixedSize(glm::ivec2 size) {
735 AUI_ASSERTX(glm::all(glm::greaterThanEqual(size, glm::ivec2(-100000))), "abnormal fixed size");
736 if (size == mFixedSize) [[unlikely]] {
737 return;
738 }
739 mFixedSize = size;
740 markMinContentSizeInvalid();
741 }
742
743 [[nodiscard]]
744 bool isMouseHover() const noexcept
745 {
746 return mHovered;
747 }
748
749 [[nodiscard]]
750 bool isPressed() const noexcept
751 {
752 return !mPressed.empty();
753 }
754
755 [[nodiscard]]
756 bool isPressed(APointerIndex index) const noexcept
757 {
758 return mPressed.contains(index);
759 }
760
761 [[nodiscard]]
762 bool isEnabled() const noexcept
763 {
764 return mEnabled;
765 }
766 bool isFocused() const {
767 return mHasFocus;
768 }
769 bool isMouseEntered() const {
770 return mMouseEntered;
771 }
772
773 Visibility getVisibility() const
774 {
775 return mVisibility;
776 }
777 Visibility getVisibilityRecursive() const;
778
779 void setVisibility(Visibility visibility) noexcept;
780
781 void setVisible(bool visible) noexcept
782 {
783 setVisibility(visible ? Visibility::VISIBLE : Visibility::INVISIBLE);
784 }
785
786 [[nodiscard]]
787 MouseCollisionPolicy getMouseCollisionPolicy() const {
788 return mMouseCollisionPolicy;
789 }
790
791 void setMouseCollisionPolicy(MouseCollisionPolicy mouseCollisionPolicy) {
792 mMouseCollisionPolicy = mouseCollisionPolicy;
793 }
794
798 void click() {
799 emit clickedButton(APointerIndex::button(AInput::LBUTTON));
800 emit clicked();
801 }
802
806 void pack();
807
813 void focus(bool needFocusChainUpdate = true);
814
820 virtual bool capturesFocus();
821
825 bool hasIndirectParent(const _<AView>& v);
826
830 [[nodiscard]] glm::ivec2 getPositionInWindow() const;
831
836 void addAssName(const AString& assName);
837
842 void removeAssName(const AString& assName);
843
855 inline AView& operator<<(const AString& assName) {
856 addAssName(assName);
857 return *this;
858 }
859
860 const _<AAssHelper>& getAssHelper() const {
861 return mAssHelper;
862 }
863
864 const ass::PropertyListRecursive& getCustomAss() const {
865 return mCustomStyleRule;
866 }
867
868 void setCustomStyle(ass::PropertyListRecursive rule);
869
870 void ensureAssUpdated();
871
872
873 [[nodiscard]]
874 _<AView> sharedPtr() {
875 return _cast<AView>(AObject::sharedPtr());
876 }
877
878 [[nodiscard]]
879 _weak<AView> weakPtr() {
880 return _weak<AView>(sharedPtr());
881 }
882
892 virtual bool onGesture(const glm::ivec2& origin, const AGestureEvent& event);
893
894 virtual void onMouseEnter();
895
904 virtual void onPointerMove(glm::vec2 pos, const APointerMoveEvent& event);
905 virtual void onMouseLeave();
906 virtual void onDpiChanged();
907
912 virtual void onPointerPressed(const APointerPressedEvent& event);
913
924 virtual void onPointerReleased(const APointerReleasedEvent& event);
925 virtual void onPointerDoubleClicked(const APointerPressedEvent& event);
926
935 virtual void onScroll(const AScrollEvent& event);
936 virtual void onKeyDown(AInput::Key key);
937 virtual void onKeyRepeat(AInput::Key key);
938 virtual void onKeyUp(AInput::Key key);
939 virtual void onFocusAcquired();
940 virtual void onFocusLost();
941 virtual void onCharEntered(char16_t c);
945 virtual bool handlesNonMouseNavigation();
946
947 virtual void forceUpdateLayoutRecursively();
948
949 virtual void setEnabled(bool enabled = true);
950
951 void setDisabled(bool disabled = true) {
952 setEnabled(!disabled);
953 }
954
955 void updateEnableState();
956
957 void enable()
958 {
959 setEnabled(true);
960 }
961 void disable()
962 {
963 setEnabled(false);
964 }
965
966
971 setCustomStyle(std::move(rule));
972 }
973
977 virtual void onClickPrevented();
978
979
994 virtual void invalidateAllStyles();
995
1008 invalidateStateStylesImpl(getMinimumSizePlusMargin());
1009 }
1010
1011
1015 virtual void invalidateAssHelper();
1016
1020 [[nodiscard]]
1021 virtual bool wantsTouchscreenKeyboard();
1022
1026 void setSkipUntilLayoutUpdate(bool skipUntilLayoutUpdate) {
1027 mSkipUntilLayoutUpdate = skipUntilLayoutUpdate;
1028 }
1029
1033 void setFloating(AFloat f) noexcept
1034 {
1035 mFloating = f;
1036 }
1037
1041 [[nodiscard]]
1042 AFloat getFloating() const noexcept
1043 {
1044 return mFloating;
1045 }
1046
1047signals:
1052
1053 emits<bool> hoveredState;
1054 emits<> mouseEnter;
1055 emits<> mouseLeave;
1056
1057 emits<bool, APointerIndex> pressedState;
1058 emits<APointerIndex> pressed;
1059 emits<APointerIndex> released;
1060
1061 emits<bool> enabledState;
1062 emits<> enabled;
1063 emits<> disabled;
1064
1069
1074
1079
1084
1089
1094
1099
1104
1109
1114
1119
1124
1125 emits<APointerIndex> doubleClicked;
1126
1127 emits<> customCssPropertyChanged;
1128
1134 emits<> focusAcquired;
1135 emits<> focusLost;
1136
1137 emits<_<AView>> childFocused;
1138
1139private:
1140 AFieldSignalEmitter<bool> mHovered = AFieldSignalEmitter<bool>(hoveredState, mouseEnter, mouseLeave);
1142 //AWatchable<bool> mFocused = AWatchable<bool>(pressedState, pressed, released);
1143 AFieldSignalEmitter<bool> mEnabled = AFieldSignalEmitter<bool>(enabledState, enabled, disabled, true);
1144 bool mDirectlyEnabled = true;
1145 bool mParentEnabled = true;
1146 AFieldSignalEmitter<bool> mHasFocus = AFieldSignalEmitter<bool>(focusState, focusAcquired, focusLost, false);
1147
1151 AFloat mFloating = AFloat::NONE;
1152
1153 struct RenderToTexture {
1154 _unique<IRenderViewToTexture> rendererInterface;
1156
1157 bool drawFromTexture = true;
1158
1162 bool skipRedrawUntilTextureIsPresented = false;
1163 };
1164 AOptional<RenderToTexture> mRenderToTexture;
1165
1169 virtual void invalidateStateStylesImpl(glm::ivec2 prevMinimumSizePlusField);
1170
1171 void notifyParentChildFocused(const _<AView>& view);
1172};
1173
1174API_AUI_VIEWS std::ostream& operator<<(std::ostream& os, const AView& view);
Definition: AAnimator.h:26
Remember, ASS is not a butt. ASS is Aui Style Sheets.
Definition: AAssHelper.h:32
@ DEFAULT
Default arrow.
Definition: ACursor.h:38
Definition: AFieldSignalEmitter.h:51
A base object class.
Definition: AObject.h:49
Utility wrapper implementing the stack-allocated (fast) optional idiom.
Definition: AOptional.h:32
Wrapper class that stores either mouse button index or finger index.
Definition: APointerIndex.h:21
AOptional< AInput::Key > button() const noexcept
Definition: APointerIndex.h:56
Vector-like container consisting of few elements on stack and switches to dynamic allocation vector i...
Definition: ASmallVector.h:34
Represents a Unicode character string.
Definition: AString.h:37
Definition: AStylesheet.h:21
A view that represents a set of views.
Definition: AViewContainerBase.h:68
A trivial modifiable view that represents a set of views.
Definition: AViewContainer.h:33
Base class of all UI objects.
Definition: AView.h:77
int getTotalFieldVertical() const
Definition: AView.h:545
emits< AInput::Key > keyReleased
Keyboard key released.
Definition: AView.h:1113
AOverflowMask getOverflowMask() const
Controls how does the overflow (stencil) mask is produced.
Definition: AView.h:424
const ABoxFields & getMargin()
Returns the margin.
Definition: AView.h:485
emits< glm::ivec2 > positionChanged
Position changed.
Definition: AView.h:1078
AVector< AString > mAssNames
ASS class names.
Definition: AView.h:249
void setExpanding(glm::ivec2 expanding)
Changes the expanding of view.
Definition: AView.h:651
AFloat getFloating() const noexcept
Floating value for AText.
Definition: AView.h:1042
glm::ivec2 getCenterPointInWindow() const noexcept
The center point position of the view relatively to top left corner of the window.
Definition: AView.h:361
int getTotalOccupiedWidth() const
Definition: AView.h:456
glm::ivec2 getMinSize() const noexcept
Definition: AView.h:378
glm::ivec2 getPosition() const noexcept
Top left corner's position relative to top left corner's position of the parent AView.
Definition: AView.h:347
void setFloating(AFloat f) noexcept
Set floating value for AText.
Definition: AView.h:1033
emits< glm::ivec2, glm::ivec2 > geometryChanged
Geometry (position and size) changed.
Definition: AView.h:1088
float getBorderRadius() const
border-radius, specified in ASS.
Definition: AView.h:436
glm::ivec2 getTotalFieldSize() const
Definition: AView.h:553
ass::PropertyListRecursive mCustomStyleRule
Custom ASS Rules.
Definition: AView.h:176
ABoxFields mMargin
Margin, which defines the spacing around this AView. Processed by the layout manager.
Definition: AView.h:237
glm::ivec2 getSize() const noexcept
Size, including content area, border and padding.
Definition: AView.h:370
emits< glm::ivec2 > scrolled
Scroll event.
Definition: AView.h:1103
int getTotalFieldHorizontal() const
Definition: AView.h:537
AViewContainerBase * getParent() const
Parent AView.
Definition: AView.h:561
void setExtraStylesheet(_< AStylesheet > extraStylesheet)
Definition: AView.h:391
void setSkipUntilLayoutUpdate(bool skipUntilLayoutUpdate)
Definition: AView.h:1026
emits< AInput::Key > keyPressed
Keyboard key pressed.
Definition: AView.h:1108
emits< Visibility > visibilityChanged
Visibility changed.
Definition: AView.h:1098
emits< APointerIndex > clickedButton
Some mouse button clicked.
Definition: AView.h:1068
emits clickedRightOrLongPressed
Right mouse button clicked or long press gesture applied.
Definition: AView.h:1123
AOverflow getOverflow() const
Determines whether display graphics that go out of the bounds of this AView or not.
Definition: AView.h:412
ABoxFields mPadding
Padding, which defines the spacing around content area inside the view. Processed by AView implementa...
Definition: AView.h:242
const ABoxFields & getPadding()
Returns the padding.
Definition: AView.h:513
void setMargin(const ABoxFields &margin)
Sets the margin.
Definition: AView.h:495
emits< bool > focusState
Focus state changed.
Definition: AView.h:1133
emits viewGraphSubtreeChanged
Definition: AView.h:1051
const AOptional< ACursor > & getCursor() const
Determines shape which should pointer take when it's above this AView.
Definition: AView.h:569
const _< AStylesheet > & extraStylesheet() const noexcept
Definition: AView.h:405
glm::ivec2 getMinimumSizePlusMargin()
Definition: AView.h:476
void click()
Definition: AView.h:798
void invalidateStateStyles()
Updates state selectors for ASS.
Definition: AView.h:1007
const glm::ivec2 & getMaxSize() const
Definition: AView.h:625
int getTotalOccupiedHeight() const
Definition: AView.h:464
emits clickedRight
Right mouse button clicked.
Definition: AView.h:1118
void setSizeForced(glm::ivec2 size)
Definition: AView.h:710
void operator+(ass::PropertyListRecursive rule)
Helper function for kAUI.h:with_style.
Definition: AView.h:970
emits< glm::ivec2 > sizeChanged
Size changed.
Definition: AView.h:1083
glm::ivec2 getContentMinimumSize() noexcept
Definition: AView.h:592
const glm::ivec2 & getFixedSize()
Fixed size.
Definition: AView.h:731
void setExpanding(int expanding)
Changes the expanding of view.
Definition: AView.h:667
emits< glm::ivec2 > expandingChanged
Expanding changed.
Definition: AView.h:1093
emits clicked
Left mouse button clicked.
Definition: AView.h:1073
void setPadding(const ABoxFields &padding)
Sets the padding.
Definition: AView.h:523
Definition: AWindowBase.h:33
Represents a window in the underlying windowing system.
Definition: AWindow.h:45
Rendering view to texture storage interface.
Definition: IRenderViewToTexture.h:26
An std::weak_ptr with AUI extensions.
Definition: SharedPtrTypes.h:177
#define emit
emits the specified signal in context of this object.
Definition: AObject.h:196
#define AUI_ASSERTX(condition, what)
Asserts that the passed condition evaluates to true. Adds extra message string.
Definition: Assert.h:74
AOverflow
Controls visibility of the overflowed contents of AView with AView::drawStencilMask.
Definition: AOverflow.h:25
@ VISIBLE
Overflowed contents are visible.
Represents a rectangle fields. Useful for margin and padding around AViews.
Definition: ABoxFields.h:21
Pointing method move event.
Definition: APointerMoveEvent.h:21
Pointing method press event.
Definition: APointerPressedEvent.h:21
Pointing method press event.
Definition: APointerReleasedEvent.h:19
Axis aligned 2D rectangle.
Definition: ARect.h:24
Render context passed to AView::render.
Definition: ARenderContext.h:43
Pointing method scroll event.
Definition: AScrollEvent.h:20
Defines areas to invalidate (redraw).
Definition: IRenderViewToTexture.h:32
Definition: Size.h:22
Definition: Visible.h:20
An std::weak_ptr with AUI extensions.
Definition: SharedPtrTypes.h:51
Definition: PropertyListRecursive.h:24
Definition: PropertyList.h:25
Base class for all properties.
Definition: IPropertyBase.h:49
Clamps the possible values for a number to the specified range: [min;max].
Definition: values.h:452