static void DrawClipInOut(Rect targetRect, TimelineClip clip) { var assetDuration = TimelineHelpers.GetClipAssetEndTime(clip); bool drawClipOut = assetDuration <double.MaxValue && assetDuration - clip.end> TimeUtility.kTimeEpsilon; bool drawClipIn = clip.clipIn > 0.0; if (!drawClipIn && !drawClipOut) { return; } var rect = targetRect; if (drawClipOut) { var icon = DirectorStyles.Instance.clipOut; var iconRect = new Rect(rect.xMax - icon.fixedWidth - 2.0f, rect.yMin + (rect.height - icon.fixedHeight) * 0.5f, icon.fixedWidth, icon.fixedHeight); GUI.Label(iconRect, GUIContent.none, icon); } if (drawClipIn) { var icon = DirectorStyles.Instance.clipIn; var iconRect = new Rect(2.0f + rect.xMin, rect.yMin + (rect.height - icon.fixedHeight) * 0.5f, icon.fixedWidth, icon.fixedHeight); GUI.Label(iconRect, GUIContent.none, icon); } }
public IEnumerable <Edge> SnappableEdgesFor(IAttractable attractable, ManipulateEdges manipulateEdges) { var edges = new List <Edge>(); bool canAddEdges = !parent.muted; if (canAddEdges) { // Hack: Trim Start in Ripple mode should not have any snap point added if (EditMode.editType == EditMode.EditType.Ripple && manipulateEdges == ManipulateEdges.Left) { return(edges); } if (attractable != this) { if (EditMode.editType == EditMode.EditType.Ripple) { bool skip = false; // Hack: Since Trim End and Move in Ripple mode causes other snap point to move on the same track (which is not supported), disable snapping for this special cases... // TODO Find a proper way to have different snap edges for each edit mode. if (manipulateEdges == ManipulateEdges.Right) { var otherClipGUI = attractable as TimelineClipGUI; skip = otherClipGUI != null && otherClipGUI.parent == parent; } else if (manipulateEdges == ManipulateEdges.Both) { var moveHandler = attractable as MoveItemHandler; skip = moveHandler != null && moveHandler.movingItems.Any(clips => clips.targetTrack == clip.parentTrack && clip.start >= clips.start); } if (skip) { return(edges); } } AddEdge(edges, clip.start); AddEdge(edges, clip.end); } else { if (manipulateEdges == ManipulateEdges.Right) { var d = TimelineHelpers.GetClipAssetEndTime(clip); if (d < double.MaxValue) { if (clip.SupportsLooping()) { var l = TimelineHelpers.GetLoopDuration(clip); var shownTime = TimelineWindow.instance.state.timeAreaShownRange; do { AddEdge(edges, d, false); d += l; }while (d < shownTime.y); } else { AddEdge(edges, d, false); } } } if (manipulateEdges == ManipulateEdges.Left) { var clipInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip.animationClip); if (clipInfo != null && clipInfo.keyTimes.Any()) { AddEdge(edges, clip.FromLocalTimeUnbound(clipInfo.keyTimes.Min()), false); } } } } return(edges); }