Beispiel #1
0
        private LayoutOverrides AdjustOverrideToIgnore(BaseFrameworkElement child, LayoutOverrides overridesToIgnore)
        {
            if (!child.IsAttached)
            {
                overridesToIgnore = LayoutOverrides.All;
            }
            if (LayoutRoundingHelper.UpdateLayoutRounding((SceneElement)child))
            {
                child.ViewModel.Document.OnUpdatedEditTransaction();
            }
            BaseFrameworkElement frameworkElement    = this.GetParentFrameworkElement(child);
            LayoutConstraintMode widthConstraintMode = this.GetWidthConstraintMode(child);

            if (frameworkElement is CanvasElement || (widthConstraintMode & LayoutConstraintMode.CanvasLike) == LayoutConstraintMode.NonOverlappingGridlike)
            {
                overridesToIgnore |= LayoutOverrides.HorizontalMargin;
            }
            LayoutConstraintMode heightConstraintMode = this.GetHeightConstraintMode(child);

            if (frameworkElement is CanvasElement || (heightConstraintMode & LayoutConstraintMode.CanvasLike) == LayoutConstraintMode.NonOverlappingGridlike)
            {
                overridesToIgnore |= LayoutOverrides.VerticalMargin;
            }
            return(overridesToIgnore);
        }
Beispiel #2
0
        public void SetLayoutFromCache(BaseFrameworkElement element, LayoutCacheRecord layoutCacheRecord, Rect boundsOfAllCaches)
        {
            LayoutConstraintMode widthConstraintMode = this.GetWidthConstraintMode(element);
            int num = (int)this.GetHeightConstraintMode(element);

            this.ClearUnusedLayoutProperties(element);
            if (layoutCacheRecord == null)
            {
                return;
            }
            using (element.ViewModel.EnforceGridDesignMode)
            {
                Rect rect = layoutCacheRecord.Rect;
                if ((widthConstraintMode & LayoutConstraintMode.Overlapping) != LayoutConstraintMode.NonOverlappingGridlike)
                {
                    this.SetChildRect(element, rect, layoutCacheRecord.Overrides, LayoutOverrides.None, LayoutOverrides.None, SetRectMode.Default);
                }
                else if (layoutCacheRecord.Overlapping)
                {
                    if (!boundsOfAllCaches.IsEmpty)
                    {
                        rect.Offset(-boundsOfAllCaches.Left, -boundsOfAllCaches.Top);
                    }
                    this.SetChildRect(element, rect, layoutCacheRecord.Overrides, LayoutOverrides.Margin, LayoutOverrides.None, SetRectMode.CreateAtSlotPosition);
                }
                else
                {
                    rect.Offset(-layoutCacheRecord.SlotOrigin.X, -layoutCacheRecord.SlotOrigin.Y);
                    this.SetChildRect(element, rect, layoutCacheRecord.Overrides, LayoutOverrides.None, LayoutOverrides.None, SetRectMode.CreateAtSlotPosition);
                }
            }
        }
Beispiel #3
0
        public LayoutCacheRecord CacheLayout(BaseFrameworkElement element)
        {
            Rect                 childRect           = this.GetChildRect(element);
            LayoutOverrides      overrides           = this.ComputeOverrides(element);
            LayoutConstraintMode widthConstraintMode = this.GetWidthConstraintMode(element);
            int   num        = (int)this.GetHeightConstraintMode(element);
            Point slotOrigin = (widthConstraintMode & LayoutConstraintMode.Overlapping) != LayoutConstraintMode.NonOverlappingGridlike || element.Visual == null ? new Point() : ((IViewVisual)element.Visual).GetLayoutSlot().TopLeft;

            return(new LayoutCacheRecord(childRect, slotOrigin, overrides, (widthConstraintMode & LayoutConstraintMode.Overlapping) != LayoutConstraintMode.NonOverlappingGridlike));
        }
