Exemplo n.º 1
0
        public override void OnCreate()
        {
            alignmentTarget  = AlignmentTarget.Parent;
            alignmentTargets = new List <ISelectOption <AlignmentTarget> > {
                new EnumSelectOption <AlignmentTarget>(AlignmentTarget.Parent),
                new EnumSelectOption <AlignmentTarget>(AlignmentTarget.ParentContentArea),
                new EnumSelectOption <AlignmentTarget>(AlignmentTarget.LayoutBox),
                new EnumSelectOption <AlignmentTarget>(AlignmentTarget.View),
                new EnumSelectOption <AlignmentTarget>(AlignmentTarget.Unset),
                new EnumSelectOption <AlignmentTarget>(AlignmentTarget.Mouse),
            };

            alignmentBoundary   = AlignmentBoundary.Unset;
            alignmentBoundaries = new List <ISelectOption <AlignmentBoundary> > {
                new EnumSelectOption <AlignmentBoundary>(AlignmentBoundary.Unset),
                new EnumSelectOption <AlignmentBoundary>(AlignmentBoundary.Parent),
                new EnumSelectOption <AlignmentBoundary>(AlignmentBoundary.Clipper),
                new EnumSelectOption <AlignmentBoundary>(AlignmentBoundary.View),
                new EnumSelectOption <AlignmentBoundary>(AlignmentBoundary.Screen),
            };
        }
Exemplo n.º 2
0
        public static float ResolveOffsetOriginSizeY(LayoutResult result, float viewportHeight, AlignmentTarget target)
        {
            switch (target)
            {
            case AlignmentTarget.Unset:
            case AlignmentTarget.LayoutBox:
                return(result.allocatedSize.height);

            case AlignmentTarget.Parent:
                if (result.layoutParent == null)
                {
                    return(viewportHeight);
                }

                return(result.layoutParent.actualSize.height);

            case AlignmentTarget.ParentContentArea:
                if (result.layoutParent == null)
                {
                    return(viewportHeight);
                }

                return(Mathf.Max(0, result.layoutParent.ContentAreaHeight));

            case AlignmentTarget.Template:
                // todo handle transclusion
                return(0);

            case AlignmentTarget.TemplateContentArea:
                // todo handle transclusion
                return(0);

            case AlignmentTarget.View:
                return(viewportHeight);

            case AlignmentTarget.Screen:
                return(result.element.application.Height);

            case AlignmentTarget.Mouse: {
                return(0);
            }

            default:
                throw new ArgumentOutOfRangeException(nameof(target), target, null);
            }
        }
Exemplo n.º 3
0
        public static float ResolveOriginBaseY(LayoutResult result, float viewportY, AlignmentTarget target, AlignmentDirection direction, InputSystem inputSystem)
        {
            switch (target)
            {
            case AlignmentTarget.Unset:
            case AlignmentTarget.LayoutBox:
                return(result.allocatedPosition.y);

            case AlignmentTarget.Parent:
                return(0);

            case AlignmentTarget.ParentContentArea:
                LayoutResult parentResult = result.layoutParent;
                if (parentResult == null)
                {
                    return(0);
                }

                if (direction == AlignmentDirection.Start)
                {
                    return(parentResult.padding.top + parentResult.border.top);
                }
                else
                {
                    return(parentResult.padding.bottom + parentResult.border.bottom);
                }

            case AlignmentTarget.Template:
                throw new NotImplementedException();

            case AlignmentTarget.TemplateContentArea:
                throw new NotImplementedException();

            case AlignmentTarget.View: {
                if (result.element.parent == null)
                {
                    return(0);
                }

                LayoutResult ptr    = result.element.parent.layoutResult;
                float        output = viewportY;
                while (ptr != null)
                {
                    output -= ptr.alignedPosition.y;
                    if (ptr.element.parent == null)
                    {
                        return(output);
                    }

                    ptr = ptr.element.parent.layoutResult;
                }

                return(output);
            }

            case AlignmentTarget.Screen: {
                if (result.element.parent == null)
                {
                    return(0);
                }
                LayoutResult ptr    = result.element.parent.layoutResult;
                float        output = 0;
                while (ptr != null)
                {
                    output -= ptr.alignedPosition.y;
                    if (ptr.element.parent == null)
                    {
                        return(output);
                    }

                    ptr = ptr.element.parent.layoutResult;
                }

                return(output);
            }

            case AlignmentTarget.Mouse:
                float dist = GetYDistanceToScreen(result);
                return(inputSystem.MousePosition.y + dist);

            default:
                throw new ArgumentOutOfRangeException(nameof(target), target, null);
            }
        }
Exemplo n.º 4
0
        public static float ResolveOriginBaseX(LayoutResult result, float viewportX, AlignmentTarget target, AlignmentDirection direction, InputSystem inputSystem)
        {
            switch (target)
            {
            case AlignmentTarget.Unset:
            case AlignmentTarget.LayoutBox:
                return(result.allocatedPosition.x);

            case AlignmentTarget.Parent:
                return(0);

            case AlignmentTarget.ParentContentArea:
                LayoutResult parentResult = result.layoutParent;
                if (parentResult == null)
                {
                    return(0);
                }

                if (direction == AlignmentDirection.Start)
                {
                    return(parentResult.padding.left + parentResult.border.left);
                }
                else
                {
                    return(parentResult.padding.right + parentResult.border.right);
                }

            case AlignmentTarget.Template:
                // todo handle transclusion
                return(0);

            case AlignmentTarget.TemplateContentArea:
                // todo handle transclusion
                return(0);

            case AlignmentTarget.View: {
                if (result.element.parent == null)
                {
                    return(0);
                }
                LayoutResult ptr    = result.element.parent.layoutResult;
                float        output = viewportX;
                while (ptr != null)
                {
                    output -= ptr.alignedPosition.x;
                    if (ptr.element.parent == null)
                    {
                        return(output);
                    }

                    ptr = ptr.element.parent.layoutResult;
                }

                return(output);
            }

            case AlignmentTarget.Screen: {
                if (result.element.parent == null)
                {
                    return(0);
                }
                LayoutResult ptr    = result.element.parent.layoutResult;
                float        output = 0;
                while (ptr != null)
                {
                    output -= ptr.alignedPosition.x;
                    if (ptr.element.parent == null)
                    {
                        return(output);
                    }

                    ptr = ptr.element.parent.layoutResult;
                }

                return(output);
            }

            case AlignmentTarget.Mouse: {
                float dist = GetXDistanceToScreen(result);
                return(inputSystem.MousePosition.x + dist);
            }

            default:
                throw new ArgumentOutOfRangeException(nameof(target), target, null);
            }
        }