* In theory, we should support getting the video aspect from the current stream.

* Added "Force Aspect Ratio" to Video menu and context menu.
* Removed some code duplication in handling the video size messages.
* Added track selection sub-menus to the context menu, replacing the IMHO
  not so important interface settings items.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31302 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus 2009-06-28 18:48:00 +00:00
parent 07cad22ee7
commit 1f3691df0f
5 changed files with 139 additions and 147 deletions

View File

@ -359,7 +359,7 @@ Controller::PlayerActivated(bool active)
void void
Controller::GetSize(int *width, int *height) Controller::GetSize(int *width, int *height, float* widthToHeightRatio)
{ {
BAutolock _(this); BAutolock _(this);
@ -368,9 +368,17 @@ Controller::GetSize(int *width, int *height)
// TODO: take aspect ratio into account! // TODO: take aspect ratio into account!
*height = format.u.raw_video.display.line_count; *height = format.u.raw_video.display.line_count;
*width = format.u.raw_video.display.line_width; *width = format.u.raw_video.display.line_width;
if (widthToHeightRatio != NULL) {
printf("pixel_width_aspect: %d\n", format.u.raw_video.pixel_width_aspect);
printf("pixel_height_aspect: %d\n", format.u.raw_video.pixel_height_aspect);
*widthToHeightRatio = (float)format.u.raw_video.pixel_width_aspect
/ format.u.raw_video.pixel_height_aspect;
}
} else { } else {
*height = 0; *height = 0;
*width = 0; *width = 0;
if (widthToHeightRatio != NULL)
*widthToHeightRatio = 0.0f;
} }
} }

View File

@ -85,7 +85,8 @@ public:
{ return fItem.Get(); } { return fItem.Get(); }
void PlayerActivated(bool active); void PlayerActivated(bool active);
void GetSize(int *width, int *height); void GetSize(int *width, int *height,
float* widthToHeightRatio = NULL);
int AudioTrackCount(); int AudioTrackCount();
int VideoTrackCount(); int VideoTrackCount();

View File

