mirror of https://github.com/odrling/Aegisub
Move NextFrame and PrevFrame from VideoSlider to VideoContext
Originally committed to SVN as r5200.
This commit is contained in:
parent
08ec92046f
commit
64ebce6c0f
|
@ -250,7 +250,7 @@ struct video_frame_next : public Command {
|
||||||
STR_HELP("Seek to the next frame.")
|
STR_HELP("Seek to the next frame.")
|
||||||
|
|
||||||
void operator()(agi::Context *c) {
|
void operator()(agi::Context *c) {
|
||||||
c->videoBox->videoSlider->NextFrame();
|
c->videoContext->NextFrame();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -276,7 +276,7 @@ struct video_frame_prev : public Command {
|
||||||
STR_HELP("Seek to the previous frame.")
|
STR_HELP("Seek to the previous frame.")
|
||||||
|
|
||||||
void operator()(agi::Context *c) {
|
void operator()(agi::Context *c) {
|
||||||
c->videoBox->videoSlider->PrevFrame();
|
c->videoContext->PrevFrame();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -303,31 +303,29 @@ void VideoContext::GetScriptSize(int &sw,int &sh) {
|
||||||
grid->ass->GetResolution(sw,sh);
|
grid->ass->GetResolution(sw,sh);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoContext::PlayNextFrame() {
|
void VideoContext::NextFrame() {
|
||||||
if (isPlaying)
|
if (!videoProvider.get() || isPlaying || frame_n == videoProvider->GetFrameCount())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int thisFrame = frame_n;
|
|
||||||
JumpToFrame(frame_n + 1);
|
JumpToFrame(frame_n + 1);
|
||||||
// Start playing audio
|
// Start playing audio
|
||||||
if (playAudioOnStep->GetBool()) {
|
if (playAudioOnStep->GetBool()) {
|
||||||
audio->PlayRange(SampleRange(
|
audio->PlayRange(SampleRange(
|
||||||
audio->SamplesFromMilliseconds(TimeAtFrame(thisFrame)),
|
audio->SamplesFromMilliseconds(TimeAtFrame(frame_n - 1)),
|
||||||
audio->SamplesFromMilliseconds(TimeAtFrame(thisFrame + 1))));
|
audio->SamplesFromMilliseconds(TimeAtFrame(frame_n))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoContext::PlayPrevFrame() {
|
void VideoContext::PrevFrame() {
|
||||||
if (isPlaying)
|
if (!videoProvider.get() || isPlaying || frame_n == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int thisFrame = frame_n;
|
|
||||||
JumpToFrame(frame_n - 1);
|
JumpToFrame(frame_n - 1);
|
||||||
// Start playing audio
|
// Start playing audio
|
||||||
if (playAudioOnStep->GetBool()) {
|
if (playAudioOnStep->GetBool()) {
|
||||||
audio->PlayRange(SampleRange(
|
audio->PlayRange(SampleRange(
|
||||||
audio->SamplesFromMilliseconds(TimeAtFrame(thisFrame - 1)),
|
audio->SamplesFromMilliseconds(TimeAtFrame(frame_n)),
|
||||||
audio->SamplesFromMilliseconds(TimeAtFrame(thisFrame))));
|
audio->SamplesFromMilliseconds(TimeAtFrame(frame_n + 1))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -246,9 +246,9 @@ public:
|
||||||
/// Starting playing the video
|
/// Starting playing the video
|
||||||
void Play();
|
void Play();
|
||||||
/// Play the next frame then stop
|
/// Play the next frame then stop
|
||||||
void PlayNextFrame();
|
void NextFrame();
|
||||||
/// Play the previous frame then stop
|
/// Play the previous frame then stop
|
||||||
void PlayPrevFrame();
|
void PrevFrame();
|
||||||
/// Seek to the beginning of the current line, then play to the end of it
|
/// Seek to the beginning of the current line, then play to the end of it
|
||||||
void PlayLine();
|
void PlayLine();
|
||||||
/// Stop playing
|
/// Stop playing
|
||||||
|
|
|
@ -138,34 +138,6 @@ int VideoSlider::GetXAtValue(int value) {
|
||||||
return (int64_t)value*(int64_t)(w-10)/(int64_t)max+5;
|
return (int64_t)value*(int64_t)(w-10)/(int64_t)max+5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// @brief Next frame hotkey
|
|
||||||
/// @return
|
|
||||||
///
|
|
||||||
void VideoSlider::NextFrame() {
|
|
||||||
if (VideoContext::Get()->IsPlaying()) return;
|
|
||||||
|
|
||||||
//don't request out of range frames
|
|
||||||
if (val < max) VideoContext::Get()->PlayNextFrame();
|
|
||||||
Refresh(false);
|
|
||||||
Update();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// @brief Previous frame hotkey
|
|
||||||
/// @return
|
|
||||||
///
|
|
||||||
void VideoSlider::PrevFrame() {
|
|
||||||
if (VideoContext::Get()->IsPlaying()) return;
|
|
||||||
|
|
||||||
//don't request out of range frames
|
|
||||||
if (val > 0) VideoContext::Get()->PlayPrevFrame();
|
|
||||||
Refresh(false);
|
|
||||||
Update();
|
|
||||||
}
|
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(VideoSlider, wxWindow)
|
BEGIN_EVENT_TABLE(VideoSlider, wxWindow)
|
||||||
EVT_MOUSE_EVENTS(VideoSlider::OnMouse)
|
EVT_MOUSE_EVENTS(VideoSlider::OnMouse)
|
||||||
EVT_KEY_DOWN(VideoSlider::OnKeyDown)
|
EVT_KEY_DOWN(VideoSlider::OnKeyDown)
|
||||||
|
@ -276,8 +248,8 @@ void VideoSlider::OnKeyDown(wxKeyEvent &event) {
|
||||||
if (direction) {
|
if (direction) {
|
||||||
// Standard move
|
// Standard move
|
||||||
if (!ctrl && !shift && !alt) {
|
if (!ctrl && !shift && !alt) {
|
||||||
if (direction == 1) NextFrame();
|
if (direction == 1) VideoContext::Get()->NextFrame();
|
||||||
else PrevFrame();
|
else VideoContext::Get()->PrevFrame();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,8 +83,5 @@ public:
|
||||||
VideoSlider(wxWindow* parent, wxWindowID id);
|
VideoSlider(wxWindow* parent, wxWindowID id);
|
||||||
~VideoSlider();
|
~VideoSlider();
|
||||||
|
|
||||||
void NextFrame();
|
|
||||||
void PrevFrame();
|
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue