Player

Struct Player 

Source
pub struct Player {
    pub attrs: Attrs,
    pub last_frame_time: Option<Instant>,
}
Expand description

Playback state manager (does NOT own Project)

Player manages playback state only. Project is passed by reference to methods that need it. PlayaApp owns the single Project instance.

Attrs keys:

  • active_comp: Uuid (optional, missing key = None)
  • previous_comp_history: List (most recent last)
  • is_playing: Bool
  • fps_base: Float (persistent base FPS)
  • fps_play: Float (temporary playback FPS)
  • loop_enabled: Bool
  • play_direction: Float (1.0 forward, -1.0 backward)
  • selected_seq_idx: Option stored as Int (missing key = None)

Fields§

§attrs: Attrs

All serializable player state

§last_frame_time: Option<Instant>

Last frame timestamp (runtime-only, not serializable)

Implementations§

Source§

impl Player

Source

pub fn new() -> Self

Create new player with defaults (no Project - that’s in PlayaApp)

Source

pub fn attach_schema(&mut self)

Attach schema after deserialization

Source

pub fn active_comp(&self) -> Option<Uuid>

Get active comp UUID

Source

pub fn previous_comp_history(&self) -> Vec<Uuid>

Get previous comp history (most recent last)

Source

pub fn take_previous_comp(&mut self) -> Option<Uuid>

Pop the last previous comp (for U key navigation back)

Source

pub fn is_playing(&self) -> bool

Check if playing

Source

pub fn set_is_playing(&mut self, playing: bool)

Set playing state

Source

pub fn fps_base(&self) -> f32

Get base FPS

Source

pub fn set_fps_base(&mut self, fps: f32)

Set base FPS

Source

pub fn fps_play(&self) -> f32

Get playback FPS

Source

pub fn set_fps_play(&mut self, fps: f32)

Set playback FPS

Source

pub fn loop_enabled(&self) -> bool

Check if loop is enabled

Source

pub fn set_loop_enabled(&mut self, enabled: bool)

Set loop enabled

Source

pub fn play_direction(&self) -> f32

Get play direction (1.0 forward, -1.0 backward)

Source

pub fn selected_seq_idx(&self) -> Option<usize>

Get selected sequence index

Source

pub fn set_selected_seq_idx(&mut self, idx: Option<usize>)

Set selected sequence index

Source

pub fn total_frames(&self, project: &Project) -> i32

Get total frames of active node (work area frame count)

Source

pub fn play_range(&self, project: &Project) -> (i32, i32)

Get current play range of active node (start, end), or (0, 0) if none.

Source

pub fn set_play_range(&mut self, start: i32, end: i32, project: &mut Project)

Set play range of active comp in global comp frame indices (inclusive).

Source

pub fn current_frame(&self, project: &Project) -> i32

Get current frame index from active comp

Source

pub fn get_current_frame(&self, project: &Project) -> Option<Frame>

Get current frame as owned Frame (Composed) Uses GPU compositor (main thread only)

Source

pub fn set_active_comp( &mut self, comp_uuid: Option<Uuid>, project: &mut Project, )

Switch to a different composition by UUID.

Updates active_comp and emits CurrentFrameChanged event. Stops playback during transition.

Selection reset: Resets project selection to just this comp. Prevents multi-selection accumulation when adding new clips or switching between comps (e.g., double-click on timeline layer).

Source

pub fn update(&mut self, project: &mut Project) -> Option<i32>

Update playback state. Returns Some(new_frame) if frame changed, None otherwise. Caller should emit SetFrameEvent for unified frame change handling.

Source

pub fn stop(&mut self)

Stop playback (always stops, doesn’t toggle)

Source

pub fn to_start(&mut self, project: &mut Project)

Rewind to start

Source

pub fn to_end(&mut self, project: &mut Project)

Skip to end

Source

pub fn set_frame(&mut self, frame: i32, project: &mut Project)

Set current frame (emits CompEvent::CurrentFrameChanged).

Clamps to full comp timeline [comp.start..=comp.end], not play_range, so scrubbing/timeline can move outside work area while playback still respects play_range.

Source

pub fn step(&mut self, count: i32, project: &mut Project)

Step by N frames (positive = forward, negative = backward) Respects play range and loop_enabled setting

Source

pub fn jog_forward(&mut self)

Jog forward (L, >, ArrowRight)

Source

pub fn jog_backward(&mut self)

Jog backward (J, <, ArrowLeft)

Source

pub fn increase_fps_base(&mut self)

Increase base FPS to next preset (-/+ keys, Keypad)

Source

pub fn decrease_fps_base(&mut self)

Decrease base FPS to previous preset (-/+ keys, Keypad)

Source

pub fn reset_settings(&mut self)

Reset settings

Trait Implementations§

Source§

impl Clone for Player

Source§

fn clone(&self) -> Player

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Player

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Player

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Player

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for Player

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl !Freeze for Player

§

impl RefUnwindSafe for Player

§

impl Send for Player

§

impl Sync for Player

§

impl Unpin for Player

§

impl UnwindSafe for Player

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> Event for T
where T: Any + Send + Sync + 'static,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

fn type_name(&self) -> &'static str

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> NoneValue for T
where T: Default,

Source§

type NoneType = T

Source§

fn null_value() -> T

The none-equivalent value.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> SerializableAny for T
where T: 'static + Any + Clone + Serialize + for<'a> Deserialize<'a> + Send + Sync,