void WgPackList::_onRender( WgGfxDevice * pDevice, const WgRect& _canvas, const WgRect& _window, const WgRect& _clip ) { WgRect contentRect = _listCanvas() + _canvas.Pos(); if( m_pSkin ) { m_pSkin->Render( pDevice, contentRect, m_state, _clip ); contentRect = m_pSkin->ContentRect( contentRect, m_state ); } int startOfs = m_bHorizontal ? _clip.x-contentRect.x : _clip.y-contentRect.y; if( startOfs < 0 ) startOfs = 0; for( int i = _getEntryAt( startOfs ) ; i < m_hooks.Size() ; i++ ) { WgPackListHook * pHook = m_hooks.Hook(i); WgWidget * pChild = pHook->_widget(); // Get entry geometry, skin and state WgRect entryGeo( contentRect ); if( m_bHorizontal ) { if( pHook->m_ofs >= contentRect.w ) break; entryGeo.x += pHook->m_ofs; entryGeo.w = pHook->m_length; } else { if( pHook->m_ofs >= contentRect.h ) break; entryGeo.y += pHook->m_ofs; entryGeo.h = pHook->m_length; } WgSkin * pEntrySkin = m_pEntrySkin[i&0x1].RawPtr(); WgState state = pChild->State(); // WgRect childGeo( entryGeo ); // Render entry skin, shrink child geo if( pEntrySkin ) { pEntrySkin->Render( pDevice, entryGeo, state, _clip ); // childGeo = pEntrySkin->ContentRect( entryGeo, state ); } // Render child // pChild->_onRender( pDevice, childGeo, childGeo, _clip ); } }