void CXTPMarkupUIElement::InvalidateMeasureOverride(CXTPMarkupDrawingContext* pDC) { if (!m_bMeasureInProgress && !m_bNeverMeasured) { m_bMeasureDirty = TRUE; m_bArrangeDirty = TRUE; CSize sz = GetDesiredSize(); Measure(pDC, m_szPreviousAvailableSize); if (sz != GetDesiredSize()) { m_bMeasureDirty = TRUE; m_bArrangeDirty = TRUE; CXTPMarkupUIElement* pParent = MARKUP_DYNAMICCAST(CXTPMarkupUIElement, GetVisualParent()); if (pParent) { pParent->InvalidateMeasureOverride(pDC); } else if (m_pMarkupContext) { m_pMarkupContext->OnInvalidateArrange(this); } } else { Arrange(m_rcFinalRect); InvalidateVisual(); } } }
void Control::SetVisualParent (UIElement *visual_parent) { if (GetVisualParent () != visual_parent) { FrameworkElement::SetVisualParent (visual_parent); providers.isenabled->SetDataSource (GetLogicalParent ()); } }
void Canvas::OnPropertyChanged (PropertyChangedEventArgs *args, MoonError *error) { if (args->GetProperty ()->GetOwnerType() != Type::CANVAS) { Panel::OnPropertyChanged (args, error); return; } if (args->GetId () == Canvas::TopProperty || args->GetId () == Canvas::LeftProperty) { if (GetVisualParent () == NULL) { UpdateTransform (); InvalidateArrange (); } } NotifyListenersOfPropertyChange (args, error); }
Size Image::ComputeActualSize () { Size result = MediaBase::ComputeActualSize (); UIElement *parent = GetVisualParent (); ImageSource *source = GetSource (); if (parent && !parent->Is (Type::CANVAS)) if (ReadLocalValue (LayoutInformation::LayoutSlotProperty)) return result; if (source && source->GetSurface (NULL)) { Size available = Size (INFINITY, INFINITY); available = ApplySizeConstraints (available); // FIXME - Propagate properly MoonError error; result = MeasureOverrideWithError (available, &error); result = ApplySizeConstraints (result); } return result; }