#[cfg(not(feature = "macos_15_0"))]
fn main() {
println!("⚠️ This example requires macOS 15.0+ features");
println!(" Run with: cargo run --example 13_advanced_config --features macos_15_0");
}
#[cfg(feature = "macos_15_0")]
#[allow(clippy::unnecessary_wraps)]
fn main() -> Result<(), Box<dyn std::error::Error>> {
use screencapturekit::prelude::*;
use screencapturekit::stream::configuration::{
SCCaptureDynamicRange, SCPresenterOverlayAlertSetting, SCStreamConfigurationPreset,
};
println!("⚙️ Advanced Configuration Options\n");
println!("📋 1. Configuration Presets");
println!(" ─────────────────────────");
let _sdr_config = SCStreamConfiguration::from_preset(
SCStreamConfigurationPreset::CaptureHDRStreamLocalDisplay,
);
println!(" HDR Local Display preset created");
let _hdr_config = SCStreamConfiguration::from_preset(
SCStreamConfigurationPreset::CaptureHDRStreamCanonicalDisplay,
);
println!(" HDR Canonical Display preset created");
println!("\n🌈 2. Dynamic Range Settings");
println!(" ─────────────────────────");
let mut config = SCStreamConfiguration::new()
.with_width(1920)
.with_height(1080);
config.set_capture_dynamic_range(SCCaptureDynamicRange::HDRLocalDisplay);
println!(" Dynamic range: HDR Local Display");
let range = config.capture_dynamic_range();
println!(" Current setting: {range:?}");
println!("\n Available dynamic range options:");
println!(" • SDR - Standard dynamic range");
println!(" • HdrLocalDisplay - HDR for local display");
println!(" • HdrCanonicalDisplay - HDR canonical (for sharing)");
println!("\n👤 3. Presenter Overlay Privacy");
println!(" ─────────────────────────────");
config.set_presenter_overlay_privacy_alert_setting(SCPresenterOverlayAlertSetting::Always);
println!(" Set to: Always show privacy alert");
let setting = config.presenter_overlay_privacy_alert_setting();
println!(" Current: {setting:?}");
println!("\n Available settings:");
println!(" • System - Follow system preference");
println!(" • Never - Never show overlay");
println!(" • Always - Always show when presenter detected");
println!("\n🎤 4. Microphone Capture Configuration");
println!(" ─────────────────────────────────────");
config.set_captures_microphone(true);
println!(" Microphone capture: enabled");
let devices = screencapturekit::audio_devices::AudioInputDevice::list();
if !devices.is_empty() {
println!("\n Available audio devices:");
for (i, device) in devices.iter().take(5).enumerate() {
println!(" {}. {} (ID: {})", i + 1, device.name, device.id);
}
if let Some(mic) = devices.first() {
config.set_microphone_capture_device_id(&mic.id);
println!("\n Selected microphone: {}", mic.name);
}
}
println!("\n🖱️ 5. Mouse Click Indicators");
println!(" ────────────────────────────");
config.set_shows_mouse_clicks(true);
println!(" Mouse click indicators: enabled");
println!(" (Shows visual feedback when user clicks)");
println!("\n🪟 6. Child Window Inclusion");
println!(" ──────────────────────────");
config.set_includes_child_windows(true);
println!(" Include child windows: enabled");
println!(" (Captures tooltips, menus, etc.)");
println!("\n═══════════════════════════════════════════");
println!("📊 Final Configuration Summary:");
println!(" • Dimensions: {}x{}", config.width(), config.height());
println!(" • Dynamic range: {:?}", config.capture_dynamic_range());
println!(
" • Presenter overlay: {:?}",
config.presenter_overlay_privacy_alert_setting()
);
println!(" • Microphone: {}", config.captures_microphone());
println!(" • Mouse clicks: {}", config.shows_mouse_clicks());
println!(" • Child windows: {}", config.includes_child_windows());
println!("\n✅ Advanced configuration example complete!");
Ok(())
}