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), }; }
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); } }
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); } }
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); } }