@ -66,11 +66,7 @@ enum {
M_FILE_PLAYLIST, M_FILE_PLAYLIST,
M_FILE_CLOSE, M_FILE_CLOSE,
M_FILE_QUIT, M_FILE_QUIT,
M_VIEW_50, M_VIEW_SIZE,
M_VIEW_100,
M_VIEW_200,
M_VIEW_300,
M_VIEW_400,
M_TOGGLE_FULLSCREEN, M_TOGGLE_FULLSCREEN,
M_TOGGLE_NO_BORDER, M_TOGGLE_NO_BORDER,
M_TOGGLE_NO_MENU, M_TOGGLE_NO_MENU,
@ -562,45 +558,19 @@ MainWin::MessageReceived(BMessage *msg)
_ToggleNoBorderNoMenu(); _ToggleNoBorderNoMenu();
break; break;
case M_VIEW_50: case M_VIEW_SIZE:
{
int32 size;
if (msg->FindInt32("size", &size) == B_OK) {
if (!fHasVideo) if (!fHasVideo)
break; break;
if (fIsFullscreen) if (fIsFullscreen)
_ToggleFullscreen(); _ToggleFullscreen();
_ResizeWindow(50); _ResizeWindow(size);
}
break; break;
}
case M_VIEW_100:
if (!fHasVideo)
break;
if (fIsFullscreen)
_ToggleFullscreen();
_ResizeWindow(100);
break;
case M_VIEW_200:
if (!fHasVideo)
break;
if (fIsFullscreen)
_ToggleFullscreen();
_ResizeWindow(200);
break;
case M_VIEW_300:
if (!fHasVideo)
break;
if (fIsFullscreen)
_ToggleFullscreen();
_ResizeWindow(300);
break;
case M_VIEW_400:
if (!fHasVideo)
break;
if (fIsFullscreen)
_ToggleFullscreen();
_ResizeWindow(400);
break;
/* /*
case B_ACQUIRE_OVERLAY_LOCK: case B_ACQUIRE_OVERLAY_LOCK:
printf("B_ACQUIRE_OVERLAY_LOCK\n"); printf("B_ACQUIRE_OVERLAY_LOCK\n");
@ -641,31 +611,31 @@ MainWin::MessageReceived(BMessage *msg)
break; break;
case M_ASPECT_100000_1: case M_ASPECT_100000_1:
VideoFormatChange(fSourceWidth, fSourceHeight, 1.0, 1.0); VideoFormatChange(fSourceWidth, fSourceHeight, 1.0);
break; break;
case M_ASPECT_106666_1: case M_ASPECT_106666_1:
VideoFormatChange(fSourceWidth, fSourceHeight, 1.06666, 1.0); VideoFormatChange(fSourceWidth, fSourceHeight, 1.06666);
break; break;
case M_ASPECT_109091_1: case M_ASPECT_109091_1:
VideoFormatChange(fSourceWidth, fSourceHeight, 1.09091, 1.0); VideoFormatChange(fSourceWidth, fSourceHeight, 1.09091);
break; break;
case M_ASPECT_141176_1: case M_ASPECT_141176_1:
VideoFormatChange(fSourceWidth, fSourceHeight, 1.41176, 1.0); VideoFormatChange(fSourceWidth, fSourceHeight, 1.41176);
break; break;
case M_ASPECT_720_576: case M_ASPECT_720_576:
VideoFormatChange(720, 576, 1.06666, 1.0); VideoFormatChange(720, 576, 1.06666);
break; break;
case M_ASPECT_704_576: case M_ASPECT_704_576:
VideoFormatChange(704, 576, 1.09091, 1.0); VideoFormatChange(704, 576, 1.09091);
break; break;
case M_ASPECT_544_576: case M_ASPECT_544_576:
VideoFormatChange(544, 576, 1.41176, 1.0); VideoFormatChange(544, 576, 1.41176);
break; break;
case M_SET_PLAYLIST_POSITION: case M_SET_PLAYLIST_POSITION:
@ -825,25 +795,17 @@ MainWin::ShowPlaylistWindow()
void void
MainWin::VideoFormatChange(int width, int height, float width_scale, MainWin::VideoFormatChange(int width, int height, float widthToHeightRatio)
float height_scale)
{ {
// called when video format or aspect ratio changes // called when video format or aspect ratio changes
printf("VideoFormatChange enter: width %d, height %d, width_scale %.6f, " printf("VideoFormatChange enter: width %d, height %d, "
"height_scale %.6f\n", width, height, width_scale, height_scale); "widthToHeightRatio %.6f\n", width, height, widthToHeightRatio);
if (width_scale < 1.0 && height_scale >= 1.0) {
width_scale = 1.0 / width_scale;
height_scale = 1.0 / height_scale;
printf("inverting! new values: width_scale %.6f, height_scale %.6f\n",
width_scale, height_scale);
}
fSourceWidth = width; fSourceWidth = width;
fSourceHeight = height; fSourceHeight = height;
fWidthScale = width_scale; fWidthScale = widthToHeightRatio;
fHeightScale = height_scale; fHeightScale = 1.0f;
FrameResized(Bounds().Width(), Bounds().Height()); FrameResized(Bounds().Width(), Bounds().Height());
@ -876,21 +838,18 @@ MainWin::_SetupWindow()
{ {
// printf("MainWin::_SetupWindow\n"); // printf("MainWin::_SetupWindow\n");
// Populate the track menus // Populate the track menus
_SetupTrackMenus(); _SetupTrackMenus(fAudioTrackMenu, fVideoTrackMenu);
// Enable both if a file was loaded // Enable both if a file was loaded
fAudioTrackMenu->SetEnabled(fHasFile); fAudioTrackMenu->SetEnabled(fHasFile);
fVideoTrackMenu->SetEnabled(fHasFile); fVideoTrackMenu->SetEnabled(fHasFile);
fVideoMenu->SetEnabled(fHasVideo); fVideoMenu->SetEnabled(fHasVideo);
fAudioMenu->SetEnabled(fHasAudio); fAudioMenu->SetEnabled(fHasAudio);
// fDebugMenu->SetEnabled(fHasVideo);
int previousSourceWidth = fSourceWidth; int previousSourceWidth = fSourceWidth;
int previousSourceHeight = fSourceHeight; int previousSourceHeight = fSourceHeight;
if (fHasVideo) { if (fHasVideo) {
fController->GetSize(&fSourceWidth, &fSourceHeight); fController->GetSize(&fSourceWidth, &fSourceHeight, &fWidthScale);
fWidthScale = 1.0;
fHeightScale = 1.0; fHeightScale = 1.0;
// TODO: implement aspect ratio
} else { } else {
fSourceWidth = 0; fSourceWidth = 0;
fSourceHeight = 0; fSourceHeight = 0;
@ -916,16 +875,15 @@ MainWin::_CreateMenu()
fPlaylistMenu = new BMenu("Playlist"B_UTF8_ELLIPSIS); fPlaylistMenu = new BMenu("Playlist"B_UTF8_ELLIPSIS);
fAudioMenu = new BMenu("Audio"); fAudioMenu = new BMenu("Audio");
fVideoMenu = new BMenu("Video"); fVideoMenu = new BMenu("Video");
fVideoAspectMenu = new BMenu("Aspect Ratio");
fSettingsMenu = new BMenu("Settings"); fSettingsMenu = new BMenu("Settings");
fAudioTrackMenu = new BMenu("Track"); fAudioTrackMenu = new BMenu("Track");
fVideoTrackMenu = new BMenu("Track"); fVideoTrackMenu = new BMenu("Track");
// fDebugMenu = new BMenu("Debug");
fMenuBar->AddItem(fFileMenu); fMenuBar->AddItem(fFileMenu);
fMenuBar->AddItem(fAudioMenu); fMenuBar->AddItem(fAudioMenu);
fMenuBar->AddItem(fVideoMenu); fMenuBar->AddItem(fVideoMenu);
fMenuBar->AddItem(fSettingsMenu); fMenuBar->AddItem(fSettingsMenu);
// fMenuBar->AddItem(fDebugMenu);
fFileMenu->AddItem(new BMenuItem("New Player"B_UTF8_ELLIPSIS, fFileMenu->AddItem(new BMenuItem("New Player"B_UTF8_ELLIPSIS,
new BMessage(M_FILE_NEWPLAYER), 'N')); new BMessage(M_FILE_NEWPLAYER), 'N'));
@ -960,21 +918,39 @@ MainWin::_CreateMenu()
fVideoMenu->AddItem(fVideoTrackMenu); fVideoMenu->AddItem(fVideoTrackMenu);
fVideoMenu->AddSeparatorItem(); fVideoMenu->AddSeparatorItem();
fVideoMenu->AddItem(new BMenuItem("50% scale", BMessage* resizeMessage = new BMessage(M_VIEW_SIZE);
new BMessage(M_VIEW_50), '0')); resizeMessage->AddInt32("size", 50);
fVideoMenu->AddItem(new BMenuItem("100% scale", fVideoMenu->AddItem(new BMenuItem("50% scale", resizeMessage, '0'));
new BMessage(M_VIEW_100), '1'));
fVideoMenu->AddItem(new BMenuItem("200% scale", resizeMessage = new BMessage(M_VIEW_SIZE);
new BMessage(M_VIEW_200), '2')); resizeMessage->AddInt32("size", 100);
fVideoMenu->AddItem(new BMenuItem("300% scale", fVideoMenu->AddItem(new BMenuItem("100% scale", resizeMessage, '1'));
new BMessage(M_VIEW_300), '3'));
fVideoMenu->AddItem(new BMenuItem("400% scale", resizeMessage = new BMessage(M_VIEW_SIZE);
new BMessage(M_VIEW_400), '4')); resizeMessage->AddInt32("size", 200);
fVideoMenu->AddItem(new BMenuItem("200% scale", resizeMessage, '2'));
resizeMessage = new BMessage(M_VIEW_SIZE);
resizeMessage->AddInt32("size", 300);
fVideoMenu->AddItem(new BMenuItem("300% scale", resizeMessage, '3'));
resizeMessage = new BMessage(M_VIEW_SIZE);
resizeMessage->AddInt32("size", 400);
fVideoMenu->AddItem(new BMenuItem("400% scale", resizeMessage, '4'));
fVideoMenu->AddSeparatorItem(); fVideoMenu->AddSeparatorItem();
fVideoMenu->AddItem(new BMenuItem("Full Screen", fVideoMenu->AddItem(new BMenuItem("Full Screen",
new BMessage(M_TOGGLE_FULLSCREEN), 'F')); new BMessage(M_TOGGLE_FULLSCREEN), 'F'));
fVideoMenu->AddItem(new BMenuItem("Keep Aspect Ratio",
new BMessage(M_TOGGLE_KEEP_ASPECT_RATIO), 'K')); fVideoMenu->AddSeparatorItem();
_SetupVideoAspectItems(fVideoAspectMenu);
fVideoMenu->AddItem(fVideoAspectMenu);
item = new BMenuItem("Keep Aspect Ratio",
new BMessage(M_TOGGLE_KEEP_ASPECT_RATIO), 'K');
item->SetMarked(fKeepAspectRatio);
fVideoMenu->AddItem(item);
fSettingsMenu->AddItem(new BMenuItem("No Menu", fSettingsMenu->AddItem(new BMenuItem("No Menu",
new BMessage(M_TOGGLE_NO_MENU), 'M')); new BMessage(M_TOGGLE_NO_MENU), 'M'));
@ -989,29 +965,34 @@ MainWin::_CreateMenu()
new BMessage(M_SETTINGS), 'S'); new BMessage(M_SETTINGS), 'S');
fSettingsMenu->AddItem(item); fSettingsMenu->AddItem(item);
item->SetTarget(be_app); item->SetTarget(be_app);
// fDebugMenu->AddItem(new BMenuItem("pixel aspect ratio 1.00000:1",
// new BMessage(M_ASPECT_100000_1)));
// fDebugMenu->AddItem(new BMenuItem("pixel aspect ratio 1.06666:1",
// new BMessage(M_ASPECT_106666_1)));
// fDebugMenu->AddItem(new BMenuItem("pixel aspect ratio 1.09091:1",
// new BMessage(M_ASPECT_109091_1)));
// fDebugMenu->AddItem(new BMenuItem("pixel aspect ratio 1.41176:1",
// new BMessage(M_ASPECT_141176_1)));
// fDebugMenu->AddItem(new BMenuItem("force 720 x 576, display aspect 4:3",
// new BMessage(M_ASPECT_720_576)));
// fDebugMenu->AddItem(new BMenuItem("force 704 x 576, display aspect 4:3",
// new BMessage(M_ASPECT_704_576)));
// fDebugMenu->AddItem(new BMenuItem("force 544 x 576, display aspect 4:3",
// new BMessage(M_ASPECT_544_576)));
} }
void void
MainWin::_SetupTrackMenus() MainWin::_SetupVideoAspectItems(BMenu* menu)
{ {
fAudioTrackMenu->RemoveItems(0, fAudioTrackMenu->CountItems(), true); menu->AddItem(new BMenuItem("1 : 1",
fVideoTrackMenu->RemoveItems(0, fVideoTrackMenu->CountItems(), true); new BMessage(M_ASPECT_100000_1)));
menu->AddItem(new BMenuItem("1.06666 : 1",
new BMessage(M_ASPECT_106666_1)));
menu->AddItem(new BMenuItem("1.09091 : 1",
new BMessage(M_ASPECT_109091_1)));
menu->AddItem(new BMenuItem("1.41176 : 1",
new BMessage(M_ASPECT_141176_1)));
menu->AddItem(new BMenuItem("Force 720 x 576, Aspect 4:3",
new BMessage(M_ASPECT_720_576)));
menu->AddItem(new BMenuItem("Force 704 x 576, Aspect 4:3",
new BMessage(M_ASPECT_704_576)));
menu->AddItem(new BMenuItem("Force 544 x 576, Aspect 4:3",
new BMessage(M_ASPECT_544_576)));
}
void
MainWin::_SetupTrackMenus(BMenu* audioTrackMenu, BMenu* videoTrackMenu)
{
audioTrackMenu->RemoveItems(0, audioTrackMenu->CountItems(), true);
videoTrackMenu->RemoveItems(0, videoTrackMenu->CountItems(), true);
char s[100]; char s[100];
@ -1022,11 +1003,11 @@ MainWin::_SetupTrackMenus()
BMenuItem* item = new BMenuItem(s, BMenuItem* item = new BMenuItem(s,
new BMessage(M_SELECT_AUDIO_TRACK + i)); new BMessage(M_SELECT_AUDIO_TRACK + i));
item->SetMarked(i == current); item->SetMarked(i == current);
fAudioTrackMenu->AddItem(item); audioTrackMenu->AddItem(item);
} }
if (!count) { if (!count) {
fAudioTrackMenu->AddItem(new BMenuItem("none", new BMessage(M_DUMMY))); audioTrackMenu->AddItem(new BMenuItem("none", new BMessage(M_DUMMY)));
fAudioTrackMenu->ItemAt(0)->SetMarked(true); audioTrackMenu->ItemAt(0)->SetMarked(true);
} }
@ -1037,11 +1018,11 @@ MainWin::_SetupTrackMenus()
BMenuItem* item = new BMenuItem(s, BMenuItem* item = new BMenuItem(s,
new BMessage(M_SELECT_VIDEO_TRACK + i)); new BMessage(M_SELECT_VIDEO_TRACK + i));
item->SetMarked(i == current); item->SetMarked(i == current);
fVideoTrackMenu->AddItem(item); videoTrackMenu->AddItem(item);
} }
if (!count) { if (!count) {
fVideoTrackMenu->AddItem(new BMenuItem("none", new BMessage(M_DUMMY))); videoTrackMenu->AddItem(new BMenuItem("none", new BMessage(M_DUMMY)));
fVideoTrackMenu->ItemAt(0)->SetMarked(true); videoTrackMenu->ItemAt(0)->SetMarked(true);
} }
} }
@ -1240,44 +1221,41 @@ MainWin::_ShowContextMenu(const BPoint &screen_point)
new BMessage(M_TOGGLE_FULLSCREEN), 'F')); new BMessage(M_TOGGLE_FULLSCREEN), 'F'));
item->SetMarked(fIsFullscreen); item->SetMarked(fIsFullscreen);
item->SetEnabled(fHasVideo); item->SetEnabled(fHasVideo);
BMenu* aspectSubMenu = new BMenu("Aspect Ratio");
_SetupVideoAspectItems(aspectSubMenu);
aspectSubMenu->SetTargetForItems(this);
menu->AddItem(item = new BMenuItem(aspectSubMenu));
item->SetEnabled(fHasVideo);
menu->AddItem(item = new BMenuItem("Keep Aspect Ratio", menu->AddItem(item = new BMenuItem("Keep Aspect Ratio",
new BMessage(M_TOGGLE_KEEP_ASPECT_RATIO), 'K')); new BMessage(M_TOGGLE_KEEP_ASPECT_RATIO), 'K'));
item->SetMarked(fKeepAspectRatio); item->SetMarked(fKeepAspectRatio);
item->SetEnabled(fHasVideo); item->SetEnabled(fHasVideo);
menu->AddSeparatorItem(); menu->AddSeparatorItem();
menu->AddItem(item = new BMenuItem("No Menu",
new BMessage(M_TOGGLE_NO_MENU), 'M')); // Add track selector menus
item->SetMarked(fNoMenu); BMenu* audioTrackMenu = new BMenu("Audio Track");
menu->AddItem(item = new BMenuItem("No Border", BMenu* videoTrackMenu = new BMenu("Video Track");
new BMessage(M_TOGGLE_NO_BORDER), 'B')); _SetupTrackMenus(audioTrackMenu, videoTrackMenu);
item->SetMarked(fNoBorder);
menu->AddItem(item = new BMenuItem("Always on Top", audioTrackMenu->SetTargetForItems(this);
new BMessage(M_TOGGLE_ALWAYS_ON_TOP), 'T')); videoTrackMenu->SetTargetForItems(this);
item->SetMarked(fAlwaysOnTop);
menu->AddItem(item = new BMenuItem(audioTrackMenu));
item->SetEnabled(fHasAudio);
menu->AddItem(item = new BMenuItem(videoTrackMenu));
item->SetEnabled(fHasVideo);
menu->AddSeparatorItem(); menu->AddSeparatorItem();
menu->AddItem(new BMenuItem("About " NAME B_UTF8_ELLIPSIS, menu->AddItem(new BMenuItem("About " NAME B_UTF8_ELLIPSIS,
new BMessage(B_ABOUT_REQUESTED))); new BMessage(B_ABOUT_REQUESTED)));
menu->AddSeparatorItem(); menu->AddSeparatorItem();
menu->AddItem(new BMenuItem("Quit", new BMessage(M_FILE_QUIT), 'Q')); menu->AddItem(new BMenuItem("Quit", new BMessage(M_FILE_QUIT), 'Q'));
menu->AddSeparatorItem();
menu->AddItem(new BMenuItem("pixel aspect ratio 1.00000:1",
new BMessage(M_ASPECT_100000_1)));
menu->AddItem(new BMenuItem("pixel aspect ratio 1.06666:1",
new BMessage(M_ASPECT_106666_1)));
menu->AddItem(new BMenuItem("pixel aspect ratio 1.09091:1",
new BMessage(M_ASPECT_109091_1)));
menu->AddItem(new BMenuItem("pixel aspect ratio 1.41176:1",
new BMessage(M_ASPECT_141176_1)));
menu->AddItem(new BMenuItem("force 720 x 576, display aspect 4:3",
new BMessage(M_ASPECT_720_576)));
menu->AddItem(new BMenuItem("force 704 x 576, display aspect 4:3",
new BMessage(M_ASPECT_704_576)));
menu->AddItem(new BMenuItem("force 544 x 576, display aspect 4:3",
new BMessage(M_ASPECT_544_576)));
menu->SetTargetForItems(this); menu->SetTargetForItems(this);
BRect r(screen_point.x - 5, screen_point.y - 5, screen_point.x + 5, BRect r(screen_point.x - 5, screen_point.y - 5, screen_point.x + 5,
screen_point.y + 5); screen_point.y + 5);
@ -1480,7 +1458,7 @@ MainWin::_ToggleFullscreen()
fVideoView->SetFullscreen(fIsFullscreen); fVideoView->SetFullscreen(fIsFullscreen);
_MarkSettingsItem(M_TOGGLE_FULLSCREEN, fIsFullscreen); _MarkItem(fSettingsMenu, M_TOGGLE_FULLSCREEN, fIsFullscreen);
printf("_ToggleFullscreen leave\n"); printf("_ToggleFullscreen leave\n");
} }
@ -1505,7 +1483,7 @@ MainWin::_ToggleNoControls()
ResizeBy(0, fControlsHeight); ResizeBy(0, fControlsHeight);
} }
_MarkSettingsItem(M_TOGGLE_NO_CONTROLS, fNoControls); _MarkItem(fSettingsMenu, M_TOGGLE_NO_CONTROLS, fNoControls);
printf("_ToggleNoControls leave\n"); printf("_ToggleNoControls leave\n");
} }
@ -1532,7 +1510,7 @@ MainWin::_ToggleNoMenu()
ResizeBy(0, fMenuBarHeight); ResizeBy(0, fMenuBarHeight);
} }
_MarkSettingsItem(M_TOGGLE_NO_MENU, fNoMenu); _MarkItem(fSettingsMenu, M_TOGGLE_NO_MENU, fNoMenu);
printf("_ToggleNoMenu leave\n"); printf("_ToggleNoMenu leave\n");
} }
@ -1544,7 +1522,7 @@ MainWin::_ToggleNoBorder()
fNoBorder = !fNoBorder; fNoBorder = !fNoBorder;
SetLook(fNoBorder ? B_BORDERED_WINDOW_LOOK : B_TITLED_WINDOW_LOOK); SetLook(fNoBorder ? B_BORDERED_WINDOW_LOOK : B_TITLED_WINDOW_LOOK);
_MarkSettingsItem(M_TOGGLE_NO_BORDER, fNoBorder); _MarkItem(fSettingsMenu, M_TOGGLE_NO_BORDER, fNoBorder);
} }
@ -1554,7 +1532,7 @@ MainWin::_ToggleAlwaysOnTop()
fAlwaysOnTop = !fAlwaysOnTop; fAlwaysOnTop = !fAlwaysOnTop;
SetFeel(fAlwaysOnTop ? B_FLOATING_ALL_WINDOW_FEEL : B_NORMAL_WINDOW_FEEL); SetFeel(fAlwaysOnTop ? B_FLOATING_ALL_WINDOW_FEEL : B_NORMAL_WINDOW_FEEL);
_MarkSettingsItem(M_TOGGLE_ALWAYS_ON_TOP, fAlwaysOnTop); _MarkItem(fSettingsMenu, M_TOGGLE_ALWAYS_ON_TOP, fAlwaysOnTop);
} }
@ -1564,7 +1542,7 @@ MainWin::_ToggleKeepAspectRatio()
fKeepAspectRatio = !fKeepAspectRatio; fKeepAspectRatio = !fKeepAspectRatio;
FrameResized(Bounds().Width(), Bounds().Height()); FrameResized(Bounds().Width(), Bounds().Height());
_MarkSettingsItem(M_TOGGLE_KEEP_ASPECT_RATIO, fKeepAspectRatio); _MarkItem(fVideoMenu, M_TOGGLE_KEEP_ASPECT_RATIO, fKeepAspectRatio);
} }
@ -1647,9 +1625,9 @@ MainWin::_MarkPlaylistItem(int32 index)
void void
MainWin::_MarkSettingsItem(uint32 command, bool mark) MainWin::_MarkItem(BMenu* menu, uint32 command, bool mark)
{ {
if (BMenuItem* item = fSettingsMenu->FindItem(command)) if (BMenuItem* item = menu->FindItem(command))
item->SetMarked(mark); item->SetMarked(mark);
} }

View File

@ -59,14 +59,16 @@ public:
void ShowSettingsWindow(); void ShowSettingsWindow();
void VideoFormatChange(int width, int height, void VideoFormatChange(int width, int height,
float widthScale, float heightScale); float widthToHeightRatio);
private: private:
void _RefsReceived(BMessage* message); void _RefsReceived(BMessage* message);
void _SetupWindow(); void _SetupWindow();
void _CreateMenu(); void _CreateMenu();
void _SetupTrackMenus(); void _SetupVideoAspectItems(BMenu* menu);
void _SetupTrackMenus(BMenu* audioTrackMenu,
BMenu* videoTrackMenu);
void _SetWindowSizeLimits(); void _SetWindowSizeLimits();
void _ResizeWindow(int percent); void _ResizeWindow(int percent);
void _ResizeVideoView(int x, int y, int width, void _ResizeVideoView(int x, int y, int width,
@ -94,7 +96,8 @@ private:
int32 index); int32 index);
void _RemovePlaylistItem(int32 index); void _RemovePlaylistItem(int32 index);
void _MarkPlaylistItem(int32 index); void _MarkPlaylistItem(int32 index);
void _MarkSettingsItem(uint32 command, bool mark); void _MarkItem(BMenu* menu, uint32 command,
bool mark);
void _AdoptGlobalSettings(); void _AdoptGlobalSettings();
@ -108,11 +111,11 @@ private:
BMenu* fFileMenu; BMenu* fFileMenu;
BMenu* fAudioMenu; BMenu* fAudioMenu;
BMenu* fVideoMenu; BMenu* fVideoMenu;
BMenu* fVideoAspectMenu;
BMenu* fAudioTrackMenu; BMenu* fAudioTrackMenu;
BMenu* fVideoTrackMenu; BMenu* fVideoTrackMenu;
BMenu* fSettingsMenu; BMenu* fSettingsMenu;
BMenu* fPlaylistMenu; BMenu* fPlaylistMenu;
BMenu* fDebugMenu;
bool fHasFile; bool fHasFile;
bool fHasVideo; bool fHasVideo;

View File

@ -103,11 +103,13 @@ VideoView::Pulse()
BPoint where; BPoint where;
uint32 buttons; uint32 buttons;
GetMouse(&where, &buttons, false); GetMouse(&where, &buttons, false);
if (buttons == 0) {
set_mouse_position((int32)where.x, (int32)where.y); set_mouse_position((int32)where.x, (int32)where.y);
// hide the mouse cursor until the user moves it // hide the mouse cursor until the user moves it
be_app->ObscureCursor(); be_app->ObscureCursor();
} }
} }
}
void void