generic_layout.hpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:6k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * generic_layout.hpp
  3.  *****************************************************************************
  4.  * Copyright (C) 2003 the VideoLAN team
  5.  * $Id: 9e6871af221a9222a654fd038d369b4503cb9ab9 $
  6.  *
  7.  * Authors: Cyril Deguet     <asmax@via.ecp.fr>
  8.  *          Olivier Teulière <ipkiss@via.ecp.fr>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  23.  *****************************************************************************/
  24. #ifndef GENERIC_LAYOUT_HPP
  25. #define GENERIC_LAYOUT_HPP
  26. #include "skin_common.hpp"
  27. #include "top_window.hpp"
  28. #include "../utils/pointer.hpp"
  29. #include "../utils/position.hpp"
  30. #include <list>
  31. class Anchor;
  32. class OSGraphics;
  33. class CtrlGeneric;
  34. class CtrlVideo;
  35. class VarBoolImpl;
  36. /// Control and its associated layer
  37. struct LayeredControl
  38. {
  39.     LayeredControl( CtrlGeneric *pControl, int layer ):
  40.         m_pControl( pControl ), m_layer( layer ) {}
  41.     /// Pointer on the control
  42.     CtrlGeneric *m_pControl;
  43.     /// Layer number
  44.     int m_layer;
  45. };
  46. /// Base class for layouts
  47. class GenericLayout: public SkinObject
  48. {
  49.     public:
  50.         GenericLayout( intf_thread_t *pIntf, int width, int height,
  51.                        int minWidth, int maxWidth, int minHeight,
  52.                        int maxHeight );
  53.         virtual ~GenericLayout();
  54.         /// Attach the layout to a window
  55.         virtual void setWindow( TopWindow *pWindow );
  56.         /// Get the associated window, if any
  57.         virtual TopWindow *getWindow() const { return m_pWindow; }
  58.         /// Called by a control which wants to capture the mouse
  59.         virtual void onControlCapture( const CtrlGeneric &rCtrl );
  60.         /// Called by a control which wants to release the mouse
  61.         virtual void onControlRelease( const CtrlGeneric &rCtrl );
  62.         /// Refresh the window
  63.         virtual void refreshAll();
  64.         /// Refresh a rectangular portion of the window
  65.         virtual void refreshRect( int x, int y, int width, int height );
  66.         /// Get the image of the layout
  67.         virtual OSGraphics *getImage() const { return m_pImage; }
  68.         /// Get the position of the layout (relative to the screen)
  69.         /**
  70.          * Note: These values are different from the m_rect.getLeft() and
  71.          * m_rect.getTop(), which always return 0.
  72.          * The latter methods are there as a "root rect" for the panels and
  73.          * controls, since each control knows its parent rect, but returns
  74.          * coordinates relative to the root rect.
  75.          */
  76.         virtual int getLeft() const { return m_pWindow->getLeft(); }
  77.         virtual int getTop() const { return m_pWindow->getTop(); }
  78.         /// Get the size of the layout
  79.         virtual int getWidth() const { return m_rect.getWidth(); }
  80.         virtual int getHeight() const { return m_rect.getHeight(); }
  81.         virtual const GenericRect &getRect() const { return m_rect; }
  82.         /// Get the minimum and maximum size of the layout
  83.         virtual int getMinWidth() const { return m_minWidth; }
  84.         virtual int getMaxWidth() const { return m_maxWidth; }
  85.         virtual int getMinHeight() const { return m_minHeight; }
  86.         virtual int getMaxHeight() const { return m_maxHeight; }
  87.         /// specific refresh window (if video controls)
  88.         virtual void computeRefresh( int x, int y, int width, int height );
  89.         /// Resize the layout
  90.         virtual void resize( int width, int height );
  91.         /**
  92.          * Add a control in the layout at the given position, and
  93.          * the optional given layer
  94.          */
  95.         virtual void addControl( CtrlGeneric *pControl,
  96.                                  const Position &rPosition,
  97.                                  int layer );
  98.         /// Get the list of the controls in this layout, by layer order
  99.         virtual const list<LayeredControl> &getControlList() const;
  100.         /// Called by a control when its image has changed
  101.         /**
  102.          * The arguments indicate the size of the rectangle to refresh,
  103.          * and the offset (from the control position) of this rectangle.
  104.          * Use a negative width or height to refresh the layout completely
  105.          */
  106.         virtual void onControlUpdate( const CtrlGeneric &rCtrl,
  107.                                       int width, int height,
  108.                                       int xOffSet, int yOffSet );
  109.         /// Get the list of the anchors of this layout
  110.         virtual const list<Anchor*>& getAnchorList() const;
  111.         /// Add an anchor to this layout
  112.         virtual void addAnchor( Anchor *pAnchor );
  113.         /// Called when the layout is shown
  114.         virtual void onShow();
  115.         /// Called when the layout is hidden
  116.         virtual void onHide();
  117.         /// Give access to the "active layout" variable
  118.         // FIXME: we give read/write access
  119.         VarBoolImpl &getActiveVar() { return *m_pVarActive; }
  120.     private:
  121.         /// Parent window of the layout
  122.         TopWindow *m_pWindow;
  123.         /// Layout size
  124.         SkinsRect m_rect;
  125.         int m_minWidth, m_maxWidth;
  126.         int m_minHeight, m_maxHeight;
  127.         /// Image of the layout
  128.         OSGraphics *m_pImage;
  129.         /// List of the controls in the layout
  130.         list<LayeredControl> m_controlList;
  131.         /// Video control(s)
  132.         set<CtrlVideo *> m_pVideoCtrlSet;
  133.         /// List of the anchors in the layout
  134.         list<Anchor*> m_anchorList;
  135.         /// Flag to know if the layout is visible
  136.         bool m_visible;
  137.         /// Variable for the "active state" of the layout
  138.         /**
  139.          * Note: the layout is not an observer on this variable, because it
  140.          * cannot be changed externally (i.e. without an explicit change of
  141.          * layout). This way, we avoid using a setActiveLayoutInner method.
  142.          */
  143.         mutable VarBoolImpl *m_pVarActive;
  144. };
  145. typedef CountedPtr<GenericLayout> GenericLayoutPtr;
  146. #endif