]> git.sesse.net Git - vlc/commitdiff
* skins2/controls/ctrl_resize.cpp: The action of a Image control can now be
authorOlivier Teulière <ipkiss@videolan.org>
Sun, 27 Nov 2005 18:13:23 +0000 (18:13 +0000)
committerOlivier Teulière <ipkiss@videolan.org>
Sun, 27 Nov 2005 18:13:23 +0000 (18:13 +0000)
   resizeS or resizeE, in addition to the good old resizeSE.

modules/gui/skins2/controls/ctrl_resize.cpp
modules/gui/skins2/controls/ctrl_resize.hpp
modules/gui/skins2/parser/builder.cpp

index 46ade24792ce2497e69fe4e76f11a070235533eb..f168ca162f2039d4cd7c4e755f6d22ee2de91aa1 100644 (file)
@@ -35,9 +35,9 @@
 
 CtrlResize::CtrlResize( intf_thread_t *pIntf, CtrlFlat &rCtrl,
                         GenericLayout &rLayout, const UString &rHelp,
-                        VarBool *pVisible ):
+                        VarBool *pVisible, Direction_t direction ):
     CtrlFlat( pIntf, rHelp, pVisible ), m_fsm( pIntf ), m_rCtrl( rCtrl ),
-    m_rLayout( rLayout ), m_cmdOutStill( this ),
+    m_rLayout( rLayout ), m_direction( direction ),  m_cmdOutStill( this ),
     m_cmdStillOut( this ),
     m_cmdStillStill( this ),
     m_cmdStillResize( this ),
@@ -103,24 +103,35 @@ void CtrlResize::handleEvent( EvtGeneric &rEvent )
 }
 
 
+void CtrlResize::changeCursor( Direction_t direction ) const
+{
+    OSFactory *pOsFactory = OSFactory::instance( getIntf() );
+    if( direction == kResizeSE )
+        pOsFactory->changeCursor( OSFactory::kResizeNWSE );
+    else if( direction == kResizeS )
+        pOsFactory->changeCursor( OSFactory::kResizeNS );
+    else if( direction == kResizeE )
+        pOsFactory->changeCursor( OSFactory::kResizeWE );
+    else if( direction == kNone )
+        pOsFactory->changeCursor( OSFactory::kDefaultArrow );
+}
+
+
 void CtrlResize::CmdOutStill::execute()
 {
-    OSFactory *pOsFactory = OSFactory::instance( m_pParent->getIntf() );
-    pOsFactory->changeCursor( OSFactory::kResizeNWSE );
+    m_pParent->changeCursor( m_pParent->m_direction );
 }
 
 
 void CtrlResize::CmdStillOut::execute()
 {
-    OSFactory *pOsFactory = OSFactory::instance( m_pParent->getIntf() );
-    pOsFactory->changeCursor( OSFactory::kDefaultArrow );
+    m_pParent->changeCursor( kNone );
 }
 
 
 void CtrlResize::CmdStillStill::execute()
 {
-    OSFactory *pOsFactory = OSFactory::instance( m_pParent->getIntf() );
-    pOsFactory->changeCursor( OSFactory::kResizeNWSE );
+    m_pParent->changeCursor( m_pParent->m_direction );
 }
 
 
@@ -129,8 +140,7 @@ void CtrlResize::CmdStillResize::execute()
     EvtMouse *pEvtMouse = (EvtMouse*)m_pParent->m_pEvt;
 
     // Set the cursor
-    OSFactory *pOsFactory = OSFactory::instance( m_pParent->getIntf() );
-    pOsFactory->changeCursor( OSFactory::kResizeNWSE );
+    m_pParent->changeCursor( m_pParent->m_direction );
 
     m_pParent->m_xPos = pEvtMouse->getXPos();
     m_pParent->m_yPos = pEvtMouse->getYPos();
@@ -145,8 +155,7 @@ void CtrlResize::CmdStillResize::execute()
 void CtrlResize::CmdResizeStill::execute()
 {
     // Set the cursor
-    OSFactory *pOsFactory = OSFactory::instance( m_pParent->getIntf() );
-    pOsFactory->changeCursor( OSFactory::kResizeNWSE );
+    m_pParent->changeCursor( m_pParent->m_direction );
 
     m_pParent->releaseMouse();
 }
