bevy_cef 0.6.0

Bevy CEF integration for web rendering
use crate::common::ZoomLevel;
use bevy::prelude::*;
#[cfg(not(target_os = "windows"))]
use bevy_cef_core::prelude::Browsers;
#[cfg(target_os = "windows")]
use bevy_cef_core::prelude::BrowsersProxy;

pub(crate) struct ZoomPlugin;

impl Plugin for ZoomPlugin {
    fn build(&self, app: &mut App) {
        #[cfg(not(target_os = "windows"))]
        app.add_systems(Update, sync_zoom.run_if(any_changed_zoom));

        #[cfg(target_os = "windows")]
        app.add_systems(Update, sync_zoom_win.run_if(any_changed_zoom));
    }
}

fn any_changed_zoom(zoom: Query<&ZoomLevel, Changed<ZoomLevel>>) -> bool {
    !zoom.is_empty()
}

#[cfg(not(target_os = "windows"))]
fn sync_zoom(browsers: NonSend<Browsers>, zoom: Query<(Entity, &ZoomLevel), Changed<ZoomLevel>>) {
    for (entity, zoom_level) in zoom.iter() {
        browsers.set_zoom_level(&entity, zoom_level.0);
    }
}

#[cfg(target_os = "windows")]
fn sync_zoom_win(proxy: Res<BrowsersProxy>, zoom: Query<(Entity, &ZoomLevel), Changed<ZoomLevel>>) {
    for (entity, zoom_level) in zoom.iter() {
        proxy.set_zoom_level(&entity, zoom_level.0);
    }
}