Search in sources :

Example 1 with RegularRectangle

use of com.helospark.tactview.core.timeline.TimelineRenderResult.RegularRectangle in project tactview by helospark.

the class FrameExtender method expandFrame.

public ClipImage expandFrame(FrameExtendRequest request) {
    ReadOnlyClipImage frameResult = request.getFrameResult();
    TimelinePosition timelinePosition = request.getTimelinePosition();
    VisualTimelineClip clip = request.getClip();
    int previewHeight = request.getPreviewHeight();
    int previewWidth = request.getPreviewWidth();
    int anchorOffsetX = clip.getHorizontalAlignment(timelinePosition).apply(frameResult.getWidth(), previewWidth);
    int anchorOffsetY = clip.getVerticalAlignment(timelinePosition).apply(frameResult.getHeight(), previewHeight);
    double scale = request.getScale();
    GetPositionParameters getPositionParameters = new GetPositionParameters(timelinePosition, scale, previewWidth, previewHeight);
    int requestedXPosition = anchorOffsetX + clip.getXPosition(getPositionParameters);
    int requestedYPosition = anchorOffsetY + clip.getYPosition(getPositionParameters);
    request.outBoundPositions.put(clip.getId(), new RegularRectangle(requestedXPosition, requestedYPosition, frameResult.getWidth(), frameResult.getHeight()));
    return expandAndTranslate(frameResult, previewWidth, previewHeight, requestedXPosition, requestedYPosition);
}
Also used : GetPositionParameters(com.helospark.tactview.core.timeline.GetPositionParameters) ReadOnlyClipImage(com.helospark.tactview.core.timeline.image.ReadOnlyClipImage) VisualTimelineClip(com.helospark.tactview.core.timeline.VisualTimelineClip) TimelinePosition(com.helospark.tactview.core.timeline.TimelinePosition) RegularRectangle(com.helospark.tactview.core.timeline.TimelineRenderResult.RegularRectangle)

Example 2 with RegularRectangle

use of com.helospark.tactview.core.timeline.TimelineRenderResult.RegularRectangle in project tactview by helospark.

the class InputModeRepository method createMouseHandler.

