本文整理汇总了C++中FPointerEvent::GetScreenSpacePosition方法的典型用法代码示例。如果您正苦于以下问题:C++ FPointerEvent::GetScreenSpacePosition方法的具体用法?C++ FPointerEvent::GetScreenSpacePosition怎么用?C++ FPointerEvent::GetScreenSpacePosition使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FPointerEvent
的用法示例。
在下文中一共展示了FPointerEvent::GetScreenSpacePosition方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnMouseMove
FReply FScrollyZoomy::OnMouseMove( const TSharedRef<SWidget> MyWidget, IScrollableZoomable& ScrollableZoomable, const FGeometry& MyGeometry, const FPointerEvent& MouseEvent )
{
if (MouseEvent.IsMouseButtonDown(EKeys::RightMouseButton))
{
// If scrolling with the right mouse button, we need to remember how much we scrolled.
// If we did not scroll at all, we will bring up the context menu when the mouse is released.
AmountScrolledWhileRightMouseDown += FMath::Abs( MouseEvent.GetCursorDelta().X ) + FMath::Abs( MouseEvent.GetCursorDelta().Y );
// Has the mouse moved far enough with the right mouse button held down to start capturing
// the mouse and dragging the view?
if (IsRightClickScrolling())
{
this->HorizontalIntertia.AddScrollSample( MouseEvent.GetCursorDelta().X, FPlatformTime::Seconds() );
this->VerticalIntertia.AddScrollSample( MouseEvent.GetCursorDelta().Y, FPlatformTime::Seconds() );
const bool DidScroll = ScrollableZoomable.ScrollBy( MouseEvent.GetCursorDelta() );
FReply Reply = FReply::Handled();
// Capture the mouse if we need to
if (MyWidget->HasMouseCapture() == false)
{
Reply.CaptureMouse( MyWidget ).UseHighPrecisionMouseMovement( MyWidget );
SoftwareCursorPosition = MyGeometry.AbsoluteToLocal( MouseEvent.GetScreenSpacePosition() );
bShowSoftwareCursor = true;
}
// Check if the mouse has moved.
if (DidScroll)
{
SoftwareCursorPosition += MouseEvent.GetCursorDelta();
}
return Reply;
}
}
return FReply::Unhandled();
}
示例2: OnMouseButtonUp
FReply SSection::OnMouseButtonUp( const FGeometry& MyGeometry, const FPointerEvent& MouseEvent )
{
if( bDragging && DragOperation.IsValid() )
{
// If dragging tell the operation we are no longer dragging
DragOperation->OnEndDrag(ParentSectionArea);
}
else
{
if( ( MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton || MouseEvent.GetEffectingButton() == EKeys::RightMouseButton ) && HasMouseCapture() && MyGeometry.IsUnderLocation( MouseEvent.GetScreenSpacePosition() ) )
{
HandleSelection( MyGeometry, MouseEvent );
}
if( MouseEvent.GetEffectingButton() == EKeys::RightMouseButton && HasMouseCapture() )
{
TSharedPtr<SWidget> MenuContent = OnSummonContextMenu( MyGeometry, MouseEvent );
if (MenuContent.IsValid())
{
FWidgetPath WidgetPath = MouseEvent.GetEventPath() != nullptr ? *MouseEvent.GetEventPath() : FWidgetPath();
FSlateApplication::Get().PushMenu(
AsShared(),
WidgetPath,
MenuContent.ToSharedRef(),
MouseEvent.GetScreenSpacePosition(),
FPopupTransitionEffect( FPopupTransitionEffect::ContextMenu )
);
return FReply::Handled().ReleaseMouseCapture().SetUserFocus(MenuContent.ToSharedRef(), EFocusCause::SetDirectly);
}
}
}
ResetState();
return FReply::Handled().ReleaseMouseCapture();
}
示例3: MenuBuilder
TSharedPtr<SWidget> STrack::SummonContextMenu(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
{
bool SummonedContextMenu = false;
const bool bCloseWindowAfterMenuSelection = true;
FMenuBuilder MenuBuilder( bCloseWindowAfterMenuSelection, EditorActions );
FVector2D CursorPos = MouseEvent.GetScreenSpacePosition();
float DataPos = LocalToDataX( MyGeometry.AbsoluteToLocal(CursorPos).X, MyGeometry );
// Context menu for a node
int NotifyIndex = GetHitNode(MyGeometry, MyGeometry.AbsoluteToLocal(CursorPos));
if(NotifyIndex != INDEX_NONE)
{
if(TrackNodes[NotifyIndex]->OnNodeRightClickContextMenu.IsBound())
{
TrackNodes[NotifyIndex]->OnNodeRightClickContextMenu.Execute(MenuBuilder);
SummonedContextMenu = true;
}
}
// Context menu for track itself
if(OnTrackRightClickContextMenu.IsBound())
{
SummonedContextMenu = true;
OnTrackRightClickContextMenu.Execute(MenuBuilder, DataPos, DraggableBarIndex);
}
// Build the menu if we actually added anything to it
TSharedPtr<SWindow> ContextMenuWindow = NULL;
if(SummonedContextMenu)
{
ContextMenuWindow =
FSlateApplication::Get().PushMenu( SharedThis( this ), MenuBuilder.MakeWidget(), CursorPos, FPopupTransitionEffect( FPopupTransitionEffect::ContextMenu ));
}
return ContextMenuWindow;
}
示例4: OnTouchMoved
FReply FSceneViewport::OnTouchMoved( const FGeometry& MyGeometry, const FPointerEvent& TouchEvent )
{
// Start a new reply state
CurrentReplyState = FReply::Handled();
UpdateCachedMousePos(MyGeometry, TouchEvent);
UpdateCachedGeometry(MyGeometry);
if( ViewportClient )
{
// Switch to the viewport clients world before processing input
FScopedConditionalWorldSwitcher WorldSwitcher( ViewportClient );
const FVector2D TouchPosition = MyGeometry.AbsoluteToLocal(TouchEvent.GetScreenSpacePosition());
if( !ViewportClient->InputTouch( this, TouchEvent.GetUserIndex(), TouchEvent.GetPointerIndex(), ETouchType::Moved, TouchPosition, FDateTime::Now(), TouchEvent.GetTouchpadIndex()) )
{
CurrentReplyState = FReply::Unhandled();
}
}
return CurrentReplyState;
}
示例5: MenuBuilder
TSharedPtr<SWidget> SSection::OnSummonContextMenu( const FGeometry& MyGeometry, const FPointerEvent& MouseEvent )
{
FSelectedKey Key = GetKeyUnderMouse( MouseEvent.GetScreenSpacePosition(), MyGeometry );
FSequencer& Sequencer = GetSequencer();
UMovieSceneSection* SceneSection = SectionInterface->GetSectionObject();
// @todo sequencer replace with UI Commands instead of faking it
const bool bShouldCloseWindowAfterMenuSelection = true;
FMenuBuilder MenuBuilder(bShouldCloseWindowAfterMenuSelection, NULL);
if (Key.IsValid())
{
MenuBuilder.AddMenuEntry(
NSLOCTEXT("Sequencer", "DeleteKey", "Delete"),
NSLOCTEXT("Sequencer", "DeleteKeyToolTip", "Deletes the selected keys."),
FSlateIcon(),
FUIAction(FExecuteAction::CreateSP(&Sequencer, &FSequencer::DeleteSelectedKeys))
);
}
else
{
SectionInterface->BuildSectionContextMenu(MenuBuilder);
// @todo Sequencer this should delete all selected sections
// delete/selection needs to be rethought in general
MenuBuilder.AddMenuEntry(
NSLOCTEXT("Sequencer", "DeleteSection", "Delete"),
NSLOCTEXT("Sequencer", "DeleteSectionToolTip", "Deletes this section."),
FSlateIcon(),
FUIAction(FExecuteAction::CreateSP(&Sequencer, &FSequencer::DeleteSection, SceneSection))
);
}
return MenuBuilder.MakeWidget();
}
示例6: OnMouseButtonDown
FReply SProfilerThreadView::OnMouseButtonDown( const FGeometry& MyGeometry, const FPointerEvent& MouseEvent )
{
FReply Reply = FReply::Unhandled();
if( IsReady() )
{
MousePositionOnButtonDown = MyGeometry.AbsoluteToLocal( MouseEvent.GetScreenSpacePosition() );
if( MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton )
{
bIsLeftMousePressed = true;
DistanceDragged = PositionXMS;
// Capture mouse, so we can move outside this widget.
Reply = FReply::Handled().CaptureMouse( SharedThis( this ) );
}
else if( MouseEvent.GetEffectingButton() == EKeys::RightMouseButton )
{
bIsRightMousePressed = true;
}
}
return Reply;
}
示例7: OnRightMouseButtonUp
void STableViewBase::OnRightMouseButtonUp(const FPointerEvent& MouseEvent)
{
const FVector2D& SummonLocation = MouseEvent.GetScreenSpacePosition();
const bool bShouldOpenContextMenu = !IsRightClickScrolling();
const bool bContextMenuOpeningBound = OnContextMenuOpening.IsBound();
if ( bShouldOpenContextMenu && bContextMenuOpeningBound )
{
// Get the context menu content. If NULL, don't open a menu.
TSharedPtr<SWidget> MenuContent = OnContextMenuOpening.Execute();
if( MenuContent.IsValid() )
{
bShowSoftwareCursor = false;
FWidgetPath WidgetPath = MouseEvent.GetEventPath() != nullptr ? *MouseEvent.GetEventPath() : FWidgetPath();
FSlateApplication::Get().PushMenu(AsShared(), WidgetPath, MenuContent.ToSharedRef(), SummonLocation, FPopupTransitionEffect(FPopupTransitionEffect::ContextMenu));
}
}
AmountScrolledWhileRightMouseDown = 0;
}
示例8: OnTouchMoved
FReply SVirtualJoystick::OnTouchMoved(const FGeometry& MyGeometry, const FPointerEvent& Event)
{
FVector2D LocalCoord = MyGeometry.AbsoluteToLocal( Event.GetScreenSpacePosition() );
for (int32 ControlIndex = 0; ControlIndex < Controls.Num(); ControlIndex++)
{
FControlInfo& Control = Controls[ControlIndex];
// is this control the one captured to this pointer?
if (Control.CapturedPointerIndex == Event.GetPointerIndex())
{
if (Control.bNeedUpdatedCenter)
{
return FReply::Unhandled();
}
else if (HandleTouch(ControlIndex, LocalCoord, MyGeometry.Size))
{
return FReply::Handled();
}
}
}
return FReply::Unhandled();
}
示例9: ProcessMouseAction
bool SColorWheel::ProcessMouseAction(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, bool bProcessWhenOutsideColorWheel)
{
const FVector2D LocalMouseCoordinate = MyGeometry.AbsoluteToLocal(MouseEvent.GetScreenSpacePosition());
const FVector2D Location = LocalMouseCoordinate / (MyGeometry.Size * 0.5f) - FVector2D(1.0f, 1.0f);
const float Radius = Location.Size();
if (Radius <= 1.0f || bProcessWhenOutsideColorWheel)
{
float Angle = FMath::Atan2(Location.Y, Location.X);
if (Angle < 0.0f)
{
Angle += 2.0f * PI;
}
FLinearColor NewColor = SelectedColor.Get();
NewColor.R = Angle * 180.0f * INV_PI;
NewColor.G = FMath::Min(Radius, 1.0f);
OnValueChanged.ExecuteIfBound(NewColor);
}
return (Radius <= 1.0f);
}
示例10: OnMouseMove
FReply SProfilerThreadView::OnMouseMove( const FGeometry& MyGeometry, const FPointerEvent& MouseEvent )
{
// SCOPE_LOG_TIME_FUNC();
FReply Reply = FReply::Unhandled();
if( IsReady() )
{
const FVector2D LocalMousePosition = MyGeometry.AbsoluteToLocal( MouseEvent.GetScreenSpacePosition() );
HoveredPositionX = 0.0;//PositionToFrameIndex( LocalMousePosition.X );
HoveredPositionY = 0.0;
const float CursorPosXDelta = -MouseEvent.GetCursorDelta().X;
const float ScrollSpeed = 1.0f / ZoomFactorX;
if( MouseEvent.IsMouseButtonDown( EKeys::LeftMouseButton ) )
{
if( HasMouseCapture() && !MouseEvent.GetCursorDelta().IsZero() )
{
DistanceDragged += CursorPosXDelta*ScrollSpeed*0.1;
// Inform other widgets that we have scrolled the thread-view.
SetPositionX( FMath::Clamp( DistanceDragged, 0.0, TotalRangeXMS - RangeXMS ) );
CursorType = EThreadViewCursor::Hand;
Reply = FReply::Handled();
}
}
else
{
CursorType = EThreadViewCursor::Default;
}
}
return Reply;
}
示例11: FindChildUnderMouse
int32 SWidget::FindChildUnderMouse( const FArrangedChildren& Children, const FPointerEvent& MouseEvent )
{
const FVector2D& AbsoluteCursorLocation = MouseEvent.GetScreenSpacePosition();
return SWidget::FindChildUnderPosition( Children, AbsoluteCursorLocation );
}
示例12: OnMouseMove
virtual FReply OnMouseMove(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override
{
struct FWidgetPicker
{
static bool FindWidgetsUnderPoint(const FVector2D& InHitTestPoint, const FVector2D& InWindowPosition, const TSharedRef<FWidgetReflectorNodeBase>& InWidget, TArray<TSharedRef<FWidgetReflectorNodeBase>>& OutWidgets)
{
const bool bNeedsHitTesting = InWidget->GetHitTestInfo().IsHitTestVisible || InWidget->GetHitTestInfo().AreChildrenHitTestVisible;
if (bNeedsHitTesting)
{
const FSlateRect HitTestRect = FSlateRect::FromPointAndExtent(
InWidget->GetAccumulatedLayoutTransform().GetTranslation() - InWindowPosition,
TransformPoint(InWidget->GetAccumulatedLayoutTransform().GetScale(), InWidget->GetLocalSize())
);
if (HitTestRect.ContainsPoint(InHitTestPoint))
{
OutWidgets.Add(InWidget);
if (InWidget->GetHitTestInfo().AreChildrenHitTestVisible)
{
for (const auto& ChildWidget : InWidget->GetChildNodes())
{
if (FindWidgetsUnderPoint(InHitTestPoint, InWindowPosition, ChildWidget, OutWidgets))
{
return true;
}
}
}
return InWidget->GetHitTestInfo().IsHitTestVisible;
}
}
return false;
}
};
if (bIsPicking)
{
// We need to pick in the snapshot window space, so convert the mouse co-ordinates to be relative to our top-left position
const FVector2D& ScreenMousePos = MouseEvent.GetScreenSpacePosition();
const FVector2D LocalMousePos = MyGeometry.AbsoluteToLocal(ScreenMousePos);
const FVector2D ScrolledPos = LocalMousePos - PhysicalOffset;
PickedWidgets.Reset();
TSharedPtr<FWidgetReflectorNodeBase> Window = SnapshotDataPtr->GetWindow(SelectedWindowIndex);
if (Window.IsValid())
{
FWidgetPicker::FindWidgetsUnderPoint(
ScrolledPos,
Window->GetAccumulatedLayoutTransform().GetTranslation(),
Window.ToSharedRef(),
PickedWidgets
);
}
if (PickedWidgets.Num() > 0)
{
OnWidgetPathPicked.ExecuteIfBound(PickedWidgets);
}
}
return ScrollyZoomy.OnMouseMove(AsShared(), *this, MyGeometry, MouseEvent);
}
示例13: OnMouseMove
FReply FTextEditHelper::OnMouseMove( const FGeometry& InMyGeometry, const FPointerEvent& InMouseEvent, const TSharedRef< ITextEditorWidget >& TextEditor )
{
FReply Reply = FReply::Unhandled();
if( TextEditor->IsDragSelecting() && TextEditor->GetWidget()->HasMouseCapture() && InMouseEvent.GetCursorDelta() != FVector2D::ZeroVector )
{
TextEditor->MoveCursor( FMoveCursor::ViaScreenPointer( InMyGeometry.AbsoluteToLocal( InMouseEvent.GetScreenSpacePosition( ) ), InMyGeometry.Scale, ECursorAction::SelectText ) );
TextEditor->SetHasDragSelectedSinceFocused( true );
Reply = FReply::Handled();
}
return Reply;
}
示例14: UpdateCachedMousePos
void FSceneViewport::UpdateCachedMousePos( const FGeometry& InGeometry, const FPointerEvent& InMouseEvent )
{
CachedMousePos = InGeometry.AbsoluteToLocal( InMouseEvent.GetScreenSpacePosition() ).IntPoint();
}
示例15: OnMouseButtonDown
FReply FSceneViewport::OnMouseButtonDown( const FGeometry& InGeometry, const FPointerEvent& InMouseEvent )
{
// Start a new reply state
// Prevent throttling when interacting with the viewport so we can move around in it
CurrentReplyState = FReply::Handled().PreventThrottling();
KeyStateMap.Add(InMouseEvent.GetEffectingButton(), true);
UpdateModifierKeys( InMouseEvent );
UpdateCachedMousePos( InGeometry, InMouseEvent );
UpdateCachedGeometry(InGeometry);
// Switch to the viewport clients world before processing input
FScopedConditionalWorldSwitcher WorldSwitcher( ViewportClient );
if( ViewportClient && GetSizeXY() != FIntPoint::ZeroValue )
{
// If we're obtaining focus, we have to copy the modifier key states prior to processing this mouse button event, as this is the only point at which the mouse down
// event is processed when focus initially changes and the modifier keys need to be in-place to detect any unique drag-like events.
if ( !HasFocus() )
{
FModifierKeysState KeysState = FSlateApplication::Get().GetModifierKeys();
ApplyModifierKeys( KeysState );
}
const bool bAnyMenuWasVisible = FSlateApplication::Get().AnyMenusVisible();
// Process the mouse event
if (!ViewportClient->InputKey(this, InMouseEvent.GetUserIndex(), InMouseEvent.GetEffectingButton(), IE_Pressed))
{
CurrentReplyState = FReply::Unhandled();
}
// a new menu was opened if there was previously not a menu visible but now there is
const bool bNewMenuWasOpened = !bAnyMenuWasVisible && FSlateApplication::Get().AnyMenusVisible();
if (!ViewportClient->IgnoreInput() &&
!bNewMenuWasOpened && // We should not focus the viewport if a menu was opened as it would close the menu
( ViewportClient->CaptureMouseOnClick() == EMouseCaptureMode::CapturePermanently ||
ViewportClient->CaptureMouseOnClick() == EMouseCaptureMode::CaptureDuringMouseDown ||
( ViewportClient->CaptureMouseOnClick() == EMouseCaptureMode::CaptureDuringRightMouseDown && InMouseEvent.GetEffectingButton() == EKeys::RightMouseButton ) ) )
{
TSharedRef<SViewport> ViewportWidgetRef = ViewportWidget.Pin().ToSharedRef();
// Mouse down should focus viewport for user input
CurrentReplyState.SetUserFocus(ViewportWidgetRef, EFocusCause::SetDirectly, true);
UWorld* World = ViewportClient->GetWorld();
if (World && World->IsGameWorld() && World->GetFirstPlayerController())
{
CurrentReplyState.CaptureMouse(ViewportWidgetRef);
CurrentReplyState.LockMouseToWidget(ViewportWidgetRef);
bool bShouldShowMouseCursor = World->GetFirstPlayerController()->ShouldShowMouseCursor();
if (ViewportClient->HideCursorDuringCapture() && bShouldShowMouseCursor)
{
bCursorHiddenDueToCapture = true;
MousePosBeforeHiddenDueToCapture = FIntPoint( InMouseEvent.GetScreenSpacePosition().X, InMouseEvent.GetScreenSpacePosition().Y );
}
if (bCursorHiddenDueToCapture || !bShouldShowMouseCursor)
{
CurrentReplyState.UseHighPrecisionMouseMovement(ViewportWidgetRef);
}
}
else
{
CurrentReplyState.UseHighPrecisionMouseMovement(ViewportWidgetRef);
}
}
}
// Re-set prevent throttling here as it can get reset when inside of InputKey()
CurrentReplyState.PreventThrottling();
return CurrentReplyState;
}