public override void HandleEvent(EventBase evt) { if (evt.eventTypeId == AttachToPanelEvent.TypeId() && evt is AttachToPanelEvent attachEvent) { textHandle = attachEvent.destinationPanel.contextType == ContextType.Editor ? TextHandleFactory.GetEditorHandle() : TextHandleFactory.GetRuntimeHandle(); #if UNITY_EDITOR (attachEvent.destinationPanel as BaseVisualElementPanel)?.OnTextElementAdded(this); #endif } else if (evt.eventTypeId == DetachFromPanelEvent.TypeId() && evt is DetachFromPanelEvent detachEvent) { #if UNITY_EDITOR (detachEvent.originPanel as BaseVisualElementPanel)?.OnTextElementRemoved(this); #endif } base.HandleEvent(evt); }
internal static Vector2 MeasureVisualElementTextSize(VisualElement ve, string textToMeasure, float width, VisualElement.MeasureMode widthMode, float height, VisualElement.MeasureMode heightMode, ITextHandle textHandle) { float measuredWidth = float.NaN; float measuredHeight = float.NaN; if (textToMeasure == null || (ve.computedStyle.unityFont == null && ve.computedStyle.unityFontDefinition.IsEmpty())) { return(new Vector2(measuredWidth, measuredHeight)); } var elementScaling = ve.ComputeGlobalScale(); if (elementScaling.x + elementScaling.y <= 0 || ve.scaledPixelsPerPoint <= 0) { return(Vector2.zero); } float pixelsPerPoint = ve.scaledPixelsPerPoint; float pixelOffset = 0.02f; float pointOffset = pixelOffset / pixelsPerPoint; if (widthMode == VisualElement.MeasureMode.Exactly) { measuredWidth = width; } else { var textParams = MeshGenerationContextUtils.TextParams.MakeStyleBased(ve, textToMeasure); textParams.wordWrap = false; // Case 1215962: round up as yoga could decide to round down and text would start wrapping measuredWidth = textHandle.ComputeTextWidth(textParams, pixelsPerPoint); measuredWidth = measuredWidth < pointOffset ? 0 : AlignmentUtils.CeilToPixelGrid(measuredWidth, pixelsPerPoint, pixelOffset); if (widthMode == VisualElement.MeasureMode.AtMost) { measuredWidth = Mathf.Min(measuredWidth, width); } } if (heightMode == VisualElement.MeasureMode.Exactly) { measuredHeight = height; } else { var textParams = MeshGenerationContextUtils.TextParams.MakeStyleBased(ve, textToMeasure); textParams.wordWrapWidth = measuredWidth; measuredHeight = textHandle.ComputeTextHeight(textParams, pixelsPerPoint); measuredHeight = measuredHeight < pointOffset ? 0 : AlignmentUtils.CeilToPixelGrid(measuredHeight, pixelsPerPoint, pixelOffset); if (heightMode == VisualElement.MeasureMode.AtMost) { measuredHeight = Mathf.Min(measuredHeight, height); } } return(new Vector2(measuredWidth, measuredHeight)); }
private void OnAttachToPanel(AttachToPanelEvent e) { m_TextHandle = e.destinationPanel.contextType == ContextType.Editor ? TextHandleFactory.GetEditorHandle() : TextHandleFactory.GetRuntimeHandle(); }
public static void Text(this MeshGenerationContext mgc, TextParams textParams, ITextHandle handle, float pixelsPerPoint) { if (textParams.font != null || !textParams.fontDefinition.IsEmpty()) { mgc.painter.DrawText(textParams, handle, pixelsPerPoint); } }