Commit dcae1998 authored by Edward Wang's avatar Edward Wang Committed by Jean-Baptiste Kempf

Qt: Allow fullscreen controller to be stacked at the bottom

Close #3120
Modified-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent 8691e5de
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "dialogs_provider.hpp" /* Opening Dialogs */ #include "dialogs_provider.hpp" /* Opening Dialogs */
#include "input_manager.hpp" #include "input_manager.hpp"
#include "main_interface.hpp" /* Show playlist */ #include "main_interface.hpp" /* Show playlist */
#include "components/controller.hpp" /* Toggle FSC controller width */
ActionsManager * ActionsManager::instance = NULL; ActionsManager * ActionsManager::instance = NULL;
...@@ -93,6 +94,10 @@ void ActionsManager::doAction( int id_action ) ...@@ -93,6 +94,10 @@ void ActionsManager::doAction( int id_action )
THEDP->mediaInfoDialog(); break; THEDP->mediaInfoDialog(); break;
case OPEN_SUB_ACTION: case OPEN_SUB_ACTION:
THEDP->loadSubtitlesFile(); break; THEDP->loadSubtitlesFile(); break;
case FULLWIDTH_ACTION:
if( p_intf->p_sys->p_mi )
p_intf->p_sys->p_mi->getFullscreenControllerWidget()->toggleFullwidth();
break;
default: default:
msg_Dbg( p_intf, "Action: %i", id_action ); msg_Dbg( p_intf, "Action: %i", id_action );
break; break;
......
...@@ -41,6 +41,7 @@ typedef enum actionType_e ...@@ -41,6 +41,7 @@ typedef enum actionType_e
SLOWER_ACTION, SLOWER_ACTION,
FASTER_ACTION, FASTER_ACTION,
FULLSCREEN_ACTION, FULLSCREEN_ACTION,
FULLWIDTH_ACTION,
EXTENDED_ACTION, EXTENDED_ACTION,
PLAYLIST_ACTION, PLAYLIST_ACTION,
SNAPSHOT_ACTION, SNAPSHOT_ACTION,
......
...@@ -137,7 +137,8 @@ void AbstractController::parseAndCreate( const QString& config, ...@@ -137,7 +137,8 @@ void AbstractController::parseAndCreate( const QString& config,
{ {
msg_Warn( p_intf, "Parsing error 3. Please, report this." ); msg_Warn( p_intf, "Parsing error 3. Please, report this." );
continue; continue;
} } }
}
createAndAddWidget( controlLayout, -1, i_type, i_option ); createAndAddWidget( controlLayout, -1, i_type, i_option );
} }
...@@ -303,6 +304,10 @@ QWidget *AbstractController::createWidget( buttonType_e button, int options ) ...@@ -303,6 +304,10 @@ QWidget *AbstractController::createWidget( buttonType_e button, int options )
ENABLE_ON_VIDEO( FULLSCREENButton ); ENABLE_ON_VIDEO( FULLSCREENButton );
} }
break; break;
case FULLWIDTH_BUTTON: {
NORMAL_BUTTON( FULLWIDTH );
}
break;
case EXTENDED_BUTTON:{ case EXTENDED_BUTTON:{
NORMAL_BUTTON( EXTENDED ); NORMAL_BUTTON( EXTENDED );
} }
...@@ -719,6 +724,8 @@ FullscreenControllerWidget::FullscreenControllerWidget( intf_thread_t *_p_i, QWi ...@@ -719,6 +724,8 @@ FullscreenControllerWidget::FullscreenControllerWidget( intf_thread_t *_p_i, QWi
setWindowFlags( Qt::ToolTip ); setWindowFlags( Qt::ToolTip );
setMinimumWidth( 600 ); setMinimumWidth( 600 );
setMinimumHeight( 72 );
isWideFSC = false;
setFrameShape( QFrame::StyledPanel ); setFrameShape( QFrame::StyledPanel );
setFrameStyle( QFrame::Sunken ); setFrameStyle( QFrame::Sunken );
...@@ -875,6 +882,23 @@ void FullscreenControllerWidget::slowHideFSC() ...@@ -875,6 +882,23 @@ void FullscreenControllerWidget::slowHideFSC()
#endif #endif
} }
void FullscreenControllerWidget::toggleFullwidth() {
int fswidth = QApplication::desktop()->screenGeometry( var_InheritInteger( p_intf, "qt-fullscreen-screennumber" ) ).width();
int fsheight = QApplication::desktop()->screenGeometry( var_InheritInteger( p_intf, "qt-fullscreen-screennumber" ) ).height();
if( !isWideFSC ) {
/* Dock at the bottom of the screen */
setMinimumWidth( fswidth );
setGeometry(0, fsheight-72, fswidth, 72);
} else {
/* Restore half-bar and re-centre */
setMinimumWidth( 600 );
setGeometry(fswidth/2 - 300, fsheight-72, 600, 72);
}
/* Toggle isWideFSC switch */
isWideFSC = !isWideFSC;
}
/** /**
* event handling * event handling
* events: show, hide, start timer for hiding * events: show, hide, start timer for hiding
...@@ -953,6 +977,7 @@ void FullscreenControllerWidget::mouseMoveEvent( QMouseEvent *event ) ...@@ -953,6 +977,7 @@ void FullscreenControllerWidget::mouseMoveEvent( QMouseEvent *event )
*/ */
void FullscreenControllerWidget::mousePressEvent( QMouseEvent *event ) void FullscreenControllerWidget::mousePressEvent( QMouseEvent *event )
{ {
if( isWideFSC ) return;
i_mouse_last_x = event->globalX(); i_mouse_last_x = event->globalX();
i_mouse_last_y = event->globalY(); i_mouse_last_y = event->globalY();
event->accept(); event->accept();
...@@ -960,6 +985,7 @@ void FullscreenControllerWidget::mousePressEvent( QMouseEvent *event ) ...@@ -960,6 +985,7 @@ void FullscreenControllerWidget::mousePressEvent( QMouseEvent *event )
void FullscreenControllerWidget::mouseReleaseEvent( QMouseEvent *event ) void FullscreenControllerWidget::mouseReleaseEvent( QMouseEvent *event )
{ {
if( isWideFSC ) return;
i_mouse_last_x = -1; i_mouse_last_x = -1;
i_mouse_last_y = -1; i_mouse_last_y = -1;
event->accept(); event->accept();
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
#define MAIN_TB2_DEFAULT "0-2;64;3;1;4;64;7;9;64;10;20;19;64-4;37;65;35-4" #define MAIN_TB2_DEFAULT "0-2;64;3;1;4;64;7;9;64;10;20;19;64-4;37;65;35-4"
#define ADV_TB_DEFAULT "12;11;13;14" #define ADV_TB_DEFAULT "12;11;13;14"
#define INPT_TB_DEFAULT "5-1;15-1;33;6-1" #define INPT_TB_DEFAULT "5-1;15-1;33;6-1"
#define FSC_TB_DEFAULT "0-2;64;3;1;4;64;37;64;38;64;8;65;35-4;34" #define FSC_TB_DEFAULT "0-2;64;3;1;4;64;37;64;38;64;8;65;25;35-4;34"
#define I_PLAY_TOOLTIP N_("Play\nIf the playlist is empty, open a medium") #define I_PLAY_TOOLTIP N_("Play\nIf the playlist is empty, open a medium")
...@@ -87,6 +87,7 @@ typedef enum buttonType_e ...@@ -87,6 +87,7 @@ typedef enum buttonType_e
PREVIOUS_BUTTON, PREVIOUS_BUTTON,
NEXT_BUTTON, NEXT_BUTTON,
OPEN_SUB_BUTTON, OPEN_SUB_BUTTON,
FULLWIDTH_BUTTON,
BUTTON_MAX, BUTTON_MAX,
SPLITTER = 0x20, SPLITTER = 0x20,
...@@ -112,7 +113,8 @@ static const char* const nameL[BUTTON_MAX] = { N_("Play"), N_("Stop"), N_("Open" ...@@ -112,7 +113,8 @@ static const char* const nameL[BUTTON_MAX] = { N_("Play"), N_("Stop"), N_("Open"
N_("Record"), N_("A->B Loop"), N_("Frame By Frame"), N_("Trickplay Reverse"), N_("Record"), N_("A->B Loop"), N_("Frame By Frame"), N_("Trickplay Reverse"),
N_("Step backward" ), N_("Step forward"), N_("Quit"), N_("Random"), N_("Step backward" ), N_("Step forward"), N_("Quit"), N_("Random"),
N_("Loop/Repeat mode"), N_("Information"), N_("Previous"), N_("Next"), N_("Loop/Repeat mode"), N_("Information"), N_("Previous"), N_("Next"),
N_("Open subtitles file")}; N_("Open subtitles file"), N_("Fullscreen controller width toggle")
};
static const char* const tooltipL[BUTTON_MAX] = { I_PLAY_TOOLTIP, static const char* const tooltipL[BUTTON_MAX] = { I_PLAY_TOOLTIP,
N_("Stop playback"), N_("Open a medium"), N_("Stop playback"), N_("Open a medium"),
N_("Previous media in the playlist, skip backward when keep-pressed"), N_("Previous media in the playlist, skip backward when keep-pressed"),
...@@ -124,7 +126,9 @@ static const char* const tooltipL[BUTTON_MAX] = { I_PLAY_TOOLTIP, ...@@ -124,7 +126,9 @@ static const char* const tooltipL[BUTTON_MAX] = { I_PLAY_TOOLTIP,
N_("Reverse"), N_("Step backward"), N_("Step forward"), N_("Quit"), N_("Reverse"), N_("Step backward"), N_("Step forward"), N_("Quit"),
N_("Random"), N_("Change the loop and repeat modes"), N_("Information"), N_("Random"), N_("Change the loop and repeat modes"), N_("Information"),
N_("Previous media in the playlist"), N_("Next media in the playlist"), N_("Previous media in the playlist"), N_("Next media in the playlist"),
N_("Open subtitles file")}; N_("Open subtitles file"),
N_("Dock/undock fullscreen controller to/from bottom of screen")
};
static const QString iconL[BUTTON_MAX] ={ ":/toolbar/play_b", ":/toolbar/stop_b", static const QString iconL[BUTTON_MAX] ={ ":/toolbar/play_b", ":/toolbar/stop_b",
":/toolbar/eject", ":/toolbar/previous_b", ":/toolbar/next_b", ":/toolbar/eject", ":/toolbar/previous_b", ":/toolbar/next_b",
":/toolbar/slower", ":/toolbar/faster", ":/toolbar/fullscreen", ":/toolbar/slower", ":/toolbar/faster", ":/toolbar/fullscreen",
...@@ -133,7 +137,8 @@ static const QString iconL[BUTTON_MAX] ={ ":/toolbar/play_b", ":/toolbar/stop_b" ...@@ -133,7 +137,8 @@ static const QString iconL[BUTTON_MAX] ={ ":/toolbar/play_b", ":/toolbar/stop_b"
":/toolbar/frame", ":/toolbar/reverse", ":/toolbar/skip_back", ":/toolbar/frame", ":/toolbar/reverse", ":/toolbar/skip_back",
":/toolbar/skip_fw", ":/toolbar/clear", ":/buttons/playlist/shuffle_on", ":/toolbar/skip_fw", ":/toolbar/clear", ":/buttons/playlist/shuffle_on",
":/buttons/playlist/repeat_all", ":/menu/info", ":/buttons/playlist/repeat_all", ":/menu/info",
":/toolbar/previous_b", ":/toolbar/next_b", "" }; ":/toolbar/previous_b", ":/toolbar/next_b", "", ":/toolbar/space"
};
enum enum
{ {
...@@ -249,6 +254,7 @@ public: ...@@ -249,6 +254,7 @@ public:
/* Vout */ /* Vout */
void fullscreenChanged( vout_thread_t *, bool b_fs, int i_timeout ); void fullscreenChanged( vout_thread_t *, bool b_fs, int i_timeout );
void mouseChanged( vout_thread_t *, int i_mousex, int i_mousey ); void mouseChanged( vout_thread_t *, int i_mousex, int i_mousey );
void toggleFullwidth();
signals: signals:
void keyPressed( QKeyEvent * ); void keyPressed( QKeyEvent * );
...@@ -298,6 +304,8 @@ private: ...@@ -298,6 +304,8 @@ private:
int i_hide_timeout; /* FSC hiding timeout, same as mouse hiding timeout */ int i_hide_timeout; /* FSC hiding timeout, same as mouse hiding timeout */
int i_mouse_last_move_x; int i_mouse_last_move_x;
int i_mouse_last_move_y; int i_mouse_last_move_y;
bool isWideFSC;
}; };
#endif #endif
...@@ -82,6 +82,7 @@ public: ...@@ -82,6 +82,7 @@ public:
/* Getters */ /* Getters */
QSystemTrayIcon *getSysTray() { return sysTray; } QSystemTrayIcon *getSysTray() { return sysTray; }
QMenu *getSysTrayMenu() { return systrayMenu; } QMenu *getSysTrayMenu() { return systrayMenu; }
FullscreenControllerWidget* getFullscreenControllerWidget() { return fullscreenControls; }
int getControlsVisibilityStatus(); int getControlsVisibilityStatus();
bool isPlDocked() { return ( b_plDocked != false ); } bool isPlDocked() { return ( b_plDocked != false ); }
bool isInterfaceFullScreen() { return b_interfaceFullScreen; } bool isInterfaceFullScreen() { return b_interfaceFullScreen; }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment