[vlc-commits] skins2: slider background (some rework)
Erwan Tulou
git at videolan.org
Mon Apr 8 23:45:03 CEST 2013
vlc | branch: master | Erwan Tulou <erwan10 at videolan.org> | Mon Apr 8 21:53:17 2013 +0200| [a70681a1ed30efdb45ee50f22d9ffd878e5ad6e8] | committer: Erwan Tulou
skins2: slider background (some rework)
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a70681a1ed30efdb45ee50f22d9ffd878e5ad6e8
---
modules/gui/skins2/controls/ctrl_slider.cpp | 115 ++++++++++++++++-----------
modules/gui/skins2/controls/ctrl_slider.hpp | 6 ++
2 files changed, 73 insertions(+), 48 deletions(-)
diff --git a/modules/gui/skins2/controls/ctrl_slider.cpp b/modules/gui/skins2/controls/ctrl_slider.cpp
index be61ea9..17c3b73 100644
--- a/modules/gui/skins2/controls/ctrl_slider.cpp
+++ b/modules/gui/skins2/controls/ctrl_slider.cpp
@@ -315,31 +315,18 @@ CtrlSliderBg::CtrlSliderBg( intf_thread_t *pIntf,
CtrlGeneric( pIntf, rHelp, pVisible ), m_pCursor( NULL ),
m_rVariable( rVariable ), m_thickness( thickness ), m_rCurve( rCurve ),
m_width( rCurve.getWidth() ), m_height( rCurve.getHeight() ),
- m_pImgSeq( pBackground ), m_pScaledBmp( NULL ), m_nbHoriz( nbHoriz ),
- m_nbVert( nbVert ), m_padHoriz( padHoriz ), m_padVert( padVert ),
+ m_pImgSeq( pBackground ), m_pScaledBmp( NULL ),
+ m_nbHoriz( nbHoriz ), m_nbVert( nbVert ),
+ m_padHoriz( padHoriz ), m_padVert( padVert ),
m_bgWidth( 0 ), m_bgHeight( 0 ), m_position( 0 )
{
if( m_pImgSeq )
{
- // Build the background image sequence
- // Note: we suppose that the last padding is not included in the
- // given image
- // TODO: we should probably change this assumption, as it would make
- // the code a bit simpler and it would be more natural for the skins
- // designers
- m_bgWidth = (pBackground->getWidth() + m_padHoriz) / m_nbHoriz;
- m_bgHeight = (pBackground->getHeight() + m_padVert) / m_nbVert;
-
// Observe the position variable
m_rVariable.addObserver( this );
// Initial position
m_position = (int)( m_rVariable.get() * (m_nbHoriz * m_nbVert - 1) );
-
- // Initialize the scaled image for the control
- int width = m_bgWidth * m_nbHoriz - m_padHoriz;
- int height = m_bgHeight * m_nbVert - m_padVert;
- m_pScaledBmp = new ScaledBitmap( getIntf(), *m_pImgSeq, width, height );
}
}
@@ -359,18 +346,20 @@ bool CtrlSliderBg::mouseOver( int x, int y ) const
float factorX, factorY;
getResizeFactors( factorX, factorY );
- bool b_isWithinCurve =
- m_rCurve.getMinDist( (int)(x / factorX), (int)(y / factorY),
- factorX, factorY ) < m_thickness;
- bool b_isWithinBitmap =
- m_pScaledBmp &&
- x >= 0 && x < m_pScaledBmp->getWidth() &&
- y >= 0 && y < m_pScaledBmp->getHeight();
-
- return
- m_pScaledBmp ?
- b_isWithinCurve && b_isWithinBitmap :
- b_isWithinCurve;
+ if( m_pScaledBmp )
+ {
+ // background size that is displayed
+ int width = m_bgWidth - (int)(m_padHoriz * factorX);
+ int height = m_bgHeight - (int)(m_padVert * factorY);
+
+ return x >= 0 && x < width &&
+ y >= 0 && y < height;
+ }
+ else
+ {
+ return m_rCurve.getMinDist( (int)(x / factorX), (int)(y / factorY),
+ factorX, factorY ) < m_thickness;
+ }
}
@@ -442,29 +431,20 @@ void CtrlSliderBg::handleEvent( EvtGeneric &rEvent )
}
-void CtrlSliderBg::onResize()
+void CtrlSliderBg::onPositionChange()
{
if( m_pImgSeq )
{
- // Compute the resize factors
- float factorX, factorY;
- getResizeFactors( factorX, factorY );
+ setCurrentImage();
+ }
+}
- // Size of one elementary background image (padding included)
- m_bgWidth =
- (int)((m_pImgSeq->getWidth() + m_padHoriz) * factorX / m_nbHoriz);
- m_bgHeight =
- (int)((m_pImgSeq->getHeight() + m_padVert) * factorY / m_nbVert);
-
- // Rescale the image with the actual size of the control if needed
- int width = m_bgWidth * m_nbHoriz - (int)(m_padHoriz * factorX);
- int height = m_bgHeight * m_nbVert - (int)(m_padVert * factorY);
- if( m_pScaledBmp->getWidth() != width ||
- m_pScaledBmp->getHeight() != height )
- {
- delete m_pScaledBmp;
- m_pScaledBmp = new ScaledBitmap( getIntf(), *m_pImgSeq, width, height );
- }
+
+void CtrlSliderBg::onResize()
+{
+ if( m_pImgSeq )
+ {
+ setCurrentImage();
}
}
@@ -483,7 +463,15 @@ void CtrlSliderBg::onUpdate( Subject<VarPercent> &rVariable, void*arg )
return;
m_position = position;
- notifyLayout( m_bgWidth, m_bgHeight );
+
+ // Compute the resize factors
+ float factorX, factorY;
+ getResizeFactors( factorX, factorY );
+ // real background size
+ int width = m_bgWidth - (int)(m_padHoriz * factorX);
+ int height = m_bgHeight - (int)(m_padVert * factorY);
+
+ notifyLayout( width, height );
}
@@ -502,3 +490,34 @@ void CtrlSliderBg::getResizeFactors( float &rFactorX, float &rFactorY ) const
rFactorY = (float)pPos->getHeight() / (float)m_height;
}
+
+void CtrlSliderBg::setCurrentImage()
+{
+ // Compute the resize factors
+ float factorX, factorY;
+ getResizeFactors( factorX, factorY );
+
+ // Build the background image sequence
+ // Note: we suppose that the last padding is not included in the
+ // given image
+ // TODO: we should probably change this assumption, as it would make
+ // the code a bit simpler and it would be more natural for the skins
+ // designers
+ // Size of one elementary background image (padding included)
+ m_bgWidth =
+ (int)((m_pImgSeq->getWidth() + m_padHoriz) * factorX / m_nbHoriz);
+ m_bgHeight =
+ (int)((m_pImgSeq->getHeight() + m_padVert) * factorY / m_nbVert);
+
+ // Rescale the image accordingly
+ int width = m_bgWidth * m_nbHoriz - (int)(m_padHoriz * factorX);
+ int height = m_bgHeight * m_nbVert - (int)(m_padVert * factorY);
+ if( !m_pScaledBmp ||
+ m_pScaledBmp->getWidth() != width ||
+ m_pScaledBmp->getHeight() != height )
+ {
+ // scaled bitmap
+ delete m_pScaledBmp;
+ m_pScaledBmp = new ScaledBitmap( getIntf(), *m_pImgSeq, width, height );
+ }
+}
diff --git a/modules/gui/skins2/controls/ctrl_slider.hpp b/modules/gui/skins2/controls/ctrl_slider.hpp
index a885572..0b4e069 100644
--- a/modules/gui/skins2/controls/ctrl_slider.hpp
+++ b/modules/gui/skins2/controls/ctrl_slider.hpp
@@ -147,6 +147,9 @@ public:
/// Handle an event
virtual void handleEvent( EvtGeneric &rEvent );
+ /// Called when the position is set
+ virtual void onPositionChange();
+
/// Method called when the control is resized
virtual void onResize();
@@ -185,6 +188,9 @@ private:
/// Method to compute the resize factors
void getResizeFactors( float &rFactorX, float &rFactorY ) const;
+
+ /// Method to (re)set the current image
+ void setCurrentImage( );
};
More information about the vlc-commits
mailing list