Beispiel #4
0
        private LayoutConstraintMode GetHeightConstraintModeCore(IViewVisual parent, IViewVisual child, SceneView view, bool allowGridAutoChecks)
        {
            if (parent == null)
            {
                return(LayoutConstraintMode.CanvasLike);
            }
            LayoutConstraintMode layoutConstraintMode = LayoutConstraintMode.NonOverlappingGridlike;
            IType itype = parent.GetIType((ITypeResolver)view.ProjectContext);

            if (PlatformTypes.Grid.IsAssignableFrom((ITypeId)itype) || PlatformTypes.Canvas.IsAssignableFrom((ITypeId)itype))
            {
                layoutConstraintMode |= LayoutConstraintMode.Overlapping;
            }
            IViewVisual viewVisual = parent.VisualParent as IViewVisual;

            if (viewVisual != null && PlatformTypes.IsInstance(viewVisual.PlatformSpecificObject, ProjectNeutralTypes.Viewbox, (ITypeResolver)view.ProjectContext))
            {
                layoutConstraintMode |= LayoutConstraintMode.CanvasLike;
            }
            if (PlatformTypes.Canvas.IsAssignableFrom((ITypeId)itype) || PlatformTypes.TextBlock.IsAssignableFrom((ITypeId)itype) || (PlatformTypes.RichTextBox.IsAssignableFrom((ITypeId)itype) || PlatformTypes.FlowDocumentScrollViewer.IsAssignableFrom((ITypeId)itype)) || (PlatformTypes.ScrollContentPresenter.IsAssignableFrom((ITypeId)itype) || ProjectNeutralTypes.Viewbox.IsAssignableFrom((ITypeId)itype) || (PlatformTypes.Popup.IsAssignableFrom((ITypeId)itype) || ProjectNeutralTypes.PathPanel.IsAssignableFrom((ITypeId)itype))))
            {
                layoutConstraintMode |= LayoutConstraintMode.CanvasLike;
            }
            if (PlatformTypes.StackPanel.IsAssignableFrom((ITypeId)itype) && ((IViewPanel)parent).Orientation == Orientation.Vertical)
            {
                layoutConstraintMode |= LayoutConstraintMode.CanvasLike;
            }
            if (ProjectNeutralTypes.DockPanel.IsAssignableFrom((ITypeId)itype) && child != null)
            {
                switch ((Dock)view.ConvertToWpfValue(child.GetCurrentValue(view.ProjectContext.ResolveProperty(DockPanelElement.DockProperty))))
                {
                case Dock.Top:
                case Dock.Bottom:
                    layoutConstraintMode |= LayoutConstraintMode.CanvasLike;
                    break;
                }
            }
            if (ProjectNeutralTypes.WrapPanel.IsAssignableFrom((ITypeId)itype) && double.IsNaN((double)parent.GetCurrentValue(view.ProjectContext.ResolveProperty(WrapPanelElement.ItemHeightProperty))))
            {
                layoutConstraintMode |= LayoutConstraintMode.CanvasLike;
            }
            if ((layoutConstraintMode & LayoutConstraintMode.CanvasLike) == LayoutConstraintMode.NonOverlappingGridlike && double.IsNaN((double)parent.GetCurrentValue(view.ProjectContext.ResolveProperty(BaseFrameworkElement.HeightProperty))) && double.IsNaN((double)parent.GetCurrentValue(view.ProjectContext.ResolveProperty(DesignTimeProperties.DesignHeightProperty))))
            {
                IViewGrid viewGrid = parent as IViewGrid;
                if (viewGrid != null)
                {
                    if (!allowGridAutoChecks)
                    {
                        return(layoutConstraintMode);
                    }
                    IType type = child == null ? (IType)null : child.GetIType((ITypeResolver)view.ProjectContext);
                    if (child != null && (!PlatformTypes.Path.IsAssignableFrom((ITypeId)type) || !double.IsNaN((double)child.GetCurrentValue(view.ProjectContext.ResolveProperty(BaseFrameworkElement.HeightProperty)))))
                    {
                        int    val2_1 = (int)child.GetCurrentValue(view.ProjectContext.ResolveProperty(GridElement.RowProperty));
                        int    val2_2 = val2_1 + (int)child.GetCurrentValue(view.ProjectContext.ResolveProperty(GridElement.RowSpanProperty));
                        int    num1   = Math.Max(0, Math.Min(viewGrid.RowDefinitionsCount - 1, val2_1));
                        int    num2   = Math.Max(0, Math.Min(viewGrid.RowDefinitionsCount, val2_2));
                        double num3   = 0.0;
                        bool   flag1  = true;
                        bool   flag2  = true;
                        if (num2 == 0)
                        {
                            flag1 = false;
                            flag2 = false;
                            num3  = viewGrid.RenderSize.Height;
                        }
                        else
                        {
                            for (int index = num1; index < num2; ++index)
                            {
                                IViewRowDefinition rowDefinition = viewGrid.GetRowDefinition(index);
                                flag1 &= rowDefinition.Height.IsAuto;
                                flag2 &= rowDefinition.Height.IsAbsolute;
                                num3  += rowDefinition.ActualHeight;
                            }
                        }
                        double    height      = child.DesiredSize.Height;
                        IProperty propertyKey = view.Platform.Metadata.ResolveProperty(Base2DElement.UseLayoutRoundingProperty);
                        if (propertyKey != null && child.GetCurrentValue(propertyKey) != parent.GetCurrentValue(propertyKey))
                        {
                            height += 0.999;
                        }
                        if (Tolerances.LessThan(height, num3) || flag2)
                        {
                            return(layoutConstraintMode);
                        }
                        if (flag1)
                        {
                            layoutConstraintMode |= LayoutConstraintMode.CanvasLike;
                        }
                    }
                }
                if ((VerticalAlignment)view.ConvertToWpfValue(parent.GetCurrentValue(view.ProjectContext.ResolveProperty(BaseFrameworkElement.VerticalAlignmentProperty))) != VerticalAlignment.Stretch)
                {
                    layoutConstraintMode |= LayoutConstraintMode.CanvasLike;
                }
                else
                {
                    if (PlatformTypes.Control.IsAssignableFrom((ITypeId)itype) || PlatformTypes.ContentPresenter.IsAssignableFrom((ITypeId)itype))
                    {
                        allowGridAutoChecks = true;
                    }
                    if ((this.GetHeightConstraintModeCore(parent.VisualParent as IViewVisual, parent, view, allowGridAutoChecks) & LayoutConstraintMode.CanvasLike) != LayoutConstraintMode.NonOverlappingGridlike)
                    {
                        layoutConstraintMode |= LayoutConstraintMode.CanvasLike;
                    }
                }
            }
            return(layoutConstraintMode);
        }