void FVisualLoggerTimeSliderController::CommitScrubPosition( float NewValue, bool bIsScrubbing ) { // Manage the scrub position ourselves if its not bound to a delegate if ( !TimeSliderArgs.ScrubPosition.IsBound() ) { TimeSliderArgs.ScrubPosition.Set( NewValue ); } TRange<float> LocalViewRange = TimeSliderArgs.ViewRange.Get(); const float RangeSize = LocalViewRange.Size<float>(); if (NewValue < LocalViewRange.GetLowerBoundValue()) { SetTimeRange(NewValue, NewValue + RangeSize); } else if (NewValue > LocalViewRange.GetUpperBoundValue()) { SetTimeRange(NewValue - RangeSize, NewValue); } TimeSliderArgs.OnScrubPositionChanged.ExecuteIfBound( NewValue, bIsScrubbing ); }
FReply SProfilerThreadView::OnMouseWheel( const FGeometry& MyGeometry, const FPointerEvent& MouseEvent ) { FReply Reply = FReply::Unhandled(); const bool bZoomIn = MouseEvent.GetWheelDelta() < 0.0f; const double Center = PositionXMS + RangeXMS*0.5f; const double MinVisibleRangeMS = 1.0f / INV_MIN_VISIBLE_RANGE_X; const double NewUnclampedRange = bZoomIn ? RangeXMS*1.25f : RangeXMS / 1.25f; const double NewRange = FMath::Clamp( NewUnclampedRange, MinVisibleRangeMS, FMath::Min( TotalRangeXMS, (double)MAX_VISIBLE_RANGE_X ) ); const double NewPositionX = FMath::Clamp( Center, NewRange*0.5f, TotalRangeXMS - NewRange*0.5f ) - NewRange*0.5f; SetTimeRange( NewPositionX, NewPositionX + NewRange ); return Reply; }
void FVisualLoggerTimeSliderController::SetClampRange(float MinValue, float MaxValue) { TRange<float> LocalViewRange = TimeSliderArgs.ViewRange.Get(); float LocalClampMin = TimeSliderArgs.ClampRange.Get().GetLowerBoundValue(); float LocalClampMax = TimeSliderArgs.ClampRange.Get().GetUpperBoundValue(); const float CurrentDistance = LocalClampMax - LocalClampMin; const float ZoomDelta = (LocalViewRange.GetUpperBoundValue() - LocalViewRange.GetLowerBoundValue()) / CurrentDistance; MaxValue = MinValue + (MaxValue - MinValue < 2 ? CurrentDistance : MaxValue - MinValue); TimeSliderArgs.ClampRange = TRange<float>(MinValue, MaxValue); const float LocalViewRangeMin = FMath::Clamp(LocalViewRange.GetLowerBoundValue(), MinValue, MaxValue); const float LocalViewRangeMax = FMath::Clamp(LocalViewRange.GetUpperBoundValue(), MinValue, MaxValue); SetTimeRange(ZoomDelta >= 1 ? MinValue : LocalViewRangeMin, ZoomDelta >= 1 ? MaxValue : LocalViewRangeMax); }