Прокрутка у кромки помнит зажатые клавиши
Тик повторяет движение мыши за человека. Shift при растягивании края отменяет прилипание, и повторение с пустым набором клавиш заставляло край прыгать между тиками: тик с прилипанием, рука без него.
This commit is contained in:
parent
d55fb1b808
commit
6cc9f5e8a8
1 changed files with 11 additions and 5 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue