CtrlImage::CtrlImage( intf_thread_t *pIntf, GenericBitmap &rBitmap, CmdGeneric &rCommand, resize_t resizeMethod, const UString &rHelp, VarBool *pVisible, bool art ): CtrlFlat( pIntf, rHelp, pVisible ), m_pBitmap( &rBitmap ), m_pOriginalBitmap( &rBitmap ), m_rCommand( rCommand ), m_resizeMethod( resizeMethod ), m_art( art ), m_x( 0 ), m_y( 0 ) { if( m_art ) { // art file if any will overwrite the original image VlcProc *pVlcProc = VlcProc::instance( getIntf() ); ArtManager* pArtManager = ArtManager::instance( getIntf() ); // add observer pVlcProc->getStreamArtVar().addObserver( this ); // retrieve initial state of art file std::string str = pVlcProc->getStreamArtVar().get(); GenericBitmap* pArt = (GenericBitmap*) pArtManager->getArtBitmap( str ); if( pArt ) { m_pBitmap = pArt; msg_Dbg( getIntf(), "art file %s to be displayed (wxh = %ix%i)", str.c_str(), m_pBitmap->getWidth(), m_pBitmap->getHeight() ); } } // Create the initial image m_pImage = OSFactory::instance( getIntf() )->createOSGraphics( m_pBitmap->getWidth(), m_pBitmap->getHeight() ); m_pImage->drawBitmap( *m_pBitmap ); }
void CtrlImage::onUpdate( Subject<VarString> &rVariable, void* arg ) { (void)arg; VlcProc *pVlcProc = VlcProc::instance( getIntf() ); if( &rVariable == &pVlcProc->getStreamArtVar() ) { std::string str = ((VarString&)rVariable).get(); ArtManager* pArtManager = ArtManager::instance( getIntf() ); GenericBitmap* pArt = (GenericBitmap*) pArtManager->getArtBitmap( str ); m_pBitmap = pArt ? pArt : m_pOriginalBitmap; msg_Dbg( getIntf(), "art file %s to be displayed (wxh = %ix%i)", str.c_str(), m_pBitmap->getWidth(), m_pBitmap->getHeight() ); delete m_pImage; m_pImage = OSFactory::instance( getIntf() )->createOSGraphics( m_pBitmap->getWidth(), m_pBitmap->getHeight() ); m_pImage->drawBitmap( *m_pBitmap ); notifyLayout(); } }
CtrlImage::~CtrlImage() { delete m_pImage; if( m_art ) { VlcProc *pVlcProc = VlcProc::instance( getIntf() ); pVlcProc->getStreamArtVar().delObserver( this ); } }