/* SPDX-License-Identifier: GPL-2.0-or-later * Copyright 2009 Blender Foundation. All rights reserved. */ /** \file * \ingroup editors */ #pragma once #ifdef __cplusplus extern "C" { #endif struct ARegion; struct ImBuf; struct Main; struct Mask; struct MovieClip; struct SpaceClip; struct bContext; struct bScreen; /* ** clip_editor.c ** */ /* Returns true when the following conditions are met: * - Current space is Space Clip. * - There is a movie clip opened in it. */ bool ED_space_clip_poll(struct bContext *C); /* Returns true when the following conditions are met: * - Current space is Space Clip. * - It is set to Clip view. * * It is not required to have movie clip opened for editing. */ bool ED_space_clip_view_clip_poll(struct bContext *C); /* Returns true when the following conditions are met: * - Current space is Space Clip. * - It is set to Tracking mode. * * It is not required to have movie clip opened for editing. */ bool ED_space_clip_tracking_poll(struct bContext *C); /* Returns true when the following conditions are met: * - Current space is Space Clip. * - It is set to Mask mode. * * It is not required to have mask opened for editing. */ bool ED_space_clip_maskedit_poll(struct bContext *C); /* Returns true when the following conditions are met: * - Current space is Space Clip. * - It is set to Mask mode. * - The space has mask opened. */ bool ED_space_clip_maskedit_mask_poll(struct bContext *C); void ED_space_clip_get_size(struct SpaceClip *sc, int *width, int *height); void ED_space_clip_get_size_fl(struct SpaceClip *sc, float size[2]); void ED_space_clip_get_zoom(struct SpaceClip *sc, struct ARegion *region, float *zoomx, float *zoomy); void ED_space_clip_get_aspect(struct SpaceClip *sc, float *aspx, float *aspy); void ED_space_clip_get_aspect_dimension_aware(struct SpaceClip *sc, float *aspx, float *aspy); /** * Return current frame number in clip space. */ int ED_space_clip_get_clip_frame_number(struct SpaceClip *sc); struct ImBuf *ED_space_clip_get_buffer(struct SpaceClip *sc); struct ImBuf *ED_space_clip_get_stable_buffer(struct SpaceClip *sc, float loc[2], float *scale, float *angle); bool ED_space_clip_get_position(struct SpaceClip *sc, struct ARegion *region, int mval[2], float fpos[2]); /** * Returns color in linear space, matching #ED_space_image_color_sample(). */ bool ED_space_clip_color_sample(struct SpaceClip *sc, struct ARegion *region, const int mval[2], float r_col[3]); void ED_clip_update_frame(const struct Main *mainp, int cfra); bool ED_clip_view_selection(const struct bContext *C, struct ARegion *region, bool fit); void ED_clip_select_all(struct SpaceClip *sc, int action, bool *r_has_selection); bool ED_clip_can_select(struct bContext *C); void ED_clip_point_undistorted_pos(struct SpaceClip *sc, const float co[2], float r_co[2]); void ED_clip_point_stable_pos( struct SpaceClip *sc, struct ARegion *region, float x, float y, float *xr, float *yr); /** * \brief the reverse of #ED_clip_point_stable_pos(), gets the marker region coords. * better name here? view_to_track / track_to_view or so? */ void ED_clip_point_stable_pos__reverse(struct SpaceClip *sc, struct ARegion *region, const float co[2], float r_co[2]); /** * Takes `event->mval`. */ void ED_clip_mouse_pos(struct SpaceClip *sc, struct ARegion *region, const int mval[2], float co[2]); bool ED_space_clip_check_show_trackedit(struct SpaceClip *sc); bool ED_space_clip_check_show_maskedit(struct SpaceClip *sc); struct MovieClip *ED_space_clip_get_clip(struct SpaceClip *sc); void ED_space_clip_set_clip(struct bContext *C, struct bScreen *screen, struct SpaceClip *sc, struct MovieClip *clip); struct Mask *ED_space_clip_get_mask(struct SpaceClip *sc); void ED_space_clip_set_mask(struct bContext *C, struct SpaceClip *sc, struct Mask *mask); /* Locked state is used to preserve current clip editor viewport upon changes. Example usage: * * ... * * ClipViewLockState lock_state; * ED_clip_view_lock_state_store(C, &lock_state); * * * * ED_clip_view_lock_state_restore_no_jump(C, &lock_state); * * These function are to be used from space clip editor context only. Otherwise debug builds will * assert, release builds will crash. */ typedef struct ClipViewLockState { float offset_x, offset_y; float lock_offset_x, lock_offset_y; float zoom; } ClipViewLockState; void ED_clip_view_lock_state_store(const struct bContext *C, ClipViewLockState *state); void ED_clip_view_lock_state_restore_no_jump(const struct bContext *C, const ClipViewLockState *state); /* ** clip_ops.c ** */ void ED_operatormacros_clip(void); #ifdef __cplusplus } #endif