@@ -157,14 +166,18 @@ void CtrlResize::CmdResizeResize::execute()
     EvtMotion *pEvtMotion = (EvtMotion*)m_pParent->m_pEvt;
 
     // Set the cursor
-    OSFactory *pOsFactory = OSFactory::instance( m_pParent->getIntf() );
-    pOsFactory->changeCursor( OSFactory::kResizeNWSE );
+    m_pParent->changeCursor( m_pParent->m_direction );
 
-    int newWidth = pEvtMotion->getXPos() - m_pParent->m_xPos + m_pParent->m_width;
-    int newHeight = pEvtMotion->getYPos() - m_pParent->m_yPos + m_pParent->m_height;
+    int newWidth = m_pParent->m_width;
+    int newHeight = m_pParent->m_height;
+    if( m_pParent->m_direction != kResizeS )
+        newWidth += pEvtMotion->getXPos() - m_pParent->m_xPos;
+    if( m_pParent->m_direction != kResizeE )
+        newHeight += pEvtMotion->getYPos() - m_pParent->m_yPos;
 
     // Create a resize command
-    CmdGeneric *pCmd = new CmdResize( m_pParent->getIntf(), m_pParent->m_rLayout,
+    CmdGeneric *pCmd = new CmdResize( m_pParent->getIntf(),
+                                      m_pParent->m_rLayout,
                                       newWidth, newHeight );
     // Push the command in the asynchronous command queue
     AsyncQueue *pQueue = AsyncQueue::instance( m_pParent->getIntf() );
index de4799ef77ef670227aef16e13aa75aa5b71f0da..6ade020e10574b3744707ecbce506d34a39eb229 100644 (file)
 class CtrlResize: public CtrlFlat
 {
     public:
+        enum Direction_t
+        {
+            kResizeE,   // East
+            kResizeSE,  // South-East
+            kResizeS,   // South
+            kNone       // Reserved for internal use
+        };
+
         CtrlResize( intf_thread_t *pIntf, CtrlFlat &rCtrl,
                     GenericLayout &rLayout, const UString &rHelp,
-                    VarBool *pVisible );
+                    VarBool *pVisible, Direction_t direction );
         virtual ~CtrlResize() {}
 
         /// Handle an event
@@ -68,6 +76,11 @@ class CtrlResize: public CtrlFlat
         EvtGeneric *m_pEvt;
         /// Position of the click that started the resizing
         int m_xPos, m_yPos;
+        /// Direction of the resizing
+        Direction_t m_direction;
+
+        /// Change the cursor, based on the given direction
+        void changeCursor( Direction_t direction ) const;
 
         /// Callback objects
         DEFINE_CALLBACK( CtrlResize, OutStill )
index d1c7c1f195c1c9c0e2e8accc6fd0bb844785203c..4692337e4fa6684ce74b7db8b33210c2de0c4494 100644 (file)
@@ -485,10 +485,25 @@ void Builder::addImage( const BuilderData::Image &rData )
              NULL);
         pLayout->addControl( pMove, pos, rData.m_layer );
     }
+    else if( rData.m_actionId == "resizeS" )
+    {
+        CtrlResize *pResize = new CtrlResize( getIntf(), *pImage, *pLayout,
+                UString( getIntf(), rData.m_help.c_str() ), NULL,
+                CtrlResize::kResizeS );
+        pLayout->addControl( pResize, pos, rData.m_layer );
+    }
+    else if( rData.m_actionId == "resizeE" )
+    {
+        CtrlResize *pResize = new CtrlResize( getIntf(), *pImage, *pLayout,
+                UString( getIntf(), rData.m_help.c_str() ), NULL,
+                CtrlResize::kResizeE );
+        pLayout->addControl( pResize, pos, rData.m_layer );
+    }
     else if( rData.m_actionId == "resizeSE" )
     {
         CtrlResize *pResize = new CtrlResize( getIntf(), *pImage, *pLayout,
-                UString( getIntf(), rData.m_help.c_str() ), NULL );
+                UString( getIntf(), rData.m_help.c_str() ), NULL,
+                CtrlResize::kResizeSE );
         pLayout->addControl( pResize, pos, rData.m_layer );
     }
     else