bevy_vista 0.17.0

A visual UI editor plugin for Bevy with inspector-driven editing and .vista.ron serialization.
use bevy::ecs::prelude::*;
use bevy::picking::events::{Drag, Pointer};
use bevy::ui::prelude::*;

use super::*;

pub(super) fn on_drag(
    event: On<Pointer<Drag>>,
    mut query: Query<(&mut UiTransform, &ComputedNode), With<EditorRoot>>,
    window: Single<&Window>,
    mode: Res<VistaEditorMode>,
) {
    if matches!(*mode, VistaEditorMode::Fullscreen) {
        return;
    }
    if let Ok((mut transform, computed_node)) = query.single_mut() {
        let editor_size = computed_node.size / window.scale_factor();
        let delta = event.delta;
        let (left_top, right_bottom) = (Vec2::ZERO, window.size());
        if let Val2 {
            x: Val::Px(left),
            y: Val::Px(top),
        } = transform.translation
        {
            let new_left = (left + delta.x).clamp(left_top.x, right_bottom.x - editor_size.x);
            let new_top = (top + delta.y).clamp(left_top.y, right_bottom.y - editor_size.y);
            transform.translation = Val2 {
                x: Val::Px(new_left),
                y: Val::Px(new_top),
            };
        }
    }
}