diff options
author | Maia Kozheva <sikon@ubuntu.com> | 2009-11-20 18:22:19 +0600 |
---|---|---|
committer | Maia Kozheva <sikon@ubuntu.com> | 2009-11-20 18:22:19 +0600 |
commit | 263b32f108c15cd1c55a8f4eb4704fac6553f1ac (patch) | |
tree | 1c49e7848aa2d3d64a9d9b96b8852cb1884da2f7 /src/mplayerwindow.h |
Imported Upstream version 0.6.8
Diffstat (limited to 'src/mplayerwindow.h')
-rw-r--r-- | src/mplayerwindow.h | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/src/mplayerwindow.h b/src/mplayerwindow.h new file mode 100644 index 0000000..b434d30 --- /dev/null +++ b/src/mplayerwindow.h @@ -0,0 +1,230 @@ +/* smplayer, GUI front-end for mplayer. + Copyright (C) 2006-2009 Ricardo Villalba <rvm@escomposlinux.org> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + + +#ifndef MPLAYERWINDOW_H +#define MPLAYERWINDOW_H + +#include <QWidget> +#include <QSize> +#include <QPoint> + +#include <QResizeEvent> +#include <QWheelEvent> +#include <QMouseEvent> +#include <QKeyEvent> +#include <QPaintEvent> + +#include "config.h" + +class QWidget; +class QLabel; +class QKeyEvent; +class QTimer; + +#define ZOOM_STEP 0.05 +#define ZOOM_MIN 0.5 + +#define DELAYED_RESIZE 0 +#define NEW_MOUSE_CHECK_POS 1 + +//! Screen is a widget that hides the mouse cursor after some seconds if not moved. + +class Screen : public QWidget +{ + Q_OBJECT + +public: + Screen(QWidget* parent = 0, Qt::WindowFlags f = 0); + ~Screen(); + +#if NEW_MOUSE_CHECK_POS + void setAutoHideCursor(bool b); + bool autoHideCursor() { return autohide_cursor; }; + + void setAutoHideInterval(int milliseconds) { autohide_interval = milliseconds; }; + int autoHideInterval() { return autohide_interval; }; +#endif + +public slots: + //! Should be called when a file has started. + virtual void playingStarted(); + + //! Should be called when a file has stopped. + virtual void playingStopped(); + +protected: +#if !NEW_MOUSE_CHECK_POS + virtual void mouseMoveEvent( QMouseEvent * e ); +#endif + virtual void paintEvent ( QPaintEvent * e ); + +protected slots: + virtual void checkMousePos(); + +private: + QTimer * check_mouse_timer; +#if NEW_MOUSE_CHECK_POS + QPoint mouse_last_position; + bool autohide_cursor; + int autohide_interval; +#else + QPoint cursor_pos, last_cursor_pos; +#endif +}; + +//! MplayerLayer can be instructed to not delete the background. + +class MplayerLayer : public Screen +{ + Q_OBJECT + +public: + MplayerLayer(QWidget* parent = 0, Qt::WindowFlags f = 0); + ~MplayerLayer(); + +#if REPAINT_BACKGROUND_OPTION + //! If b is true, the background of the widget will be repainted as usual. + /*! Otherwise the background will not repainted when a video is playing. */ + void setRepaintBackground(bool b); + + //! Return true if repainting the background is allowed. + bool repaintBackground() { return repaint_background; }; +#endif + +public slots: + //! Should be called when a file has started. + /*! It's needed to know if the background has to be cleared or not. */ + virtual void playingStarted(); + //! Should be called when a file has stopped. + virtual void playingStopped(); + +#if REPAINT_BACKGROUND_OPTION +protected: + virtual void paintEvent ( QPaintEvent * e ); +#endif + +private: +#if REPAINT_BACKGROUND_OPTION + bool repaint_background; +#endif + bool playing; +}; + + +class MplayerWindow : public Screen +{ + Q_OBJECT + +public: + MplayerWindow( QWidget* parent = 0, Qt::WindowFlags f = 0); + ~MplayerWindow(); + + void showLogo( bool b); + + MplayerLayer * videoLayer() { return mplayerlayer; }; + + void setResolution( int w, int h); + void setAspect( double asp); + void setMonitorAspect(double asp); + void updateVideoWindow(); + +#if USE_COLORKEY + void setColorKey(QColor c); +#endif + + void setOffsetX( int ); + int offsetX(); + + void setOffsetY( int ); + int offsetY(); + + void setZoom( double ); + double zoom(); + + void allowVideoMovement(bool b) { allow_video_movement = b; }; + bool isVideoMovementAllowed() { return allow_video_movement; }; + + virtual QSize sizeHint () const; + virtual QSize minimumSizeHint() const; + + virtual bool eventFilter( QObject * watched, QEvent * event ); + +public slots: + void moveLeft(); + void moveRight(); + void moveUp(); + void moveDown(); + void incZoom(); + void decZoom(); + +#if DELAYED_RESIZE +protected slots: + void resizeLater(); +#endif + +protected: + virtual void retranslateStrings(); + virtual void changeEvent ( QEvent * event ) ; + + virtual void resizeEvent( QResizeEvent * e); + virtual void mouseReleaseEvent( QMouseEvent * e); + virtual void mouseDoubleClickEvent( QMouseEvent * e ); + virtual void wheelEvent( QWheelEvent * e ); + void moveLayer( int offset_x, int offset_y ); + +signals: + //void rightButtonReleased( QPoint p ); + void doubleClicked(); + void leftClicked(); + void rightClicked(); + void middleClicked(); + void xbutton1Clicked(); // first X button + void xbutton2Clicked(); // second X button + void keyPressed(QKeyEvent * e); + void wheelUp(); + void wheelDown(); + void mouseMoved(QPoint); + +protected: + int video_width, video_height; + double aspect; + double monitoraspect; + + MplayerLayer * mplayerlayer; + QLabel * logo; + + // Zoom and moving + int offset_x, offset_y; + double zoom_factor; + + // Original pos and dimensions of the mplayerlayer + // before zooming or moving + int orig_x, orig_y; + int orig_width, orig_height; + + bool allow_video_movement; + +#if DELAYED_RESIZE + QTimer * resize_timer; +#endif +}; + + +#endif + |