private EventHandler<? super MouseEvent> createMouseHandler(Consumer<StrategyMouseInput> function, Consumer<GeneralCanvasOperationsMouseRequest> fallbackHandler) {
    return e -> {
        JavaDisplayableAudioVideoFragment cacheCurrentImage = displayUpdaterService.getCacheCurrentImage();
        double unmodifiedX = e.getX() - canvasStateHolder.getTranslateX();
        double unmodifiedY = e.getY() - canvasStateHolder.getTranslateY();
        if (inputModeInput != null) {
            double x = (sizeFunctionImplementation.scalePreviewDataUsingSizeFunction(unmodifiedX, inputModeInput.sizeFunction, projectRepository.getPreviewWidth()));
            double y = (sizeFunctionImplementation.scalePreviewDataUsingSizeFunction(unmodifiedY, inputModeInput.sizeFunction, projectRepository.getPreviewHeight()));
            StrategyMouseInput strategyInput = StrategyMouseInput.builder().withx(x).withy(y).withMouseEvent(e).withUnscaledX(unmodifiedX).withUnscaledY(unmodifiedY).withCanvasImage(() -> {
                return playbackController.getVideoFrameAt(timelineManager.getCurrentPosition(), Optional.empty()).getImage();
            }).withCurrentlyPressedKeyRepository(currentlyPressedKeyRepository).build();
            function.accept(strategyInput);
            if (inputModeInput.currentStrategy.getResultType() == ResultType.PARTIAL) {
                handleStrategyHasResult();
            }
            if (inputModeInput.currentStrategy.getResultType() == ResultType.DONE) {
                handleStrategyHasResult();
                reset();
            }
            updateCanvas(e);
        } else if (cacheCurrentImage != null) {
            Map<String, RegularRectangle> filteredRectangles = cacheCurrentImage.getClipRectangle().entrySet().stream().filter(entry -> selectedNodeRepository.getSelectedClipIds().contains(entry.getKey())).collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue()));
            GeneralCanvasOperationsMouseRequest fallbackRequest = GeneralCanvasOperationsMouseRequest.builder().withCanvas(canvas).withUnscaledX(unmodifiedX).withUnscaledY(unmodifiedY).withCanvasRelativeX(e.getX()).withCanvasRelativeY(e.getY()).withx(unmodifiedX / projectRepository.getPreviewWidth()).withy(unmodifiedY / projectRepository.getPreviewHeight()).withMouseEvent(e).withRectangles(filteredRectangles).build();
            fallbackHandler.accept(fallbackRequest);
        }
    };
}
Also used : PointInputTypeStrategy(com.helospark.tactview.ui.javafx.inputmode.strategy.PointInputTypeStrategy) EventHandler(javafx.event.EventHandler) Component(com.helospark.lightdi.annotation.Component) VideoStatusBarUpdater(com.helospark.tactview.ui.javafx.uicomponents.VideoStatusBarUpdater) CanvasStateHolder(com.helospark.tactview.ui.javafx.CanvasStateHolder) SizeFunctionImplementation(com.helospark.tactview.ui.javafx.inputmode.sizefunction.SizeFunctionImplementation) MouseEvent(javafx.scene.input.MouseEvent) LineInputTypeStrategy(com.helospark.tactview.ui.javafx.inputmode.strategy.LineInputTypeStrategy) DrawRequestParameter(com.helospark.tactview.ui.javafx.inputmode.strategy.DrawRequestParameter) ArrayList(java.util.ArrayList) GeneralCanvasOperationsMouseRequest(com.helospark.tactview.ui.javafx.inputmode.strategy.generalops.GeneralCanvasOperationsMouseRequest) JavaDisplayableAudioVideoFragment(com.helospark.tactview.ui.javafx.JavaDisplayableAudioVideoFragment) Map(java.util.Map) ColorInputTypeStrategy(com.helospark.tactview.ui.javafx.inputmode.strategy.ColorInputTypeStrategy) ResultType(com.helospark.tactview.ui.javafx.inputmode.strategy.ResultType) InterpolationLine(com.helospark.tactview.core.timeline.effect.interpolation.pojo.InterpolationLine) CurrentlyPressedKeyRepository(com.helospark.tactview.ui.javafx.key.CurrentlyPressedKeyRepository) PolygonInputTypeStrategy(com.helospark.tactview.ui.javafx.inputmode.strategy.PolygonInputTypeStrategy) BezierPolygon(com.helospark.tactview.core.timeline.proceduralclip.polygon.impl.bezier.BezierPolygon) UiTimelineManager(com.helospark.tactview.ui.javafx.UiTimelineManager) InputTypeStrategy(com.helospark.tactview.ui.javafx.inputmode.strategy.InputTypeStrategy) StrategyKeyInput(com.helospark.tactview.ui.javafx.inputmode.strategy.StrategyKeyInput) RelativePointInputTypeStrategy(com.helospark.tactview.ui.javafx.inputmode.strategy.RelativePointInputTypeStrategy) KeyCode(javafx.scene.input.KeyCode) Point(com.helospark.tactview.core.timeline.effect.interpolation.pojo.Point) BezierPolygonInputTypeStrategy(com.helospark.tactview.ui.javafx.inputmode.strategy.BezierPolygonInputTypeStrategy) RectangleInputTypeStrategy(com.helospark.tactview.ui.javafx.inputmode.strategy.RectangleInputTypeStrategy) SelectedNodeRepository(com.helospark.tactview.ui.javafx.repository.SelectedNodeRepository) DisplayUpdaterService(com.helospark.tactview.ui.javafx.DisplayUpdaterService) GraphicsContext(javafx.scene.canvas.GraphicsContext) PlaybackFrameAccessor(com.helospark.tactview.ui.javafx.PlaybackFrameAccessor) UiProjectRepository(com.helospark.tactview.ui.javafx.repository.UiProjectRepository) Canvas(javafx.scene.canvas.Canvas) GeneralCanvasOperationStrategy(com.helospark.tactview.ui.javafx.inputmode.strategy.generalops.GeneralCanvasOperationStrategy) Polygon(com.helospark.tactview.core.timeline.effect.interpolation.pojo.Polygon) Collectors(java.util.stream.Collectors) RegularRectangle(com.helospark.tactview.core.timeline.TimelineRenderResult.RegularRectangle) Rectangle(com.helospark.tactview.core.timeline.effect.interpolation.pojo.Rectangle) Consumer(java.util.function.Consumer) Platform(javafx.application.Platform) List(java.util.List) BezierPolygonPoint(com.helospark.tactview.core.timeline.proceduralclip.polygon.impl.bezier.BezierPolygonPoint) SizeFunction(com.helospark.tactview.core.timeline.effect.interpolation.provider.SizeFunction) StrategyMouseInput(com.helospark.tactview.ui.javafx.inputmode.strategy.StrategyMouseInput) Optional(java.util.Optional) CleanableMode(com.helospark.tactview.ui.javafx.repository.CleanableMode) Color(com.helospark.tactview.core.timeline.effect.interpolation.pojo.Color) JavaDisplayableAudioVideoFragment(com.helospark.tactview.ui.javafx.JavaDisplayableAudioVideoFragment) StrategyMouseInput(com.helospark.tactview.ui.javafx.inputmode.strategy.StrategyMouseInput) RegularRectangle(com.helospark.tactview.core.timeline.TimelineRenderResult.RegularRectangle) GeneralCanvasOperationsMouseRequest(com.helospark.tactview.ui.javafx.inputmode.strategy.generalops.GeneralCanvasOperationsMouseRequest)

