void WgPackList::_onMaskPatches( WgPatches& patches, const WgRect& geo, const WgRect& clip, WgBlendMode blendMode ) { if( (m_bOpaque && blendMode == WG_BLENDMODE_BLEND) || blendMode == WG_BLENDMODE_OPAQUE) patches.Sub( WgRect(geo,clip) ); else if( m_bOpaqueEntries && blendMode == WG_BLENDMODE_BLEND ) { if( m_bHorizontal ) patches.Sub( WgRect( WgRect( geo.x, geo.y, WgMin(geo.w,m_contentLength), geo.h ), clip ) ); else patches.Sub( WgRect( WgRect( geo.x, geo.y, geo.w, WgMin(geo.h,m_contentLength) ), clip ) ); } else { WgRect childGeo; WgPackListHook * p = static_cast<WgPackListHook*>(_firstHookWithGeo( childGeo )); while(p) { if( p->_isVisible() ) p->_widget()->_onMaskPatches( patches, childGeo + geo.Pos(), clip, blendMode ); p = static_cast<WgPackListHook*>(_nextHookWithGeo( childGeo, p )); } } }
void WgPackList::_onCollectPatches( WgPatches& container, const WgRect& geo, const WgRect& clip ) { if( m_pSkin ) container.Add( WgRect( geo, clip ) ); else { if( m_bHorizontal ) container.Add( WgRect( WgRect( geo.x, geo.y, WgMin(geo.w,m_contentLength), geo.h ), clip ) ); else container.Add( WgRect( WgRect( geo.x, geo.y, geo.w, WgMin(geo.h,m_contentLength) ), clip ) ); } }
void Knob::_onRender( GfxDevice * pDevice, const Rect& _canvas, const Rect& _window, const Rect& _clip ) { Widget::_onRender(pDevice, _canvas, _window, _clip); int sz = WgMin( _canvas.w,_canvas.h ); if( sz > 1 ) { pDevice->clipDrawElipse( _clip, Rect(_canvas.pos(),sz,sz), Color::pink ); } }
void WgPackList::_onLassoUpdated( const WgRect& oldLasso, const WgRect& newLasso ) { // Get out content area WgRect listArea = _listArea(); // Check if our lassos are inside content area or not. bool bOldLassoInside = false; bool bNewLassoInside = false; if( oldLasso.IntersectsWith(listArea ) ) bOldLassoInside = true; if( newLasso.IntersectsWith(listArea ) ) bNewLassoInside = true; if( !bOldLassoInside && !bNewLassoInside ) return; // None of the lassos inside content. // Get first/last entries marked by old/new lasso int oldOfs1, oldOfs2; int newOfs1, newOfs2; if( m_bHorizontal ) { oldOfs1 = oldLasso.x - listArea.x; oldOfs2 = oldLasso.x + oldLasso.w - listArea.x; newOfs1 = newLasso.x - listArea.x; newOfs2 = newLasso.x + newLasso.w - listArea.x; } else { oldOfs1 = oldLasso.y - listArea.y; oldOfs2 = oldLasso.y + oldLasso.h - listArea.y; newOfs1 = newLasso.y - listArea.y; newOfs2 = newLasso.y + newLasso.h - listArea.y; } int oldFirst = _getEntryAt( oldOfs1 ); int oldLast = _getEntryAt( oldOfs2 ); int newFirst = _getEntryAt( newOfs1 ); int newLast = _getEntryAt( newOfs2 ); // if( bOldLassoInside != bNewLassoInside ) { int beg, end; if( bNewLassoInside ) { beg = newFirst; end = newLast; } else { beg = oldFirst; end = oldLast; } _flipRange( m_hooks.Hook(beg), m_hooks.Hook(end), true ); } else { if( oldFirst != newFirst ) { int beg = WgMin(oldFirst,newFirst); int end = WgMax(oldFirst,newFirst)-1; _flipRange( m_hooks.Hook(beg), m_hooks.Hook(end), true ); } if( oldLast != newLast ) { int beg = WgMin(oldLast,newLast)+1; int end = WgMax(oldLast,newLast); _flipRange( m_hooks.Hook(beg), m_hooks.Hook(end), true ); } } }