protected void OffsetTextToKeepCaretInView() { this.textComponent.XUnits = global::Gum.Converters.GeneralUnitType.PixelsFromSmall; this.caretComponent.XUnits = global::Gum.Converters.GeneralUnitType.PixelsFromSmall; float leftOfCaret = caretComponent.AbsoluteX; float rightOfCaret = caretComponent.AbsoluteX + caretComponent.GetAbsoluteWidth(); float leftOfParent = caretComponent.EffectiveParentGue.AbsoluteX; float rightOfParent = caretComponent.EffectiveParentGue.AbsoluteX + caretComponent.EffectiveParentGue.GetAbsoluteWidth(); float shiftAmount = 0; if (rightOfCaret > rightOfParent) { shiftAmount = rightOfParent - rightOfCaret - edgeToTextPadding; } if (leftOfCaret < leftOfParent) { shiftAmount = leftOfParent - leftOfCaret + edgeToTextPadding; } if (shiftAmount != 0) { this.textComponent.X += shiftAmount; this.caretComponent.X += shiftAmount; } }
private Action GetPointingAction(GraphicalUiElement objectToPointAt, PointingArrowRuntime.PointDirection direction) { return(() => { var xMod = 0f; var yMod = 0f; var arrow = _gameScreen.PointingArrowInstance; if (objectToPointAt.YOrigin == VerticalAlignment.Top) { switch (direction) { case PointingArrowRuntime.PointDirection.Left: case PointingArrowRuntime.PointDirection.Right: yMod = objectToPointAt.GetAbsoluteHeight() / 2; break; case PointingArrowRuntime.PointDirection.Up: yMod = objectToPointAt.GetAbsoluteHeight(); break; } } else if (objectToPointAt.YOrigin == VerticalAlignment.Center) { switch (direction) { case PointingArrowRuntime.PointDirection.Up: yMod += objectToPointAt.GetAbsoluteHeight() / 2; break; case PointingArrowRuntime.PointDirection.Down: yMod -= objectToPointAt.GetAbsoluteHeight() / 2; break; } } else if (objectToPointAt.YOrigin == VerticalAlignment.Bottom) { switch (direction) { case PointingArrowRuntime.PointDirection.Left: case PointingArrowRuntime.PointDirection.Right: yMod -= objectToPointAt.GetAbsoluteHeight() / 2; break; case PointingArrowRuntime.PointDirection.Down: yMod -= objectToPointAt.GetAbsoluteHeight(); break; } } if (objectToPointAt.XOrigin == HorizontalAlignment.Left) { switch (direction) { case PointingArrowRuntime.PointDirection.Left: xMod = objectToPointAt.GetAbsoluteWidth(); break; case PointingArrowRuntime.PointDirection.Up: xMod = objectToPointAt.GetAbsoluteWidth() / 2; break; case PointingArrowRuntime.PointDirection.Down: xMod = objectToPointAt.GetAbsoluteWidth() / 2; break; } } else if (objectToPointAt.XOrigin == HorizontalAlignment.Center) { switch (direction) { case PointingArrowRuntime.PointDirection.Left: xMod = objectToPointAt.GetAbsoluteWidth() / 2; break; case PointingArrowRuntime.PointDirection.Right: xMod = objectToPointAt.GetAbsoluteWidth() / 2; break; } } else if (objectToPointAt.XOrigin == HorizontalAlignment.Right) { switch (direction) { case PointingArrowRuntime.PointDirection.Right: xMod = objectToPointAt.GetAbsoluteWidth(); break; case PointingArrowRuntime.PointDirection.Up: xMod = -objectToPointAt.GetAbsoluteWidth() / 2; break; case PointingArrowRuntime.PointDirection.Down: xMod = -objectToPointAt.GetAbsoluteWidth() / 2; break; } } arrow.CurrentPointDirectionState = direction; arrow.X = objectToPointAt.AbsoluteX + xMod; arrow.Y = objectToPointAt.AbsoluteY + yMod; arrow.Visible = true; arrow.FlashAnimation.Play(); }); }