AUI Framework  develop
Cross-platform base for C++ UI apps
Loading...
Searching...
No Matches
A2FingerTransformArea Class Reference

Handles and processes the multitouch scale, transform and rotation events based on two-finger gestures. More...

#include <AUI/View/A2FingerTransformArea.h>

Detailed Description

Represents a translucent area that handles and processes multi-finger transformation gestures (i.e. pinch-to-zoom, move, rotate). A2FingerTransformArea is a container, so the transformed view should be somewhere inside. A2FingerTransformArea does not apply any transformation though, so you can control transformation behaviour.

The transformation data is emitted on delta basis via transform signal. This allows to easily incorporate A2FingerTransformArea to transforming routines, including limit handling.

Consider the following example, where the transformation is applied through ASS styles:

_<AView> multitouchDemo() {
  return _new<A2FingerTransformArea>() AUI_LET {
      it->setCustomStyle({
        MinSize { 256_dp },
        Border { 1_px, AColor::BLACK },
      });
      _<AView> blackRect = Stacked { _new<ALabel>("A2FingerTransformArea") AUI_WITH_STYLE {
        FixedSize{200_dp, 100_dp},
        BackgroundSolid{AColor::BLACK},
        TextColor{AColor::WHITE},
        ATextAlign::CENTER,
      }};
      ALayoutInflater::inflate(it, Stacked { blackRect });
      connect(it->transformed, blackRect, [blackRect = blackRect.get(),
                                           keptTransform = _new<A2DTransform>()](const A2DTransform& transform) {
          keptTransform->applyDelta(transform);
          blackRect->setCustomStyle({
              TransformOffset{AMetric(keptTransform->offset.x, AMetric::T_PX),
                              AMetric(keptTransform->offset.y, AMetric::T_PX)},
              TransformScale{keptTransform->scale},
              TransformRotate{keptTransform->rotation},
          });
      });
  };
}
static void inflate(aui::no_escape< AViewContainer > root, const _< AView > &view)
Wraps view with root using Stacked layout and expanding.
An std::weak_ptr with AUI extensions.
Definition SharedPtrTypes.h:215
static decltype(auto) connect(const Signal &signal, Object *object, Function &&function)
Connects signal to the slot of the specified object.
Definition AObject.h:82
#define AUI_WITH_STYLE
Allows to define a style to the view right in place.
Definition kAUI.h:287
#define AUI_LET
Performs multiple operations on a single object without repeating its name (in place) This function c...
Definition kAUI.h:262

This example renders to the following result:

Member Function Documentation

> All members, including inherited

◆ consumesClick()

bool A2FingerTransformArea::consumesClick ( const glm::ivec2 & pos)
overridevirtual
Parameters
posmouse position
Returns
true if AView processes this click

Used in AViewContainer::getViewAt method subset, thus affecting click event handling.

Reimplemented from AView.

◆ onPointerMove()

void A2FingerTransformArea::onPointerMove ( glm::vec2 pos,
const APointerMoveEvent & event )
overridevirtual
Parameters
posevent position
eventevent description
Note
If the view is pressed, it would still received move events. Use AView::isMouseHover to check is the pointer actually over view or not. See AView::onPointerReleased for more info.

Reimplemented from AView.

◆ onPointerPressed()

void A2FingerTransformArea::onPointerPressed ( const APointerPressedEvent & event)
overridevirtual
Parameters
eventevent

Reimplemented from AView.

◆ onPointerReleased()

void A2FingerTransformArea::onPointerReleased ( const APointerReleasedEvent & event)
overridevirtual
Parameters
eventevent
Note
To handle clicks, you should use AView::clicked signal instead. View still receives pointer move and released events even if cursor goes outside the view boundaries, or other exclusive event appeared (i.e. scrollarea scroll). AView::clicked emitted only if release event occurred inside view and no other event has prevented click gesture. See APointerReleasedEvent::triggerClick.

Reimplemented from AView.