AUI Framework
master
Cross-platform module-based framework for developing C++20 desktop applications
|
Base class of all UI objects. More...
Base class of all UI objects.
A class that describes the minimum unit that can be placed in a container (including a window) that takes up some space on the screen, responds to changes in size, position, moving the cursor, pressing / releasing keys and buttons, mouse wheel, etc...
Analogue to Qt's QWidget, Android's View.
Public Member Functions | |
void | redraw () |
Request window manager to redraw this AView. | |
AWindowBase * | getWindow () const |
Determines window which this AView belongs to. More... | |
virtual void | drawStencilMask (ARenderContext ctx) |
virtual void | render (ARenderContext ctx) |
Draws this AView. Noone should call this function except rendering routine. More... | |
virtual void | postRender (ARenderContext ctx) |
Performs post-draw routines of this AView. Noone should call this function except rendering routine. More... | |
void | popStencilIfNeeded (ARenderContext ctx) |
const AVector< AString > & | getAssNames () const noexcept |
glm::ivec2 | getPosition () const noexcept |
Top left corner's position relative to top left corner's position of the parent AView. | |
glm::ivec2 | getCenterPointInWindow () const noexcept |
The center point position of the view relatively to top left corner of the window. More... | |
glm::ivec2 | getSize () const noexcept |
Size, including content area, border and padding. | |
glm::ivec2 | getMinSize () const noexcept |
void | setMinSize (glm::ivec2 minSize) noexcept |
virtual void | markMinContentSizeInvalid () |
void | setExtraStylesheet (_< AStylesheet > extraStylesheet) |
void | setExtraStylesheet (AStylesheet &&extraStylesheet) |
const _< AStylesheet > & | extraStylesheet () const noexcept |
AOverflow | getOverflow () const |
Determines whether display graphics that go out of the bounds of this AView or not. | |
void | setOverflow (AOverflow overflow) |
AOverflowMask | getOverflowMask () const |
Controls how does the overflow (stencil) mask is produced. | |
void | setOverflowMask (AOverflowMask overflow) |
float | getBorderRadius () const |
border-radius, specified in ASS. | |
void | setBorderRadius (float radius) |
int | getWidth () const |
int | getHeight () const |
int | getTotalOccupiedWidth () const |
int | getTotalOccupiedHeight () const |
glm::ivec2 | getMinimumSizePlusMargin () |
const ABoxFields & | getMargin () |
Returns the margin. More... | |
void | setMargin (const ABoxFields &margin) |
Sets the margin. More... | |
virtual bool | consumesClick (const glm::ivec2 &pos) |
Determines whether this AView processes this click or passes it thru. More... | |
const ABoxFields & | getPadding () |
Returns the padding. More... | |
void | setPadding (const ABoxFields &padding) |
Sets the padding. More... | |
virtual AString | debugString () const |
String which helps to identify this object in debug string output (i.e., for logging) | |
int | getTotalFieldHorizontal () const |
int | getTotalFieldVertical () const |
glm::ivec2 | getTotalFieldSize () const |
AViewContainerBase * | getParent () const |
Parent AView. | |
const AOptional< ACursor > & | getCursor () const |
Determines shape which should pointer take when it's above this AView. | |
void | setCursor (AOptional< ACursor > cursor) |
virtual int | getContentMinimumWidth () |
virtual int | getContentMinimumHeight () |
glm::ivec2 | getContentMinimumSize () noexcept |
bool | isContentMinimumSizeInvalidated () noexcept |
bool | hasFocus () const |
virtual int | getMinimumWidth () |
virtual int | getMinimumHeight () |
glm::ivec2 | getMinimumSize () |
void | setMaxSize (const glm::ivec2 &maxSize) |
const glm::ivec2 & | getMaxSize () const |
int | getContentWidth () const |
int | getContentHeight () const |
const glm::ivec2 & | getExpanding () const |
void | setExpanding (glm::ivec2 expanding) |
Changes the expanding of view. More... | |
void | setExpanding (int expanding) |
Changes the expanding of view. More... | |
void | setExpanding () |
const _< AAnimator > & | getAnimator () const |
void | setAnimator (const _< AAnimator > &animator) |
void | getTransform (glm::mat4 &transform) const |
int | getExpandingHorizontal () const |
int | getExpandingVertical () const |
aui::float_within_0_1 | getOpacity () const |
void | setOpacity (aui::float_within_0_1 opacity) |
virtual void | setPosition (glm::ivec2 position) |
void | setSizeForced (glm::ivec2 size) |
virtual void | setSize (glm::ivec2 size) |
virtual void | setGeometry (int x, int y, int width, int height) |
void | setGeometry (const glm::ivec2 &position, const glm::ivec2 &size) |
bool | isBlockClicksWhenPressed () const noexcept |
void | setBlockClicksWhenPressed (bool value) noexcept |
const glm::ivec2 & | getFixedSize () |
Fixed size. More... | |
void | setFixedSize (glm::ivec2 size) |
bool | isMouseHover () const noexcept |
bool | isPressed () const noexcept |
bool | isPressed (APointerIndex index) const noexcept |
bool | isEnabled () const noexcept |
bool | isFocused () const |
bool | isMouseEntered () const |
Visibility | getVisibility () const |
Visibility | getVisibilityRecursive () const |
void | setVisibility (Visibility visibility) noexcept |
void | setVisible (bool visible) noexcept |
MouseCollisionPolicy | getMouseCollisionPolicy () const |
void | setMouseCollisionPolicy (MouseCollisionPolicy mouseCollisionPolicy) |
void | click () |
void | pack () |
Sets minimal size. | |
void | focus (bool needFocusChainUpdate=true) |
Requests focus for this AView. More... | |
virtual bool | capturesFocus () |
bool | hasIndirectParent (const _< AView > &v) |
Checks if the specified view is an indirect parent of this view. | |
glm::ivec2 | getPositionInWindow () const |
void | addAssName (const AString &assName) |
Adds an ASS class to this AView. More... | |
void | removeAssName (const AString &assName) |
Removes an ASS class to this AView. More... | |
AView & | operator<< (const AString &assName) |
const _< AAssHelper > & | getAssHelper () const |
const ass::PropertyListRecursive & | getCustomAss () const |
void | setCustomStyle (ass::PropertyListRecursive rule) |
void | ensureAssUpdated () |
_< AView > | sharedPtr () |
_weak< AView > | weakPtr () |
virtual bool | onGesture (const glm::ivec2 &origin, const AGestureEvent &event) |
virtual void | onMouseEnter () |
virtual void | onPointerMove (glm::vec2 pos, const APointerMoveEvent &event) |
Handles pointer hover events. More... | |
virtual void | onMouseLeave () |
virtual void | onDpiChanged () |
virtual void | onPointerPressed (const APointerPressedEvent &event) |
Called on pointer (mouse) released event. More... | |
virtual void | onPointerReleased (const APointerReleasedEvent &event) |
Called on pointer (mouse) released event. More... | |
virtual void | onPointerDoubleClicked (const APointerPressedEvent &event) |
virtual void | onScroll (const AScrollEvent &event) |
virtual void | onKeyDown (AInput::Key key) |
virtual void | onKeyRepeat (AInput::Key key) |
virtual void | onKeyUp (AInput::Key key) |
virtual void | onFocusAcquired () |
virtual void | onFocusLost () |
virtual void | onCharEntered (char16_t c) |
virtual bool | handlesNonMouseNavigation () |
virtual void | forceUpdateLayoutRecursively () |
virtual void | setEnabled (bool enabled=true) |
void | setDisabled (bool disabled=true) |
void | updateEnableState () |
void | enable () |
void | disable () |
void | operator+ (ass::PropertyListRecursive rule) |
Helper function for kAUI.h:with_style. | |
virtual void | onClickPrevented () |
Called on AWindowBase::preventClickOnPointerRelease. More... | |
virtual void | invalidateAllStyles () |
Invalidates all styles, causing to iterate over all rules in global and parent stylesheets. More... | |
void | invalidateStateStyles () |
Updates state selectors for ASS. More... | |
virtual void | invalidateAssHelper () |
Resets mAssHelper. More... | |
virtual bool | wantsTouchscreenKeyboard () |
Returns true if view is textfield-like view which requires touchscreen keyboard when clicked. | |
void | setSkipUntilLayoutUpdate (bool skipUntilLayoutUpdate) |
void | setFloating (AFloat f) noexcept |
Set floating value for AText. | |
AFloat | getFloating () const noexcept |
Floating value for AText. | |
Public Member Functions inherited from AObject | |
_< AObject > | sharedPtr () |
_weak< AObject > | weakPtr () |
void | clearSignals () noexcept |
template<AAnySignal Signal, ACompatibleSlotFor< Signal > Function> | |
void | connect (Signal &signal, Function &&function) |
void | setSignalsEnabled (bool enabled) |
bool | isSignalsEnabled () const noexcept |
template<ASignalInvokable T> | |
void | operator^ (T &&t) |
_< AAbstractThread > | getThread () const |
bool | isSlotsCallsOnlyOnMyThread () const noexcept |
void | setSlotsCallsOnlyOnMyThread (bool slotsCallsOnlyOnMyThread) |
Public Member Functions inherited from aui::noncopyable | |
noncopyable (const noncopyable &)=delete | |
noncopyable & | operator= (const noncopyable &)=delete |
Signals and public fields | |
emits | viewGraphSubtreeChanged |
emits< bool > | hoveredState |
emits | mouseEnter |
emits | mouseLeave |
emits< bool, APointerIndex > | pressedState |
emits< APointerIndex > | pressed |
emits< APointerIndex > | released |
emits< bool > | enabledState |
emits | enabled |
emits | disabled |
emits< APointerIndex > | clickedButton |
Some mouse button clicked. | |
emits | clicked |
Left mouse button clicked. | |
emits< glm::ivec2 > | positionChanged |
Position changed. | |
emits< glm::ivec2 > | sizeChanged |
Size changed. | |
emits< glm::ivec2, glm::ivec2 > | geometryChanged |
Geometry (position and size) changed. | |
emits< glm::ivec2 > | expandingChanged |
Expanding changed. | |
emits< Visibility > | visibilityChanged |
Visibility changed. | |
emits< glm::ivec2 > | scrolled |
Scroll event. | |
emits< AInput::Key > | keyPressed |
Keyboard key pressed. | |
emits< AInput::Key > | keyReleased |
Keyboard key released. | |
emits | clickedRight |
Right mouse button clicked. | |
emits | clickedRightOrLongPressed |
Right mouse button clicked or long press gesture applied. | |
emits< APointerIndex > | doubleClicked |
emits | customCssPropertyChanged |
emits< bool > | focusState |
Focus state changed. More... | |
emits | focusAcquired |
emits | focusLost |
emits< _< AView > > | childFocused |
Protected Member Functions | |
bool | transformGestureEventsToDesktop (const glm::ivec2 &origin, const AGestureEvent &event) |
Converts touch screen events to desktop. More... | |
void | applyAssRule (const ass::PropertyList &propertyList) |
void | applyAssRule (const ass::PropertyListRecursive &propertyList) |
virtual AMenuModel | composeContextMenu () |
Produce context (right click) menu. More... | |
virtual void | onViewGraphSubtreeChanged () |
Called when direct or indirect parent has changed. More... | |
virtual void | markPixelDataInvalid (ARect< int > invalidArea) |
A view requests to redraw it and passes it's coords relative to this. More... | |
virtual void | commitStyle () |
Protected Member Functions inherited from AObject | |
void | setThread (_< AAbstractThread > thread) |
Set thread of the object. | |
Protected Attributes | |
AViewContainerBase * | mParent = nullptr |
Parent AView. | |
std::array< ass::prop::IPropertyBase *, int(ass::prop::PropertySlot::COUNT)> | mAss |
Drawing list, or baking drawing commands so that you don't have to parse the ASS every time. | |
ass::PropertyListRecursive | mCustomStyleRule |
Custom ASS Rules. | |
AOptional< ACursor > | mCursor = ACursor::DEFAULT |
Determines shape which should pointer take when it's above this AView. | |
glm::ivec2 | mPosition = { 0, 0 } |
Top left corner's position relative to top left corner's position of the parent AView. | |
glm::ivec2 | mSize = { 20, 20 } |
Size, including content area, border and padding. | |
glm::ivec2 | mExpanding = {0, 0} |
Expansion coefficient. Hints layout manager how much this AView should be extended relative to other AViews in the same container. More... | |
AOptional< glm::ivec2 > | mCachedMinContentSize |
bool | mMarkedMinContentSizeInvalid = false |
bool | mRedrawRequested = false |
Redraw requested flag for this particular view/. More... | |
glm::ivec2 | mMinSize = {0, 0} |
Minimal size. | |
glm::ivec2 | mMaxSize = {0x7fffffff, 0x7fffffff} |
Maximal size. | |
glm::ivec2 | mFixedSize = {0, 0} |
Fixed size. | |
ABoxFields | mMargin |
Margin, which defines the spacing around this AView. Processed by the layout manager. | |
ABoxFields | mPadding |
Padding, which defines the spacing around content area inside the view. Processed by AView implementation. | |
AVector< AString > | mAssNames |
ASS class names. More... | |
bool | mSkipUntilLayoutUpdate = true |
If set to true, AViewContainer is obligated ignore this view. This value is set to false by AView::setGeometry. More... | |
Friends | |
class | AViewContainerBase |
class | AViewContainer |
class | IRenderViewToTexture |
Additional Inherited Members | |
Static Public Member Functions inherited from AObject | |
static void | disconnect () |
template<AAnySignal Signal, aui::derived_from< AObject > Object, ACompatibleSlotFor< Signal > Function> | |
static void | connect (Signal &signal, Object *object, Function &&function) |
template<AAnySignal Signal, aui::derived_from< AObject > Object, ACompatibleSlotFor< Signal > Function> | |
static void | connect (Signal &signal, Object &object, Function &&function) |
template<AAnySignal Signal, aui::derived_from< AObject > Object, ACompatibleSlotFor< Signal > Function> | |
static void | connect (Signal &signal, _< Object > object, Function &&function) |
static void | moveToThread (aui::no_escape< AObject > object, _< AAbstractThread > thread) |
void AView::addAssName | ( | const AString & | assName | ) |
Adds an ASS class to this AView.
assName | new ASS name |
|
virtual |
For containers, capturing focus is redundant.
Reimplemented in ASlider, and AViewContainerBase.
|
inline |
Simulates click on the view. Useful then you want to call clicked() slots of this view.
|
protectedvirtual |
Produce context (right click) menu.
|
virtual |
Determines whether this AView processes this click or passes it thru.
pos | mouse position |
Used in AViewContainer::getViewAt method subset, thus affecting click event handling.
Reimplemented in AWindow, A2FingerTransformArea, AAbstractLabel, AButton, ACheckBox, ADividerView, AGridSplitter, ASpacerExpanding, ASpacerFixed, and AViewContainerBase.
|
inlinenoexcept |
void AView::focus | ( | bool | needFocusChainUpdate = true | ) |
Requests focus for this AView.
needFocusChainUpdate | if true, focus chain for new focused view will be updated |
|
inlinenoexcept |
The center point position of the view relatively to top left corner of the window.
Useful in UI tests:
|
virtual |
Reimplemented in AAbstractLabel, AScrollArea, ASpacerFixed, ATextBase< WordWrappingEngine >, ATextBase< AWordWrappingEngine<> >, ATreeView::ContainerView, ATreeView, and AViewContainerBase.
|
inlinenoexcept |
|
virtual |
Reimplemented in AAbstractLabel, ADropdownList, APageSwitch, AScrollArea, ASpacerFixed, ATextBase< WordWrappingEngine >, ATextBase< AWordWrappingEngine<> >, ATreeView::ContainerView, and AViewContainerBase.
|
inline |
Fixed size.
|
inline |
Returns the margin.
|
inline |
|
inline |
This value is bare minimum space required for this view. It includes minimal content size + padding + margin which is exact space the view requires.
|
inlinenoexcept |
|
inline |
Returns the padding.
glm::ivec2 AView::getPositionInWindow | ( | ) | const |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
AWindowBase * AView::getWindow | ( | ) | const |
|
virtual |
|
virtual |
Invalidates all styles, causing to iterate over all rules in global and parent stylesheets.
Unlike invalidateStateStyles(), completely resets styles for this view, causing it to iterate over all rules in global and parent stylesheets. This operation is much more expensive than invalidateStateStyles because invalidateStateStyles iterates over a small set of rules and performs fewer checks.
Prefer invalidateAllStyles over invalidateStateStyles when:
Reimplemented in AAbstractLabel, ATextBase< WordWrappingEngine >, ATextBase< AWordWrappingEngine<> >, and AViewContainerBase.
|
virtual |
Resets mAssHelper.
Reimplemented in AViewContainerBase.
|
inline |
Updates state selectors for ASS.
Unlike invalidateAllStyles, iterates on an already calculated small set of rules which is much more cheap that invalidateAllStyles.
Prefer invalidateStateStyles over invalidateAllStyles when:
|
protectedvirtual |
A view requests to redraw it and passes it's coords relative to this.
invalidArea | area to invalidate. Must be in this view's coordinate space. |
Reimplemented in AWindowBase, and AViewContainerBase.
|
virtual |
Called on AWindowBase::preventClickOnPointerRelease.
Reimplemented in ASplitter, and AViewContainerBase.
|
virtual |
Handles touch screen gesture event.
origin | position where the event(s) started to occur from. |
event | gesture event. |
AView::onGesture
emulates desktop events such as right click and scroll. Reimplemented in AWindowBase, AScrollArea, and AViewContainerBase.
|
virtual |
Handles pointer hover events.
pos | event position |
Reimplemented in AWindow, AWindowBase, A2FingerTransformArea, ADragNDropView, AGridSplitter, ARulerArea, AScrollbarHandle, ASlider, ASplitter, ATreeView::ItemView, and AViewContainerBase.
|
virtual |
Called on pointer (mouse) released event.
event | event |
Reimplemented in ACustomWindow, AWindowBase, A2FingerTransformArea, ADragArea::ADraggableHandle, AGridSplitter, AListItem, AScrollArea, AScrollbarHandle, AScrollbar, ASlider, ASplitter, ATreeView::ItemView, and AViewContainerBase.
|
virtual |
Called on pointer (mouse) released event.
event | event |
Reimplemented in ACustomWindow, AWindowBase, A2FingerTransformArea, ADragArea::ADraggableHandle, ADropdownList, AGridSplitter, ARadioButton, AScrollArea, AScrollbarHandle, ASlider, ASplitter, and AViewContainerBase.
|
virtual |
Handles mouse wheel events.
pos | mouse cursor position. |
delta | the distance mouse wheel scrolled. |
By default, 120 is single mouse wheel click. 120 = mouse scroll down, -120 = mouse scroll up.
Reimplemented in AWindowBase, AScrollArea, AScrollbar, ATreeView, and AViewContainerBase.
|
protectedvirtual |
Called when direct or indirect parent has changed.
The method is mostly intended to invalidate styles in order to respond to stylesheet rules (mExtraStylesheet) of the new (in)direct parent.
Emits viewGraphSubtreeChanged signal.
Reimplemented in AViewContainerBase.
|
virtual |
Performs post-draw routines of this AView. Noone should call this function except rendering routine.
void AView::removeAssName | ( | const AString & | assName | ) |
Removes an ASS class to this AView.
assName | ASS name to remove |
|
virtual |
Draws this AView. Noone should call this function except rendering routine.
AView::render is not guaranteed to be called on per-frame basis. Moreover, this method can be called multiple times if render-to-texture caching decides to do so.
Reimplemented in AWindowBase, AAbstractLabel, ACircleProgressBar, ADrawableView, ADropdownList, AProgressBar, ATextBase< WordWrappingEngine >, ATextBase< AWordWrappingEngine<> >, AViewContainerBase, ARulerArea, ARulerView, and ASpinner.
|
inline |
Changes the expanding of view.
|
inline |
Changes the expanding of view.
|
inline |
void AView::setExtraStylesheet | ( | AStylesheet && | extraStylesheet | ) |
|
inline |
Sets the margin.
margin | margin |
|
inline |
Sets the padding.
padding | padding |
|
inline |
Set size ignoring all restrictions (i.e. min size, max size, fixed size, etc...). Used by AAnimator.
size |
|
inline |
|
protected |
Converts touch screen events to desktop.
origin | position where the event(s) started to occur from. |
event | gesture event. |
emits<bool> AView::focusState |
Focus state changed.
first | whether focused or not. |
|
protected |
Expansion coefficient. Hints layout manager how much this AView should be extended relative to other AViews in the same container.
It does affect expanding environment inside the container. See expanding layout managers for more info.
It does not affect parent's size or parent's expanding property. Use AView::setExpanding() on parent, or ::Expanding variant of declarative container notation (Vertical::Expanding, Horizontal::Expanding, Stacked::Expanding) for such case.
|
protected |
Redraw requested flag for this particular view/.
This flag is set in redraw() method and reset in AView::render(ARenderContext context). redraw() method does not actually requests redraw of window if mRedrawRequested. This approach ignores sequential redraw() calls if the view is not even drawn.
|
protected |
If set to true, AViewContainer is obligated ignore this view. This value is set to false by AView::setGeometry.
This flag addresses the issue when some container is filled with views by addView during several frames, causing to draw them in wrong place (then their layout is not processed yet).
emits AView::viewGraphSubtreeChanged |
#include <AUI/View/AView.h>