When the video is paused, use the left/right cursor keys

for single frame stepping instead of winding. One frame without
shift-modifier, five frames with shift held down.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38671 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus
2010-09-16 12:45:03 +00:00
parent 892e4f21be
commit a110536aac
+28 -14
View File
@@ -796,19 +796,27 @@ MainWin::MessageReceived(BMessage* msg)
break; break;
bigtime_t howMuch; bigtime_t howMuch;
if (msg->FindInt64("how much", &howMuch) != B_OK) int64 frames;
if (msg->FindInt64("how much", &howMuch) != B_OK
|| msg->FindInt64("frames", &frames) != B_OK) {
break; break;
}
if (fController->Lock()) { if (fController->Lock()) {
bigtime_t seekTime = fController->TimePosition() + howMuch; if (fHasVideo && !fController->IsPlaying()) {
if (seekTime < 0) { int64 newFrame = fController->CurrentFrame() + frames;
fInitialSeekPosition = seekTime; fController->SetFramePosition(newFrame);
PostMessage(M_SKIP_PREV); } else {
} else if (seekTime > fController->TimeDuration()) { bigtime_t seekTime = fController->TimePosition() + howMuch;
fInitialSeekPosition = 0; if (seekTime < 0) {
PostMessage(M_SKIP_NEXT); fInitialSeekPosition = seekTime;
} else PostMessage(M_SKIP_PREV);
fController->SetTimePosition(seekTime); } else if (seekTime > fController->TimeDuration()) {
fInitialSeekPosition = 0;
PostMessage(M_SKIP_NEXT);
} else
fController->SetTimePosition(seekTime);
}
fController->Unlock(); fController->Unlock();
fAllowWinding = false; fAllowWinding = false;
@@ -2009,10 +2017,13 @@ MainWin::_KeyDown(BMessage* msg)
PostMessage(M_SKIP_NEXT); PostMessage(M_SKIP_NEXT);
else if (fAllowWinding) { else if (fAllowWinding) {
BMessage windMessage(M_WIND); BMessage windMessage(M_WIND);
if ((modifier & B_SHIFT_KEY) != 0) if ((modifier & B_SHIFT_KEY) != 0) {
windMessage.AddInt64("how much", 30000000LL); windMessage.AddInt64("how much", 30000000LL);
else windMessage.AddInt64("frames", 5);
} else {
windMessage.AddInt64("how much", 5000000LL); windMessage.AddInt64("how much", 5000000LL);
windMessage.AddInt64("frames", 1);
}
PostMessage(&windMessage); PostMessage(&windMessage);
} }
return true; return true;
@@ -2022,10 +2033,13 @@ MainWin::_KeyDown(BMessage* msg)
PostMessage(M_SKIP_PREV); PostMessage(M_SKIP_PREV);
else if (fAllowWinding) { else if (fAllowWinding) {
BMessage windMessage(M_WIND); BMessage windMessage(M_WIND);
if ((modifier & B_SHIFT_KEY) != 0) if ((modifier & B_SHIFT_KEY) != 0) {
windMessage.AddInt64("how much", -30000000LL); windMessage.AddInt64("how much", -30000000LL);
else windMessage.AddInt64("frames", -5);
} else {
windMessage.AddInt64("how much", -5000000LL); windMessage.AddInt64("how much", -5000000LL);
windMessage.AddInt64("frames", -1);
}
PostMessage(&windMessage); PostMessage(&windMessage);
} }
return true; return true;