Work on waveform translate issue - thx Leon :)

This commit is contained in:
niksedk 2021-10-06 21:53:24 +02:00
parent 257defff89
commit b70934646f
2 changed files with 88 additions and 25 deletions

View File

@ -18,9 +18,9 @@
* Improve SSA styling/preview - thxfiolek2000
* Allow .ismt files up to 50 mb - thx Essam3152
* Allow some malformed WebVTT - thx manuelrn/larsk2
* Make BD Sup configurable regarding open action - ocr/edit - thx peter-qgd
* Make BD Sup open action configurable (OCR or edit) - thx peter-qgd
* Do not use ILRepack - to avoid anti-virus warnings
* Add "Clear" key to list of shortcut keys - thx OmrSi
* Add "Clear" key to list of available shortcut keys - thx OmrSi
* Refresh text in mpv when changing RTL mode
* Improve detect of video info - thx Janjens
* Improve read of PNS format - thx Milenko
@ -39,6 +39,7 @@
* Rollback max #lines enforce (now hidden setting) - thx pandalamp
* Include favourite formats in "reset"
* Take first audio track when loading wave form - thx Tuan-P
* Fix issue with waveform original out of sync - thx Leon
3.6.2 (24th August 2021)

View File

@ -19,7 +19,8 @@ namespace Nikse.SubtitleEdit.Controls
None,
Start,
Whole,
End
End,
StartOrEnd,
}
public class MinMax
@ -81,6 +82,7 @@ namespace Nikse.SubtitleEdit.Controls
private bool _mouseDown;
private Paragraph _oldParagraph;
private Paragraph _mouseDownParagraph;
private Paragraph[] _mouseDownParagraphs;
private MouseDownParagraphType _mouseDownParagraphType = MouseDownParagraphType.Start;
private readonly List<Paragraph> _displayableParagraphs;
private readonly List<Paragraph> _allSelectedParagraphs;
@ -1224,23 +1226,6 @@ namespace Nikse.SubtitleEdit.Controls
OnTimeChanged?.Invoke(this, new ParagraphEventArgs(seconds, _mouseDownParagraph, _oldParagraph, _mouseDownParagraphType, AllowMovePrevOrNext));
}
}
else
{
if (curIdx < _subtitle.Paragraphs.Count - 1)
{
var next = _subtitle.Paragraphs[curIdx + 1];
if (milliseconds + Configuration.Settings.General.MinimumMillisecondsBetweenLines < next.StartTime.TotalMilliseconds)
{
_mouseDownParagraph.EndTime.TotalMilliseconds = milliseconds;
OnTimeChanged?.Invoke(this, new ParagraphEventArgs(seconds, _mouseDownParagraph, _oldParagraph, _mouseDownParagraphType, AllowMovePrevOrNext));
}
}
else
{
_mouseDownParagraph.EndTime.TotalMilliseconds = milliseconds;
OnTimeChanged?.Invoke(this, new ParagraphEventArgs(seconds, _mouseDownParagraph, _oldParagraph, _mouseDownParagraphType, AllowMovePrevOrNext));
}
}
}
SetMinAndMax();
}
@ -1466,15 +1451,43 @@ namespace Nikse.SubtitleEdit.Controls
if (IsParagraphBorderStartHit(milliseconds, paragraph.StartTime.TotalMilliseconds))
{
var idx = _displayableParagraphs.IndexOf(paragraph);
if (idx > 0)
{
var prev = _displayableParagraphs[idx - 1];
if (IsParagraphBorderStartHit(milliseconds, prev.EndTime.TotalMilliseconds) && ModifierKeys != Keys.Alt)
{
_mouseDownParagraph = null;
_mouseDownParagraphs = new List<Paragraph> { prev, paragraph }.ToArray();
_mouseDownParagraphType = MouseDownParagraphType.StartOrEnd;
return true;
}
}
_oldParagraph = new Paragraph(paragraph);
_mouseDownParagraph = paragraph;
_mouseDownParagraphs = null;
_mouseDownParagraphType = MouseDownParagraphType.Start;
return true;
}
if (IsParagraphBorderEndHit(milliseconds, paragraph.EndTime.TotalMilliseconds))
{
var idx = _displayableParagraphs.IndexOf(paragraph);
if (idx < _displayableParagraphs.Count - 2 && ModifierKeys != Keys.Alt)
{
var next = _displayableParagraphs[idx + 1];
if (IsParagraphBorderStartHit(milliseconds, next.StartTime.TotalMilliseconds))
{
_mouseDownParagraph = null;
_mouseDownParagraphs = new List<Paragraph> { paragraph, next }.ToArray();
_mouseDownParagraphType = MouseDownParagraphType.StartOrEnd;
return true;
}
}
_oldParagraph = new Paragraph(paragraph);
_mouseDownParagraph = paragraph;
_mouseDownParagraphs = null;
_mouseDownParagraphType = MouseDownParagraphType.End;
return true;
}
@ -1509,7 +1522,7 @@ namespace Nikse.SubtitleEdit.Controls
if (e.X < _mouseMoveLastX)
{
StartPositionSeconds -= 0.1;
if (_mouseDownParagraph == null)
if (_mouseDownParagraph == null && _mouseDownParagraphs == null)
{
_mouseMoveEndX = 0;
_mouseMoveStartX += (int)(_wavePeaks.SampleRate * 0.1);
@ -1523,7 +1536,7 @@ namespace Nikse.SubtitleEdit.Controls
if (e.X > Width && _startPositionSeconds + 0.1 < _wavePeaks.LengthInSeconds && _mouseDown)
{
StartPositionSeconds += 0.1;
if (_mouseDownParagraph == null)
if (_mouseDownParagraph == null && _mouseDownParagraphs == null)
{
_mouseMoveEndX = Width;
_mouseMoveStartX -= (int)(_wavePeaks.SampleRate * 0.1);
@ -1568,6 +1581,53 @@ namespace Nikse.SubtitleEdit.Controls
if (_mouseDown)
{
if (_mouseDownParagraphType == MouseDownParagraphType.StartOrEnd && _firstMove && ModifierKeys != Keys.Alt)
{
double seconds = RelativeXPositionToSeconds(e.X);
var milliseconds = (int)(seconds * TimeCode.BaseUnit);
if (_firstMove && Math.Abs(oldMouseMoveLastX - e.X) < Configuration.Settings.General.MinimumMillisecondsBetweenLines && GetParagraphAtMilliseconds(milliseconds) == null)
{
if (_mouseDownParagraphType == MouseDownParagraphType.StartOrEnd && _mouseDownParagraphs?.Length == 2 && Math.Abs(_mouseDownParagraphs[0].StartTime.TotalMilliseconds - _mouseDownParagraphs[0].EndTime.TotalMilliseconds) <= ClosenessForBorderSelection + 15)
{
return; // do not decide which paragraph to move yet
}
if (_mouseDownParagraphType == MouseDownParagraphType.StartOrEnd && _mouseDownParagraphs?.Length == 2 && Math.Abs(_mouseDownParagraphs[1].EndTime.TotalMilliseconds - _mouseDownParagraphs[1].StartTime.TotalMilliseconds) <= ClosenessForBorderSelection + 15)
{
return; // do not decide which paragraph to move yet
}
}
if (_mouseDownParagraphs?.Length == 2)
{
// decide which paragraph to move
if (_firstMove && e.X > oldMouseMoveLastX)
{
if (milliseconds >= _mouseDownParagraphs[1].StartTime.TotalMilliseconds && milliseconds < _mouseDownParagraphs[1].EndTime.TotalMilliseconds)
{
_mouseDownParagraph = _mouseDownParagraphs[1];
_mouseDownParagraphType = MouseDownParagraphType.Start;
_mouseDownParagraphs = null;
_oldParagraph = new Paragraph(_mouseDownParagraph);
_firstMove = false;
}
}
else if (_firstMove && e.X < oldMouseMoveLastX)
{
if (milliseconds <= _mouseDownParagraphs[0].EndTime.TotalMilliseconds && milliseconds > _mouseDownParagraphs[0].StartTime.TotalMilliseconds)
{
_mouseDownParagraph = _mouseDownParagraphs[0];
_mouseDownParagraphType = MouseDownParagraphType.End;
_mouseDownParagraphs = null;
_oldParagraph = new Paragraph(_mouseDownParagraph);
_firstMove = false;
}
}
return;
}
}
if (_mouseDownParagraph != null)
{
double seconds = RelativeXPositionToSeconds(e.X);
@ -1578,18 +1638,18 @@ namespace Nikse.SubtitleEdit.Controls
if (_firstMove && Math.Abs(oldMouseMoveLastX - e.X) < Configuration.Settings.General.MinimumMillisecondsBetweenLines && GetParagraphAtMilliseconds(milliseconds) == null)
{
if (_mouseDownParagraphType == MouseDownParagraphType.Start && _prevParagraph != null && Math.Abs(_mouseDownParagraph.StartTime.TotalMilliseconds - _prevParagraph.EndTime.TotalMilliseconds) <= ClosenessForBorderSelection + 15)
if (_mouseDownParagraphType == MouseDownParagraphType.StartOrEnd && _prevParagraph != null && Math.Abs(_mouseDownParagraph.StartTime.TotalMilliseconds - _prevParagraph.EndTime.TotalMilliseconds) <= ClosenessForBorderSelection + 15)
{
return; // do not decide which paragraph to move yet
}
if (_mouseDownParagraphType == MouseDownParagraphType.End && _nextParagraph != null && Math.Abs(_mouseDownParagraph.EndTime.TotalMilliseconds - _nextParagraph.StartTime.TotalMilliseconds) <= ClosenessForBorderSelection + 15)
if (_mouseDownParagraphType == MouseDownParagraphType.StartOrEnd && _nextParagraph != null && Math.Abs(_mouseDownParagraph.EndTime.TotalMilliseconds - _nextParagraph.StartTime.TotalMilliseconds) <= ClosenessForBorderSelection + 15)
{
return; // do not decide which paragraph to move yet
}
}
if (ModifierKeys != Keys.Alt)
if (_firstMove && ModifierKeys != Keys.Alt)
{
// decide which paragraph to move
if (_firstMove && e.X > oldMouseMoveLastX && _nextParagraph != null && _mouseDownParagraphType == MouseDownParagraphType.End)
@ -1881,6 +1941,8 @@ namespace Nikse.SubtitleEdit.Controls
}
}
Cursor = Cursors.Default;
_mouseDownParagraph = null;
_mouseDownParagraphs = null;
}
private void WaveformMouseLeave(object sender, EventArgs e)