void WgStackPanel::_onRenderRequested( WgVectorHook * _pHook, const WgRect& _rect ) { WgStackHook * pHook = static_cast<WgStackHook*>(_pHook); if( !pHook->IsVisible() ) return; // Put our rectangle into patches WgRect rect = _rect + pHook->_getGeo(WgRect(0,0,m_size)).Pos(); WgPatches patches; patches.Add( rect ); // Remove portions of patches that are covered by opaque upper siblings WgStackHook * pCover = ((WgStackHook*)pHook)->_next(); while( pCover ) { WgRect geo = pCover->_getGeo(m_size); if( pCover->IsVisible() && geo.IntersectsWith( rect ) ) pCover->_widget()->_onMaskPatches( patches, geo, WgRect(0,0,65536,65536 ), _getBlendMode() ); pCover = pCover->_next(); } // Make request render calls for( const WgRect * pRect = patches.Begin() ; pRect < patches.End() ; pRect++ ) _requestRender( * pRect ); }
SlotData * JSONDataParser::_parseSlot(const rapidjson::Value & rawData) { const auto slot = BaseObject::borrowObject<SlotData>(); slot->name = _getString(rawData, NAME, ""); slot->parent = this->_armature->getBone(_getString(rawData, PARENT, "")); slot->displayIndex = _getNumber(rawData, DISPLAY_INDEX, (int)0); slot->zOrder = _getNumber(rawData, Z_ORDER, (unsigned)this->_armature->getSortedSlots().size()); if (rawData.HasMember(COLOR)) { slot->color = SlotData::generateColor(); _parseColorTransform(rawData[COLOR], *slot->color); } else { slot->color = &SlotData::DEFAULT_COLOR; } if (rawData.HasMember(BLEND_MODE) && rawData[BLEND_MODE].IsString()) { slot->blendMode = _getBlendMode(rawData[BLEND_MODE].GetString()); } else { slot->blendMode = (BlendMode)_getNumber(rawData, BLEND_MODE, (int)BlendMode::Normal); } if (this->_isParentCooriinate) { if (rawData.HasMember(COLOR_TRANSFORM)) { slot->color = SlotData::generateColor(); _parseColorTransform(rawData[COLOR_TRANSFORM], *slot->color); } else { slot->color = &SlotData::DEFAULT_COLOR; } } return slot; }
void WgPopupLayer::_onRequestRender( const WgRect& rect, const WgPopupHook * pHook ) { // Clip our geometry and put it in a dirtyrect-list WgPatches patches; patches.Add( WgRect( rect, WgRect(0,0,m_size)) ); // Remove portions of dirty rect that are covered by opaque upper siblings, // possibly filling list with many small dirty rects instead. WgPopupHook * pCover; if( pHook ) pCover = pHook->_next(); else pCover = m_popupHooks.First(); while( pCover ) { if( pCover->m_geo.IntersectsWith( rect ) ) pCover->_widget()->_onMaskPatches( patches, pCover->m_geo, WgRect(0,0,65536,65536 ), _getBlendMode() ); pCover = pCover->_next(); } // Make request render calls for( const WgRect * pRect = patches.Begin() ; pRect < patches.End() ; pRect++ ) _requestRender( * pRect ); }