#include "../events/evt_mouse.hpp"
#include "../events/evt_scroll.hpp"
#include "../src/generic_bitmap.hpp"
+#include "../src/scaled_bitmap.hpp"
#include "../src/top_window.hpp"
#include "../src/os_factory.hpp"
#include "../src/os_graphics.hpp"
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( NULL ), m_nbHoriz( nbHoriz ), m_nbVert( nbVert ),
+ m_pImgSeq( pBackground ), m_nbHoriz( nbHoriz ), m_nbVert( nbVert ),
m_padHoriz( padHoriz ), m_padVert( padVert ), m_bgWidth( 0 ),
m_bgHeight( 0 ), m_position( 0 )
{
if( pBackground )
{
// Build the background image sequence
- OSFactory *pOsFactory = OSFactory::instance( getIntf() );
- m_pImgSeq = pOsFactory->createOSGraphics( pBackground->getWidth(),
- pBackground->getHeight() );
- m_pImgSeq->drawBitmap( *pBackground, 0, 0 );
-
m_bgWidth = (pBackground->getWidth() + m_padHoriz) / nbHoriz;
m_bgHeight = (pBackground->getHeight() + m_padVert) / nbVert;
CtrlSliderBg::~CtrlSliderBg()
{
m_rVariable.delObserver( this );
- delete m_pImgSeq;
}
{
if( m_pImgSeq )
{
- // Locate the right image in the background bitmap
- int x = m_bgWidth * ( m_position % m_nbHoriz );
- int y = m_bgHeight * ( m_position / m_nbHoriz );
- // Draw the background image
- rImage.drawGraphics( *m_pImgSeq, x, y, xDest, yDest,
- m_bgWidth - m_padHoriz, m_bgHeight - m_padVert );
+ if( m_bgWidth > 0 && m_bgHeight > 0 )
+ {
+ // Compute the resize factors
+ float factorX, factorY;
+ getResizeFactors( factorX, factorY );
+
+ // Rescale the image with the actual size of the control
+ ScaledBitmap bmp( getIntf(), *m_pImgSeq, m_bgWidth * m_nbHoriz,
+ m_bgHeight * m_nbVert );
+
+ // Locate the right image in the background bitmap
+ int x = m_bgWidth * ( m_position % m_nbHoriz );
+ int y = m_bgHeight * ( m_position / m_nbHoriz );
+ // Draw the background image
+ rImage.drawBitmap( bmp, x, y, xDest, yDest,
+ m_bgWidth - (int)(m_padHoriz * factorX),
+ m_bgHeight - (int)(m_padVert * factorY) );
+ }
}
}
}
+void CtrlSliderBg::onResize()
+{
+ if( m_pImgSeq )
+ {
+ // Compute only the new size of an elementary image.
+ // The actual resizing is done in the draw() method for now...
+
+ // Compute the resize factors
+ float factorX, factorY;
+ getResizeFactors( factorX, factorY );
+
+ // Size of one elementary background image (padding included)
+ m_bgWidth = (int)(m_pImgSeq->getWidth() * factorX / m_nbHoriz);
+ m_bgHeight = (int)(m_pImgSeq->getHeight() * factorY / m_nbVert);
+ }
+}
+
+
void CtrlSliderBg::associateCursor( CtrlSliderCursor &rCursor )
{
m_pCursor = &rCursor;