Example 3 with RegularRectangle

use of com.helospark.tactview.core.timeline.TimelineRenderResult.RegularRectangle in project tactview by helospark.

the class GeneralCanvasOperationStrategy method findDragData.

private DragData findDragData(GeneralCanvasOperationsMouseRequest input) {
    String draggedClip = null;
    DragPointType dragPointType = null;
    for (var entry : input.rectangles.entrySet()) {
        RegularRectangle rectangle = entry.getValue();
        if (isPointClose(input.unscaledX, input.unscaledY, rectangle.getX(), rectangle.getY())) {
            draggedClip = entry.getKey();
            dragPointType = DragPointType.TOP_LEFT;
            break;
        }
        if (isPointClose(input.unscaledX, input.unscaledY, rectangle.getX() + rectangle.getWidth(), rectangle.getY())) {
            draggedClip = entry.getKey();
            dragPointType = DragPointType.TOP_RIGHT;
            break;
        }
        if (isPointClose(input.unscaledX, input.unscaledY, rectangle.getX(), rectangle.getY() + rectangle.getHeight())) {
            draggedClip = entry.getKey();
            dragPointType = DragPointType.BOTTOM_LEFT;
            break;
        }
        if (isPointClose(input.unscaledX, input.unscaledY, rectangle.getX() + rectangle.getWidth(), rectangle.getY() + rectangle.getHeight())) {
            draggedClip = entry.getKey();
            dragPointType = DragPointType.BOTTOM_RIGHT;
            break;
        }
        if (Math.abs(input.unscaledX - rectangle.getX()) < CLOSE_THRESHOLD && isYWithinRectangleRange(input.unscaledY, rectangle)) {
            draggedClip = entry.getKey();
            dragPointType = DragPointType.LEFT;
            break;
        }
        if (Math.abs(input.unscaledX - (rectangle.getX() + rectangle.getWidth())) < CLOSE_THRESHOLD && isYWithinRectangleRange(input.unscaledY, rectangle)) {
            draggedClip = entry.getKey();
            dragPointType = DragPointType.RIGHT;
            break;
        }
        if (Math.abs(input.unscaledY - (rectangle.getY() + rectangle.getHeight())) < CLOSE_THRESHOLD && isXWithinRectangleRange(input.unscaledX, rectangle)) {
            draggedClip = entry.getKey();
            dragPointType = DragPointType.BOTTOM;
            break;
        }
        if (Math.abs(input.unscaledY - rectangle.getY()) < CLOSE_THRESHOLD && isXWithinRectangleRange(input.unscaledX, rectangle)) {
            draggedClip = entry.getKey();
            dragPointType = DragPointType.TOP;
            break;
        }
        if (isPointInRectangle(input.unscaledX, input.unscaledY, rectangle)) {
            draggedClip = entry.getKey();
            dragPointType = DragPointType.CENTER;
            break;
        }
    }
    if (draggedClip != null && dragPointType != null) {
        ValueProviderDescriptor translateElement = effectParametersRepository.findDescriptorForLabelAndClipId(draggedClip, "translate").get();
        Point originalPosition = ((PointProvider) translateElement.getKeyframeableEffect()).getValueAt(uiTimelineManager.getCurrentPosition());
        Point lastScale = new Point(1.0, 1.0);
        ScaleEffect scaleEffect = findOptionalScale(draggedClip);
        if (scaleEffect != null) {
            double xScale = (double) effectParametersRepository.findDescriptorForLabelAndClipId(scaleEffect.getId(), "width scale").get().getKeyframeableEffect().getValueAt(uiTimelineManager.getCurrentPosition());
            double yScale = (double) effectParametersRepository.findDescriptorForLabelAndClipId(scaleEffect.getId(), "height scale").get().getKeyframeableEffect().getValueAt(uiTimelineManager.getCurrentPosition());
            lastScale = new Point(xScale, yScale);
        }
        return new DragData(draggedClip, dragPointType, originalPosition, lastScale, input.rectangles.get(draggedClip));
    } else {
        return null;
    }
}
Also used : ScaleEffect(com.helospark.tactview.core.timeline.effect.scale.ScaleEffect) PointProvider(com.helospark.tactview.core.timeline.effect.interpolation.provider.PointProvider) ValueProviderDescriptor(com.helospark.tactview.core.timeline.effect.interpolation.ValueProviderDescriptor) Point(com.helospark.tactview.core.timeline.effect.interpolation.pojo.Point) RegularRectangle(com.helospark.tactview.core.timeline.TimelineRenderResult.RegularRectangle)

