added some resizing support
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17214 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1,3 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Controller.cpp - Media Player for the Haiku Operating System
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Marcus Overhagen <[email protected]>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* version 2 as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
*/
|
||||||
#include <Message.h>
|
#include <Message.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -17,6 +36,13 @@ ControllerView::~ControllerView()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ControllerView::ResizeToPreferred()
|
||||||
|
{
|
||||||
|
ResizeTo(300 - 1, 60 - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ControllerView::AttachedToWindow()
|
ControllerView::AttachedToWindow()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,3 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* Controller.cpp - Media Player for the Haiku Operating System
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Marcus Overhagen <[email protected]>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* version 2 as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __CONTROLLER_VIEW_H
|
#ifndef __CONTROLLER_VIEW_H
|
||||||
#define __CONTROLLER_VIEW_H
|
#define __CONTROLLER_VIEW_H
|
||||||
|
|
||||||
@@ -11,6 +31,9 @@ class ControllerView : public BView
|
|||||||
public:
|
public:
|
||||||
ControllerView(BRect frame, Controller *ctrl);
|
ControllerView(BRect frame, Controller *ctrl);
|
||||||
~ControllerView();
|
~ControllerView();
|
||||||
|
|
||||||
|
void ResizeToPreferred();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void AttachedToWindow();
|
void AttachedToWindow();
|
||||||
void MessageReceived(BMessage *msg);
|
void MessageReceived(BMessage *msg);
|
||||||
|
|||||||
+208
-106
@@ -32,8 +32,10 @@
|
|||||||
#include <Messenger.h>
|
#include <Messenger.h>
|
||||||
#include <PopUpMenu.h>
|
#include <PopUpMenu.h>
|
||||||
#include <String.h>
|
#include <String.h>
|
||||||
|
#include <Debug.h>
|
||||||
|
|
||||||
#define NAME "MediaPlayer"
|
#define NAME "MediaPlayer"
|
||||||
|
#define MIN_WIDTH 250
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@@ -53,7 +55,8 @@ enum
|
|||||||
M_TOGGLE_FULLSCREEN,
|
M_TOGGLE_FULLSCREEN,
|
||||||
M_TOGGLE_NO_BORDER,
|
M_TOGGLE_NO_BORDER,
|
||||||
M_TOGGLE_NO_MENU,
|
M_TOGGLE_NO_MENU,
|
||||||
M_TOGGLE_NO_BORDER_NO_MENU,
|
M_TOGGLE_NO_CONTROLS,
|
||||||
|
M_TOGGLE_NO_BORDER_NO_MENU_NO_CONTROLS,
|
||||||
M_TOGGLE_ALWAYS_ON_TOP,
|
M_TOGGLE_ALWAYS_ON_TOP,
|
||||||
M_TOGGLE_KEEP_ASPECT_RATIO,
|
M_TOGGLE_KEEP_ASPECT_RATIO,
|
||||||
M_PREFERENCES,
|
M_PREFERENCES,
|
||||||
@@ -78,7 +81,7 @@ enum
|
|||||||
|
|
||||||
|
|
||||||
MainWin::MainWin()
|
MainWin::MainWin()
|
||||||
: BWindow(BRect(200,200,0,0), NAME, B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS /* | B_WILL_ACCEPT_FIRST_CLICK */)
|
: BWindow(BRect(200,200,450,400), NAME, B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS /* | B_WILL_ACCEPT_FIRST_CLICK */)
|
||||||
, fFilePanel(NULL)
|
, fFilePanel(NULL)
|
||||||
, fHasFile(false)
|
, fHasFile(false)
|
||||||
, fHasVideo(false)
|
, fHasVideo(false)
|
||||||
@@ -88,8 +91,9 @@ MainWin::MainWin()
|
|||||||
, fAlwaysOnTop(false)
|
, fAlwaysOnTop(false)
|
||||||
, fNoMenu(false)
|
, fNoMenu(false)
|
||||||
, fNoBorder(false)
|
, fNoBorder(false)
|
||||||
, fSourceWidth(720)
|
, fNoControls(false)
|
||||||
, fSourceHeight(576)
|
, fSourceWidth(0)
|
||||||
|
, fSourceHeight(0)
|
||||||
, fWidthScale(1.0)
|
, fWidthScale(1.0)
|
||||||
, fHeightScale(1.0)
|
, fHeightScale(1.0)
|
||||||
, fMouseDownTracking(false)
|
, fMouseDownTracking(false)
|
||||||
@@ -113,24 +117,30 @@ MainWin::MainWin()
|
|||||||
fMenuBar->SetResizingMode(B_FOLLOW_TOP | B_FOLLOW_LEFT_RIGHT);
|
fMenuBar->SetResizingMode(B_FOLLOW_TOP | B_FOLLOW_LEFT_RIGHT);
|
||||||
|
|
||||||
// video view
|
// video view
|
||||||
BRect video_rect = BRect(0, fMenuBarHeight, rect.right, rect.bottom);
|
rect = BRect(0, fMenuBarHeight, fBackground->Bounds().right, fMenuBarHeight + 10);
|
||||||
fVideoView = new VideoView(video_rect, "video display", B_FOLLOW_ALL, B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE);
|
fVideoView = new VideoView(rect, "video display", B_FOLLOW_ALL, B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE);
|
||||||
fBackground->AddChild(fVideoView);
|
fBackground->AddChild(fVideoView);
|
||||||
|
|
||||||
fVideoView->MakeFocus();
|
// controls
|
||||||
|
rect = BRect(0, fMenuBarHeight + 11, fBackground->Bounds().right, fBackground->Bounds().bottom);
|
||||||
|
fControls = new ControllerView(rect, fController);
|
||||||
|
fBackground->AddChild(fControls);
|
||||||
|
fControls->ResizeToPreferred();
|
||||||
|
fControlsHeight = (int)fControls->Frame().Height() + 1;
|
||||||
|
fControlsWidth = (int)fControls->Frame().Width() + 1;
|
||||||
|
fControls->SetResizingMode(B_FOLLOW_BOTTOM | B_FOLLOW_LEFT_RIGHT);
|
||||||
|
fControls->MoveTo(0, fBackground->Bounds().bottom - fControlsHeight + 1);
|
||||||
|
|
||||||
// SetSizeLimits(fControlViewMinWidth - 1, 32767,
|
fVideoView->ResizeTo(fBackground->Bounds().Width(), fBackground->Bounds().Height() - fMenuBarHeight - fControlsHeight);
|
||||||
// fMenuBarHeight + fControlViewHeight - 1, fMenuBarHeight + fControlViewHeight - 1);
|
|
||||||
|
|
||||||
// SetSizeLimits(320 - 1, 32767, 240 + fMenuBarHeight - 1, 32767);
|
|
||||||
|
|
||||||
SetSizeLimits(0, 32767, fMenuBarHeight - 1, 32767);
|
|
||||||
|
|
||||||
fController->SetVideoView(fVideoView);
|
fController->SetVideoView(fVideoView);
|
||||||
|
|
||||||
fVideoView->IsOverlaySupported();
|
fVideoView->IsOverlaySupported();
|
||||||
|
|
||||||
VideoFormatChange(fSourceWidth, fSourceHeight, fWidthScale, fHeightScale);
|
printf("fMenuBarHeight %d\n", fMenuBarHeight);
|
||||||
|
printf("fControlsHeight %d\n", fControlsHeight);
|
||||||
|
printf("fControlsWidth %d\n", fControlsWidth);
|
||||||
|
|
||||||
|
SetupWindow();
|
||||||
|
|
||||||
Show();
|
Show();
|
||||||
}
|
}
|
||||||
@@ -180,6 +190,51 @@ MainWin::SetupWindow()
|
|||||||
fAudioMenu->ItemAt(0)->SetMarked(true);
|
fAudioMenu->ItemAt(0)->SetMarked(true);
|
||||||
fVideoMenu->ItemAt(0)->SetMarked(true);
|
fVideoMenu->ItemAt(0)->SetMarked(true);
|
||||||
|
|
||||||
|
if (fHasVideo) {
|
||||||
|
// VideoFormatChange(int width, int height, float width_scale, float height_scale)
|
||||||
|
fSourceWidth = 320;
|
||||||
|
fSourceHeight = 240;
|
||||||
|
fWidthScale = 1.24;
|
||||||
|
fHeightScale = 1.35;
|
||||||
|
} else {
|
||||||
|
fSourceWidth = 320;
|
||||||
|
fSourceHeight = 240;
|
||||||
|
fWidthScale = 1.24;
|
||||||
|
fHeightScale = 1.35;
|
||||||
|
}
|
||||||
|
|
||||||
|
int video_width;
|
||||||
|
int video_height;
|
||||||
|
|
||||||
|
// get required window size
|
||||||
|
if (fHasVideo) {
|
||||||
|
video_width = 400;
|
||||||
|
video_height = 300;
|
||||||
|
} else {
|
||||||
|
video_width = 0;
|
||||||
|
video_height = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate and set the initial window size
|
||||||
|
int width = max_c(fControlsWidth, video_width);
|
||||||
|
int height = (fNoMenu ? 0 : fMenuBarHeight) + (fNoControls ? 0 : fControlsHeight) + video_height;
|
||||||
|
SetWindowSizeLimits();
|
||||||
|
ResizeTo(width - 1, height - 1);
|
||||||
|
|
||||||
|
fVideoView->MakeFocus();
|
||||||
|
|
||||||
|
// VideoFormatChange(fSourceWidth, fSourceHeight, fWidthScale, fHeightScale);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MainWin::SetWindowSizeLimits()
|
||||||
|
{
|
||||||
|
int min_width = fNoControls ? MIN_WIDTH : fControlsWidth;
|
||||||
|
int min_height = (fNoMenu ? 0 : fMenuBarHeight) + (fNoControls ? 0 : fControlsHeight);
|
||||||
|
|
||||||
|
SetSizeLimits(min_width - 1, 32000, min_height - 1, fHasVideo ? 32000 : min_height - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -208,23 +263,24 @@ MainWin::CreateMenu()
|
|||||||
fFileMenu->AddItem(new BMenuItem("Close", new BMessage(M_FILE_CLOSE), 'W', B_COMMAND_KEY));
|
fFileMenu->AddItem(new BMenuItem("Close", new BMessage(M_FILE_CLOSE), 'W', B_COMMAND_KEY));
|
||||||
fFileMenu->AddItem(new BMenuItem("Quit", new BMessage(M_FILE_QUIT), 'Q', B_COMMAND_KEY));
|
fFileMenu->AddItem(new BMenuItem("Quit", new BMessage(M_FILE_QUIT), 'Q', B_COMMAND_KEY));
|
||||||
|
|
||||||
|
fViewMenu->AddItem(fAudioMenu);
|
||||||
|
fViewMenu->AddItem(fVideoMenu);
|
||||||
|
fViewMenu->AddSeparatorItem();
|
||||||
fViewMenu->AddItem(new BMenuItem("50% scale", new BMessage(M_VIEW_50), '0', B_COMMAND_KEY));
|
fViewMenu->AddItem(new BMenuItem("50% scale", new BMessage(M_VIEW_50), '0', B_COMMAND_KEY));
|
||||||
fViewMenu->AddItem(new BMenuItem("100% scale", new BMessage(M_VIEW_100), '1', B_COMMAND_KEY));
|
fViewMenu->AddItem(new BMenuItem("100% scale", new BMessage(M_VIEW_100), '1', B_COMMAND_KEY));
|
||||||
fViewMenu->AddItem(new BMenuItem("200% scale", new BMessage(M_VIEW_200), '2', B_COMMAND_KEY));
|
fViewMenu->AddItem(new BMenuItem("200% scale", new BMessage(M_VIEW_200), '2', B_COMMAND_KEY));
|
||||||
fViewMenu->AddItem(new BMenuItem("300% scale", new BMessage(M_VIEW_300), '3', B_COMMAND_KEY));
|
fViewMenu->AddItem(new BMenuItem("300% scale", new BMessage(M_VIEW_300), '3', B_COMMAND_KEY));
|
||||||
fViewMenu->AddItem(new BMenuItem("400% scale", new BMessage(M_VIEW_400), '4', B_COMMAND_KEY));
|
fViewMenu->AddItem(new BMenuItem("400% scale", new BMessage(M_VIEW_400), '4', B_COMMAND_KEY));
|
||||||
fViewMenu->AddItem(new BMenuItem("Full Screen", new BMessage(M_TOGGLE_FULLSCREEN), 'F', B_COMMAND_KEY));
|
|
||||||
fViewMenu->SetRadioMode(true);
|
|
||||||
fViewMenu->AddSeparatorItem();
|
fViewMenu->AddSeparatorItem();
|
||||||
fViewMenu->AddItem(new BMenuItem("Always on Top", new BMessage(M_TOGGLE_ALWAYS_ON_TOP), 'T', B_COMMAND_KEY));
|
fViewMenu->AddItem(new BMenuItem("Full Screen", new BMessage(M_TOGGLE_FULLSCREEN), 'F', B_COMMAND_KEY));
|
||||||
|
// fViewMenu->SetRadioMode(true);
|
||||||
|
// fViewMenu->AddSeparatorItem();
|
||||||
|
// fViewMenu->AddItem(new BMenuItem("Always on Top", new BMessage(M_TOGGLE_ALWAYS_ON_TOP), 'T', B_COMMAND_KEY));
|
||||||
|
|
||||||
fSettingsMenu->AddItem(fAudioMenu);
|
// fSettingsMenu->AddSeparatorItem();
|
||||||
fSettingsMenu->AddItem(fVideoMenu);
|
|
||||||
fSettingsMenu->AddItem(new BMenuItem("Scale to native size", new BMessage(M_SCALE_TO_NATIVE_SIZE), 'N', B_COMMAND_KEY));
|
|
||||||
fSettingsMenu->AddItem(new BMenuItem("Full Screen", new BMessage(M_TOGGLE_FULLSCREEN), 'F', B_COMMAND_KEY));
|
|
||||||
fSettingsMenu->AddSeparatorItem();
|
|
||||||
fSettingsMenu->AddItem(new BMenuItem("No Menu", new BMessage(M_TOGGLE_NO_MENU), 'M', B_COMMAND_KEY));
|
fSettingsMenu->AddItem(new BMenuItem("No Menu", new BMessage(M_TOGGLE_NO_MENU), 'M', B_COMMAND_KEY));
|
||||||
fSettingsMenu->AddItem(new BMenuItem("No Border", new BMessage(M_TOGGLE_NO_BORDER), 'B', B_COMMAND_KEY));
|
fSettingsMenu->AddItem(new BMenuItem("No Border", new BMessage(M_TOGGLE_NO_BORDER), 'B', B_COMMAND_KEY));
|
||||||
|
fSettingsMenu->AddItem(new BMenuItem("No Controls", new BMessage(M_TOGGLE_NO_CONTROLS), 'C', B_COMMAND_KEY));
|
||||||
fSettingsMenu->AddItem(new BMenuItem("Always on Top", new BMessage(M_TOGGLE_ALWAYS_ON_TOP), 'T', B_COMMAND_KEY));
|
fSettingsMenu->AddItem(new BMenuItem("Always on Top", new BMessage(M_TOGGLE_ALWAYS_ON_TOP), 'T', B_COMMAND_KEY));
|
||||||
fSettingsMenu->AddItem(new BMenuItem("Keep Aspect Ratio", new BMessage(M_TOGGLE_KEEP_ASPECT_RATIO), 'K', B_COMMAND_KEY));
|
fSettingsMenu->AddItem(new BMenuItem("Keep Aspect Ratio", new BMessage(M_TOGGLE_KEEP_ASPECT_RATIO), 'K', B_COMMAND_KEY));
|
||||||
fSettingsMenu->AddSeparatorItem();
|
fSettingsMenu->AddSeparatorItem();
|
||||||
@@ -240,13 +296,14 @@ MainWin::CreateMenu()
|
|||||||
|
|
||||||
fAudioMenu->SetRadioMode(true);
|
fAudioMenu->SetRadioMode(true);
|
||||||
fVideoMenu->SetRadioMode(true);
|
fVideoMenu->SetRadioMode(true);
|
||||||
|
/*
|
||||||
fSettingsMenu->ItemAt(3)->SetMarked(fIsFullscreen);
|
fSettingsMenu->ItemAt(3)->SetMarked(fIsFullscreen);
|
||||||
fSettingsMenu->ItemAt(5)->SetMarked(fNoMenu);
|
fSettingsMenu->ItemAt(5)->SetMarked(fNoMenu);
|
||||||
fSettingsMenu->ItemAt(6)->SetMarked(fNoBorder);
|
fSettingsMenu->ItemAt(6)->SetMarked(fNoBorder);
|
||||||
fSettingsMenu->ItemAt(7)->SetMarked(fAlwaysOnTop);
|
fSettingsMenu->ItemAt(7)->SetMarked(fAlwaysOnTop);
|
||||||
fSettingsMenu->ItemAt(8)->SetMarked(fKeepAspectRatio);
|
fSettingsMenu->ItemAt(8)->SetMarked(fKeepAspectRatio);
|
||||||
fSettingsMenu->ItemAt(10)->SetEnabled(false); // XXX disable unused preference menu
|
fSettingsMenu->ItemAt(10)->SetEnabled(false); // XXX disable unused preference menu
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -313,7 +370,7 @@ MainWin::MouseDown(BMessage *msg)
|
|||||||
if (2 == buttons && msg->FindInt32("clicks") % 2 == 0) {
|
if (2 == buttons && msg->FindInt32("clicks") % 2 == 0) {
|
||||||
BRect r(screen_where.x - 1, screen_where.y - 1, screen_where.x + 1, screen_where.y + 1);
|
BRect r(screen_where.x - 1, screen_where.y - 1, screen_where.x + 1, screen_where.y + 1);
|
||||||
if (r.Contains(fMouseDownMousePos)) {
|
if (r.Contains(fMouseDownMousePos)) {
|
||||||
PostMessage(M_TOGGLE_NO_BORDER_NO_MENU);
|
PostMessage(M_TOGGLE_NO_BORDER_NO_MENU_NO_CONTROLS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -446,6 +503,7 @@ MainWin::VideoFormatChange(int width, int height, float width_scale, float heigh
|
|||||||
fWidthScale = width_scale;
|
fWidthScale = width_scale;
|
||||||
fHeightScale = height_scale;
|
fHeightScale = height_scale;
|
||||||
|
|
||||||
|
/*
|
||||||
// ResizeWindow(Bounds().Width() + 1, Bounds().Height() + 1, true);
|
// ResizeWindow(Bounds().Width() + 1, Bounds().Height() + 1, true);
|
||||||
|
|
||||||
if (fIsFullscreen) {
|
if (fIsFullscreen) {
|
||||||
@@ -453,6 +511,7 @@ MainWin::VideoFormatChange(int width, int height, float width_scale, float heigh
|
|||||||
} else {
|
} else {
|
||||||
AdjustWindowedRenderer(false);
|
AdjustWindowedRenderer(false);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
printf("VideoFormatChange leave\n");
|
printf("VideoFormatChange leave\n");
|
||||||
|
|
||||||
@@ -469,13 +528,34 @@ MainWin::Zoom(BPoint rec_position, float rec_width, float rec_height)
|
|||||||
void
|
void
|
||||||
MainWin::FrameResized(float new_width, float new_height)
|
MainWin::FrameResized(float new_width, float new_height)
|
||||||
{
|
{
|
||||||
// called when the window got resized
|
|
||||||
fFrameResizedCalled = true;
|
|
||||||
|
|
||||||
if (new_width != Bounds().Width() || new_height != Bounds().Height()) {
|
if (new_width != Bounds().Width() || new_height != Bounds().Height()) {
|
||||||
debugger("size wrong\n");
|
debugger("size wrong\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("FrameResized enter: new_width %.0f, new_height %.0f\n", new_width, new_height);
|
||||||
|
|
||||||
|
int max_video_width = new_width + 1;
|
||||||
|
int max_video_height = new_height + 1;
|
||||||
|
if (!fNoMenu)
|
||||||
|
max_video_height -= fMenuBarHeight;
|
||||||
|
if (!fNoControls)
|
||||||
|
max_video_height -= fControlsHeight;
|
||||||
|
|
||||||
|
ASSERT(max_video_height >= 0);
|
||||||
|
|
||||||
|
if (max_video_height == 0 && !fVideoView->IsHidden())
|
||||||
|
fVideoView->Hide();
|
||||||
|
if (max_video_height != 0 && fVideoView->IsHidden())
|
||||||
|
fVideoView->Show();
|
||||||
|
|
||||||
|
fVideoViewBounds = BRect(0, fNoMenu ? 0 : fMenuBarHeight, max_video_width - 1, max_video_height - 1);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
printf("FrameResized enter: new_width %.0f, new_height %.0f, bounds width %.0f, bounds height %.0f\n", new_width, new_height, Bounds().Width(), Bounds().Height());
|
printf("FrameResized enter: new_width %.0f, new_height %.0f, bounds width %.0f, bounds height %.0f\n", new_width, new_height, Bounds().Width(), Bounds().Height());
|
||||||
|
|
||||||
@@ -508,11 +588,17 @@ MainWin::FrameResized(float new_width, float new_height)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
printf("FrameResized leave\n");
|
printf("FrameResized leave\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MainWin::ShowFileInfo()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
MainWin::UpdateWindowTitle()
|
MainWin::UpdateWindowTitle()
|
||||||
@@ -522,7 +608,7 @@ MainWin::UpdateWindowTitle()
|
|||||||
SetTitle(buf);
|
SetTitle(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
void
|
void
|
||||||
MainWin::AdjustFullscreenRenderer()
|
MainWin::AdjustFullscreenRenderer()
|
||||||
{
|
{
|
||||||
@@ -609,7 +695,7 @@ MainWin::AdjustWindowedRenderer(bool user_resized)
|
|||||||
|
|
||||||
printf("AdjustWindowedRenderer leave\n");
|
printf("AdjustWindowedRenderer leave\n");
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
MainWin::ToggleNoBorderNoMenu()
|
MainWin::ToggleNoBorderNoMenu()
|
||||||
@@ -634,6 +720,11 @@ MainWin::ToggleFullscreen()
|
|||||||
{
|
{
|
||||||
printf("ToggleFullscreen enter\n");
|
printf("ToggleFullscreen enter\n");
|
||||||
|
|
||||||
|
if (!fHasVideo) {
|
||||||
|
printf("ToggleFullscreen - ignoring, as we don't have a video\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!fFrameResizedCalled) {
|
if (!fFrameResizedCalled) {
|
||||||
printf("ToggleFullscreen - ignoring, as FrameResized wasn't called since last switch\n");
|
printf("ToggleFullscreen - ignoring, as FrameResized wasn't called since last switch\n");
|
||||||
return;
|
return;
|
||||||
@@ -681,22 +772,44 @@ MainWin::ToggleFullscreen()
|
|||||||
printf("ToggleFullscreen leave\n");
|
printf("ToggleFullscreen leave\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MainWin::ToggleNoControls()
|
||||||
|
{
|
||||||
|
printf("ToggleNoControls enter\n");
|
||||||
|
|
||||||
|
if (fIsFullscreen) {
|
||||||
|
// fullscreen is always without menu
|
||||||
|
printf("ToggleNoControls leave, doing nothing, we are fullscreen\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fNoControls = !fNoControls;
|
||||||
|
SetWindowSizeLimits();
|
||||||
|
|
||||||
|
if (fNoControls) {
|
||||||
|
fControls->Hide();
|
||||||
|
ResizeBy(0, - fControlsHeight);
|
||||||
|
} else {
|
||||||
|
fControls->Show();
|
||||||
|
ResizeBy(0, fControlsHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("ToggleNoControls leave\n");
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MainWin::ToggleNoMenu()
|
MainWin::ToggleNoMenu()
|
||||||
{
|
{
|
||||||
printf("ToggleNoMenu enter\n");
|
printf("ToggleNoMenu enter\n");
|
||||||
|
|
||||||
fNoMenu = !fNoMenu;
|
|
||||||
|
|
||||||
if (fIsFullscreen) {
|
if (fIsFullscreen) {
|
||||||
// fullscreen is always without menu
|
// fullscreen is always without menu
|
||||||
printf("ToggleNoMenu leave, doing nothing, we are fullscreen\n");
|
printf("ToggleNoMenu leave, doing nothing, we are fullscreen\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fFrameResizedTriggeredAutomatically = true;
|
fNoMenu = !fNoMenu;
|
||||||
fIgnoreFrameResized = true;
|
SetWindowSizeLimits();
|
||||||
|
|
||||||
if (fNoMenu) {
|
if (fNoMenu) {
|
||||||
fMenuBar->Hide();
|
fMenuBar->Hide();
|
||||||
@@ -704,14 +817,12 @@ MainWin::ToggleNoMenu()
|
|||||||
fVideoView->ResizeBy(0, fMenuBarHeight);
|
fVideoView->ResizeBy(0, fMenuBarHeight);
|
||||||
MoveBy(0, fMenuBarHeight);
|
MoveBy(0, fMenuBarHeight);
|
||||||
ResizeBy(0, - fMenuBarHeight);
|
ResizeBy(0, - fMenuBarHeight);
|
||||||
// Sync();
|
|
||||||
} else {
|
} else {
|
||||||
fMenuBar->Show();
|
fMenuBar->Show();
|
||||||
fVideoView->MoveTo(0, fMenuBarHeight);
|
fVideoView->MoveTo(0, fMenuBarHeight);
|
||||||
fVideoView->ResizeBy(0, -fMenuBarHeight);
|
fVideoView->ResizeBy(0, - fMenuBarHeight);
|
||||||
MoveBy(0, - fMenuBarHeight);
|
MoveBy(0, - fMenuBarHeight);
|
||||||
ResizeBy(0, fMenuBarHeight);
|
ResizeBy(0, fMenuBarHeight);
|
||||||
// Sync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("ToggleNoMenu leave\n");
|
printf("ToggleNoMenu leave\n");
|
||||||
@@ -723,7 +834,6 @@ MainWin::ToggleNoBorder()
|
|||||||
{
|
{
|
||||||
printf("ToggleNoBorder enter\n");
|
printf("ToggleNoBorder enter\n");
|
||||||
fNoBorder = !fNoBorder;
|
fNoBorder = !fNoBorder;
|
||||||
// SetLook(fNoBorder ? B_NO_BORDER_WINDOW_LOOK : B_TITLED_WINDOW_LOOK);
|
|
||||||
SetLook(fNoBorder ? B_BORDERED_WINDOW_LOOK : B_TITLED_WINDOW_LOOK);
|
SetLook(fNoBorder ? B_BORDERED_WINDOW_LOOK : B_TITLED_WINDOW_LOOK);
|
||||||
printf("ToggleNoBorder leave\n");
|
printf("ToggleNoBorder leave\n");
|
||||||
}
|
}
|
||||||
@@ -744,14 +854,7 @@ MainWin::ToggleKeepAspectRatio()
|
|||||||
{
|
{
|
||||||
printf("ToggleKeepAspectRatio enter\n");
|
printf("ToggleKeepAspectRatio enter\n");
|
||||||
fKeepAspectRatio = !fKeepAspectRatio;
|
fKeepAspectRatio = !fKeepAspectRatio;
|
||||||
|
|
||||||
fFrameResizedTriggeredAutomatically = true;
|
|
||||||
FrameResized(Bounds().Width(), Bounds().Height());
|
FrameResized(Bounds().Width(), Bounds().Height());
|
||||||
// if (fIsFullscreen) {
|
|
||||||
// AdjustFullscreenRenderer();
|
|
||||||
// } else {
|
|
||||||
// AdjustWindowedRenderer(false);
|
|
||||||
// }
|
|
||||||
printf("ToggleKeepAspectRatio leave\n");
|
printf("ToggleKeepAspectRatio leave\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -798,7 +901,7 @@ MainWin::KeyDown(BMessage *msg)
|
|||||||
|
|
||||||
switch (raw_char) {
|
switch (raw_char) {
|
||||||
case B_SPACE:
|
case B_SPACE:
|
||||||
PostMessage(M_TOGGLE_NO_BORDER_NO_MENU);
|
PostMessage(M_TOGGLE_NO_BORDER_NO_MENU_NO_CONTROLS);
|
||||||
return B_OK;
|
return B_OK;
|
||||||
|
|
||||||
case B_ESCAPE:
|
case B_ESCAPE:
|
||||||
@@ -949,8 +1052,10 @@ MainWin::MessageReceived(BMessage *msg)
|
|||||||
if (msg->HasRef("refs"))
|
if (msg->HasRef("refs"))
|
||||||
RefsReceived(msg);
|
RefsReceived(msg);
|
||||||
break;
|
break;
|
||||||
|
case M_FILE_NEWPLAYER:
|
||||||
|
gMainApp->NewWindow();
|
||||||
|
break;
|
||||||
case M_FILE_OPEN:
|
case M_FILE_OPEN:
|
||||||
{
|
|
||||||
if (!fFilePanel) {
|
if (!fFilePanel) {
|
||||||
fFilePanel = new BFilePanel();
|
fFilePanel = new BFilePanel();
|
||||||
fFilePanel->SetTarget(BMessenger(0, this));
|
fFilePanel->SetTarget(BMessenger(0, this));
|
||||||
@@ -958,7 +1063,62 @@ MainWin::MessageReceived(BMessage *msg)
|
|||||||
}
|
}
|
||||||
fFilePanel->Show();
|
fFilePanel->Show();
|
||||||
break;
|
break;
|
||||||
}
|
case M_FILE_INFO:
|
||||||
|
ShowFileInfo();
|
||||||
|
break;
|
||||||
|
case M_FILE_ABOUT:
|
||||||
|
BAlert *alert;
|
||||||
|
alert = new BAlert("about", NAME"\n\n Written by Marcus Overhagen","Thanks");
|
||||||
|
if (fAlwaysOnTop) {
|
||||||
|
ToggleAlwaysOnTop();
|
||||||
|
alert->Go();
|
||||||
|
ToggleAlwaysOnTop();
|
||||||
|
} else {
|
||||||
|
alert->Go();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case M_FILE_CLOSE:
|
||||||
|
PostMessage(B_QUIT_REQUESTED);
|
||||||
|
break;
|
||||||
|
case M_FILE_QUIT:
|
||||||
|
be_app->PostMessage(B_QUIT_REQUESTED);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case M_TOGGLE_FULLSCREEN:
|
||||||
|
ToggleFullscreen();
|
||||||
|
// fSettingsMenu->ItemAt(1)->SetMarked(fIsFullscreen);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case M_TOGGLE_NO_MENU:
|
||||||
|
ToggleNoMenu();
|
||||||
|
// fSettingsMenu->ItemAt(3)->SetMarked(fNoMenu);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case M_TOGGLE_NO_CONTROLS:
|
||||||
|
ToggleNoControls();
|
||||||
|
// fSettingsMenu->ItemAt(3)->SetMarked(fNoControls);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case M_TOGGLE_NO_BORDER:
|
||||||
|
ToggleNoBorder();
|
||||||
|
// fSettingsMenu->ItemAt(4)->SetMarked(fNoBorder);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case M_TOGGLE_ALWAYS_ON_TOP:
|
||||||
|
ToggleAlwaysOnTop();
|
||||||
|
// fSettingsMenu->ItemAt(5)->SetMarked(fAlwaysOnTop);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case M_TOGGLE_KEEP_ASPECT_RATIO:
|
||||||
|
ToggleKeepAspectRatio();
|
||||||
|
// fSettingsMenu->ItemAt(6)->SetMarked(fKeepAspectRatio);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case M_TOGGLE_NO_BORDER_NO_MENU_NO_CONTROLS:
|
||||||
|
ToggleNoBorderNoMenu();
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
case B_ACQUIRE_OVERLAY_LOCK:
|
case B_ACQUIRE_OVERLAY_LOCK:
|
||||||
@@ -1046,36 +1206,6 @@ MainWin::MessageReceived(BMessage *msg)
|
|||||||
VideoFormatChange(544, 576, 1.41176, 1.0);
|
VideoFormatChange(544, 576, 1.41176, 1.0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case B_REFS_RECEIVED:
|
|
||||||
printf("MainWin::MessageReceived: B_REFS_RECEIVED\n");
|
|
||||||
// RefsReceived(msg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case B_SIMPLE_DATA:
|
|
||||||
printf("MainWin::MessageReceived: B_SIMPLE_DATA\n");
|
|
||||||
// if (msg->HasRef("refs"))
|
|
||||||
// RefsReceived(msg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case M_FILE_ABOUT:
|
|
||||||
BAlert *alert;
|
|
||||||
alert = new BAlert("about", NAME"\n\n"
|
|
||||||
INFO1
|
|
||||||
"\n\nCopyright "COPYRIGHT"\n\nVersion "VERSION"\n\nRevision "REVISION"\n\nBuild "BUILD, "Thanks");
|
|
||||||
if (fAlwaysOnTop) {
|
|
||||||
ToggleAlwaysOnTop();
|
|
||||||
alert->Go();
|
|
||||||
ToggleAlwaysOnTop();
|
|
||||||
} else {
|
|
||||||
alert->Go();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case M_FILE_QUIT:
|
|
||||||
// be_app->PostMessage(B_QUIT_REQUESTED);
|
|
||||||
PostMessage(B_QUIT_REQUESTED);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case M_SCALE_TO_NATIVE_SIZE:
|
case M_SCALE_TO_NATIVE_SIZE:
|
||||||
printf("M_SCALE_TO_NATIVE_SIZE\n");
|
printf("M_SCALE_TO_NATIVE_SIZE\n");
|
||||||
if (fIsFullscreen) {
|
if (fIsFullscreen) {
|
||||||
@@ -1086,34 +1216,6 @@ MainWin::MessageReceived(BMessage *msg)
|
|||||||
// Sync();
|
// Sync();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case M_TOGGLE_FULLSCREEN:
|
|
||||||
ToggleFullscreen();
|
|
||||||
fSettingsMenu->ItemAt(1)->SetMarked(fIsFullscreen);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case M_TOGGLE_NO_MENU:
|
|
||||||
ToggleNoMenu();
|
|
||||||
fSettingsMenu->ItemAt(3)->SetMarked(fNoMenu);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case M_TOGGLE_NO_BORDER:
|
|
||||||
ToggleNoBorder();
|
|
||||||
fSettingsMenu->ItemAt(4)->SetMarked(fNoBorder);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case M_TOGGLE_ALWAYS_ON_TOP:
|
|
||||||
ToggleAlwaysOnTop();
|
|
||||||
fSettingsMenu->ItemAt(5)->SetMarked(fAlwaysOnTop);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case M_TOGGLE_KEEP_ASPECT_RATIO:
|
|
||||||
ToggleKeepAspectRatio();
|
|
||||||
fSettingsMenu->ItemAt(6)->SetMarked(fKeepAspectRatio);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case M_TOGGLE_NO_BORDER_NO_MENU:
|
|
||||||
ToggleNoBorderNoMenu();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case M_PREFERENCES:
|
case M_PREFERENCES:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -51,6 +51,9 @@ public:
|
|||||||
void OpenFile(const entry_ref &ref);
|
void OpenFile(const entry_ref &ref);
|
||||||
void SetupWindow();
|
void SetupWindow();
|
||||||
void SetupTrackMenus();
|
void SetupTrackMenus();
|
||||||
|
void SetWindowSizeLimits();
|
||||||
|
|
||||||
|
void ShowFileInfo();
|
||||||
|
|
||||||
void VideoFormatChange(int width, int height, float width_scale, float height_scale);
|
void VideoFormatChange(int width, int height, float width_scale, float height_scale);
|
||||||
|
|
||||||
@@ -64,6 +67,7 @@ public:
|
|||||||
void ToggleAlwaysOnTop();
|
void ToggleAlwaysOnTop();
|
||||||
void ToggleNoBorder();
|
void ToggleNoBorder();
|
||||||
void ToggleNoMenu();
|
void ToggleNoMenu();
|
||||||
|
void ToggleNoControls();
|
||||||
void ToggleNoBorderNoMenu();
|
void ToggleNoBorderNoMenu();
|
||||||
|
|
||||||
void ShowContextMenu(const BPoint &screen_point);
|
void ShowContextMenu(const BPoint &screen_point);
|
||||||
@@ -72,7 +76,7 @@ public:
|
|||||||
BView * fBackground;
|
BView * fBackground;
|
||||||
VideoView * fVideoView;
|
VideoView * fVideoView;
|
||||||
BFilePanel * fFilePanel;
|
BFilePanel * fFilePanel;
|
||||||
ControllerView * fControllerView;
|
ControllerView * fControls;
|
||||||
|
|
||||||
BMenu * fFileMenu;
|
BMenu * fFileMenu;
|
||||||
BMenu * fViewMenu;
|
BMenu * fViewMenu;
|
||||||
@@ -90,11 +94,14 @@ public:
|
|||||||
volatile bool fAlwaysOnTop;
|
volatile bool fAlwaysOnTop;
|
||||||
volatile bool fNoMenu;
|
volatile bool fNoMenu;
|
||||||
volatile bool fNoBorder;
|
volatile bool fNoBorder;
|
||||||
|
volatile bool fNoControls;
|
||||||
int fSourceWidth;
|
int fSourceWidth;
|
||||||
int fSourceHeight;
|
int fSourceHeight;
|
||||||
float fWidthScale;
|
float fWidthScale;
|
||||||
float fHeightScale;
|
float fHeightScale;
|
||||||
int fMenuBarHeight;
|
int fMenuBarHeight;
|
||||||
|
int fControlsHeight;
|
||||||
|
int fControlsWidth;
|
||||||
BRect fSavedFrame;
|
BRect fSavedFrame;
|
||||||
bool fMouseDownTracking;
|
bool fMouseDownTracking;
|
||||||
BPoint fMouseDownMousePos;
|
BPoint fMouseDownMousePos;
|
||||||
@@ -102,6 +109,7 @@ public:
|
|||||||
bool fFrameResizedTriggeredAutomatically;
|
bool fFrameResizedTriggeredAutomatically;
|
||||||
bool fIgnoreFrameResized;
|
bool fIgnoreFrameResized;
|
||||||
bool fFrameResizedCalled;
|
bool fFrameResizedCalled;
|
||||||
|
BRect fVideoViewBounds;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ VideoView::VideoView(BRect frame, const char *name, uint32 resizeMask, uint32 fl
|
|||||||
, fController(NULL)
|
, fController(NULL)
|
||||||
, fOverlayActive(false)
|
, fOverlayActive(false)
|
||||||
{
|
{
|
||||||
SetViewColor(B_TRANSPARENT_COLOR);
|
// SetViewColor(B_TRANSPARENT_COLOR);
|
||||||
|
SetViewColor(127,255,127);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user