]> git.sesse.net Git - vlc/commitdiff
skins2: reuse graphics from generic bitmap cache (slider)
authorErwan Tulou <erwan10@videolan.org>
Sat, 6 Apr 2013 00:19:49 +0000 (02:19 +0200)
committerErwan Tulou <erwan10@videolan.org>
Sat, 6 Apr 2013 12:46:51 +0000 (14:46 +0200)
modules/gui/skins2/controls/ctrl_slider.cpp
modules/gui/skins2/controls/ctrl_slider.hpp

index 4008624b2089d5b292b3732dc74ed41402b7446c..92656d7029b179a8279b691fee49f028249ea58d 100644 (file)
@@ -52,24 +52,17 @@ CtrlSliderCursor::CtrlSliderCursor( intf_thread_t *pIntf,
     CtrlGeneric( pIntf, rHelp, pVisible ), m_fsm( pIntf ),
     m_rVariable( rVariable ), m_tooltip( rTooltip ),
     m_width( rCurve.getWidth() ), m_height( rCurve.getHeight() ),
+    m_xPosition( 0 ), m_yPosition( 0 ),
     m_cmdOverDown( this ), m_cmdDownOver( this ),
     m_cmdOverUp( this ), m_cmdUpOver( this ),
     m_cmdMove( this ), m_cmdScroll( this ),
     m_lastCursorRect(), m_xOffset( 0 ), m_yOffset( 0 ),
-    m_pEvt( NULL ), m_rCurve( rCurve )
+    m_pEvt( NULL ), m_rCurve( rCurve ),
+    m_pImgUp( rBmpUp.getGraphics() ),
+    m_pImgOver( rBmpOver.getGraphics() ),
+    m_pImgDown( rBmpDown.getGraphics() ),
+    m_pImg( m_pImgUp )
 {
-    // Build the images of the cursor
-    OSFactory *pOsFactory = OSFactory::instance( getIntf() );
-    m_pImgUp = pOsFactory->createOSGraphics( rBmpUp.getWidth(),
-                                             rBmpUp.getHeight() );
-    m_pImgUp->drawBitmap( rBmpUp, 0, 0 );
-    m_pImgDown = pOsFactory->createOSGraphics( rBmpDown.getWidth(),
-                                               rBmpDown.getHeight() );
-    m_pImgDown->drawBitmap( rBmpDown, 0, 0 );
-    m_pImgOver = pOsFactory->createOSGraphics( rBmpOver.getWidth(),
-                                               rBmpOver.getHeight() );
-    m_pImgOver->drawBitmap( rBmpOver, 0, 0 );
-
     // States
     m_fsm.addState( "up" );
     m_fsm.addState( "over" );
@@ -87,7 +80,6 @@ CtrlSliderCursor::CtrlSliderCursor( intf_thread_t *pIntf,
 
     // Initial state
     m_fsm.setState( "up" );
-    m_pImg = m_pImgUp;
 
     // Observe the position variable
     m_rVariable.addObserver( this );
@@ -97,9 +89,6 @@ CtrlSliderCursor::CtrlSliderCursor( intf_thread_t *pIntf,
 CtrlSliderCursor::~CtrlSliderCursor()
 {
     m_rVariable.delObserver( this );
-    delete m_pImgUp;
-    delete m_pImgDown;
-    delete m_pImgOver;
 }
 
 
@@ -191,6 +180,9 @@ void CtrlSliderCursor::CmdOverDown::execute()
                        - (int)(tempY * factorY);
 
     m_pParent->captureMouse();
+
+    if( m_pParent->m_pImg == m_pParent->m_pImgDown )
+        return;
     m_pParent->m_pImg = m_pParent->m_pImgDown;
     m_pParent->refreshLayout();
 }
@@ -199,6 +191,9 @@ void CtrlSliderCursor::CmdOverDown::execute()
 void CtrlSliderCursor::CmdDownOver::execute()
 {
     m_pParent->releaseMouse();
+
+    if( m_pParent->m_pImg == m_pParent->m_pImgUp )
+        return;
     m_pParent->m_pImg = m_pParent->m_pImgUp;
     m_pParent->refreshLayout();
 }
@@ -206,6 +201,8 @@ void CtrlSliderCursor::CmdDownOver::execute()
 
 void CtrlSliderCursor::CmdUpOver::execute()
 {
+    if( m_pParent->m_pImg == m_pParent->m_pImgOver )
+        return;
     m_pParent->m_pImg = m_pParent->m_pImgOver;
     m_pParent->refreshLayout();
 }
@@ -213,6 +210,8 @@ void CtrlSliderCursor::CmdUpOver::execute()
 
 void CtrlSliderCursor::CmdOverUp::execute()
 {
+    if( m_pParent->m_pImg == m_pParent->m_pImgUp )
+        return;
     m_pParent->m_pImg = m_pParent->m_pImgUp;
     m_pParent->refreshLayout();
 }
index cddc1683d64ef746f1ab237a9c915ee51baf3470..a885572bf3995e9e1b1a9de53ec6f20b46a90b54 100644 (file)
@@ -101,12 +101,14 @@ private:
     int m_xOffset, m_yOffset;
     /// The last received event
     EvtGeneric *m_pEvt;
-    /// Images of the cursor in the differents states
-    OSGraphics *m_pImgUp, *m_pImgOver, *m_pImgDown;
-    /// Current image
-    OSGraphics *m_pImg;
     /// Bezier curve of the slider
     const Bezier &m_rCurve;
+    /// Images of the cursor in the different states
+    const OSGraphics * const m_pImgUp;
+    const OSGraphics * const m_pImgOver;
+    const OSGraphics * const m_pImgDown;
+    /// Current image
+    const OSGraphics *m_pImg;
 
     /// Method called when the position variable is modified
     virtual void onUpdate( Subject<VarPercent> &rVariable, void * );