Example 4 with RegularRectangle

use of com.helospark.tactview.core.timeline.TimelineRenderResult.RegularRectangle in project tactview by helospark.

the class TimelineManagerRenderService method getFrame.

public TimelineRenderResult getFrame(TimelineManagerFramesRequest request) {
    List<TimelineClip> allClips = timelineManager.channels.stream().map(channel -> channel.getDataAt(request.getPosition())).flatMap(Optional::stream).collect(Collectors.toList());
    Map<String, TimelineClip> clipsToRender = allClips.stream().collect(Collectors.toMap(a -> a.getId(), a -> a));
    List<String> renderOrder = allClips.stream().filter(a -> a.isEnabled(request.getPosition())).map(a -> a.getId()).collect(Collectors.toList());
    List<TreeNode> tree = buildRenderTree(clipsToRender, request.getPosition());
    List<List<TimelineClip>> layers = new ArrayList<>();
    recursiveLayering(tree, 0, layers);
    Map<String, RenderFrameData> clipsToFrames = new ConcurrentHashMap<>();
    Map<String, AudioFrameResult> audioToFrames = new ConcurrentHashMap<>();
    Map<String, RegularRectangle> clipToExpandedPosition = new ConcurrentHashMap<>();
    for (int i = 0; i < layers.size(); ++i) {
        List<CompletableFuture<Void>> futures = new ArrayList<>();
        for (var clip : layers.get(i)) {
            if (clip instanceof VisualTimelineClip && request.isNeedVideo()) {
                // TODO: rest later
                VisualTimelineClip visualClip = (VisualTimelineClip) clip;
                futures.add(CompletableFuture.supplyAsync(() -> {
                    Map<String, ReadOnlyClipImage> requiredClips = visualClip.getClipDependency(request.getPosition()).stream().filter(a -> clipsToFrames.containsKey(a)).map(a -> clipsToFrames.get(a)).collect(Collectors.toMap(a -> a.id, a -> a.clipFrameResult));
                    Map<String, ReadOnlyClipImage> channelCopiedClips = visualClip.getChannelDependency(request.getPosition()).stream().flatMap(channelId -> timelineManagerAccessor.findChannelWithId(channelId).stream()).flatMap(channel -> channel.getDataAt(request.getPosition()).stream()).filter(a -> clipsToFrames.containsKey(a.getId())).map(a -> clipsToFrames.get(a.getId())).collect(Collectors.toMap(a -> a.channelId, a -> a.clipFrameResult, (a, b) -> a, HashMap::new));
                    ReadOnlyClipImage adjustmentImage = null;
                    if (clip instanceof AdjustmentLayerProceduralClip) {
                        Map<String, RenderFrameData> framesBelow = new TreeMap<>();
                        int startChannel = timelineManagerAccessor.findChannelIndexForClipId(visualClip.getId()).get() + 1;
                        for (int k = startChannel; k < timelineManager.channels.size(); ++k) {
                            Optional<TimelineClip> clipAtChannel = timelineManager.channels.get(k).getDataAt(request.getPosition());
                            if (clipAtChannel.isPresent()) {
                                String clipId = clipAtChannel.get().getId();
                                framesBelow.put(clipId, clipsToFrames.get(clipId));
                            }
                        }
                        adjustmentImage = renderBelowLayers(request, renderOrder, framesBelow);
                        channelCopiedClips.put(AdjustmentLayerProceduralClip.LAYER_ID, adjustmentImage);
                    }
                    GetFrameRequest frameRequest = GetFrameRequest.builder().withScale(request.getScale()).withPosition(request.getPosition()).withExpectedWidth(request.getPreviewWidth()).withExpectedHeight(request.getPreviewHeight()).withApplyEffects(request.isEffectsEnabled()).withRequestedClips(requiredClips).withRequestedChannelClips(channelCopiedClips).withLowResolutionPreview(request.isLowResolutionPreview()).build();
                    ReadOnlyClipImage frameResult = visualClip.getFrame(frameRequest);
                    ReadOnlyClipImage expandedFrame = expandFrame(request, visualClip, frameResult, clipToExpandedPosition);
                    BlendModeStrategy blendMode = visualClip.getBlendModeAt(request.getPosition());
                    double alpha = visualClip.getAlpha(request.getPosition());
                    GlobalMemoryManagerAccessor.memoryManager.returnBuffer(frameResult.getBuffer());
                    if (adjustmentImage != null) {
                        GlobalMemoryManagerAccessor.memoryManager.returnBuffer(adjustmentImage.getBuffer());
                    }
                    String channelId = timelineManagerAccessor.findChannelForClipId(visualClip.getId()).get().getId();
                    return new RenderFrameData(visualClip.getId(), alpha, blendMode, expandedFrame, clip.getEffectsAtGlobalPosition(request.getPosition(), AbstractVideoTransitionEffect.class), channelId);
                }, executorService).thenAccept(a -> {
                    clipsToFrames.put(visualClip.getId(), a);
                }).exceptionally(e -> {
                    logger.error("Unable to render", e);
                    return null;
                }));
            } else if (clip instanceof AudibleTimelineClip && request.isNeedSound()) {
                AudibleTimelineClip audibleClip = (AudibleTimelineClip) clip;
                futures.add(CompletableFuture.supplyAsync(() -> {
                    int sampleRateToUse = request.getAudioSampleRate().orElse(projectRepository.getSampleRate());
                    int bytesPerSampleToUse = request.getAudioBytesPerSample().orElse(projectRepository.getBytesPerSample());
                    int numberOfChannels = request.getNumberOfChannels().orElse(projectRepository.getNumberOfChannels());
                    TimelineLength defaultLength = new TimelineLength(projectRepository.getFrameTime());
                    TimelineLength length = request.getAudioLength().orElse(defaultLength);
                    AudioRequest audioRequest = AudioRequest.builder().withApplyEffects(request.isEffectsEnabled()).withPosition(request.getPosition()).withLength(length).withSampleRate(sampleRateToUse).withBytesPerSample(bytesPerSampleToUse).withNumberOfChannels(numberOfChannels).build();
                    return audibleClip.requestAudioFrame(audioRequest);
                }, executorService).exceptionally(e -> {
                    logger.error("Unable to get audio", e);
                    return null;
                }).thenAccept(a -> {
                    if (a == null) {
                        logger.error("Unable to get audio");
                    } else {
                        audioToFrames.put(audibleClip.getId(), a);
                    }
                }));
            }
        }
        CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).join();
    }
    ReadOnlyClipImage finalImage = request.isNeedVideo() ? renderVideo(request, renderOrder, clipsToFrames) : null;
    AudioFrameResult audioBuffer = renderAudio(renderOrder, audioToFrames, request);
    clipsToFrames.values().stream().forEach(a -> GlobalMemoryManagerAccessor.memoryManager.returnBuffer(a.clipFrameResult.getBuffer()));
    audioToFrames.values().stream().flatMap(a -> a.getChannels().stream()).forEach(a -> GlobalMemoryManagerAccessor.memoryManager.returnBuffer(a));
    ReadOnlyClipImage finalResult = executeGlobalEffectsOn(finalImage);
    return new TimelineRenderResult(new AudioVideoFragment(finalResult, audioBuffer), new HashMap<>(clipToExpandedPosition));
}
Also used : ThreadFactoryBuilder(com.google.common.util.concurrent.ThreadFactoryBuilder) Component(com.helospark.lightdi.annotation.Component) AdjustmentLayerProceduralClip(com.helospark.tactview.core.timeline.proceduralclip.channelcopy.AdjustmentLayerProceduralClip) BlendModeStrategy(com.helospark.tactview.core.timeline.blendmode.BlendModeStrategy) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) ReadOnlyClipImage(com.helospark.tactview.core.timeline.image.ReadOnlyClipImage) ByteBuffer(java.nio.ByteBuffer) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) BigDecimal(java.math.BigDecimal) AbstractVideoTransitionEffect(com.helospark.tactview.core.timeline.effect.transition.AbstractVideoTransitionEffect) Map(java.util.Map) ExecutorService(java.util.concurrent.ExecutorService) ClipImage(com.helospark.tactview.core.timeline.image.ClipImage) Logger(org.slf4j.Logger) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) Slf4j(com.helospark.tactview.core.util.logger.Slf4j) FrameBufferMerger(com.helospark.tactview.core.timeline.framemerge.FrameBufferMerger) FrameExtender(com.helospark.tactview.core.timeline.render.FrameExtender) Collectors(java.util.stream.Collectors) RenderFrameData(com.helospark.tactview.core.timeline.framemerge.RenderFrameData) Executors(java.util.concurrent.Executors) RegularRectangle(com.helospark.tactview.core.timeline.TimelineRenderResult.RegularRectangle) List(java.util.List) TreeMap(java.util.TreeMap) GlobalMemoryManagerAccessor(com.helospark.tactview.core.decoder.framecache.GlobalMemoryManagerAccessor) Optional(java.util.Optional) ProjectRepository(com.helospark.tactview.core.repository.ProjectRepository) HashMap(java.util.HashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ArrayList(java.util.ArrayList) CompletableFuture(java.util.concurrent.CompletableFuture) BlendModeStrategy(com.helospark.tactview.core.timeline.blendmode.BlendModeStrategy) ReadOnlyClipImage(com.helospark.tactview.core.timeline.image.ReadOnlyClipImage) ArrayList(java.util.ArrayList) List(java.util.List) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Optional(java.util.Optional) RegularRectangle(com.helospark.tactview.core.timeline.TimelineRenderResult.RegularRectangle) RenderFrameData(com.helospark.tactview.core.timeline.framemerge.RenderFrameData) HashMap(java.util.HashMap) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) TreeMap(java.util.TreeMap) AdjustmentLayerProceduralClip(com.helospark.tactview.core.timeline.proceduralclip.channelcopy.AdjustmentLayerProceduralClip)

