From 6cc9f5e8a8be172f257dd206f522c6b8410dbef0 Mon Sep 17 00:00:00 2001 From: 4aiman Date: Thu, 15 Oct 2026 23:36:44 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=BA=D1=80=D1=83=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=83=20=D0=BA=D1=80=D0=BE=D0=BC=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BC=D0=BD=D0=B8=D1=82=20=D0=B7=D0=B0=D0=B6=D0=B0?= =?UTF-8?q?=D1=82=D1=8B=D0=B5=20=D0=BA=D0=BB=D0=B0=D0=B2=D0=B8=D1=88=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Тик повторяет движение мыши за человека. Shift при растягивании края отменяет прилипание, и повторение с пустым набором клавиш заставляло край прыгать между тиками: тик с прилипанием, рука без него. --- src/uTimelineCtrl.pas | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/uTimelineCtrl.pas b/src/uTimelineCtrl.pas index bf9b813..df16caa 100644 --- a/src/uTimelineCtrl.pas +++ b/src/uTimelineCtrl.pas @@ -176,6 +176,10 @@ type FEdgeTimer: TTimer; FEdgeX: Integer; FEdgeY: Integer; + { Клавиши, зажатые при последнем движении мыши. Тик повторяет + движение за человека, и Shift при этом обязан остаться зажатым: + он отменяет прилипание, и без него край прыгал бы между тиками. } + FEdgeShift: TShiftState; FDragTrackFrom: Integer; FOnMediaDrop: TMediaDropEvent; FOnClipTransform: TClipEvent; @@ -276,7 +280,7 @@ type procedure EdgeTimerTick(Sender: TObject); { Включает и выключает слежение за кромкой. } procedure SetEdgeScroll(AOn: Boolean; const AX: Integer = 0; - const AY: Integer = 0); + const AY: Integer = 0; const AShift: TShiftState = []); procedure CollectRippleClips(ATrackIndex: Integer; AExclude: TClip; const AFromTime: Double); procedure ApplyRipple(const ADelta: Double); @@ -2444,7 +2448,7 @@ begin { Пока тащат клип или край, следим за кромкой окна: у края монтаж едет следом сам, даже если рука остановилась. } SetEdgeScroll(FAction in [taDragClip, taTrimIn, taTrimOut, taRubberBand], - X, Y); + X, Y, Shift); case FAction of taPan: @@ -2841,16 +2845,18 @@ begin end; else { У краёв клипа своё движение, но пересчитывается оно там же, где и - от мыши: повторяем событие с теми же координатами. } - MouseMove([], FEdgeX, FEdgeY); + от мыши: повторяем событие с теми же координатами и теми же + зажатыми клавишами. } + MouseMove(FEdgeShift, FEdgeX, FEdgeY); end; end; procedure TTimelineControl.SetEdgeScroll(AOn: Boolean; const AX: Integer; - const AY: Integer); + const AY: Integer; const AShift: TShiftState); begin FEdgeX := AX; FEdgeY := AY; + FEdgeShift := AShift; if FEdgeTimer.Enabled <> AOn then FEdgeTimer.Enabled := AOn; end;