X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fskins2%2Fcontrols%2Fctrl_resize.cpp;h=7c8f5be9c9a327e9d919f1ab71c84e7290357c07;hb=e3aa4d0b12c75c76617c88f520969ae71d22473a;hp=4a52e7881c2b9be552741ca09e632f991ab8a121;hpb=c959f01d691322d09acfe4345a547f081d85f74e;p=vlc diff --git a/modules/gui/skins2/controls/ctrl_resize.cpp b/modules/gui/skins2/controls/ctrl_resize.cpp index 4a52e7881c..7c8f5be9c9 100644 --- a/modules/gui/skins2/controls/ctrl_resize.cpp +++ b/modules/gui/skins2/controls/ctrl_resize.cpp @@ -1,11 +1,11 @@ /***************************************************************************** * ctrl_resize.cpp ***************************************************************************** - * Copyright (C) 2003 VideoLAN + * Copyright (C) 2003 the VideoLAN team * $Id$ * * Authors: Cyril Deguet - * Olivier Teulière + * Olivier Teulière * * 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 @@ -19,7 +19,7 @@ * * 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, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ #include "ctrl_resize.hpp" @@ -35,14 +35,14 @@ 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, &transOutStill ), - m_cmdStillOut( this, &transStillOut ), - m_cmdStillStill( this, &transStillStill ), - m_cmdStillResize( this, &transStillResize ), - m_cmdResizeStill( this, &transResizeStill ), - m_cmdResizeResize( this, &transResizeResize ) + m_rLayout( rLayout ), m_direction( direction ), m_cmdOutStill( this ), + m_cmdStillOut( this ), + m_cmdStillStill( this ), + m_cmdStillResize( this ), + m_cmdResizeStill( this ), + m_cmdResizeResize( this ) { m_pEvt = NULL; m_xPos = 0; @@ -103,96 +103,83 @@ void CtrlResize::handleEvent( EvtGeneric &rEvent ) } -void CtrlResize::transOutStill( SkinObject *pCtrl ) +void CtrlResize::changeCursor( Direction_t direction ) const { - CtrlResize *pThis = (CtrlResize*)pCtrl; - OSFactory *pOsFactory = OSFactory::instance( pThis->getIntf() ); - pOsFactory->changeCursor( OSFactory::kResizeNWSE ); + 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::transStillOut( SkinObject *pCtrl ) +void CtrlResize::CmdOutStill::execute() { - CtrlResize *pThis = (CtrlResize*)pCtrl; - OSFactory *pOsFactory = OSFactory::instance( pThis->getIntf() ); - pOsFactory->changeCursor( OSFactory::kDefaultArrow ); + m_pParent->changeCursor( m_pParent->m_direction ); } -void CtrlResize::transStillStill( SkinObject *pCtrl ) +void CtrlResize::CmdStillOut::execute() { - CtrlResize *pThis = (CtrlResize*)pCtrl; - OSFactory *pOsFactory = OSFactory::instance( pThis->getIntf() ); - pOsFactory->changeCursor( OSFactory::kResizeNWSE ); + m_pParent->changeCursor( kNone ); } -void CtrlResize::transStillResize( SkinObject *pCtrl ) +void CtrlResize::CmdStillStill::execute() { - CtrlResize *pThis = (CtrlResize*)pCtrl; - EvtMouse *pEvtMouse = (EvtMouse*)pThis->m_pEvt; + m_pParent->changeCursor( m_pParent->m_direction ); +} + + +void CtrlResize::CmdStillResize::execute() +{ + EvtMouse *pEvtMouse = (EvtMouse*)m_pParent->m_pEvt; // Set the cursor - OSFactory *pOsFactory = OSFactory::instance( pThis->getIntf() ); - pOsFactory->changeCursor( OSFactory::kResizeNWSE ); + m_pParent->changeCursor( m_pParent->m_direction ); - pThis->m_xPos = pEvtMouse->getXPos(); - pThis->m_yPos = pEvtMouse->getYPos(); + m_pParent->m_xPos = pEvtMouse->getXPos(); + m_pParent->m_yPos = pEvtMouse->getYPos(); - pThis->captureMouse(); + m_pParent->captureMouse(); - pThis->m_width = pThis->m_rLayout.getWidth(); - pThis->m_height = pThis->m_rLayout.getHeight(); + m_pParent->m_width = m_pParent->m_rLayout.getWidth(); + m_pParent->m_height = m_pParent->m_rLayout.getHeight(); } -void CtrlResize::transResizeStill( SkinObject *pCtrl ) +void CtrlResize::CmdResizeStill::execute() { - CtrlResize *pThis = (CtrlResize*)pCtrl; - // Set the cursor - OSFactory *pOsFactory = OSFactory::instance( pThis->getIntf() ); - pOsFactory->changeCursor( OSFactory::kResizeNWSE ); + m_pParent->changeCursor( m_pParent->m_direction ); - pThis->releaseMouse(); + m_pParent->releaseMouse(); } -void CtrlResize::transResizeResize( SkinObject *pCtrl ) +void CtrlResize::CmdResizeResize::execute() { - CtrlResize *pThis = (CtrlResize*)pCtrl; - EvtMotion *pEvtMotion = (EvtMotion*)pThis->m_pEvt; + EvtMotion *pEvtMotion = (EvtMotion*)m_pParent->m_pEvt; // Set the cursor - OSFactory *pOsFactory = OSFactory::instance( pThis->getIntf() ); - pOsFactory->changeCursor( OSFactory::kResizeNWSE ); - - int newWidth = pEvtMotion->getXPos() - pThis->m_xPos + pThis->m_width; - int newHeight = pEvtMotion->getYPos() - pThis->m_yPos + pThis->m_height; - - // Check boundaries - if( newWidth < pThis->m_rLayout.getMinWidth() ) - { - newWidth = pThis->m_rLayout.getMinWidth(); - } - if( newWidth > pThis->m_rLayout.getMaxWidth() ) - { - newWidth = pThis->m_rLayout.getMaxWidth(); - } - if( newHeight < pThis->m_rLayout.getMinHeight() ) - { - newHeight = pThis->m_rLayout.getMinHeight(); - } - if( newHeight > pThis->m_rLayout.getMaxHeight() ) - { - newHeight = pThis->m_rLayout.getMaxHeight(); - } + m_pParent->changeCursor( m_pParent->m_direction ); + + 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( pThis->getIntf(), pThis->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( pThis->getIntf() ); - pQueue->remove( "resize" ); + AsyncQueue *pQueue = AsyncQueue::instance( m_pParent->getIntf() ); pQueue->push( CmdGenericPtr( pCmd ) ); }