Example 5 with RegularRectangle

use of com.helospark.tactview.core.timeline.TimelineRenderResult.RegularRectangle in project tactview by helospark.

the class DisplayUpdaterService method drawSelectionRectangle.

private void drawSelectionRectangle(JavaDisplayableAudioVideoFragment actualAudioVideoFragment, GraphicsContext gc) {
    if (actualAudioVideoFragment != null) {
        boolean foundSelection = false;
        for (var rectangle : actualAudioVideoFragment.getClipRectangle().entrySet()) {
            if (selectedNodeRepository.getSelectedClipIds().contains(rectangle.getKey())) {
                RegularRectangle rect = rectangle.getValue();
                drawRectangleWithDashedLine(gc, rect);
                foundSelection = true;
            }
        }
        hasSelectedElement = foundSelection;
    }
}
Also used : RegularRectangle(com.helospark.tactview.core.timeline.TimelineRenderResult.RegularRectangle)

Aggregations

RegularRectangle (com.helospark.tactview.core.timeline.TimelineRenderResult.RegularRectangle)5 Component (com.helospark.lightdi.annotation.Component)2 Point (com.helospark.tactview.core.timeline.effect.interpolation.pojo.Point)2 ReadOnlyClipImage (com.helospark.tactview.core.timeline.image.ReadOnlyClipImage)2 ThreadFactoryBuilder (com.google.common.util.concurrent.ThreadFactoryBuilder)1 GlobalMemoryManagerAccessor (com.helospark.tactview.core.decoder.framecache.GlobalMemoryManagerAccessor)1 ProjectRepository (com.helospark.tactview.core.repository.ProjectRepository)1 GetPositionParameters (com.helospark.tactview.core.timeline.GetPositionParameters)1 TimelinePosition (com.helospark.tactview.core.timeline.TimelinePosition)1 VisualTimelineClip (com.helospark.tactview.core.timeline.VisualTimelineClip)1 BlendModeStrategy (com.helospark.tactview.core.timeline.blendmode.BlendModeStrategy)1 ValueProviderDescriptor (com.helospark.tactview.core.timeline.effect.interpolation.ValueProviderDescriptor)1 Color (com.helospark.tactview.core.timeline.effect.interpolation.pojo.Color)1 InterpolationLine (com.helospark.tactview.core.timeline.effect.interpolation.pojo.InterpolationLine)1 Polygon (com.helospark.tactview.core.timeline.effect.interpolation.pojo.Polygon)1 Rectangle (com.helospark.tactview.core.timeline.effect.interpolation.pojo.Rectangle)1 PointProvider (com.helospark.tactview.core.timeline.effect.interpolation.provider.PointProvider)1 SizeFunction (com.helospark.tactview.core.timeline.effect.interpolation.provider.SizeFunction)1 ScaleEffect (com.helospark.tactview.core.timeline.effect.scale.ScaleEffect)1 AbstractVideoTransitionEffect (com.helospark.tactview.core.timeline.effect.transition.AbstractVideoTransitionEffect)1