FReply SVisualLoggerTimelinesContainer::OnMouseWheel(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) { if (MouseEvent.IsLeftControlDown() || MouseEvent.IsLeftShiftDown()) { return TimeSliderController->OnMouseWheel(*this, MyGeometry, MouseEvent); } return FReply::Unhandled(); }
void FSceneViewport::UpdateModifierKeys( const FPointerEvent& InMouseEvent ) { KeyStateMap.Add( EKeys::LeftAlt, InMouseEvent.IsLeftAltDown() ); KeyStateMap.Add( EKeys::RightAlt, InMouseEvent.IsRightAltDown() ); KeyStateMap.Add(EKeys::LeftControl, InMouseEvent.IsLeftControlDown()); KeyStateMap.Add(EKeys::RightControl, InMouseEvent.IsRightControlDown()); KeyStateMap.Add(EKeys::LeftShift, InMouseEvent.IsLeftShiftDown()); KeyStateMap.Add(EKeys::RightShift, InMouseEvent.IsRightShiftDown()); }
void SVisualLoggerTimelinesContainer::ChangeSelection(TSharedPtr<SLogVisualizerTimeline> InTimeline, const FPointerEvent& MouseEvent) { if (MouseEvent.IsLeftShiftDown() == false) { if (MouseEvent.IsLeftControlDown()) { SetSelectionState(InTimeline, !InTimeline->IsSelected(), false); } else { SetSelectionState(InTimeline, true, true); } } else { if (CachedSelectedTimelines.Num() == 0 && TimelineItems.Num()) { SetSelectionState(TimelineItems[0], true, true); } TSharedPtr<SLogVisualizerTimeline> LastSelected = CachedSelectedTimelines.Num() ? CachedSelectedTimelines[CachedSelectedTimelines.Num() - 1] : nullptr; if (LastSelected.IsValid()) { bool bStartedSelection = false; for (TSharedPtr<SLogVisualizerTimeline>& TimelineItem : TimelineItems) { if (TimelineItem == LastSelected || InTimeline == TimelineItem) { if (!bStartedSelection) { bStartedSelection = true; } else { bStartedSelection = false; break; } } if (bStartedSelection) { SetSelectionState(TimelineItem, true, false); } } } SetSelectionState(InTimeline, true, false); } }
FReply FSequencerTimeSliderController::OnMouseWheel( TSharedRef<SWidget> WidgetOwner, const FGeometry& MyGeometry, const FPointerEvent& MouseEvent ) { TOptional<TRange<float>> NewTargetRange; float MouseFractionX = MyGeometry.AbsoluteToLocal(MouseEvent.GetScreenSpacePosition()).X / MyGeometry.GetLocalSize().X; if ( TimeSliderArgs.AllowZoom && (MouseEvent.IsLeftControlDown() || MouseEvent.IsRightControlDown()) ) { const float ZoomDelta = -0.2f * MouseEvent.GetWheelDelta(); if (ZoomByDelta(ZoomDelta, MouseFractionX)) { return FReply::Handled(); } } else if (MouseEvent.IsLeftShiftDown() || MouseEvent.IsRightShiftDown()) { PanByDelta(-MouseEvent.GetWheelDelta()); return FReply::Handled(); } return FReply::Unhandled(); }
FReply FVisualLoggerTimeSliderController::OnMouseWheel( TSharedRef<SWidget> WidgetOwner, const FGeometry& MyGeometry, const FPointerEvent& MouseEvent ) { FReply ReturnValue = FReply::Unhandled();; if (MouseEvent.IsLeftShiftDown()) { const float ZoomDelta = 0.025f * MouseEvent.GetWheelDelta(); TimeSliderArgs.CursorSize.Set(FMath::Clamp(TimeSliderArgs.CursorSize.Get() + ZoomDelta, 0.0f, 1.0f)); ReturnValue = FReply::Handled(); } else if ( TimeSliderArgs.AllowZoom ) { const float ZoomDelta = -0.1f * MouseEvent.GetWheelDelta(); { TRange<float> LocalViewRange = TimeSliderArgs.ViewRange.Get(); float LocalViewRangeMax = LocalViewRange.GetUpperBoundValue(); float LocalViewRangeMin = LocalViewRange.GetLowerBoundValue(); const float OutputViewSize = LocalViewRangeMax - LocalViewRangeMin; const float OutputChange = OutputViewSize * ZoomDelta; float NewViewOutputMin = LocalViewRangeMin - (OutputChange * 0.5f); float NewViewOutputMax = LocalViewRangeMax + (OutputChange * 0.5f); if( FMath::Abs( OutputChange ) > 0.01f && NewViewOutputMin < NewViewOutputMax ) { float LocalClampMin = TimeSliderArgs.ClampRange.Get().GetLowerBoundValue(); float LocalClampMax = TimeSliderArgs.ClampRange.Get().GetUpperBoundValue(); // Clamp the range if clamp values are set if ( NewViewOutputMin < LocalClampMin ) { NewViewOutputMin = LocalClampMin; } if ( NewViewOutputMax > LocalClampMax ) { NewViewOutputMax = LocalClampMax; } TimeSliderArgs.OnViewRangeChanged.ExecuteIfBound(TRange<float>(NewViewOutputMin, NewViewOutputMax), EViewRangeInterpolation::Immediate, false); if (Scrollbar.IsValid()) { float InOffsetFraction = (NewViewOutputMin - LocalClampMin) / (LocalClampMax - LocalClampMin); float InThumbSizeFraction = (NewViewOutputMax - NewViewOutputMin) / (LocalClampMax - LocalClampMin); Scrollbar->SetState(InOffsetFraction, InThumbSizeFraction); } if( !TimeSliderArgs.ViewRange.IsBound() ) { // The output is not bound to a delegate so we'll manage the value ourselves TimeSliderArgs.ViewRange.Set( TRange<float>( NewViewOutputMin, NewViewOutputMax ) ); } } } ReturnValue = FReply::Handled(); } return ReturnValue; }