Skip to main content

bevy_window/
window.rs

1#[cfg(feature = "std")]
2use alloc::format;
3use alloc::{borrow::ToOwned, string::String};
4use core::num::NonZero;
5
6use bevy_ecs::{
7    entity::{ContainsEntity, Entity},
8    prelude::Component,
9};
10use bevy_math::{CompassOctant, DVec2, IVec2, UVec2, Vec2};
11use bevy_platform::sync::LazyLock;
12use log::warn;
13
14#[cfg(feature = "bevy_reflect")]
15use {
16    bevy_ecs::prelude::ReflectComponent,
17    bevy_reflect::{std_traits::ReflectDefault, Reflect},
18};
19
20#[cfg(all(feature = "serialize", feature = "bevy_reflect"))]
21use bevy_reflect::{ReflectDeserialize, ReflectSerialize};
22
23use crate::VideoMode;
24
25/// Default string used for the window title.
26///
27/// It will try to use the name of the current exe if possible, otherwise it defaults to "App"
28static DEFAULT_WINDOW_TITLE: LazyLock<String> = LazyLock::new(|| {
29    #[cfg(feature = "std")]
30    {
31        std::env::current_exe()
32            .ok()
33            .and_then(|current_exe| Some(::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}",
                current_exe.file_stem()?.to_string_lossy()))
    })format!("{}", current_exe.file_stem()?.to_string_lossy())))
34            .unwrap_or_else(|| "App".to_owned())
35    }
36
37    #[cfg(not(feature = "std"))]
38    {
39        "App".to_owned()
40    }
41});
42
43/// Marker [`Component`] for the window considered the primary window.
44///
45/// Currently this is assumed to only exist on 1 entity at a time.
46///
47/// [`WindowPlugin`](crate::WindowPlugin) will spawn a [`Window`] entity
48/// with this component if [`primary_window`](crate::WindowPlugin::primary_window)
49/// is `Some`.
50#[derive(#[automatically_derived]
impl ::core::default::Default for PrimaryWindow {
    #[inline]
    fn default() -> PrimaryWindow { PrimaryWindow {} }
}Default, #[automatically_derived]
impl ::core::fmt::Debug for PrimaryWindow {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f, "PrimaryWindow")
    }
}Debug, impl bevy_ecs::component::Component for PrimaryWindow where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    const STORAGE_TYPE: bevy_ecs::component::StorageType =
        bevy_ecs::component::StorageType::Table;
    type Mutability = bevy_ecs::component::Mutable;
    fn register_required_components(_requiree:
            bevy_ecs::component::ComponentId,
        required_components:
            &mut bevy_ecs::component::RequiredComponentsRegistrator) {}
    fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
        use bevy_ecs::component::{
            DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
        };
        (&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
    }
    fn relationship_accessor()
        ->
            ::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
        ::core::option::Option::None
    }
}Component, #[automatically_derived]
impl ::core::cmp::PartialEq for PrimaryWindow {
    #[inline]
    fn eq(&self, other: &PrimaryWindow) -> bool { true }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for PrimaryWindow {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for PrimaryWindow {
    #[inline]
    fn partial_cmp(&self, other: &PrimaryWindow)
        -> ::core::option::Option<::core::cmp::Ordering> {
        ::core::option::Option::Some(::core::cmp::Ordering::Equal)
    }
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for PrimaryWindow {
    #[inline]
    fn cmp(&self, other: &PrimaryWindow) -> ::core::cmp::Ordering {
        ::core::cmp::Ordering::Equal
    }
}Ord, #[automatically_derived]
impl ::core::marker::Copy for PrimaryWindow { }Copy, #[automatically_derived]
impl ::core::clone::Clone for PrimaryWindow {
    #[inline]
    fn clone(&self) -> PrimaryWindow { *self }
}Clone)]
51#[cfg_attr(
52    feature = "bevy_reflect",
53    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for PrimaryWindow where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectComponent, Self>();
                registration.register_type_data::<ReflectDefault, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for PrimaryWindow where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for PrimaryWindow where  {
            fn type_path() -> &'static str {
                "bevy_window::window::PrimaryWindow"
            }
            fn short_type_path() -> &'static str { "PrimaryWindow" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("PrimaryWindow")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for PrimaryWindow where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<PrimaryWindow
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for PrimaryWindow where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index { _ => ::core::option::Option::None, }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_len(&self) -> usize { 0usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                -> bevy_reflect::structs::DynamicStruct {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                dynamic
            }
        }
        impl bevy_reflect::PartialReflect for PrimaryWindow where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for PrimaryWindow where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let mut __this =
                        <Self as ::core::default::Default>::default();
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
54    reflect(Component, Debug, Default, PartialEq, Clone)
55)]
56pub struct PrimaryWindow;
57
58/// Reference to a [`Window`], whether it be a direct link to a specific entity or
59/// a more vague defaulting choice.
60#[repr(C)]
61#[derive(#[automatically_derived]
impl ::core::default::Default for WindowRef {
    #[inline]
    fn default() -> WindowRef { Self::Primary }
}Default, #[automatically_derived]
impl ::core::marker::Copy for WindowRef { }Copy, #[automatically_derived]
impl ::core::clone::Clone for WindowRef {
    #[inline]
    fn clone(&self) -> WindowRef {
        let _: ::core::clone::AssertParamIsClone<Entity>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for WindowRef {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            WindowRef::Primary =>
                ::core::fmt::Formatter::write_str(f, "Primary"),
            WindowRef::Entity(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Entity",
                    &__self_0),
        }
    }
}Debug)]
62#[cfg_attr(
63    feature = "bevy_reflect",
64    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for WindowRef where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectDefault, Self>();
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <Entity as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for WindowRef where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Enum(bevy_reflect::enums::EnumInfo::new::<Self>(&[bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Primary")),
                                                bevy_reflect::enums::VariantInfo::Tuple(bevy_reflect::enums::TupleVariantInfo::new("Entity",
                                                        &[bevy_reflect::UnnamedField::new::<Entity>(0usize)]))]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for WindowRef where  {
            fn type_path() -> &'static str {
                "bevy_window::window::WindowRef"
            }
            fn short_type_path() -> &'static str { "WindowRef" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("WindowRef")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for WindowRef where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<WindowRef
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::enums::Enum for WindowRef where  {
            fn field(&self, __name_param: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, __index_param: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self {
                    WindowRef::Entity { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, __name_param: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, __index_param: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self {
                    WindowRef::Entity { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    _ => ::core::option::Option::None,
                }
            }
            fn index_of(&self, __name_param: &str)
                -> ::core::option::Option<usize> {
                match self { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, __index_param: usize)
                -> ::core::option::Option<&str> {
                match self { _ => ::core::option::Option::None, }
            }
            fn iter_fields(&self) -> bevy_reflect::enums::VariantFieldIter {
                bevy_reflect::enums::VariantFieldIter::new(self)
            }
            #[inline]
            fn field_len(&self) -> usize {
                match self {
                    WindowRef::Primary { .. } => 0usize,
                    WindowRef::Entity { .. } => 1usize,
                    _ => 0,
                }
            }
            #[inline]
            fn variant_name(&self) -> &str {
                match self {
                    WindowRef::Primary { .. } => "Primary",
                    WindowRef::Entity { .. } => "Entity",
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_index(&self) -> usize {
                match self {
                    WindowRef::Primary { .. } => 0usize,
                    WindowRef::Entity { .. } => 1usize,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_type(&self) -> bevy_reflect::enums::VariantType {
                match self {
                    WindowRef::Primary { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    WindowRef::Entity { .. } =>
                        bevy_reflect::enums::VariantType::Tuple,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            fn to_dynamic_enum(&self) -> bevy_reflect::enums::DynamicEnum {
                bevy_reflect::enums::DynamicEnum::from_ref::<Self>(self)
            }
        }
        impl bevy_reflect::PartialReflect for WindowRef where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self,
                __value_param: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Enum(__value_param) =
                        bevy_reflect::PartialReflect::reflect_ref(__value_param) {
                    if bevy_reflect::enums::Enum::variant_name(self) ==
                            bevy_reflect::enums::Enum::variant_name(__value_param) {
                        match bevy_reflect::enums::Enum::variant_type(__value_param)
                            {
                            bevy_reflect::enums::VariantType::Struct => {
                                for field in
                                    bevy_reflect::enums::Enum::iter_fields(__value_param) {
                                    let name = field.name().unwrap();
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_mut(self, name) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            bevy_reflect::enums::VariantType::Tuple => {
                                for (index, field) in
                                    ::core::iter::Iterator::enumerate(bevy_reflect::enums::Enum::iter_fields(__value_param))
                                    {
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_at_mut(self, index) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            _ => {}
                        }
                    } else {
                        match bevy_reflect::enums::Enum::variant_name(__value_param)
                            {
                            "Primary" => { *self = WindowRef::Primary {} }
                            "Entity" => {
                                *self =
                                    WindowRef::Entity {
                                        0: {
                                            let __0 = __value_param.field_at(0usize);
                                            let __0 =
                                                __0.ok_or(bevy_reflect::ApplyError::MissingEnumField {
                                                            variant_name: ::core::convert::Into::into("Entity"),
                                                            field_name: ::core::convert::Into::into(".0"),
                                                        })?;
                                            <Entity as
                                                            bevy_reflect::FromReflect>::from_reflect(__0).ok_or(bevy_reflect::ApplyError::MismatchedTypes {
                                                        from_type: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(__0)),
                                                        to_type: ::core::convert::Into::into(<Entity as
                                                                    bevy_reflect::TypePath>::type_path()),
                                                    })?
                                        },
                                    }
                            }
                            name => {
                                return ::core::result::Result::Err(bevy_reflect::ApplyError::UnknownVariant {
                                            enum_name: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(self)),
                                            variant_name: ::core::convert::Into::into(name),
                                        });
                            }
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(__value_param),
                                to_kind: bevy_reflect::ReflectKind::Enum,
                            });
                }
                ::core::result::Result::Ok(())
            }
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Enum
            }
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Enum(self)
            }
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Enum(self)
            }
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Enum(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_hash(&self) -> ::core::option::Option<u64> {
                (bevy_reflect::enums::enum_hash)(self)
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                (bevy_reflect::enums::enum_partial_eq)(self, value)
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::enums::enum_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for WindowRef where  {
            fn from_reflect(__param0: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Enum(__param0) =
                        bevy_reflect::PartialReflect::reflect_ref(__param0) {
                    match bevy_reflect::enums::Enum::variant_name(__param0) {
                        "Primary" =>
                            ::core::option::Option::Some(WindowRef::Primary {}),
                        "Entity" =>
                            ::core::option::Option::Some(WindowRef::Entity {
                                    0: {
                                        let __0 = __param0.field_at(0usize);
                                        let __0 = __0?;
                                        <Entity as bevy_reflect::FromReflect>::from_reflect(__0)?
                                    },
                                }),
                        name => ::core::option::Option::None,
                    }
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
65    reflect(Debug, Default, Clone)
66)]
67#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for WindowRef {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    WindowRef::Primary =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "WindowRef", 0u32, "Primary"),
                    WindowRef::Entity(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "WindowRef", 1u32, "Entity", __field0),
                }
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for WindowRef {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field { __field0, __field1, }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "variant identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 2")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Primary" => _serde::__private228::Ok(__Field::__field0),
                            "Entity" => _serde::__private228::Ok(__Field::__field1),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"Primary" => _serde::__private228::Ok(__Field::__field0),
                            b"Entity" => _serde::__private228::Ok(__Field::__field1),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<WindowRef>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = WindowRef;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum WindowRef")
                    }
                    fn visit_enum<__A>(self, __data: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::EnumAccess<'de> {
                        match _serde::de::EnumAccess::variant(__data)? {
                            (__Field::__field0, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(WindowRef::Primary)
                            }
                            (__Field::__field1, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Entity>(__variant),
                                    WindowRef::Entity),
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Primary", "Entity"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "WindowRef", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<WindowRef>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
68#[cfg_attr(
69    all(feature = "serialize", feature = "bevy_reflect"),
70    reflect(Serialize, Deserialize)
71)]
72pub enum WindowRef {
73    /// This will be linked to the primary window that is created by default
74    /// in the [`WindowPlugin`](crate::WindowPlugin::primary_window).
75    #[default]
76    Primary,
77    /// A more direct link to a window entity.
78    ///
79    /// Use this if you want to reference a secondary/tertiary/... window.
80    ///
81    /// To create a new window you can spawn an entity with a [`Window`],
82    /// then you can use that entity here for usage in cameras.
83    Entity(Entity),
84}
85
86impl WindowRef {
87    /// Normalize the window reference so that it can be compared to other window references.
88    pub fn normalize(&self, primary_window: Option<Entity>) -> Option<NormalizedWindowRef> {
89        let entity = match self {
90            Self::Primary => primary_window,
91            Self::Entity(entity) => Some(*entity),
92        };
93
94        entity.map(NormalizedWindowRef)
95    }
96}
97
98/// A flattened representation of a window reference for equality/hashing purposes.
99///
100/// For most purposes you probably want to use the unnormalized version [`WindowRef`].
101#[repr(C)]
102#[derive(#[automatically_derived]
impl ::core::marker::Copy for NormalizedWindowRef { }Copy, #[automatically_derived]
impl ::core::clone::Clone for NormalizedWindowRef {
    #[inline]
    fn clone(&self) -> NormalizedWindowRef {
        let _: ::core::clone::AssertParamIsClone<Entity>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for NormalizedWindowRef {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field1_finish(f,
            "NormalizedWindowRef", &&self.0)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for NormalizedWindowRef {
    #[inline]
    fn eq(&self, other: &NormalizedWindowRef) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for NormalizedWindowRef {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Entity>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for NormalizedWindowRef {
    #[inline]
    fn partial_cmp(&self, other: &NormalizedWindowRef)
        -> ::core::option::Option<::core::cmp::Ordering> {
        ::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
    }
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for NormalizedWindowRef {
    #[inline]
    fn cmp(&self, other: &NormalizedWindowRef) -> ::core::cmp::Ordering {
        ::core::cmp::Ord::cmp(&self.0, &other.0)
    }
}Ord, #[automatically_derived]
impl ::core::hash::Hash for NormalizedWindowRef {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.0, state)
    }
}Hash)]
103#[cfg_attr(
104    feature = "bevy_reflect",
105    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for NormalizedWindowRef where
            {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <Entity as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for NormalizedWindowRef where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::TupleStruct(bevy_reflect::tuple_struct::TupleStructInfo::new::<Self>(&[bevy_reflect::UnnamedField::new::<Entity>(0usize)]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for NormalizedWindowRef where  {
            fn type_path() -> &'static str {
                "bevy_window::window::NormalizedWindowRef"
            }
            fn short_type_path() -> &'static str { "NormalizedWindowRef" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("NormalizedWindowRef")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for NormalizedWindowRef where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<NormalizedWindowRef
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::tuple_struct::TupleStruct for NormalizedWindowRef
            where  {
            fn field(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize => ::core::option::Option::Some(&self.0),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize => ::core::option::Option::Some(&mut self.0),
                    _ => ::core::option::Option::None,
                }
            }
            #[inline]
            fn field_len(&self) -> usize { 1usize }
            #[inline]
            fn iter_fields(&self)
                -> bevy_reflect::tuple_struct::TupleStructFieldIter {
                bevy_reflect::tuple_struct::TupleStructFieldIter::new(self)
            }
            fn to_dynamic_tuple_struct(&self)
                -> bevy_reflect::tuple_struct::DynamicTupleStruct {
                let mut dynamic:
                        bevy_reflect::tuple_struct::DynamicTupleStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                dynamic.insert_boxed(bevy_reflect::PartialReflect::to_dynamic(&self.0));
                dynamic
            }
        }
        impl bevy_reflect::PartialReflect for NormalizedWindowRef where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::TupleStruct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (i, value) in
                        ::core::iter::Iterator::enumerate(bevy_reflect::tuple_struct::TupleStruct::iter_fields(struct_value))
                        {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::tuple_struct::TupleStruct::field_mut(self, i)
                            {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::TupleStruct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::TupleStruct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::TupleStruct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::TupleStruct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::TupleStruct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_hash(&self) -> ::core::option::Option<u64> {
                use ::core::hash::{Hash, Hasher};
                let mut hasher = bevy_reflect::utility::reflect_hasher();
                Hash::hash(&::core::any::Any::type_id(self), &mut hasher);
                Hash::hash(self, &mut hasher);
                ::core::option::Option::Some(Hasher::finish(&hasher))
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::tuple_struct::tuple_struct_partial_cmp)(self,
                    value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for NormalizedWindowRef where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::TupleStruct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let __this =
                        Self {
                            0: <Entity as
                                        bevy_reflect::FromReflect>::from_reflect(bevy_reflect::tuple_struct::TupleStruct::field(__ref_struct,
                                            0)?)?,
                        };
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
106    reflect(Debug, PartialEq, Hash, Clone)
107)]
108#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for NormalizedWindowRef {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                _serde::Serializer::serialize_newtype_struct(__serializer,
                    "NormalizedWindowRef", &self.0)
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for NormalizedWindowRef {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<NormalizedWindowRef>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = NormalizedWindowRef;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "tuple struct NormalizedWindowRef")
                    }
                    #[inline]
                    fn visit_newtype_struct<__E>(self, __e: __E)
                        -> _serde::__private228::Result<Self::Value, __E::Error>
                        where __E: _serde::Deserializer<'de> {
                        let __field0: Entity =
                            <Entity as _serde::Deserialize>::deserialize(__e)?;
                        _serde::__private228::Ok(NormalizedWindowRef(__field0))
                    }
                    #[inline]
                    fn visit_seq<__A>(self, mut __seq: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::SeqAccess<'de> {
                        let __field0 =
                            match _serde::de::SeqAccess::next_element::<Entity>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"tuple struct NormalizedWindowRef with 1 element")),
                            };
                        _serde::__private228::Ok(NormalizedWindowRef(__field0))
                    }
                }
                _serde::Deserializer::deserialize_newtype_struct(__deserializer,
                    "NormalizedWindowRef",
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<NormalizedWindowRef>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
109#[cfg_attr(
110    all(feature = "serialize", feature = "bevy_reflect"),
111    reflect(Serialize, Deserialize)
112)]
113pub struct NormalizedWindowRef(Entity);
114
115impl ContainsEntity for NormalizedWindowRef {
116    fn entity(&self) -> Entity {
117        self.0
118    }
119}
120
121/// The defining [`Component`] for window entities,
122/// storing information about how it should appear and behave.
123///
124/// Each window corresponds to an entity, and is uniquely identified by the value of their [`Entity`].
125/// When the [`Window`] component is added to an entity, a new window will be opened.
126/// When it is removed or the entity is despawned, the window will close.
127///
128/// The primary window entity (and the corresponding window) is spawned by default
129/// by [`WindowPlugin`](crate::WindowPlugin) and is marked with the [`PrimaryWindow`] component.
130///
131/// This component is synchronized with `winit` through `bevy_winit`:
132/// it will reflect the current state of the window and can be modified to change this state.
133///
134/// # Example
135///
136/// Because this component is synchronized with `winit`, it can be used to perform
137/// OS-integrated windowing operations. For example, here's a simple system
138/// to change the window mode:
139///
140/// ```
141/// # use bevy_ecs::query::With;
142/// # use bevy_ecs::system::Query;
143/// # use bevy_window::{WindowMode, PrimaryWindow, Window, MonitorSelection, VideoModeSelection};
144/// fn change_window_mode(mut windows: Query<&mut Window, With<PrimaryWindow>>) {
145///     // Query returns one window typically.
146///     for mut window in windows.iter_mut() {
147///         window.mode =
148///             WindowMode::Fullscreen(MonitorSelection::Current, VideoModeSelection::Current);
149///     }
150/// }
151/// ```
152#[derive(#[doc =
"**Required Components**: [`CursorOptions`]. \n\n A component's Required Components are inserted whenever it is inserted. Note that this will also insert the required components _of_ the required components, recursively, in depth-first order."]
impl bevy_ecs::component::Component for Window where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    const STORAGE_TYPE: bevy_ecs::component::StorageType =
        bevy_ecs::component::StorageType::Table;
    type Mutability = bevy_ecs::component::Mutable;
    fn register_required_components(_requiree:
            bevy_ecs::component::ComponentId,
        required_components:
            &mut bevy_ecs::component::RequiredComponentsRegistrator) {
        required_components.register_required::<CursorOptions>(<CursorOptions
                as ::core::default::Default>::default);
    }
    fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
        use bevy_ecs::component::{
            DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
        };
        (&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
    }
    fn relationship_accessor()
        ->
            ::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
        ::core::option::Option::None
    }
}Component, #[automatically_derived]
impl ::core::fmt::Debug for Window {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        let names: &'static _ =
            &["present_mode", "mode", "position", "resolution", "title",
                        "name", "composite_alpha_mode", "resize_constraints",
                        "resizable", "enabled_buttons", "decorations",
                        "transparent", "focused", "window_level", "canvas",
                        "fit_canvas_to_parent", "prevent_default_event_handling",
                        "internal", "ime_enabled", "ime_position", "window_theme",
                        "visible", "skip_taskbar", "clip_children",
                        "desired_maximum_frame_latency", "recognize_pinch_gesture",
                        "recognize_rotation_gesture", "recognize_doubletap_gesture",
                        "recognize_pan_gesture", "movable_by_window_background",
                        "fullsize_content_view", "has_shadow", "titlebar_shown",
                        "titlebar_transparent", "titlebar_show_title",
                        "titlebar_show_buttons", "borderless_game",
                        "prefers_home_indicator_hidden",
                        "prefers_status_bar_hidden",
                        "preferred_screen_edges_deferring_system_gestures"];
        let values: &[&dyn ::core::fmt::Debug] =
            &[&self.present_mode, &self.mode, &self.position,
                        &self.resolution, &self.title, &self.name,
                        &self.composite_alpha_mode, &self.resize_constraints,
                        &self.resizable, &self.enabled_buttons, &self.decorations,
                        &self.transparent, &self.focused, &self.window_level,
                        &self.canvas, &self.fit_canvas_to_parent,
                        &self.prevent_default_event_handling, &self.internal,
                        &self.ime_enabled, &self.ime_position, &self.window_theme,
                        &self.visible, &self.skip_taskbar, &self.clip_children,
                        &self.desired_maximum_frame_latency,
                        &self.recognize_pinch_gesture,
                        &self.recognize_rotation_gesture,
                        &self.recognize_doubletap_gesture,
                        &self.recognize_pan_gesture,
                        &self.movable_by_window_background,
                        &self.fullsize_content_view, &self.has_shadow,
                        &self.titlebar_shown, &self.titlebar_transparent,
                        &self.titlebar_show_title, &self.titlebar_show_buttons,
                        &self.borderless_game, &self.prefers_home_indicator_hidden,
                        &self.prefers_status_bar_hidden,
                        &&self.preferred_screen_edges_deferring_system_gestures];
        ::core::fmt::Formatter::debug_struct_fields_finish(f, "Window", names,
            values)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for Window {
    #[inline]
    fn clone(&self) -> Window {
        Window {
            present_mode: ::core::clone::Clone::clone(&self.present_mode),
            mode: ::core::clone::Clone::clone(&self.mode),
            position: ::core::clone::Clone::clone(&self.position),
            resolution: ::core::clone::Clone::clone(&self.resolution),
            title: ::core::clone::Clone::clone(&self.title),
            name: ::core::clone::Clone::clone(&self.name),
            composite_alpha_mode: ::core::clone::Clone::clone(&self.composite_alpha_mode),
            resize_constraints: ::core::clone::Clone::clone(&self.resize_constraints),
            resizable: ::core::clone::Clone::clone(&self.resizable),
            enabled_buttons: ::core::clone::Clone::clone(&self.enabled_buttons),
            decorations: ::core::clone::Clone::clone(&self.decorations),
            transparent: ::core::clone::Clone::clone(&self.transparent),
            focused: ::core::clone::Clone::clone(&self.focused),
            window_level: ::core::clone::Clone::clone(&self.window_level),
            canvas: ::core::clone::Clone::clone(&self.canvas),
            fit_canvas_to_parent: ::core::clone::Clone::clone(&self.fit_canvas_to_parent),
            prevent_default_event_handling: ::core::clone::Clone::clone(&self.prevent_default_event_handling),
            internal: ::core::clone::Clone::clone(&self.internal),
            ime_enabled: ::core::clone::Clone::clone(&self.ime_enabled),
            ime_position: ::core::clone::Clone::clone(&self.ime_position),
            window_theme: ::core::clone::Clone::clone(&self.window_theme),
            visible: ::core::clone::Clone::clone(&self.visible),
            skip_taskbar: ::core::clone::Clone::clone(&self.skip_taskbar),
            clip_children: ::core::clone::Clone::clone(&self.clip_children),
            desired_maximum_frame_latency: ::core::clone::Clone::clone(&self.desired_maximum_frame_latency),
            recognize_pinch_gesture: ::core::clone::Clone::clone(&self.recognize_pinch_gesture),
            recognize_rotation_gesture: ::core::clone::Clone::clone(&self.recognize_rotation_gesture),
            recognize_doubletap_gesture: ::core::clone::Clone::clone(&self.recognize_doubletap_gesture),
            recognize_pan_gesture: ::core::clone::Clone::clone(&self.recognize_pan_gesture),
            movable_by_window_background: ::core::clone::Clone::clone(&self.movable_by_window_background),
            fullsize_content_view: ::core::clone::Clone::clone(&self.fullsize_content_view),
            has_shadow: ::core::clone::Clone::clone(&self.has_shadow),
            titlebar_shown: ::core::clone::Clone::clone(&self.titlebar_shown),
            titlebar_transparent: ::core::clone::Clone::clone(&self.titlebar_transparent),
            titlebar_show_title: ::core::clone::Clone::clone(&self.titlebar_show_title),
            titlebar_show_buttons: ::core::clone::Clone::clone(&self.titlebar_show_buttons),
            borderless_game: ::core::clone::Clone::clone(&self.borderless_game),
            prefers_home_indicator_hidden: ::core::clone::Clone::clone(&self.prefers_home_indicator_hidden),
            prefers_status_bar_hidden: ::core::clone::Clone::clone(&self.prefers_status_bar_hidden),
            preferred_screen_edges_deferring_system_gestures: ::core::clone::Clone::clone(&self.preferred_screen_edges_deferring_system_gestures),
        }
    }
}Clone)]
153#[cfg_attr(
154    feature = "bevy_reflect",
155    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for Window where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectComponent, Self>();
                registration.register_type_data::<ReflectDefault, Self>();
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <PresentMode as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <WindowMode as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <WindowPosition as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <WindowResolution as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <String as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <Option<String> as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <CompositeAlphaMode as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <WindowResizeConstraints as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <bool as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <EnabledButtons as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <WindowLevel as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <InternalWindowState as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <Vec2 as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <Option<WindowTheme> as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <Option<NonZero<u32>> as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <Option<(u8, u8)> as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <ScreenEdge as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for Window where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[bevy_reflect::NamedField::new::<PresentMode>("present_mode"),
                                                bevy_reflect::NamedField::new::<WindowMode>("mode"),
                                                bevy_reflect::NamedField::new::<WindowPosition>("position"),
                                                bevy_reflect::NamedField::new::<WindowResolution>("resolution"),
                                                bevy_reflect::NamedField::new::<String>("title"),
                                                bevy_reflect::NamedField::new::<Option<String>>("name"),
                                                bevy_reflect::NamedField::new::<CompositeAlphaMode>("composite_alpha_mode"),
                                                bevy_reflect::NamedField::new::<WindowResizeConstraints>("resize_constraints"),
                                                bevy_reflect::NamedField::new::<bool>("resizable"),
                                                bevy_reflect::NamedField::new::<EnabledButtons>("enabled_buttons"),
                                                bevy_reflect::NamedField::new::<bool>("decorations"),
                                                bevy_reflect::NamedField::new::<bool>("transparent"),
                                                bevy_reflect::NamedField::new::<bool>("focused"),
                                                bevy_reflect::NamedField::new::<WindowLevel>("window_level"),
                                                bevy_reflect::NamedField::new::<Option<String>>("canvas"),
                                                bevy_reflect::NamedField::new::<bool>("fit_canvas_to_parent"),
                                                bevy_reflect::NamedField::new::<bool>("prevent_default_event_handling"),
                                                bevy_reflect::NamedField::new::<InternalWindowState>("internal"),
                                                bevy_reflect::NamedField::new::<bool>("ime_enabled"),
                                                bevy_reflect::NamedField::new::<Vec2>("ime_position"),
                                                bevy_reflect::NamedField::new::<Option<WindowTheme>>("window_theme"),
                                                bevy_reflect::NamedField::new::<bool>("visible"),
                                                bevy_reflect::NamedField::new::<bool>("skip_taskbar"),
                                                bevy_reflect::NamedField::new::<bool>("clip_children"),
                                                bevy_reflect::NamedField::new::<Option<NonZero<u32>>>("desired_maximum_frame_latency"),
                                                bevy_reflect::NamedField::new::<bool>("recognize_pinch_gesture"),
                                                bevy_reflect::NamedField::new::<bool>("recognize_rotation_gesture"),
                                                bevy_reflect::NamedField::new::<bool>("recognize_doubletap_gesture"),
                                                bevy_reflect::NamedField::new::<Option<(u8,
                                                        u8)>>("recognize_pan_gesture"),
                                                bevy_reflect::NamedField::new::<bool>("movable_by_window_background"),
                                                bevy_reflect::NamedField::new::<bool>("fullsize_content_view"),
                                                bevy_reflect::NamedField::new::<bool>("has_shadow"),
                                                bevy_reflect::NamedField::new::<bool>("titlebar_shown"),
                                                bevy_reflect::NamedField::new::<bool>("titlebar_transparent"),
                                                bevy_reflect::NamedField::new::<bool>("titlebar_show_title"),
                                                bevy_reflect::NamedField::new::<bool>("titlebar_show_buttons"),
                                                bevy_reflect::NamedField::new::<bool>("borderless_game"),
                                                bevy_reflect::NamedField::new::<bool>("prefers_home_indicator_hidden"),
                                                bevy_reflect::NamedField::new::<bool>("prefers_status_bar_hidden"),
                                                bevy_reflect::NamedField::new::<ScreenEdge>("preferred_screen_edges_deferring_system_gestures")]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for Window where  {
            fn type_path() -> &'static str { "bevy_window::window::Window" }
            fn short_type_path() -> &'static str { "Window" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("Window")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for Window where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<Window
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for Window where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name {
                    "present_mode" =>
                        ::core::option::Option::Some(&self.present_mode),
                    "mode" => ::core::option::Option::Some(&self.mode),
                    "position" => ::core::option::Option::Some(&self.position),
                    "resolution" =>
                        ::core::option::Option::Some(&self.resolution),
                    "title" => ::core::option::Option::Some(&self.title),
                    "name" => ::core::option::Option::Some(&self.name),
                    "composite_alpha_mode" =>
                        ::core::option::Option::Some(&self.composite_alpha_mode),
                    "resize_constraints" =>
                        ::core::option::Option::Some(&self.resize_constraints),
                    "resizable" =>
                        ::core::option::Option::Some(&self.resizable),
                    "enabled_buttons" =>
                        ::core::option::Option::Some(&self.enabled_buttons),
                    "decorations" =>
                        ::core::option::Option::Some(&self.decorations),
                    "transparent" =>
                        ::core::option::Option::Some(&self.transparent),
                    "focused" => ::core::option::Option::Some(&self.focused),
                    "window_level" =>
                        ::core::option::Option::Some(&self.window_level),
                    "canvas" => ::core::option::Option::Some(&self.canvas),
                    "fit_canvas_to_parent" =>
                        ::core::option::Option::Some(&self.fit_canvas_to_parent),
                    "prevent_default_event_handling" =>
                        ::core::option::Option::Some(&self.prevent_default_event_handling),
                    "internal" => ::core::option::Option::Some(&self.internal),
                    "ime_enabled" =>
                        ::core::option::Option::Some(&self.ime_enabled),
                    "ime_position" =>
                        ::core::option::Option::Some(&self.ime_position),
                    "window_theme" =>
                        ::core::option::Option::Some(&self.window_theme),
                    "visible" => ::core::option::Option::Some(&self.visible),
                    "skip_taskbar" =>
                        ::core::option::Option::Some(&self.skip_taskbar),
                    "clip_children" =>
                        ::core::option::Option::Some(&self.clip_children),
                    "desired_maximum_frame_latency" =>
                        ::core::option::Option::Some(&self.desired_maximum_frame_latency),
                    "recognize_pinch_gesture" =>
                        ::core::option::Option::Some(&self.recognize_pinch_gesture),
                    "recognize_rotation_gesture" =>
                        ::core::option::Option::Some(&self.recognize_rotation_gesture),
                    "recognize_doubletap_gesture" =>
                        ::core::option::Option::Some(&self.recognize_doubletap_gesture),
                    "recognize_pan_gesture" =>
                        ::core::option::Option::Some(&self.recognize_pan_gesture),
                    "movable_by_window_background" =>
                        ::core::option::Option::Some(&self.movable_by_window_background),
                    "fullsize_content_view" =>
                        ::core::option::Option::Some(&self.fullsize_content_view),
                    "has_shadow" =>
                        ::core::option::Option::Some(&self.has_shadow),
                    "titlebar_shown" =>
                        ::core::option::Option::Some(&self.titlebar_shown),
                    "titlebar_transparent" =>
                        ::core::option::Option::Some(&self.titlebar_transparent),
                    "titlebar_show_title" =>
                        ::core::option::Option::Some(&self.titlebar_show_title),
                    "titlebar_show_buttons" =>
                        ::core::option::Option::Some(&self.titlebar_show_buttons),
                    "borderless_game" =>
                        ::core::option::Option::Some(&self.borderless_game),
                    "prefers_home_indicator_hidden" =>
                        ::core::option::Option::Some(&self.prefers_home_indicator_hidden),
                    "prefers_status_bar_hidden" =>
                        ::core::option::Option::Some(&self.prefers_status_bar_hidden),
                    "preferred_screen_edges_deferring_system_gestures" =>
                        ::core::option::Option::Some(&self.preferred_screen_edges_deferring_system_gestures),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name {
                    "present_mode" =>
                        ::core::option::Option::Some(&mut self.present_mode),
                    "mode" => ::core::option::Option::Some(&mut self.mode),
                    "position" =>
                        ::core::option::Option::Some(&mut self.position),
                    "resolution" =>
                        ::core::option::Option::Some(&mut self.resolution),
                    "title" => ::core::option::Option::Some(&mut self.title),
                    "name" => ::core::option::Option::Some(&mut self.name),
                    "composite_alpha_mode" =>
                        ::core::option::Option::Some(&mut self.composite_alpha_mode),
                    "resize_constraints" =>
                        ::core::option::Option::Some(&mut self.resize_constraints),
                    "resizable" =>
                        ::core::option::Option::Some(&mut self.resizable),
                    "enabled_buttons" =>
                        ::core::option::Option::Some(&mut self.enabled_buttons),
                    "decorations" =>
                        ::core::option::Option::Some(&mut self.decorations),
                    "transparent" =>
                        ::core::option::Option::Some(&mut self.transparent),
                    "focused" =>
                        ::core::option::Option::Some(&mut self.focused),
                    "window_level" =>
                        ::core::option::Option::Some(&mut self.window_level),
                    "canvas" => ::core::option::Option::Some(&mut self.canvas),
                    "fit_canvas_to_parent" =>
                        ::core::option::Option::Some(&mut self.fit_canvas_to_parent),
                    "prevent_default_event_handling" =>
                        ::core::option::Option::Some(&mut self.prevent_default_event_handling),
                    "internal" =>
                        ::core::option::Option::Some(&mut self.internal),
                    "ime_enabled" =>
                        ::core::option::Option::Some(&mut self.ime_enabled),
                    "ime_position" =>
                        ::core::option::Option::Some(&mut self.ime_position),
                    "window_theme" =>
                        ::core::option::Option::Some(&mut self.window_theme),
                    "visible" =>
                        ::core::option::Option::Some(&mut self.visible),
                    "skip_taskbar" =>
                        ::core::option::Option::Some(&mut self.skip_taskbar),
                    "clip_children" =>
                        ::core::option::Option::Some(&mut self.clip_children),
                    "desired_maximum_frame_latency" =>
                        ::core::option::Option::Some(&mut self.desired_maximum_frame_latency),
                    "recognize_pinch_gesture" =>
                        ::core::option::Option::Some(&mut self.recognize_pinch_gesture),
                    "recognize_rotation_gesture" =>
                        ::core::option::Option::Some(&mut self.recognize_rotation_gesture),
                    "recognize_doubletap_gesture" =>
                        ::core::option::Option::Some(&mut self.recognize_doubletap_gesture),
                    "recognize_pan_gesture" =>
                        ::core::option::Option::Some(&mut self.recognize_pan_gesture),
                    "movable_by_window_background" =>
                        ::core::option::Option::Some(&mut self.movable_by_window_background),
                    "fullsize_content_view" =>
                        ::core::option::Option::Some(&mut self.fullsize_content_view),
                    "has_shadow" =>
                        ::core::option::Option::Some(&mut self.has_shadow),
                    "titlebar_shown" =>
                        ::core::option::Option::Some(&mut self.titlebar_shown),
                    "titlebar_transparent" =>
                        ::core::option::Option::Some(&mut self.titlebar_transparent),
                    "titlebar_show_title" =>
                        ::core::option::Option::Some(&mut self.titlebar_show_title),
                    "titlebar_show_buttons" =>
                        ::core::option::Option::Some(&mut self.titlebar_show_buttons),
                    "borderless_game" =>
                        ::core::option::Option::Some(&mut self.borderless_game),
                    "prefers_home_indicator_hidden" =>
                        ::core::option::Option::Some(&mut self.prefers_home_indicator_hidden),
                    "prefers_status_bar_hidden" =>
                        ::core::option::Option::Some(&mut self.prefers_status_bar_hidden),
                    "preferred_screen_edges_deferring_system_gestures" =>
                        ::core::option::Option::Some(&mut self.preferred_screen_edges_deferring_system_gestures),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize => ::core::option::Option::Some(&self.present_mode),
                    1usize => ::core::option::Option::Some(&self.mode),
                    2usize => ::core::option::Option::Some(&self.position),
                    3usize => ::core::option::Option::Some(&self.resolution),
                    4usize => ::core::option::Option::Some(&self.title),
                    5usize => ::core::option::Option::Some(&self.name),
                    6usize =>
                        ::core::option::Option::Some(&self.composite_alpha_mode),
                    7usize =>
                        ::core::option::Option::Some(&self.resize_constraints),
                    8usize => ::core::option::Option::Some(&self.resizable),
                    9usize =>
                        ::core::option::Option::Some(&self.enabled_buttons),
                    10usize => ::core::option::Option::Some(&self.decorations),
                    11usize => ::core::option::Option::Some(&self.transparent),
                    12usize => ::core::option::Option::Some(&self.focused),
                    13usize => ::core::option::Option::Some(&self.window_level),
                    14usize => ::core::option::Option::Some(&self.canvas),
                    15usize =>
                        ::core::option::Option::Some(&self.fit_canvas_to_parent),
                    16usize =>
                        ::core::option::Option::Some(&self.prevent_default_event_handling),
                    17usize => ::core::option::Option::Some(&self.internal),
                    18usize => ::core::option::Option::Some(&self.ime_enabled),
                    19usize => ::core::option::Option::Some(&self.ime_position),
                    20usize => ::core::option::Option::Some(&self.window_theme),
                    21usize => ::core::option::Option::Some(&self.visible),
                    22usize => ::core::option::Option::Some(&self.skip_taskbar),
                    23usize =>
                        ::core::option::Option::Some(&self.clip_children),
                    24usize =>
                        ::core::option::Option::Some(&self.desired_maximum_frame_latency),
                    25usize =>
                        ::core::option::Option::Some(&self.recognize_pinch_gesture),
                    26usize =>
                        ::core::option::Option::Some(&self.recognize_rotation_gesture),
                    27usize =>
                        ::core::option::Option::Some(&self.recognize_doubletap_gesture),
                    28usize =>
                        ::core::option::Option::Some(&self.recognize_pan_gesture),
                    29usize =>
                        ::core::option::Option::Some(&self.movable_by_window_background),
                    30usize =>
                        ::core::option::Option::Some(&self.fullsize_content_view),
                    31usize => ::core::option::Option::Some(&self.has_shadow),
                    32usize =>
                        ::core::option::Option::Some(&self.titlebar_shown),
                    33usize =>
                        ::core::option::Option::Some(&self.titlebar_transparent),
                    34usize =>
                        ::core::option::Option::Some(&self.titlebar_show_title),
                    35usize =>
                        ::core::option::Option::Some(&self.titlebar_show_buttons),
                    36usize =>
                        ::core::option::Option::Some(&self.borderless_game),
                    37usize =>
                        ::core::option::Option::Some(&self.prefers_home_indicator_hidden),
                    38usize =>
                        ::core::option::Option::Some(&self.prefers_status_bar_hidden),
                    39usize =>
                        ::core::option::Option::Some(&self.preferred_screen_edges_deferring_system_gestures),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize =>
                        ::core::option::Option::Some(&mut self.present_mode),
                    1usize => ::core::option::Option::Some(&mut self.mode),
                    2usize => ::core::option::Option::Some(&mut self.position),
                    3usize =>
                        ::core::option::Option::Some(&mut self.resolution),
                    4usize => ::core::option::Option::Some(&mut self.title),
                    5usize => ::core::option::Option::Some(&mut self.name),
                    6usize =>
                        ::core::option::Option::Some(&mut self.composite_alpha_mode),
                    7usize =>
                        ::core::option::Option::Some(&mut self.resize_constraints),
                    8usize => ::core::option::Option::Some(&mut self.resizable),
                    9usize =>
                        ::core::option::Option::Some(&mut self.enabled_buttons),
                    10usize =>
                        ::core::option::Option::Some(&mut self.decorations),
                    11usize =>
                        ::core::option::Option::Some(&mut self.transparent),
                    12usize => ::core::option::Option::Some(&mut self.focused),
                    13usize =>
                        ::core::option::Option::Some(&mut self.window_level),
                    14usize => ::core::option::Option::Some(&mut self.canvas),
                    15usize =>
                        ::core::option::Option::Some(&mut self.fit_canvas_to_parent),
                    16usize =>
                        ::core::option::Option::Some(&mut self.prevent_default_event_handling),
                    17usize => ::core::option::Option::Some(&mut self.internal),
                    18usize =>
                        ::core::option::Option::Some(&mut self.ime_enabled),
                    19usize =>
                        ::core::option::Option::Some(&mut self.ime_position),
                    20usize =>
                        ::core::option::Option::Some(&mut self.window_theme),
                    21usize => ::core::option::Option::Some(&mut self.visible),
                    22usize =>
                        ::core::option::Option::Some(&mut self.skip_taskbar),
                    23usize =>
                        ::core::option::Option::Some(&mut self.clip_children),
                    24usize =>
                        ::core::option::Option::Some(&mut self.desired_maximum_frame_latency),
                    25usize =>
                        ::core::option::Option::Some(&mut self.recognize_pinch_gesture),
                    26usize =>
                        ::core::option::Option::Some(&mut self.recognize_rotation_gesture),
                    27usize =>
                        ::core::option::Option::Some(&mut self.recognize_doubletap_gesture),
                    28usize =>
                        ::core::option::Option::Some(&mut self.recognize_pan_gesture),
                    29usize =>
                        ::core::option::Option::Some(&mut self.movable_by_window_background),
                    30usize =>
                        ::core::option::Option::Some(&mut self.fullsize_content_view),
                    31usize =>
                        ::core::option::Option::Some(&mut self.has_shadow),
                    32usize =>
                        ::core::option::Option::Some(&mut self.titlebar_shown),
                    33usize =>
                        ::core::option::Option::Some(&mut self.titlebar_transparent),
                    34usize =>
                        ::core::option::Option::Some(&mut self.titlebar_show_title),
                    35usize =>
                        ::core::option::Option::Some(&mut self.titlebar_show_buttons),
                    36usize =>
                        ::core::option::Option::Some(&mut self.borderless_game),
                    37usize =>
                        ::core::option::Option::Some(&mut self.prefers_home_indicator_hidden),
                    38usize =>
                        ::core::option::Option::Some(&mut self.prefers_status_bar_hidden),
                    39usize =>
                        ::core::option::Option::Some(&mut self.preferred_screen_edges_deferring_system_gestures),
                    _ => ::core::option::Option::None,
                }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index {
                    0usize => ::core::option::Option::Some("present_mode"),
                    1usize => ::core::option::Option::Some("mode"),
                    2usize => ::core::option::Option::Some("position"),
                    3usize => ::core::option::Option::Some("resolution"),
                    4usize => ::core::option::Option::Some("title"),
                    5usize => ::core::option::Option::Some("name"),
                    6usize =>
                        ::core::option::Option::Some("composite_alpha_mode"),
                    7usize =>
                        ::core::option::Option::Some("resize_constraints"),
                    8usize => ::core::option::Option::Some("resizable"),
                    9usize => ::core::option::Option::Some("enabled_buttons"),
                    10usize => ::core::option::Option::Some("decorations"),
                    11usize => ::core::option::Option::Some("transparent"),
                    12usize => ::core::option::Option::Some("focused"),
                    13usize => ::core::option::Option::Some("window_level"),
                    14usize => ::core::option::Option::Some("canvas"),
                    15usize =>
                        ::core::option::Option::Some("fit_canvas_to_parent"),
                    16usize =>
                        ::core::option::Option::Some("prevent_default_event_handling"),
                    17usize => ::core::option::Option::Some("internal"),
                    18usize => ::core::option::Option::Some("ime_enabled"),
                    19usize => ::core::option::Option::Some("ime_position"),
                    20usize => ::core::option::Option::Some("window_theme"),
                    21usize => ::core::option::Option::Some("visible"),
                    22usize => ::core::option::Option::Some("skip_taskbar"),
                    23usize => ::core::option::Option::Some("clip_children"),
                    24usize =>
                        ::core::option::Option::Some("desired_maximum_frame_latency"),
                    25usize =>
                        ::core::option::Option::Some("recognize_pinch_gesture"),
                    26usize =>
                        ::core::option::Option::Some("recognize_rotation_gesture"),
                    27usize =>
                        ::core::option::Option::Some("recognize_doubletap_gesture"),
                    28usize =>
                        ::core::option::Option::Some("recognize_pan_gesture"),
                    29usize =>
                        ::core::option::Option::Some("movable_by_window_background"),
                    30usize =>
                        ::core::option::Option::Some("fullsize_content_view"),
                    31usize => ::core::option::Option::Some("has_shadow"),
                    32usize => ::core::option::Option::Some("titlebar_shown"),
                    33usize =>
                        ::core::option::Option::Some("titlebar_transparent"),
                    34usize =>
                        ::core::option::Option::Some("titlebar_show_title"),
                    35usize =>
                        ::core::option::Option::Some("titlebar_show_buttons"),
                    36usize => ::core::option::Option::Some("borderless_game"),
                    37usize =>
                        ::core::option::Option::Some("prefers_home_indicator_hidden"),
                    38usize =>
                        ::core::option::Option::Some("prefers_status_bar_hidden"),
                    39usize =>
                        ::core::option::Option::Some("preferred_screen_edges_deferring_system_gestures"),
                    _ => ::core::option::Option::None,
                }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name {
                    "present_mode" => ::core::option::Option::Some(0usize),
                    "mode" => ::core::option::Option::Some(1usize),
                    "position" => ::core::option::Option::Some(2usize),
                    "resolution" => ::core::option::Option::Some(3usize),
                    "title" => ::core::option::Option::Some(4usize),
                    "name" => ::core::option::Option::Some(5usize),
                    "composite_alpha_mode" =>
                        ::core::option::Option::Some(6usize),
                    "resize_constraints" =>
                        ::core::option::Option::Some(7usize),
                    "resizable" => ::core::option::Option::Some(8usize),
                    "enabled_buttons" => ::core::option::Option::Some(9usize),
                    "decorations" => ::core::option::Option::Some(10usize),
                    "transparent" => ::core::option::Option::Some(11usize),
                    "focused" => ::core::option::Option::Some(12usize),
                    "window_level" => ::core::option::Option::Some(13usize),
                    "canvas" => ::core::option::Option::Some(14usize),
                    "fit_canvas_to_parent" =>
                        ::core::option::Option::Some(15usize),
                    "prevent_default_event_handling" =>
                        ::core::option::Option::Some(16usize),
                    "internal" => ::core::option::Option::Some(17usize),
                    "ime_enabled" => ::core::option::Option::Some(18usize),
                    "ime_position" => ::core::option::Option::Some(19usize),
                    "window_theme" => ::core::option::Option::Some(20usize),
                    "visible" => ::core::option::Option::Some(21usize),
                    "skip_taskbar" => ::core::option::Option::Some(22usize),
                    "clip_children" => ::core::option::Option::Some(23usize),
                    "desired_maximum_frame_latency" =>
                        ::core::option::Option::Some(24usize),
                    "recognize_pinch_gesture" =>
                        ::core::option::Option::Some(25usize),
                    "recognize_rotation_gesture" =>
                        ::core::option::Option::Some(26usize),
                    "recognize_doubletap_gesture" =>
                        ::core::option::Option::Some(27usize),
                    "recognize_pan_gesture" =>
                        ::core::option::Option::Some(28usize),
                    "movable_by_window_background" =>
                        ::core::option::Option::Some(29usize),
                    "fullsize_content_view" =>
                        ::core::option::Option::Some(30usize),
                    "has_shadow" => ::core::option::Option::Some(31usize),
                    "titlebar_shown" => ::core::option::Option::Some(32usize),
                    "titlebar_transparent" =>
                        ::core::option::Option::Some(33usize),
                    "titlebar_show_title" =>
                        ::core::option::Option::Some(34usize),
                    "titlebar_show_buttons" =>
                        ::core::option::Option::Some(35usize),
                    "borderless_game" => ::core::option::Option::Some(36usize),
                    "prefers_home_indicator_hidden" =>
                        ::core::option::Option::Some(37usize),
                    "prefers_status_bar_hidden" =>
                        ::core::option::Option::Some(38usize),
                    "preferred_screen_edges_deferring_system_gestures" =>
                        ::core::option::Option::Some(39usize),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_len(&self) -> usize { 40usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                -> bevy_reflect::structs::DynamicStruct {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                dynamic.insert_boxed("present_mode",
                    bevy_reflect::PartialReflect::to_dynamic(&self.present_mode));
                dynamic.insert_boxed("mode",
                    bevy_reflect::PartialReflect::to_dynamic(&self.mode));
                dynamic.insert_boxed("position",
                    bevy_reflect::PartialReflect::to_dynamic(&self.position));
                dynamic.insert_boxed("resolution",
                    bevy_reflect::PartialReflect::to_dynamic(&self.resolution));
                dynamic.insert_boxed("title",
                    bevy_reflect::PartialReflect::to_dynamic(&self.title));
                dynamic.insert_boxed("name",
                    bevy_reflect::PartialReflect::to_dynamic(&self.name));
                dynamic.insert_boxed("composite_alpha_mode",
                    bevy_reflect::PartialReflect::to_dynamic(&self.composite_alpha_mode));
                dynamic.insert_boxed("resize_constraints",
                    bevy_reflect::PartialReflect::to_dynamic(&self.resize_constraints));
                dynamic.insert_boxed("resizable",
                    bevy_reflect::PartialReflect::to_dynamic(&self.resizable));
                dynamic.insert_boxed("enabled_buttons",
                    bevy_reflect::PartialReflect::to_dynamic(&self.enabled_buttons));
                dynamic.insert_boxed("decorations",
                    bevy_reflect::PartialReflect::to_dynamic(&self.decorations));
                dynamic.insert_boxed("transparent",
                    bevy_reflect::PartialReflect::to_dynamic(&self.transparent));
                dynamic.insert_boxed("focused",
                    bevy_reflect::PartialReflect::to_dynamic(&self.focused));
                dynamic.insert_boxed("window_level",
                    bevy_reflect::PartialReflect::to_dynamic(&self.window_level));
                dynamic.insert_boxed("canvas",
                    bevy_reflect::PartialReflect::to_dynamic(&self.canvas));
                dynamic.insert_boxed("fit_canvas_to_parent",
                    bevy_reflect::PartialReflect::to_dynamic(&self.fit_canvas_to_parent));
                dynamic.insert_boxed("prevent_default_event_handling",
                    bevy_reflect::PartialReflect::to_dynamic(&self.prevent_default_event_handling));
                dynamic.insert_boxed("internal",
                    bevy_reflect::PartialReflect::to_dynamic(&self.internal));
                dynamic.insert_boxed("ime_enabled",
                    bevy_reflect::PartialReflect::to_dynamic(&self.ime_enabled));
                dynamic.insert_boxed("ime_position",
                    bevy_reflect::PartialReflect::to_dynamic(&self.ime_position));
                dynamic.insert_boxed("window_theme",
                    bevy_reflect::PartialReflect::to_dynamic(&self.window_theme));
                dynamic.insert_boxed("visible",
                    bevy_reflect::PartialReflect::to_dynamic(&self.visible));
                dynamic.insert_boxed("skip_taskbar",
                    bevy_reflect::PartialReflect::to_dynamic(&self.skip_taskbar));
                dynamic.insert_boxed("clip_children",
                    bevy_reflect::PartialReflect::to_dynamic(&self.clip_children));
                dynamic.insert_boxed("desired_maximum_frame_latency",
                    bevy_reflect::PartialReflect::to_dynamic(&self.desired_maximum_frame_latency));
                dynamic.insert_boxed("recognize_pinch_gesture",
                    bevy_reflect::PartialReflect::to_dynamic(&self.recognize_pinch_gesture));
                dynamic.insert_boxed("recognize_rotation_gesture",
                    bevy_reflect::PartialReflect::to_dynamic(&self.recognize_rotation_gesture));
                dynamic.insert_boxed("recognize_doubletap_gesture",
                    bevy_reflect::PartialReflect::to_dynamic(&self.recognize_doubletap_gesture));
                dynamic.insert_boxed("recognize_pan_gesture",
                    bevy_reflect::PartialReflect::to_dynamic(&self.recognize_pan_gesture));
                dynamic.insert_boxed("movable_by_window_background",
                    bevy_reflect::PartialReflect::to_dynamic(&self.movable_by_window_background));
                dynamic.insert_boxed("fullsize_content_view",
                    bevy_reflect::PartialReflect::to_dynamic(&self.fullsize_content_view));
                dynamic.insert_boxed("has_shadow",
                    bevy_reflect::PartialReflect::to_dynamic(&self.has_shadow));
                dynamic.insert_boxed("titlebar_shown",
                    bevy_reflect::PartialReflect::to_dynamic(&self.titlebar_shown));
                dynamic.insert_boxed("titlebar_transparent",
                    bevy_reflect::PartialReflect::to_dynamic(&self.titlebar_transparent));
                dynamic.insert_boxed("titlebar_show_title",
                    bevy_reflect::PartialReflect::to_dynamic(&self.titlebar_show_title));
                dynamic.insert_boxed("titlebar_show_buttons",
                    bevy_reflect::PartialReflect::to_dynamic(&self.titlebar_show_buttons));
                dynamic.insert_boxed("borderless_game",
                    bevy_reflect::PartialReflect::to_dynamic(&self.borderless_game));
                dynamic.insert_boxed("prefers_home_indicator_hidden",
                    bevy_reflect::PartialReflect::to_dynamic(&self.prefers_home_indicator_hidden));
                dynamic.insert_boxed("prefers_status_bar_hidden",
                    bevy_reflect::PartialReflect::to_dynamic(&self.prefers_status_bar_hidden));
                dynamic.insert_boxed("preferred_screen_edges_deferring_system_gestures",
                    bevy_reflect::PartialReflect::to_dynamic(&self.preferred_screen_edges_deferring_system_gestures));
                dynamic
            }
        }
        impl bevy_reflect::PartialReflect for Window where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                (bevy_reflect::structs::struct_partial_eq)(self, value)
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for Window where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let mut __this =
                        <Self as ::core::default::Default>::default();
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <PresentMode as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "present_mode")?))() {
                        __this.present_mode = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <WindowMode as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "mode")?))() {
                        __this.mode = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <WindowPosition as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "position")?))() {
                        __this.position = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <WindowResolution as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "resolution")?))() {
                        __this.resolution = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <String as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "title")?))() {
                        __this.title = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <Option<String> as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "name")?))() {
                        __this.name = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <CompositeAlphaMode as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "composite_alpha_mode")?))() {
                        __this.composite_alpha_mode = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <WindowResizeConstraints as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "resize_constraints")?))() {
                        __this.resize_constraints = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "resizable")?))() {
                        __this.resizable = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <EnabledButtons as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "enabled_buttons")?))() {
                        __this.enabled_buttons = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "decorations")?))() {
                        __this.decorations = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "transparent")?))() {
                        __this.transparent = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "focused")?))() {
                        __this.focused = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <WindowLevel as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "window_level")?))() {
                        __this.window_level = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <Option<String> as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "canvas")?))() {
                        __this.canvas = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "fit_canvas_to_parent")?))() {
                        __this.fit_canvas_to_parent = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "prevent_default_event_handling")?))() {
                        __this.prevent_default_event_handling = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <InternalWindowState as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "internal")?))() {
                        __this.internal = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "ime_enabled")?))() {
                        __this.ime_enabled = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <Vec2 as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "ime_position")?))() {
                        __this.ime_position = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <Option<WindowTheme> as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "window_theme")?))() {
                        __this.window_theme = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "visible")?))() {
                        __this.visible = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "skip_taskbar")?))() {
                        __this.skip_taskbar = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "clip_children")?))() {
                        __this.clip_children = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <Option<NonZero<u32>> as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "desired_maximum_frame_latency")?))() {
                        __this.desired_maximum_frame_latency = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "recognize_pinch_gesture")?))() {
                        __this.recognize_pinch_gesture = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "recognize_rotation_gesture")?))() {
                        __this.recognize_rotation_gesture = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "recognize_doubletap_gesture")?))() {
                        __this.recognize_doubletap_gesture = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <Option<(u8, u8)> as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "recognize_pan_gesture")?))() {
                        __this.recognize_pan_gesture = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "movable_by_window_background")?))() {
                        __this.movable_by_window_background = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "fullsize_content_view")?))() {
                        __this.fullsize_content_view = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "has_shadow")?))() {
                        __this.has_shadow = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "titlebar_shown")?))() {
                        __this.titlebar_shown = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "titlebar_transparent")?))() {
                        __this.titlebar_transparent = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "titlebar_show_title")?))() {
                        __this.titlebar_show_title = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "titlebar_show_buttons")?))() {
                        __this.titlebar_show_buttons = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "borderless_game")?))() {
                        __this.borderless_game = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "prefers_home_indicator_hidden")?))() {
                        __this.prefers_home_indicator_hidden = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "prefers_status_bar_hidden")?))() {
                        __this.prefers_status_bar_hidden = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <ScreenEdge as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "preferred_screen_edges_deferring_system_gestures")?))() {
                        __this.preferred_screen_edges_deferring_system_gestures =
                            __field;
                    }
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
156    reflect(Component, Default, Debug, Clone)
157)]
158#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for Window {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer, "Window",
                            false as usize + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
                                                                                                                                                1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
                                                                                    1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "present_mode", &self.present_mode)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "mode", &self.mode)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "position", &self.position)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "resolution", &self.resolution)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "title", &self.title)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "name", &self.name)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "composite_alpha_mode", &self.composite_alpha_mode)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "resize_constraints", &self.resize_constraints)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "resizable", &self.resizable)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "enabled_buttons", &self.enabled_buttons)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "decorations", &self.decorations)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "transparent", &self.transparent)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "focused", &self.focused)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "window_level", &self.window_level)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "canvas", &self.canvas)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "fit_canvas_to_parent", &self.fit_canvas_to_parent)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "prevent_default_event_handling",
                        &self.prevent_default_event_handling)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "internal", &self.internal)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "ime_enabled", &self.ime_enabled)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "ime_position", &self.ime_position)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "window_theme", &self.window_theme)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "visible", &self.visible)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "skip_taskbar", &self.skip_taskbar)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "clip_children", &self.clip_children)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "desired_maximum_frame_latency",
                        &self.desired_maximum_frame_latency)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "recognize_pinch_gesture", &self.recognize_pinch_gesture)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "recognize_rotation_gesture",
                        &self.recognize_rotation_gesture)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "recognize_doubletap_gesture",
                        &self.recognize_doubletap_gesture)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "recognize_pan_gesture", &self.recognize_pan_gesture)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "movable_by_window_background",
                        &self.movable_by_window_background)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "fullsize_content_view", &self.fullsize_content_view)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "has_shadow", &self.has_shadow)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "titlebar_shown", &self.titlebar_shown)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "titlebar_transparent", &self.titlebar_transparent)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "titlebar_show_title", &self.titlebar_show_title)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "titlebar_show_buttons", &self.titlebar_show_buttons)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "borderless_game", &self.borderless_game)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "prefers_home_indicator_hidden",
                        &self.prefers_home_indicator_hidden)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "prefers_status_bar_hidden",
                        &self.prefers_status_bar_hidden)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "preferred_screen_edges_deferring_system_gestures",
                        &self.preferred_screen_edges_deferring_system_gestures)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for Window {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field {
                    __field0,
                    __field1,
                    __field2,
                    __field3,
                    __field4,
                    __field5,
                    __field6,
                    __field7,
                    __field8,
                    __field9,
                    __field10,
                    __field11,
                    __field12,
                    __field13,
                    __field14,
                    __field15,
                    __field16,
                    __field17,
                    __field18,
                    __field19,
                    __field20,
                    __field21,
                    __field22,
                    __field23,
                    __field24,
                    __field25,
                    __field26,
                    __field27,
                    __field28,
                    __field29,
                    __field30,
                    __field31,
                    __field32,
                    __field33,
                    __field34,
                    __field35,
                    __field36,
                    __field37,
                    __field38,
                    __field39,
                    __ignore,
                }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "field identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            4u64 => _serde::__private228::Ok(__Field::__field4),
                            5u64 => _serde::__private228::Ok(__Field::__field5),
                            6u64 => _serde::__private228::Ok(__Field::__field6),
                            7u64 => _serde::__private228::Ok(__Field::__field7),
                            8u64 => _serde::__private228::Ok(__Field::__field8),
                            9u64 => _serde::__private228::Ok(__Field::__field9),
                            10u64 => _serde::__private228::Ok(__Field::__field10),
                            11u64 => _serde::__private228::Ok(__Field::__field11),
                            12u64 => _serde::__private228::Ok(__Field::__field12),
                            13u64 => _serde::__private228::Ok(__Field::__field13),
                            14u64 => _serde::__private228::Ok(__Field::__field14),
                            15u64 => _serde::__private228::Ok(__Field::__field15),
                            16u64 => _serde::__private228::Ok(__Field::__field16),
                            17u64 => _serde::__private228::Ok(__Field::__field17),
                            18u64 => _serde::__private228::Ok(__Field::__field18),
                            19u64 => _serde::__private228::Ok(__Field::__field19),
                            20u64 => _serde::__private228::Ok(__Field::__field20),
                            21u64 => _serde::__private228::Ok(__Field::__field21),
                            22u64 => _serde::__private228::Ok(__Field::__field22),
                            23u64 => _serde::__private228::Ok(__Field::__field23),
                            24u64 => _serde::__private228::Ok(__Field::__field24),
                            25u64 => _serde::__private228::Ok(__Field::__field25),
                            26u64 => _serde::__private228::Ok(__Field::__field26),
                            27u64 => _serde::__private228::Ok(__Field::__field27),
                            28u64 => _serde::__private228::Ok(__Field::__field28),
                            29u64 => _serde::__private228::Ok(__Field::__field29),
                            30u64 => _serde::__private228::Ok(__Field::__field30),
                            31u64 => _serde::__private228::Ok(__Field::__field31),
                            32u64 => _serde::__private228::Ok(__Field::__field32),
                            33u64 => _serde::__private228::Ok(__Field::__field33),
                            34u64 => _serde::__private228::Ok(__Field::__field34),
                            35u64 => _serde::__private228::Ok(__Field::__field35),
                            36u64 => _serde::__private228::Ok(__Field::__field36),
                            37u64 => _serde::__private228::Ok(__Field::__field37),
                            38u64 => _serde::__private228::Ok(__Field::__field38),
                            39u64 => _serde::__private228::Ok(__Field::__field39),
                            _ => _serde::__private228::Ok(__Field::__ignore),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "present_mode" =>
                                _serde::__private228::Ok(__Field::__field0),
                            "mode" => _serde::__private228::Ok(__Field::__field1),
                            "position" => _serde::__private228::Ok(__Field::__field2),
                            "resolution" => _serde::__private228::Ok(__Field::__field3),
                            "title" => _serde::__private228::Ok(__Field::__field4),
                            "name" => _serde::__private228::Ok(__Field::__field5),
                            "composite_alpha_mode" =>
                                _serde::__private228::Ok(__Field::__field6),
                            "resize_constraints" =>
                                _serde::__private228::Ok(__Field::__field7),
                            "resizable" => _serde::__private228::Ok(__Field::__field8),
                            "enabled_buttons" =>
                                _serde::__private228::Ok(__Field::__field9),
                            "decorations" =>
                                _serde::__private228::Ok(__Field::__field10),
                            "transparent" =>
                                _serde::__private228::Ok(__Field::__field11),
                            "focused" => _serde::__private228::Ok(__Field::__field12),
                            "window_level" =>
                                _serde::__private228::Ok(__Field::__field13),
                            "canvas" => _serde::__private228::Ok(__Field::__field14),
                            "fit_canvas_to_parent" =>
                                _serde::__private228::Ok(__Field::__field15),
                            "prevent_default_event_handling" =>
                                _serde::__private228::Ok(__Field::__field16),
                            "internal" => _serde::__private228::Ok(__Field::__field17),
                            "ime_enabled" =>
                                _serde::__private228::Ok(__Field::__field18),
                            "ime_position" =>
                                _serde::__private228::Ok(__Field::__field19),
                            "window_theme" =>
                                _serde::__private228::Ok(__Field::__field20),
                            "visible" => _serde::__private228::Ok(__Field::__field21),
                            "skip_taskbar" =>
                                _serde::__private228::Ok(__Field::__field22),
                            "clip_children" =>
                                _serde::__private228::Ok(__Field::__field23),
                            "desired_maximum_frame_latency" =>
                                _serde::__private228::Ok(__Field::__field24),
                            "recognize_pinch_gesture" =>
                                _serde::__private228::Ok(__Field::__field25),
                            "recognize_rotation_gesture" =>
                                _serde::__private228::Ok(__Field::__field26),
                            "recognize_doubletap_gesture" =>
                                _serde::__private228::Ok(__Field::__field27),
                            "recognize_pan_gesture" =>
                                _serde::__private228::Ok(__Field::__field28),
                            "movable_by_window_background" =>
                                _serde::__private228::Ok(__Field::__field29),
                            "fullsize_content_view" =>
                                _serde::__private228::Ok(__Field::__field30),
                            "has_shadow" =>
                                _serde::__private228::Ok(__Field::__field31),
                            "titlebar_shown" =>
                                _serde::__private228::Ok(__Field::__field32),
                            "titlebar_transparent" =>
                                _serde::__private228::Ok(__Field::__field33),
                            "titlebar_show_title" =>
                                _serde::__private228::Ok(__Field::__field34),
                            "titlebar_show_buttons" =>
                                _serde::__private228::Ok(__Field::__field35),
                            "borderless_game" =>
                                _serde::__private228::Ok(__Field::__field36),
                            "prefers_home_indicator_hidden" =>
                                _serde::__private228::Ok(__Field::__field37),
                            "prefers_status_bar_hidden" =>
                                _serde::__private228::Ok(__Field::__field38),
                            "preferred_screen_edges_deferring_system_gestures" =>
                                _serde::__private228::Ok(__Field::__field39),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"present_mode" =>
                                _serde::__private228::Ok(__Field::__field0),
                            b"mode" => _serde::__private228::Ok(__Field::__field1),
                            b"position" => _serde::__private228::Ok(__Field::__field2),
                            b"resolution" =>
                                _serde::__private228::Ok(__Field::__field3),
                            b"title" => _serde::__private228::Ok(__Field::__field4),
                            b"name" => _serde::__private228::Ok(__Field::__field5),
                            b"composite_alpha_mode" =>
                                _serde::__private228::Ok(__Field::__field6),
                            b"resize_constraints" =>
                                _serde::__private228::Ok(__Field::__field7),
                            b"resizable" => _serde::__private228::Ok(__Field::__field8),
                            b"enabled_buttons" =>
                                _serde::__private228::Ok(__Field::__field9),
                            b"decorations" =>
                                _serde::__private228::Ok(__Field::__field10),
                            b"transparent" =>
                                _serde::__private228::Ok(__Field::__field11),
                            b"focused" => _serde::__private228::Ok(__Field::__field12),
                            b"window_level" =>
                                _serde::__private228::Ok(__Field::__field13),
                            b"canvas" => _serde::__private228::Ok(__Field::__field14),
                            b"fit_canvas_to_parent" =>
                                _serde::__private228::Ok(__Field::__field15),
                            b"prevent_default_event_handling" =>
                                _serde::__private228::Ok(__Field::__field16),
                            b"internal" => _serde::__private228::Ok(__Field::__field17),
                            b"ime_enabled" =>
                                _serde::__private228::Ok(__Field::__field18),
                            b"ime_position" =>
                                _serde::__private228::Ok(__Field::__field19),
                            b"window_theme" =>
                                _serde::__private228::Ok(__Field::__field20),
                            b"visible" => _serde::__private228::Ok(__Field::__field21),
                            b"skip_taskbar" =>
                                _serde::__private228::Ok(__Field::__field22),
                            b"clip_children" =>
                                _serde::__private228::Ok(__Field::__field23),
                            b"desired_maximum_frame_latency" =>
                                _serde::__private228::Ok(__Field::__field24),
                            b"recognize_pinch_gesture" =>
                                _serde::__private228::Ok(__Field::__field25),
                            b"recognize_rotation_gesture" =>
                                _serde::__private228::Ok(__Field::__field26),
                            b"recognize_doubletap_gesture" =>
                                _serde::__private228::Ok(__Field::__field27),
                            b"recognize_pan_gesture" =>
                                _serde::__private228::Ok(__Field::__field28),
                            b"movable_by_window_background" =>
                                _serde::__private228::Ok(__Field::__field29),
                            b"fullsize_content_view" =>
                                _serde::__private228::Ok(__Field::__field30),
                            b"has_shadow" =>
                                _serde::__private228::Ok(__Field::__field31),
                            b"titlebar_shown" =>
                                _serde::__private228::Ok(__Field::__field32),
                            b"titlebar_transparent" =>
                                _serde::__private228::Ok(__Field::__field33),
                            b"titlebar_show_title" =>
                                _serde::__private228::Ok(__Field::__field34),
                            b"titlebar_show_buttons" =>
                                _serde::__private228::Ok(__Field::__field35),
                            b"borderless_game" =>
                                _serde::__private228::Ok(__Field::__field36),
                            b"prefers_home_indicator_hidden" =>
                                _serde::__private228::Ok(__Field::__field37),
                            b"prefers_status_bar_hidden" =>
                                _serde::__private228::Ok(__Field::__field38),
                            b"preferred_screen_edges_deferring_system_gestures" =>
                                _serde::__private228::Ok(__Field::__field39),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<Window>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = Window;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct Window")
                    }
                    #[inline]
                    fn visit_seq<__A>(self, mut __seq: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::SeqAccess<'de> {
                        let __field0 =
                            match _serde::de::SeqAccess::next_element::<PresentMode>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<WindowMode>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<WindowPosition>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field3 =
                            match _serde::de::SeqAccess::next_element::<WindowResolution>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field4 =
                            match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(4usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field5 =
                            match _serde::de::SeqAccess::next_element::<Option<String>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(5usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field6 =
                            match _serde::de::SeqAccess::next_element::<CompositeAlphaMode>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(6usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field7 =
                            match _serde::de::SeqAccess::next_element::<WindowResizeConstraints>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(7usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field8 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(8usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field9 =
                            match _serde::de::SeqAccess::next_element::<EnabledButtons>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(9usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field10 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(10usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field11 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(11usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field12 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(12usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field13 =
                            match _serde::de::SeqAccess::next_element::<WindowLevel>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(13usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field14 =
                            match _serde::de::SeqAccess::next_element::<Option<String>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(14usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field15 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(15usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field16 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(16usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field17 =
                            match _serde::de::SeqAccess::next_element::<InternalWindowState>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(17usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field18 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(18usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field19 =
                            match _serde::de::SeqAccess::next_element::<Vec2>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(19usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field20 =
                            match _serde::de::SeqAccess::next_element::<Option<WindowTheme>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(20usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field21 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(21usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field22 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(22usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field23 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(23usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field24 =
                            match _serde::de::SeqAccess::next_element::<Option<NonZero<u32>>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(24usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field25 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(25usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field26 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(26usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field27 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(27usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field28 =
                            match _serde::de::SeqAccess::next_element::<Option<(u8,
                                            u8)>>(&mut __seq)? {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(28usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field29 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(29usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field30 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(30usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field31 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(31usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field32 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(32usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field33 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(33usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field34 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(34usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field35 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(35usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field36 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(36usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field37 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(37usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field38 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(38usize,
                                                &"struct Window with 40 elements")),
                            };
                        let __field39 =
                            match _serde::de::SeqAccess::next_element::<ScreenEdge>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(39usize,
                                                &"struct Window with 40 elements")),
                            };
                        _serde::__private228::Ok(Window {
                                present_mode: __field0,
                                mode: __field1,
                                position: __field2,
                                resolution: __field3,
                                title: __field4,
                                name: __field5,
                                composite_alpha_mode: __field6,
                                resize_constraints: __field7,
                                resizable: __field8,
                                enabled_buttons: __field9,
                                decorations: __field10,
                                transparent: __field11,
                                focused: __field12,
                                window_level: __field13,
                                canvas: __field14,
                                fit_canvas_to_parent: __field15,
                                prevent_default_event_handling: __field16,
                                internal: __field17,
                                ime_enabled: __field18,
                                ime_position: __field19,
                                window_theme: __field20,
                                visible: __field21,
                                skip_taskbar: __field22,
                                clip_children: __field23,
                                desired_maximum_frame_latency: __field24,
                                recognize_pinch_gesture: __field25,
                                recognize_rotation_gesture: __field26,
                                recognize_doubletap_gesture: __field27,
                                recognize_pan_gesture: __field28,
                                movable_by_window_background: __field29,
                                fullsize_content_view: __field30,
                                has_shadow: __field31,
                                titlebar_shown: __field32,
                                titlebar_transparent: __field33,
                                titlebar_show_title: __field34,
                                titlebar_show_buttons: __field35,
                                borderless_game: __field36,
                                prefers_home_indicator_hidden: __field37,
                                prefers_status_bar_hidden: __field38,
                                preferred_screen_edges_deferring_system_gestures: __field39,
                            })
                    }
                    #[inline]
                    fn visit_map<__A>(self, mut __map: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::MapAccess<'de> {
                        let mut __field0:
                                _serde::__private228::Option<PresentMode> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<WindowMode> =
                            _serde::__private228::None;
                        let mut __field2:
                                _serde::__private228::Option<WindowPosition> =
                            _serde::__private228::None;
                        let mut __field3:
                                _serde::__private228::Option<WindowResolution> =
                            _serde::__private228::None;
                        let mut __field4: _serde::__private228::Option<String> =
                            _serde::__private228::None;
                        let mut __field5:
                                _serde::__private228::Option<Option<String>> =
                            _serde::__private228::None;
                        let mut __field6:
                                _serde::__private228::Option<CompositeAlphaMode> =
                            _serde::__private228::None;
                        let mut __field7:
                                _serde::__private228::Option<WindowResizeConstraints> =
                            _serde::__private228::None;
                        let mut __field8: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field9:
                                _serde::__private228::Option<EnabledButtons> =
                            _serde::__private228::None;
                        let mut __field10: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field11: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field12: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field13:
                                _serde::__private228::Option<WindowLevel> =
                            _serde::__private228::None;
                        let mut __field14:
                                _serde::__private228::Option<Option<String>> =
                            _serde::__private228::None;
                        let mut __field15: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field16: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field17:
                                _serde::__private228::Option<InternalWindowState> =
                            _serde::__private228::None;
                        let mut __field18: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field19: _serde::__private228::Option<Vec2> =
                            _serde::__private228::None;
                        let mut __field20:
                                _serde::__private228::Option<Option<WindowTheme>> =
                            _serde::__private228::None;
                        let mut __field21: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field22: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field23: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field24:
                                _serde::__private228::Option<Option<NonZero<u32>>> =
                            _serde::__private228::None;
                        let mut __field25: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field26: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field27: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field28:
                                _serde::__private228::Option<Option<(u8, u8)>> =
                            _serde::__private228::None;
                        let mut __field29: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field30: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field31: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field32: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field33: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field34: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field35: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field36: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field37: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field38: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field39:
                                _serde::__private228::Option<ScreenEdge> =
                            _serde::__private228::None;
                        while let _serde::__private228::Some(__key) =
                                _serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
                            match __key {
                                __Field::__field0 => {
                                    if _serde::__private228::Option::is_some(&__field0) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("present_mode"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<PresentMode>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("mode"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<WindowMode>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("position"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<WindowPosition>(&mut __map)?);
                                }
                                __Field::__field3 => {
                                    if _serde::__private228::Option::is_some(&__field3) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("resolution"));
                                    }
                                    __field3 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<WindowResolution>(&mut __map)?);
                                }
                                __Field::__field4 => {
                                    if _serde::__private228::Option::is_some(&__field4) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("title"));
                                    }
                                    __field4 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
                                }
                                __Field::__field5 => {
                                    if _serde::__private228::Option::is_some(&__field5) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("name"));
                                    }
                                    __field5 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<String>>(&mut __map)?);
                                }
                                __Field::__field6 => {
                                    if _serde::__private228::Option::is_some(&__field6) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("composite_alpha_mode"));
                                    }
                                    __field6 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<CompositeAlphaMode>(&mut __map)?);
                                }
                                __Field::__field7 => {
                                    if _serde::__private228::Option::is_some(&__field7) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("resize_constraints"));
                                    }
                                    __field7 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<WindowResizeConstraints>(&mut __map)?);
                                }
                                __Field::__field8 => {
                                    if _serde::__private228::Option::is_some(&__field8) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("resizable"));
                                    }
                                    __field8 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field9 => {
                                    if _serde::__private228::Option::is_some(&__field9) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("enabled_buttons"));
                                    }
                                    __field9 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<EnabledButtons>(&mut __map)?);
                                }
                                __Field::__field10 => {
                                    if _serde::__private228::Option::is_some(&__field10) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("decorations"));
                                    }
                                    __field10 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field11 => {
                                    if _serde::__private228::Option::is_some(&__field11) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("transparent"));
                                    }
                                    __field11 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field12 => {
                                    if _serde::__private228::Option::is_some(&__field12) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("focused"));
                                    }
                                    __field12 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field13 => {
                                    if _serde::__private228::Option::is_some(&__field13) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("window_level"));
                                    }
                                    __field13 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<WindowLevel>(&mut __map)?);
                                }
                                __Field::__field14 => {
                                    if _serde::__private228::Option::is_some(&__field14) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("canvas"));
                                    }
                                    __field14 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<String>>(&mut __map)?);
                                }
                                __Field::__field15 => {
                                    if _serde::__private228::Option::is_some(&__field15) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("fit_canvas_to_parent"));
                                    }
                                    __field15 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field16 => {
                                    if _serde::__private228::Option::is_some(&__field16) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("prevent_default_event_handling"));
                                    }
                                    __field16 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field17 => {
                                    if _serde::__private228::Option::is_some(&__field17) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("internal"));
                                    }
                                    __field17 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<InternalWindowState>(&mut __map)?);
                                }
                                __Field::__field18 => {
                                    if _serde::__private228::Option::is_some(&__field18) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("ime_enabled"));
                                    }
                                    __field18 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field19 => {
                                    if _serde::__private228::Option::is_some(&__field19) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("ime_position"));
                                    }
                                    __field19 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec2>(&mut __map)?);
                                }
                                __Field::__field20 => {
                                    if _serde::__private228::Option::is_some(&__field20) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("window_theme"));
                                    }
                                    __field20 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<WindowTheme>>(&mut __map)?);
                                }
                                __Field::__field21 => {
                                    if _serde::__private228::Option::is_some(&__field21) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("visible"));
                                    }
                                    __field21 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field22 => {
                                    if _serde::__private228::Option::is_some(&__field22) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("skip_taskbar"));
                                    }
                                    __field22 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field23 => {
                                    if _serde::__private228::Option::is_some(&__field23) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("clip_children"));
                                    }
                                    __field23 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field24 => {
                                    if _serde::__private228::Option::is_some(&__field24) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("desired_maximum_frame_latency"));
                                    }
                                    __field24 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<NonZero<u32>>>(&mut __map)?);
                                }
                                __Field::__field25 => {
                                    if _serde::__private228::Option::is_some(&__field25) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("recognize_pinch_gesture"));
                                    }
                                    __field25 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field26 => {
                                    if _serde::__private228::Option::is_some(&__field26) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("recognize_rotation_gesture"));
                                    }
                                    __field26 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field27 => {
                                    if _serde::__private228::Option::is_some(&__field27) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("recognize_doubletap_gesture"));
                                    }
                                    __field27 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field28 => {
                                    if _serde::__private228::Option::is_some(&__field28) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("recognize_pan_gesture"));
                                    }
                                    __field28 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<(u8,
                                                        u8)>>(&mut __map)?);
                                }
                                __Field::__field29 => {
                                    if _serde::__private228::Option::is_some(&__field29) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("movable_by_window_background"));
                                    }
                                    __field29 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field30 => {
                                    if _serde::__private228::Option::is_some(&__field30) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("fullsize_content_view"));
                                    }
                                    __field30 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field31 => {
                                    if _serde::__private228::Option::is_some(&__field31) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("has_shadow"));
                                    }
                                    __field31 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field32 => {
                                    if _serde::__private228::Option::is_some(&__field32) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("titlebar_shown"));
                                    }
                                    __field32 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field33 => {
                                    if _serde::__private228::Option::is_some(&__field33) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("titlebar_transparent"));
                                    }
                                    __field33 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field34 => {
                                    if _serde::__private228::Option::is_some(&__field34) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("titlebar_show_title"));
                                    }
                                    __field34 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field35 => {
                                    if _serde::__private228::Option::is_some(&__field35) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("titlebar_show_buttons"));
                                    }
                                    __field35 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field36 => {
                                    if _serde::__private228::Option::is_some(&__field36) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("borderless_game"));
                                    }
                                    __field36 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field37 => {
                                    if _serde::__private228::Option::is_some(&__field37) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("prefers_home_indicator_hidden"));
                                    }
                                    __field37 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field38 => {
                                    if _serde::__private228::Option::is_some(&__field38) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("prefers_status_bar_hidden"));
                                    }
                                    __field38 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field39 => {
                                    if _serde::__private228::Option::is_some(&__field39) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("preferred_screen_edges_deferring_system_gestures"));
                                    }
                                    __field39 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<ScreenEdge>(&mut __map)?);
                                }
                                _ => {
                                    let _ =
                                        _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
                                }
                            }
                        }
                        let __field0 =
                            match __field0 {
                                _serde::__private228::Some(__field0) => __field0,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("present_mode")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("mode")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("position")?,
                            };
                        let __field3 =
                            match __field3 {
                                _serde::__private228::Some(__field3) => __field3,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("resolution")?,
                            };
                        let __field4 =
                            match __field4 {
                                _serde::__private228::Some(__field4) => __field4,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("title")?,
                            };
                        let __field5 =
                            match __field5 {
                                _serde::__private228::Some(__field5) => __field5,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("name")?,
                            };
                        let __field6 =
                            match __field6 {
                                _serde::__private228::Some(__field6) => __field6,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("composite_alpha_mode")?,
                            };
                        let __field7 =
                            match __field7 {
                                _serde::__private228::Some(__field7) => __field7,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("resize_constraints")?,
                            };
                        let __field8 =
                            match __field8 {
                                _serde::__private228::Some(__field8) => __field8,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("resizable")?,
                            };
                        let __field9 =
                            match __field9 {
                                _serde::__private228::Some(__field9) => __field9,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("enabled_buttons")?,
                            };
                        let __field10 =
                            match __field10 {
                                _serde::__private228::Some(__field10) => __field10,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("decorations")?,
                            };
                        let __field11 =
                            match __field11 {
                                _serde::__private228::Some(__field11) => __field11,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("transparent")?,
                            };
                        let __field12 =
                            match __field12 {
                                _serde::__private228::Some(__field12) => __field12,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("focused")?,
                            };
                        let __field13 =
                            match __field13 {
                                _serde::__private228::Some(__field13) => __field13,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("window_level")?,
                            };
                        let __field14 =
                            match __field14 {
                                _serde::__private228::Some(__field14) => __field14,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("canvas")?,
                            };
                        let __field15 =
                            match __field15 {
                                _serde::__private228::Some(__field15) => __field15,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("fit_canvas_to_parent")?,
                            };
                        let __field16 =
                            match __field16 {
                                _serde::__private228::Some(__field16) => __field16,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("prevent_default_event_handling")?,
                            };
                        let __field17 =
                            match __field17 {
                                _serde::__private228::Some(__field17) => __field17,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("internal")?,
                            };
                        let __field18 =
                            match __field18 {
                                _serde::__private228::Some(__field18) => __field18,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("ime_enabled")?,
                            };
                        let __field19 =
                            match __field19 {
                                _serde::__private228::Some(__field19) => __field19,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("ime_position")?,
                            };
                        let __field20 =
                            match __field20 {
                                _serde::__private228::Some(__field20) => __field20,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("window_theme")?,
                            };
                        let __field21 =
                            match __field21 {
                                _serde::__private228::Some(__field21) => __field21,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("visible")?,
                            };
                        let __field22 =
                            match __field22 {
                                _serde::__private228::Some(__field22) => __field22,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("skip_taskbar")?,
                            };
                        let __field23 =
                            match __field23 {
                                _serde::__private228::Some(__field23) => __field23,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("clip_children")?,
                            };
                        let __field24 =
                            match __field24 {
                                _serde::__private228::Some(__field24) => __field24,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("desired_maximum_frame_latency")?,
                            };
                        let __field25 =
                            match __field25 {
                                _serde::__private228::Some(__field25) => __field25,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("recognize_pinch_gesture")?,
                            };
                        let __field26 =
                            match __field26 {
                                _serde::__private228::Some(__field26) => __field26,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("recognize_rotation_gesture")?,
                            };
                        let __field27 =
                            match __field27 {
                                _serde::__private228::Some(__field27) => __field27,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("recognize_doubletap_gesture")?,
                            };
                        let __field28 =
                            match __field28 {
                                _serde::__private228::Some(__field28) => __field28,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("recognize_pan_gesture")?,
                            };
                        let __field29 =
                            match __field29 {
                                _serde::__private228::Some(__field29) => __field29,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("movable_by_window_background")?,
                            };
                        let __field30 =
                            match __field30 {
                                _serde::__private228::Some(__field30) => __field30,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("fullsize_content_view")?,
                            };
                        let __field31 =
                            match __field31 {
                                _serde::__private228::Some(__field31) => __field31,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("has_shadow")?,
                            };
                        let __field32 =
                            match __field32 {
                                _serde::__private228::Some(__field32) => __field32,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("titlebar_shown")?,
                            };
                        let __field33 =
                            match __field33 {
                                _serde::__private228::Some(__field33) => __field33,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("titlebar_transparent")?,
                            };
                        let __field34 =
                            match __field34 {
                                _serde::__private228::Some(__field34) => __field34,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("titlebar_show_title")?,
                            };
                        let __field35 =
                            match __field35 {
                                _serde::__private228::Some(__field35) => __field35,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("titlebar_show_buttons")?,
                            };
                        let __field36 =
                            match __field36 {
                                _serde::__private228::Some(__field36) => __field36,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("borderless_game")?,
                            };
                        let __field37 =
                            match __field37 {
                                _serde::__private228::Some(__field37) => __field37,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("prefers_home_indicator_hidden")?,
                            };
                        let __field38 =
                            match __field38 {
                                _serde::__private228::Some(__field38) => __field38,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("prefers_status_bar_hidden")?,
                            };
                        let __field39 =
                            match __field39 {
                                _serde::__private228::Some(__field39) => __field39,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("preferred_screen_edges_deferring_system_gestures")?,
                            };
                        _serde::__private228::Ok(Window {
                                present_mode: __field0,
                                mode: __field1,
                                position: __field2,
                                resolution: __field3,
                                title: __field4,
                                name: __field5,
                                composite_alpha_mode: __field6,
                                resize_constraints: __field7,
                                resizable: __field8,
                                enabled_buttons: __field9,
                                decorations: __field10,
                                transparent: __field11,
                                focused: __field12,
                                window_level: __field13,
                                canvas: __field14,
                                fit_canvas_to_parent: __field15,
                                prevent_default_event_handling: __field16,
                                internal: __field17,
                                ime_enabled: __field18,
                                ime_position: __field19,
                                window_theme: __field20,
                                visible: __field21,
                                skip_taskbar: __field22,
                                clip_children: __field23,
                                desired_maximum_frame_latency: __field24,
                                recognize_pinch_gesture: __field25,
                                recognize_rotation_gesture: __field26,
                                recognize_doubletap_gesture: __field27,
                                recognize_pan_gesture: __field28,
                                movable_by_window_background: __field29,
                                fullsize_content_view: __field30,
                                has_shadow: __field31,
                                titlebar_shown: __field32,
                                titlebar_transparent: __field33,
                                titlebar_show_title: __field34,
                                titlebar_show_buttons: __field35,
                                borderless_game: __field36,
                                prefers_home_indicator_hidden: __field37,
                                prefers_status_bar_hidden: __field38,
                                preferred_screen_edges_deferring_system_gestures: __field39,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["present_mode", "mode", "position", "resolution", "title",
                                "name", "composite_alpha_mode", "resize_constraints",
                                "resizable", "enabled_buttons", "decorations",
                                "transparent", "focused", "window_level", "canvas",
                                "fit_canvas_to_parent", "prevent_default_event_handling",
                                "internal", "ime_enabled", "ime_position", "window_theme",
                                "visible", "skip_taskbar", "clip_children",
                                "desired_maximum_frame_latency", "recognize_pinch_gesture",
                                "recognize_rotation_gesture", "recognize_doubletap_gesture",
                                "recognize_pan_gesture", "movable_by_window_background",
                                "fullsize_content_view", "has_shadow", "titlebar_shown",
                                "titlebar_transparent", "titlebar_show_title",
                                "titlebar_show_buttons", "borderless_game",
                                "prefers_home_indicator_hidden",
                                "prefers_status_bar_hidden",
                                "preferred_screen_edges_deferring_system_gestures"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "Window", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<Window>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
159#[cfg_attr(
160    all(feature = "serialize", feature = "bevy_reflect"),
161    reflect(Serialize, Deserialize)
162)]
163#[require(CursorOptions)]
164pub struct Window {
165    /// What presentation mode to give the window.
166    pub present_mode: PresentMode,
167    /// Which fullscreen or windowing mode should be used.
168    pub mode: WindowMode,
169    /// Where the window should be placed.
170    pub position: WindowPosition,
171    /// What resolution the window should have.
172    pub resolution: WindowResolution,
173    /// Stores the title of the window.
174    pub title: String,
175    /// Stores the application ID (on **`Wayland`**), `WM_CLASS` (on **`X11`**) or window class name (on **`Windows`**) of the window.
176    ///
177    /// For details about application ID conventions, see the [Desktop Entry Spec](https://specifications.freedesktop.org/desktop-entry/latest/file-naming.html#desktop-file-id).
178    /// For details about `WM_CLASS`, see the [X11 Manual Pages](https://www.x.org/releases/current/doc/man/man3/XAllocClassHint.3.xhtml).
179    /// For details about **`Windows`**'s window class names, see [About Window Classes](https://learn.microsoft.com/en-us/windows/win32/winmsg/about-window-classes).
180    ///
181    /// ## Platform-specific
182    ///
183    /// - **`Windows`**: Can only be set while building the window, setting the window's window class name.
184    /// - **`Wayland`**: Can only be set while building the window, setting the window's application ID.
185    /// - **`X11`**: Can only be set while building the window, setting the window's `WM_CLASS`.
186    /// - **`macOS`**, **`iOS`**, **`Android`**, and **`Web`**: not applicable.
187    ///
188    /// Notes: Changing this field during runtime will have no effect for now.
189    pub name: Option<String>,
190    /// How the alpha channel of textures should be handled while compositing.
191    pub composite_alpha_mode: CompositeAlphaMode,
192    /// The limits of the window's logical size
193    /// (found in its [`resolution`](WindowResolution)) when resizing.
194    pub resize_constraints: WindowResizeConstraints,
195    /// Should the window be resizable?
196    ///
197    /// Note: This does not stop the program from fullscreening/setting
198    /// the size programmatically.
199    pub resizable: bool,
200    /// Specifies which window control buttons should be enabled.
201    ///
202    /// ## Platform-specific
203    ///
204    /// **`iOS`**, **`Android`**, and the **`Web`** do not have window control buttons.
205    ///
206    /// On some **`Linux`** environments these values have no effect.
207    pub enabled_buttons: EnabledButtons,
208    /// Should the window have decorations enabled?
209    ///
210    /// (Decorations are the minimize, maximize, and close buttons on desktop apps)
211    ///
212    /// ## Platform-specific
213    ///
214    /// **`iOS`**, **`Android`**, and the **`Web`** do not have decorations.
215    pub decorations: bool,
216    /// Should the window be transparent?
217    ///
218    /// Defines whether the background of the window should be transparent.
219    ///
220    /// ## Platform-specific
221    /// - iOS / Android / Web: Unsupported.
222    /// - macOS: Not working as expected.
223    ///
224    /// macOS transparent works with winit out of the box, so this issue might be related to: <https://github.com/gfx-rs/wgpu/issues/687>.
225    /// You should also set the window `composite_alpha_mode` to `CompositeAlphaMode::PostMultiplied`.
226    pub transparent: bool,
227    /// Get/set whether the window is focused.
228    ///
229    /// It cannot be set unfocused after creation.
230    ///
231    /// ## Platform-specific
232    ///
233    /// - iOS / Android / X11 / Wayland: Spawning unfocused is
234    ///   [not supported](https://docs.rs/winit/latest/winit/window/struct.WindowAttributes.html#method.with_active).
235    /// - iOS / Android / Web / Wayland: Setting focused after creation is
236    ///   [not supported](https://docs.rs/winit/latest/winit/window/struct.Window.html#method.focus_window).
237    pub focused: bool,
238    /// Where should the window appear relative to other overlapping window.
239    ///
240    /// ## Platform-specific
241    ///
242    /// - iOS / Android / Web / Wayland: Unsupported.
243    pub window_level: WindowLevel,
244    /// The "html canvas" element selector.
245    ///
246    /// If set, this selector will be used to find a matching html canvas element,
247    /// rather than creating a new one.
248    /// Uses the [CSS selector format](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector).
249    ///
250    /// This value has no effect on non-web platforms.
251    pub canvas: Option<String>,
252    /// Whether or not to fit the canvas element's size to its parent element's size.
253    ///
254    /// **Warning**: this will not behave as expected for parents that set their size according to the size of their
255    /// children. This creates a "feedback loop" that will result in the canvas growing on each resize. When using this
256    /// feature, ensure the parent's size is not affected by its children.
257    ///
258    /// This value has no effect on non-web platforms.
259    pub fit_canvas_to_parent: bool,
260    /// Whether or not to stop events from propagating out of the canvas element
261    ///
262    ///  When `true`, this will prevent common browser hotkeys like F5, F12, Ctrl+R, tab, etc.
263    /// from performing their default behavior while the bevy app has focus.
264    ///
265    /// This value has no effect on non-web platforms.
266    pub prevent_default_event_handling: bool,
267    /// Stores internal state that isn't directly accessible.
268    pub internal: InternalWindowState,
269    /// Should the window use Input Method Editor?
270    ///
271    /// If enabled, the window will receive [`Ime`](crate::Ime) events instead of
272    /// `KeyboardInput` from `bevy_input`.
273    ///
274    /// IME should be enabled during text input, but not when you expect to get the exact key pressed.
275    ///
276    ///  ## Platform-specific
277    ///
278    /// - iOS / Android / Web: Unsupported.
279    pub ime_enabled: bool,
280    /// Sets location of IME candidate box in client area coordinates relative to the top left.
281    ///
282    ///  ## Platform-specific
283    ///
284    /// - iOS / Android / Web: Unsupported.
285    pub ime_position: Vec2,
286    /// Sets a specific theme for the window.
287    ///
288    /// If `None` is provided, the window will use the system theme.
289    ///
290    /// ## Platform-specific
291    ///
292    /// - iOS / Android / Web: Unsupported.
293    pub window_theme: Option<WindowTheme>,
294    /// Sets the window's visibility.
295    ///
296    /// If `false`, this will hide the window completely, it won't appear on the screen or in the task bar.
297    /// If `true`, this will show the window.
298    /// Note that this doesn't change its focused or minimized state.
299    ///
300    /// ## Platform-specific
301    ///
302    /// - **Android / Wayland / Web:** Unsupported.
303    pub visible: bool,
304    /// Sets whether the window should be shown in the taskbar.
305    ///
306    /// If `true`, the window will not appear in the taskbar.
307    /// If `false`, the window will appear in the taskbar.
308    ///
309    /// Note that this will only take effect on window creation.
310    ///
311    /// ## Platform-specific
312    ///
313    /// - Only supported on Windows.
314    pub skip_taskbar: bool,
315    /// Sets whether the window should draw over its child windows.
316    ///
317    /// If `true`, the window excludes drawing over areas obscured by child windows.
318    /// If `false`, the window can draw over child windows.
319    ///
320    /// ## Platform-specific
321    ///
322    /// - Only supported on Windows.
323    pub clip_children: bool,
324    /// Optional hint given to the rendering API regarding the maximum number of queued frames admissible on the GPU.
325    ///
326    /// Given values are usually within the 1-3 range. If not provided, this will default to 2.
327    ///
328    /// See [`wgpu::SurfaceConfiguration::desired_maximum_frame_latency`].
329    ///
330    /// [`wgpu::SurfaceConfiguration::desired_maximum_frame_latency`]:
331    /// https://docs.rs/wgpu/latest/wgpu/type.SurfaceConfiguration.html#structfield.desired_maximum_frame_latency
332    pub desired_maximum_frame_latency: Option<NonZero<u32>>,
333    /// Sets whether this window recognizes [`PinchGesture`](https://docs.rs/bevy/latest/bevy/input/gestures/struct.PinchGesture.html)
334    ///
335    /// ## Platform-specific
336    ///
337    /// - Only used on iOS.
338    /// - On macOS, they are recognized by default and can't be disabled.
339    pub recognize_pinch_gesture: bool,
340    /// Sets whether this window recognizes [`RotationGesture`](https://docs.rs/bevy/latest/bevy/input/gestures/struct.RotationGesture.html)
341    ///
342    /// ## Platform-specific
343    ///
344    /// - Only used on iOS.
345    /// - On macOS, they are recognized by default and can't be disabled.
346    pub recognize_rotation_gesture: bool,
347    /// Sets whether this window recognizes [`DoubleTapGesture`](https://docs.rs/bevy/latest/bevy/input/gestures/struct.DoubleTapGesture.html)
348    ///
349    /// ## Platform-specific
350    ///
351    /// - Only used on iOS.
352    /// - On macOS, they are recognized by default and can't be disabled.
353    pub recognize_doubletap_gesture: bool,
354    /// Sets whether this window recognizes [`PanGesture`](https://docs.rs/bevy/latest/bevy/input/gestures/struct.PanGesture.html),
355    /// with a number of fingers between the first value and the last.
356    ///
357    /// ## Platform-specific
358    ///
359    /// - Only used on iOS.
360    pub recognize_pan_gesture: Option<(u8, u8)>,
361    /// Enables click-and-drag behavior for the entire window, not just the titlebar.
362    ///
363    /// Corresponds to [`WindowAttributesExtMacOS::with_movable_by_window_background`].
364    ///
365    /// # Platform-specific
366    ///
367    /// - Only used on macOS.
368    ///
369    /// [`WindowAttributesExtMacOS::with_movable_by_window_background`]: https://docs.rs/winit/latest/x86_64-apple-darwin/winit/platform/macos/trait.WindowAttributesExtMacOS.html#tymethod.with_movable_by_window_background
370    pub movable_by_window_background: bool,
371    /// Makes the window content appear behind the titlebar.
372    ///
373    /// Corresponds to [`WindowAttributesExtMacOS::with_fullsize_content_view`].
374    ///
375    /// For apps which want to render the window buttons on top of the apps
376    /// itself, this should be enabled along with [`titlebar_transparent`].
377    ///
378    /// # Platform-specific
379    ///
380    /// - Only used on macOS.
381    ///
382    /// [`WindowAttributesExtMacOS::with_fullsize_content_view`]: https://docs.rs/winit/latest/x86_64-apple-darwin/winit/platform/macos/trait.WindowAttributesExtMacOS.html#tymethod.with_fullsize_content_view
383    /// [`titlebar_transparent`]: Self::titlebar_transparent
384    pub fullsize_content_view: bool,
385    /// Toggles drawing the drop shadow behind the window.
386    ///
387    /// Corresponds to [`WindowAttributesExtMacOS::with_has_shadow`].
388    ///
389    /// # Platform-specific
390    ///
391    /// - Only used on macOS.
392    ///
393    /// [`WindowAttributesExtMacOS::with_has_shadow`]: https://docs.rs/winit/latest/x86_64-apple-darwin/winit/platform/macos/trait.WindowAttributesExtMacOS.html#tymethod.with_has_shadow
394    pub has_shadow: bool,
395    /// Toggles drawing the titlebar.
396    ///
397    /// Corresponds to [`WindowAttributesExtMacOS::with_titlebar_hidden`].
398    ///
399    /// # Platform-specific
400    ///
401    /// - Only used on macOS.
402    ///
403    /// [`WindowAttributesExtMacOS::with_titlebar_hidden`]: https://docs.rs/winit/latest/x86_64-apple-darwin/winit/platform/macos/trait.WindowAttributesExtMacOS.html#tymethod.with_titlebar_hidden
404    pub titlebar_shown: bool,
405    /// Makes the titlebar transparent, allowing the app content to appear behind it.
406    ///
407    /// Corresponds to [`WindowAttributesExtMacOS::with_titlebar_transparent`].
408    ///
409    /// # Platform-specific
410    ///
411    /// - Only used on macOS.
412    ///
413    /// [`WindowAttributesExtMacOS::with_titlebar_transparent`]: https://docs.rs/winit/latest/x86_64-apple-darwin/winit/platform/macos/trait.WindowAttributesExtMacOS.html#tymethod.with_titlebar_transparent
414    pub titlebar_transparent: bool,
415    /// Toggles showing the window title.
416    ///
417    /// Corresponds to [`WindowAttributesExtMacOS::with_title_hidden`].
418    ///
419    /// # Platform-specific
420    ///
421    /// - Only used on macOS.
422    ///
423    /// [`WindowAttributesExtMacOS::with_title_hidden`]: https://docs.rs/winit/latest/x86_64-apple-darwin/winit/platform/macos/trait.WindowAttributesExtMacOS.html#tymethod.with_title_hidden
424    pub titlebar_show_title: bool,
425    /// Toggles showing the traffic light window buttons.
426    ///
427    /// Corresponds to [`WindowAttributesExtMacOS::with_titlebar_buttons_hidden`].
428    ///
429    /// # Platform-specific
430    ///
431    /// - Only used on macOS.
432    ///
433    /// [`WindowAttributesExtMacOS::with_titlebar_buttons_hidden`]: https://docs.rs/winit/latest/x86_64-apple-darwin/winit/platform/macos/trait.WindowAttributesExtMacOS.html#tymethod.with_titlebar_buttons_hidden
434    pub titlebar_show_buttons: bool,
435    /// Hides the dock and menu bar when a borderless fullscreen window is active.
436    ///
437    /// Corresponds to [`WindowAttributesExtMacOS::with_borderless_game`].
438    ///
439    /// Defaults to `true` as this is the expected behavior for games.
440    ///
441    /// # Platform-specific
442    ///
443    /// - Only used on macOS.
444    ///
445    /// [`WindowAttributesExtMacOS::with_borderless_game`]: https://docs.rs/winit/latest/x86_64-apple-darwin/winit/platform/macos/trait.WindowAttributesExtMacOS.html#tymethod.with_borderless_game
446    pub borderless_game: bool,
447    /// Sets whether the Window prefers the home indicator hidden.
448    ///
449    /// Corresponds to [`WindowAttributesExtIOS::with_prefers_home_indicator_hidden`].
450    ///
451    /// # Platform-specific
452    ///
453    /// - Only used on iOS.
454    ///
455    /// [`WindowAttributesExtIOS::with_prefers_home_indicator_hidden`]: https://docs.rs/winit/latest/x86_64-apple-darwin/winit/platform/ios/trait.WindowAttributesExtIOS.html#tymethod.with_prefers_home_indicator_hidden
456    pub prefers_home_indicator_hidden: bool,
457    /// Sets whether the Window prefers the status bar hidden.
458    ///
459    /// Corresponds to [`WindowAttributesExtIOS::with_prefers_status_bar_hidden`].
460    ///
461    /// # Platform-specific
462    ///
463    /// - Only used on iOS.
464    ///
465    /// [`WindowAttributesExtIOS::with_prefers_status_bar_hidden`]: https://docs.rs/winit/latest/x86_64-apple-darwin/winit/platform/ios/trait.WindowAttributesExtIOS.html#tymethod.with_prefers_status_bar_hidden
466    pub prefers_status_bar_hidden: bool,
467    /// Sets screen edges for which you want your gestures to take precedence
468    /// over the system gestures.
469    ///
470    /// Corresponds to [`WindowAttributesExtIOS::with_preferred_screen_edges_deferring_system_gestures`].
471    ///
472    /// # Platform-specific
473    ///
474    /// - Only used on iOS.
475    ///
476    /// [`WindowAttributesExtIOS::with_preferred_screen_edges_deferring_system_gestures`]: https://docs.rs/winit/latest/x86_64-apple-darwin/winit/platform/ios/trait.WindowAttributesExtIOS.html#tymethod.with_preferred_screen_edges_deferring_system_gestures
477    pub preferred_screen_edges_deferring_system_gestures: ScreenEdge,
478}
479
480impl Default for Window {
481    fn default() -> Self {
482        Self {
483            title: DEFAULT_WINDOW_TITLE.to_owned(),
484            name: None,
485            present_mode: Default::default(),
486            mode: Default::default(),
487            position: Default::default(),
488            resolution: Default::default(),
489            internal: Default::default(),
490            composite_alpha_mode: Default::default(),
491            resize_constraints: Default::default(),
492            ime_enabled: Default::default(),
493            ime_position: Default::default(),
494            resizable: true,
495            enabled_buttons: Default::default(),
496            decorations: true,
497            transparent: false,
498            focused: true,
499            window_level: Default::default(),
500            fit_canvas_to_parent: false,
501            prevent_default_event_handling: true,
502            canvas: None,
503            window_theme: None,
504            visible: true,
505            skip_taskbar: false,
506            clip_children: true,
507            desired_maximum_frame_latency: None,
508            recognize_pinch_gesture: false,
509            recognize_rotation_gesture: false,
510            recognize_doubletap_gesture: false,
511            recognize_pan_gesture: None,
512            movable_by_window_background: false,
513            fullsize_content_view: false,
514            has_shadow: true,
515            titlebar_shown: true,
516            titlebar_transparent: false,
517            titlebar_show_title: true,
518            titlebar_show_buttons: true,
519            borderless_game: true,
520            prefers_home_indicator_hidden: false,
521            prefers_status_bar_hidden: false,
522            preferred_screen_edges_deferring_system_gestures: Default::default(),
523        }
524    }
525}
526
527impl Window {
528    /// Setting to true will attempt to maximize the window.
529    ///
530    /// Setting to false will attempt to un-maximize the window.
531    pub fn set_maximized(&mut self, maximized: bool) {
532        self.internal.maximize_request = Some(maximized);
533    }
534
535    /// Setting to true will attempt to minimize the window.
536    ///
537    /// Setting to false will attempt to un-minimize the window.
538    pub fn set_minimized(&mut self, minimized: bool) {
539        self.internal.minimize_request = Some(minimized);
540    }
541
542    /// Calling this will attempt to start a drag-move of the window.
543    ///
544    /// There is no guarantee that this will work unless the left mouse button was
545    /// pressed immediately before this function was called.
546    pub fn start_drag_move(&mut self) {
547        self.internal.drag_move_request = true;
548    }
549
550    /// Calling this will attempt to start a drag-resize of the window.
551    ///
552    /// There is no guarantee that this will work unless the left mouse button was
553    /// pressed immediately before this function was called.
554    pub fn start_drag_resize(&mut self, direction: CompassOctant) {
555        self.internal.drag_resize_request = Some(direction);
556    }
557
558    /// The window's client area width in logical pixels.
559    ///
560    /// See [`WindowResolution`] for an explanation about logical/physical sizes.
561    #[inline]
562    pub fn width(&self) -> f32 {
563        self.resolution.width()
564    }
565
566    /// The window's client area height in logical pixels.
567    ///
568    /// See [`WindowResolution`] for an explanation about logical/physical sizes.
569    #[inline]
570    pub fn height(&self) -> f32 {
571        self.resolution.height()
572    }
573
574    /// The window's client size in logical pixels
575    ///
576    /// See [`WindowResolution`] for an explanation about logical/physical sizes.
577    #[inline]
578    pub fn size(&self) -> Vec2 {
579        self.resolution.size()
580    }
581
582    /// The window's client area width in physical pixels.
583    ///
584    /// See [`WindowResolution`] for an explanation about logical/physical sizes.
585    #[inline]
586    pub fn physical_width(&self) -> u32 {
587        self.resolution.physical_width()
588    }
589
590    /// The window's client area height in physical pixels.
591    ///
592    /// See [`WindowResolution`] for an explanation about logical/physical sizes.
593    #[inline]
594    pub fn physical_height(&self) -> u32 {
595        self.resolution.physical_height()
596    }
597
598    /// The window's client size in physical pixels
599    ///
600    /// See [`WindowResolution`] for an explanation about logical/physical sizes.
601    #[inline]
602    pub fn physical_size(&self) -> UVec2 {
603        self.resolution.physical_size()
604    }
605
606    /// The window's scale factor.
607    ///
608    /// Ratio of physical size to logical size, see [`WindowResolution`].
609    #[inline]
610    pub fn scale_factor(&self) -> f32 {
611        self.resolution.scale_factor()
612    }
613
614    /// The cursor position in this window in logical pixels.
615    ///
616    /// Returns `None` if the cursor is outside the window area.
617    ///
618    /// See [`WindowResolution`] for an explanation about logical/physical sizes.
619    #[inline]
620    pub fn cursor_position(&self) -> Option<Vec2> {
621        self.physical_cursor_position()
622            .map(|position| (position.as_dvec2() / self.scale_factor() as f64).as_vec2())
623    }
624
625    /// The cursor position in this window in physical pixels.
626    ///
627    /// Returns `None` if the cursor is outside the window area.
628    ///
629    /// See [`WindowResolution`] for an explanation about logical/physical sizes.
630    #[inline]
631    pub fn physical_cursor_position(&self) -> Option<Vec2> {
632        match self.internal.physical_cursor_position {
633            Some(position) => {
634                if position.x >= 0.
635                    && position.y >= 0.
636                    && position.x < self.physical_width() as f64
637                    && position.y < self.physical_height() as f64
638                {
639                    Some(position.as_vec2())
640                } else {
641                    None
642                }
643            }
644            None => None,
645        }
646    }
647
648    /// Set the cursor position in this window in logical pixels.
649    ///
650    /// See [`WindowResolution`] for an explanation about logical/physical sizes.
651    pub fn set_cursor_position(&mut self, position: Option<Vec2>) {
652        self.internal.physical_cursor_position =
653            position.map(|p| p.as_dvec2() * self.scale_factor() as f64);
654    }
655
656    /// Set the cursor position in this window in physical pixels.
657    ///
658    /// See [`WindowResolution`] for an explanation about logical/physical sizes.
659    pub fn set_physical_cursor_position(&mut self, position: Option<DVec2>) {
660        self.internal.physical_cursor_position = position;
661    }
662}
663
664/// The size limits on a [`Window`].
665///
666/// These values are measured in logical pixels (see [`WindowResolution`]), so the user's
667/// scale factor does affect the size limits on the window.
668///
669/// Please note that if the window is resizable, then when the window is
670/// maximized it may have a size outside of these limits. The functionality
671/// required to disable maximizing is not yet exposed by winit.
672#[derive(#[automatically_derived]
impl ::core::fmt::Debug for WindowResizeConstraints {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field4_finish(f,
            "WindowResizeConstraints", "min_width", &self.min_width,
            "min_height", &self.min_height, "max_width", &self.max_width,
            "max_height", &&self.max_height)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for WindowResizeConstraints {
    #[inline]
    fn clone(&self) -> WindowResizeConstraints {
        let _: ::core::clone::AssertParamIsClone<f32>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for WindowResizeConstraints { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for WindowResizeConstraints {
    #[inline]
    fn eq(&self, other: &WindowResizeConstraints) -> bool {
        self.min_width == other.min_width &&
                    self.min_height == other.min_height &&
                self.max_width == other.max_width &&
            self.max_height == other.max_height
    }
}PartialEq)]
673#[cfg_attr(
674    feature = "bevy_reflect",
675    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for WindowResizeConstraints
            where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectDefault, Self>();
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <f32 as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for WindowResizeConstraints where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[bevy_reflect::NamedField::new::<f32>("min_width"),
                                                bevy_reflect::NamedField::new::<f32>("min_height"),
                                                bevy_reflect::NamedField::new::<f32>("max_width"),
                                                bevy_reflect::NamedField::new::<f32>("max_height")]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for WindowResizeConstraints where  {
            fn type_path() -> &'static str {
                "bevy_window::window::WindowResizeConstraints"
            }
            fn short_type_path() -> &'static str { "WindowResizeConstraints" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("WindowResizeConstraints")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for WindowResizeConstraints where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<WindowResizeConstraints
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for WindowResizeConstraints where
            {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name {
                    "min_width" =>
                        ::core::option::Option::Some(&self.min_width),
                    "min_height" =>
                        ::core::option::Option::Some(&self.min_height),
                    "max_width" =>
                        ::core::option::Option::Some(&self.max_width),
                    "max_height" =>
                        ::core::option::Option::Some(&self.max_height),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name {
                    "min_width" =>
                        ::core::option::Option::Some(&mut self.min_width),
                    "min_height" =>
                        ::core::option::Option::Some(&mut self.min_height),
                    "max_width" =>
                        ::core::option::Option::Some(&mut self.max_width),
                    "max_height" =>
                        ::core::option::Option::Some(&mut self.max_height),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize => ::core::option::Option::Some(&self.min_width),
                    1usize => ::core::option::Option::Some(&self.min_height),
                    2usize => ::core::option::Option::Some(&self.max_width),
                    3usize => ::core::option::Option::Some(&self.max_height),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize => ::core::option::Option::Some(&mut self.min_width),
                    1usize =>
                        ::core::option::Option::Some(&mut self.min_height),
                    2usize => ::core::option::Option::Some(&mut self.max_width),
                    3usize =>
                        ::core::option::Option::Some(&mut self.max_height),
                    _ => ::core::option::Option::None,
                }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index {
                    0usize => ::core::option::Option::Some("min_width"),
                    1usize => ::core::option::Option::Some("min_height"),
                    2usize => ::core::option::Option::Some("max_width"),
                    3usize => ::core::option::Option::Some("max_height"),
                    _ => ::core::option::Option::None,
                }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name {
                    "min_width" => ::core::option::Option::Some(0usize),
                    "min_height" => ::core::option::Option::Some(1usize),
                    "max_width" => ::core::option::Option::Some(2usize),
                    "max_height" => ::core::option::Option::Some(3usize),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_len(&self) -> usize { 4usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                -> bevy_reflect::structs::DynamicStruct {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                dynamic.insert_boxed("min_width",
                    bevy_reflect::PartialReflect::to_dynamic(&self.min_width));
                dynamic.insert_boxed("min_height",
                    bevy_reflect::PartialReflect::to_dynamic(&self.min_height));
                dynamic.insert_boxed("max_width",
                    bevy_reflect::PartialReflect::to_dynamic(&self.max_width));
                dynamic.insert_boxed("max_height",
                    bevy_reflect::PartialReflect::to_dynamic(&self.max_height));
                dynamic
            }
        }
        impl bevy_reflect::PartialReflect for WindowResizeConstraints where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for WindowResizeConstraints where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let mut __this =
                        <Self as ::core::default::Default>::default();
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <f32 as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "min_width")?))() {
                        __this.min_width = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <f32 as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "min_height")?))() {
                        __this.min_height = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <f32 as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "max_width")?))() {
                        __this.max_width = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <f32 as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "max_height")?))() {
                        __this.max_height = __field;
                    }
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
676    reflect(Debug, PartialEq, Default, Clone)
677)]
678#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for WindowResizeConstraints {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "WindowResizeConstraints", false as usize + 1 + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "min_width", &self.min_width)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "min_height", &self.min_height)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "max_width", &self.max_width)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "max_height", &self.max_height)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for WindowResizeConstraints {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field {
                    __field0,
                    __field1,
                    __field2,
                    __field3,
                    __ignore,
                }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "field identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            _ => _serde::__private228::Ok(__Field::__ignore),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "min_width" => _serde::__private228::Ok(__Field::__field0),
                            "min_height" => _serde::__private228::Ok(__Field::__field1),
                            "max_width" => _serde::__private228::Ok(__Field::__field2),
                            "max_height" => _serde::__private228::Ok(__Field::__field3),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"min_width" => _serde::__private228::Ok(__Field::__field0),
                            b"min_height" =>
                                _serde::__private228::Ok(__Field::__field1),
                            b"max_width" => _serde::__private228::Ok(__Field::__field2),
                            b"max_height" =>
                                _serde::__private228::Ok(__Field::__field3),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<WindowResizeConstraints>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = WindowResizeConstraints;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct WindowResizeConstraints")
                    }
                    #[inline]
                    fn visit_seq<__A>(self, mut __seq: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::SeqAccess<'de> {
                        let __field0 =
                            match _serde::de::SeqAccess::next_element::<f32>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct WindowResizeConstraints with 4 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<f32>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct WindowResizeConstraints with 4 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<f32>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct WindowResizeConstraints with 4 elements")),
                            };
                        let __field3 =
                            match _serde::de::SeqAccess::next_element::<f32>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
                                                &"struct WindowResizeConstraints with 4 elements")),
                            };
                        _serde::__private228::Ok(WindowResizeConstraints {
                                min_width: __field0,
                                min_height: __field1,
                                max_width: __field2,
                                max_height: __field3,
                            })
                    }
                    #[inline]
                    fn visit_map<__A>(self, mut __map: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::MapAccess<'de> {
                        let mut __field0: _serde::__private228::Option<f32> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<f32> =
                            _serde::__private228::None;
                        let mut __field2: _serde::__private228::Option<f32> =
                            _serde::__private228::None;
                        let mut __field3: _serde::__private228::Option<f32> =
                            _serde::__private228::None;
                        while let _serde::__private228::Some(__key) =
                                _serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
                            match __key {
                                __Field::__field0 => {
                                    if _serde::__private228::Option::is_some(&__field0) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("min_width"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<f32>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("min_height"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<f32>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("max_width"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<f32>(&mut __map)?);
                                }
                                __Field::__field3 => {
                                    if _serde::__private228::Option::is_some(&__field3) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("max_height"));
                                    }
                                    __field3 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<f32>(&mut __map)?);
                                }
                                _ => {
                                    let _ =
                                        _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
                                }
                            }
                        }
                        let __field0 =
                            match __field0 {
                                _serde::__private228::Some(__field0) => __field0,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("min_width")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("min_height")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("max_width")?,
                            };
                        let __field3 =
                            match __field3 {
                                _serde::__private228::Some(__field3) => __field3,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("max_height")?,
                            };
                        _serde::__private228::Ok(WindowResizeConstraints {
                                min_width: __field0,
                                min_height: __field1,
                                max_width: __field2,
                                max_height: __field3,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["min_width", "min_height", "max_width", "max_height"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "WindowResizeConstraints", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<WindowResizeConstraints>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
679#[cfg_attr(
680    all(feature = "serialize", feature = "bevy_reflect"),
681    reflect(Serialize, Deserialize)
682)]
683pub struct WindowResizeConstraints {
684    /// The minimum width the window can have.
685    pub min_width: f32,
686    /// The minimum height the window can have.
687    pub min_height: f32,
688    /// The maximum width the window can have.
689    pub max_width: f32,
690    /// The maximum height the window can have.
691    pub max_height: f32,
692}
693
694impl Default for WindowResizeConstraints {
695    fn default() -> Self {
696        Self {
697            min_width: 180.,
698            min_height: 120.,
699            max_width: f32::INFINITY,
700            max_height: f32::INFINITY,
701        }
702    }
703}
704
705impl WindowResizeConstraints {
706    /// Checks if the constraints are valid.
707    ///
708    /// Will output warnings if it isn't.
709    #[must_use]
710    pub fn check_constraints(&self) -> Self {
711        let &WindowResizeConstraints {
712            mut min_width,
713            mut min_height,
714            mut max_width,
715            mut max_height,
716        } = self;
717        min_width = min_width.max(1.);
718        min_height = min_height.max(1.);
719        if max_width < min_width {
720            {
    {
        let lvl = ::log::Level::Warn;
        if lvl <= ::log::STATIC_MAX_LEVEL && lvl <= ::log::max_level() {
            ::log::__private_api::log({ ::log::__private_api::GlobalLogger },
                format_args!("The given maximum width {0} is smaller than the minimum width {1}",
                    max_width, min_width), lvl,
                &("bevy_window::window", "bevy_window::window",
                        ::log::__private_api::loc()), ());
        }
    }
};warn!(
721                "The given maximum width {max_width} is smaller than the minimum width {min_width}"
722            );
723            max_width = min_width;
724        }
725        if max_height < min_height {
726            {
    {
        let lvl = ::log::Level::Warn;
        if lvl <= ::log::STATIC_MAX_LEVEL && lvl <= ::log::max_level() {
            ::log::__private_api::log({ ::log::__private_api::GlobalLogger },
                format_args!("The given maximum height {0} is smaller than the minimum height {1}",
                    max_height, min_height), lvl,
                &("bevy_window::window", "bevy_window::window",
                        ::log::__private_api::loc()), ());
        }
    }
};warn!(
727                "The given maximum height {max_height} is smaller than the minimum height {min_height}",
728            );
729            max_height = min_height;
730        }
731        WindowResizeConstraints {
732            min_width,
733            min_height,
734            max_width,
735            max_height,
736        }
737    }
738}
739
740/// Cursor data for a [`Window`].
741#[derive(impl bevy_ecs::component::Component for CursorOptions where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    const STORAGE_TYPE: bevy_ecs::component::StorageType =
        bevy_ecs::component::StorageType::Table;
    type Mutability = bevy_ecs::component::Mutable;
    fn register_required_components(_requiree:
            bevy_ecs::component::ComponentId,
        required_components:
            &mut bevy_ecs::component::RequiredComponentsRegistrator) {}
    fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
        use bevy_ecs::component::{
            DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
        };
        (&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
    }
    fn relationship_accessor()
        ->
            ::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
        ::core::option::Option::None
    }
}Component, #[automatically_derived]
impl ::core::fmt::Debug for CursorOptions {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "CursorOptions",
            "visible", &self.visible, "grab_mode", &self.grab_mode,
            "hit_test", &&self.hit_test)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for CursorOptions {
    #[inline]
    fn clone(&self) -> CursorOptions {
        CursorOptions {
            visible: ::core::clone::Clone::clone(&self.visible),
            grab_mode: ::core::clone::Clone::clone(&self.grab_mode),
            hit_test: ::core::clone::Clone::clone(&self.hit_test),
        }
    }
}Clone)]
742#[cfg_attr(
743    feature = "bevy_reflect",
744    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for CursorOptions where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectComponent, Self>();
                registration.register_type_data::<ReflectDefault, Self>();
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <bool as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <CursorGrabMode as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for CursorOptions where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[bevy_reflect::NamedField::new::<bool>("visible"),
                                                bevy_reflect::NamedField::new::<CursorGrabMode>("grab_mode"),
                                                bevy_reflect::NamedField::new::<bool>("hit_test")]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for CursorOptions where  {
            fn type_path() -> &'static str {
                "bevy_window::window::CursorOptions"
            }
            fn short_type_path() -> &'static str { "CursorOptions" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("CursorOptions")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for CursorOptions where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<CursorOptions
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for CursorOptions where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name {
                    "visible" => ::core::option::Option::Some(&self.visible),
                    "grab_mode" =>
                        ::core::option::Option::Some(&self.grab_mode),
                    "hit_test" => ::core::option::Option::Some(&self.hit_test),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name {
                    "visible" =>
                        ::core::option::Option::Some(&mut self.visible),
                    "grab_mode" =>
                        ::core::option::Option::Some(&mut self.grab_mode),
                    "hit_test" =>
                        ::core::option::Option::Some(&mut self.hit_test),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize => ::core::option::Option::Some(&self.visible),
                    1usize => ::core::option::Option::Some(&self.grab_mode),
                    2usize => ::core::option::Option::Some(&self.hit_test),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize => ::core::option::Option::Some(&mut self.visible),
                    1usize => ::core::option::Option::Some(&mut self.grab_mode),
                    2usize => ::core::option::Option::Some(&mut self.hit_test),
                    _ => ::core::option::Option::None,
                }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index {
                    0usize => ::core::option::Option::Some("visible"),
                    1usize => ::core::option::Option::Some("grab_mode"),
                    2usize => ::core::option::Option::Some("hit_test"),
                    _ => ::core::option::Option::None,
                }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name {
                    "visible" => ::core::option::Option::Some(0usize),
                    "grab_mode" => ::core::option::Option::Some(1usize),
                    "hit_test" => ::core::option::Option::Some(2usize),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_len(&self) -> usize { 3usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                -> bevy_reflect::structs::DynamicStruct {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                dynamic.insert_boxed("visible",
                    bevy_reflect::PartialReflect::to_dynamic(&self.visible));
                dynamic.insert_boxed("grab_mode",
                    bevy_reflect::PartialReflect::to_dynamic(&self.grab_mode));
                dynamic.insert_boxed("hit_test",
                    bevy_reflect::PartialReflect::to_dynamic(&self.hit_test));
                dynamic
            }
        }
        impl bevy_reflect::PartialReflect for CursorOptions where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                (bevy_reflect::structs::struct_partial_eq)(self, value)
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for CursorOptions where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let mut __this =
                        <Self as ::core::default::Default>::default();
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "visible")?))() {
                        __this.visible = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <CursorGrabMode as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "grab_mode")?))() {
                        __this.grab_mode = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "hit_test")?))() {
                        __this.hit_test = __field;
                    }
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
745    reflect(Component, Debug, Default, Clone)
746)]
747#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for CursorOptions {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "CursorOptions", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "visible", &self.visible)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "grab_mode", &self.grab_mode)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "hit_test", &self.hit_test)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for CursorOptions {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field { __field0, __field1, __field2, __ignore, }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "field identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            _ => _serde::__private228::Ok(__Field::__ignore),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "visible" => _serde::__private228::Ok(__Field::__field0),
                            "grab_mode" => _serde::__private228::Ok(__Field::__field1),
                            "hit_test" => _serde::__private228::Ok(__Field::__field2),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"visible" => _serde::__private228::Ok(__Field::__field0),
                            b"grab_mode" => _serde::__private228::Ok(__Field::__field1),
                            b"hit_test" => _serde::__private228::Ok(__Field::__field2),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<CursorOptions>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = CursorOptions;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct CursorOptions")
                    }
                    #[inline]
                    fn visit_seq<__A>(self, mut __seq: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::SeqAccess<'de> {
                        let __field0 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct CursorOptions with 3 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<CursorGrabMode>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct CursorOptions with 3 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct CursorOptions with 3 elements")),
                            };
                        _serde::__private228::Ok(CursorOptions {
                                visible: __field0,
                                grab_mode: __field1,
                                hit_test: __field2,
                            })
                    }
                    #[inline]
                    fn visit_map<__A>(self, mut __map: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::MapAccess<'de> {
                        let mut __field0: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field1:
                                _serde::__private228::Option<CursorGrabMode> =
                            _serde::__private228::None;
                        let mut __field2: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        while let _serde::__private228::Some(__key) =
                                _serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
                            match __key {
                                __Field::__field0 => {
                                    if _serde::__private228::Option::is_some(&__field0) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("visible"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("grab_mode"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<CursorGrabMode>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("hit_test"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                _ => {
                                    let _ =
                                        _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
                                }
                            }
                        }
                        let __field0 =
                            match __field0 {
                                _serde::__private228::Some(__field0) => __field0,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("visible")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("grab_mode")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("hit_test")?,
                            };
                        _serde::__private228::Ok(CursorOptions {
                                visible: __field0,
                                grab_mode: __field1,
                                hit_test: __field2,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["visible", "grab_mode", "hit_test"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "CursorOptions", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<CursorOptions>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
748#[cfg_attr(
749    all(feature = "serialize", feature = "bevy_reflect"),
750    reflect(Serialize, Deserialize)
751)]
752pub struct CursorOptions {
753    /// Whether the cursor is visible or not.
754    ///
755    /// ## Platform-specific
756    ///
757    /// - **`Windows`**, **`X11`**, and **`Wayland`**: The cursor is hidden only when inside the window.
758    ///   To stop the cursor from leaving the window, change [`CursorOptions::grab_mode`] to [`CursorGrabMode::Locked`] or [`CursorGrabMode::Confined`]
759    /// - **`macOS`**: The cursor is hidden only when the window is focused.
760    /// - **`iOS`** and **`Android`** do not have cursors
761    pub visible: bool,
762
763    /// Whether or not the cursor is locked by or confined within the window.
764    ///
765    /// ## Platform-specific
766    ///
767    /// - **`macOS`** doesn't support [`CursorGrabMode::Confined`]
768    /// - **`X11`** doesn't support [`CursorGrabMode::Locked`]
769    /// - **`iOS/Android`** don't have cursors.
770    ///
771    /// Since `macOS` and `X11` don't have full [`CursorGrabMode`] support, we first try to set the grab mode that was asked for. If it doesn't work then use the alternate grab mode.
772    pub grab_mode: CursorGrabMode,
773
774    /// Set whether or not mouse events within *this* window are captured or fall through to the Window below.
775    ///
776    /// ## Platform-specific
777    ///
778    /// - iOS / Android / Web / X11: Unsupported.
779    pub hit_test: bool,
780}
781
782impl Default for CursorOptions {
783    fn default() -> Self {
784        CursorOptions {
785            visible: true,
786            grab_mode: CursorGrabMode::None,
787            hit_test: true,
788        }
789    }
790}
791
792/// Defines where a [`Window`] should be placed on the screen.
793#[derive(#[automatically_derived]
impl ::core::default::Default for WindowPosition {
    #[inline]
    fn default() -> WindowPosition { Self::Automatic }
}Default, #[automatically_derived]
impl ::core::fmt::Debug for WindowPosition {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            WindowPosition::Automatic =>
                ::core::fmt::Formatter::write_str(f, "Automatic"),
            WindowPosition::Centered(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Centered", &__self_0),
            WindowPosition::At(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "At",
                    &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for WindowPosition {
    #[inline]
    fn clone(&self) -> WindowPosition {
        let _: ::core::clone::AssertParamIsClone<MonitorSelection>;
        let _: ::core::clone::AssertParamIsClone<IVec2>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for WindowPosition { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for WindowPosition {
    #[inline]
    fn eq(&self, other: &WindowPosition) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (WindowPosition::Centered(__self_0),
                    WindowPosition::Centered(__arg1_0)) => __self_0 == __arg1_0,
                (WindowPosition::At(__self_0), WindowPosition::At(__arg1_0))
                    => __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq)]
794#[cfg_attr(
795    feature = "bevy_reflect",
796    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for WindowPosition where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <MonitorSelection as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <IVec2 as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for WindowPosition where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Enum(bevy_reflect::enums::EnumInfo::new::<Self>(&[bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Automatic")),
                                                bevy_reflect::enums::VariantInfo::Tuple(bevy_reflect::enums::TupleVariantInfo::new("Centered",
                                                        &[bevy_reflect::UnnamedField::new::<MonitorSelection>(0usize)])),
                                                bevy_reflect::enums::VariantInfo::Tuple(bevy_reflect::enums::TupleVariantInfo::new("At",
                                                        &[bevy_reflect::UnnamedField::new::<IVec2>(0usize)]))]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for WindowPosition where  {
            fn type_path() -> &'static str {
                "bevy_window::window::WindowPosition"
            }
            fn short_type_path() -> &'static str { "WindowPosition" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("WindowPosition")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for WindowPosition where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<WindowPosition
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::enums::Enum for WindowPosition where  {
            fn field(&self, __name_param: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, __index_param: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self {
                    WindowPosition::Centered { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    WindowPosition::At { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, __name_param: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, __index_param: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self {
                    WindowPosition::Centered { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    WindowPosition::At { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    _ => ::core::option::Option::None,
                }
            }
            fn index_of(&self, __name_param: &str)
                -> ::core::option::Option<usize> {
                match self { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, __index_param: usize)
                -> ::core::option::Option<&str> {
                match self { _ => ::core::option::Option::None, }
            }
            fn iter_fields(&self) -> bevy_reflect::enums::VariantFieldIter {
                bevy_reflect::enums::VariantFieldIter::new(self)
            }
            #[inline]
            fn field_len(&self) -> usize {
                match self {
                    WindowPosition::Automatic { .. } => 0usize,
                    WindowPosition::Centered { .. } => 1usize,
                    WindowPosition::At { .. } => 1usize,
                    _ => 0,
                }
            }
            #[inline]
            fn variant_name(&self) -> &str {
                match self {
                    WindowPosition::Automatic { .. } => "Automatic",
                    WindowPosition::Centered { .. } => "Centered",
                    WindowPosition::At { .. } => "At",
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_index(&self) -> usize {
                match self {
                    WindowPosition::Automatic { .. } => 0usize,
                    WindowPosition::Centered { .. } => 1usize,
                    WindowPosition::At { .. } => 2usize,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_type(&self) -> bevy_reflect::enums::VariantType {
                match self {
                    WindowPosition::Automatic { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    WindowPosition::Centered { .. } =>
                        bevy_reflect::enums::VariantType::Tuple,
                    WindowPosition::At { .. } =>
                        bevy_reflect::enums::VariantType::Tuple,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            fn to_dynamic_enum(&self) -> bevy_reflect::enums::DynamicEnum {
                bevy_reflect::enums::DynamicEnum::from_ref::<Self>(self)
            }
        }
        impl bevy_reflect::PartialReflect for WindowPosition where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self,
                __value_param: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Enum(__value_param) =
                        bevy_reflect::PartialReflect::reflect_ref(__value_param) {
                    if bevy_reflect::enums::Enum::variant_name(self) ==
                            bevy_reflect::enums::Enum::variant_name(__value_param) {
                        match bevy_reflect::enums::Enum::variant_type(__value_param)
                            {
                            bevy_reflect::enums::VariantType::Struct => {
                                for field in
                                    bevy_reflect::enums::Enum::iter_fields(__value_param) {
                                    let name = field.name().unwrap();
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_mut(self, name) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            bevy_reflect::enums::VariantType::Tuple => {
                                for (index, field) in
                                    ::core::iter::Iterator::enumerate(bevy_reflect::enums::Enum::iter_fields(__value_param))
                                    {
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_at_mut(self, index) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            _ => {}
                        }
                    } else {
                        match bevy_reflect::enums::Enum::variant_name(__value_param)
                            {
                            "Automatic" => { *self = WindowPosition::Automatic {} }
                            "Centered" => {
                                *self =
                                    WindowPosition::Centered {
                                        0: {
                                            let __0 = __value_param.field_at(0usize);
                                            let __0 =
                                                __0.ok_or(bevy_reflect::ApplyError::MissingEnumField {
                                                            variant_name: ::core::convert::Into::into("Centered"),
                                                            field_name: ::core::convert::Into::into(".0"),
                                                        })?;
                                            <MonitorSelection as
                                                            bevy_reflect::FromReflect>::from_reflect(__0).ok_or(bevy_reflect::ApplyError::MismatchedTypes {
                                                        from_type: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(__0)),
                                                        to_type: ::core::convert::Into::into(<MonitorSelection as
                                                                    bevy_reflect::TypePath>::type_path()),
                                                    })?
                                        },
                                    }
                            }
                            "At" => {
                                *self =
                                    WindowPosition::At {
                                        0: {
                                            let __0 = __value_param.field_at(0usize);
                                            let __0 =
                                                __0.ok_or(bevy_reflect::ApplyError::MissingEnumField {
                                                            variant_name: ::core::convert::Into::into("At"),
                                                            field_name: ::core::convert::Into::into(".0"),
                                                        })?;
                                            <IVec2 as
                                                            bevy_reflect::FromReflect>::from_reflect(__0).ok_or(bevy_reflect::ApplyError::MismatchedTypes {
                                                        from_type: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(__0)),
                                                        to_type: ::core::convert::Into::into(<IVec2 as
                                                                    bevy_reflect::TypePath>::type_path()),
                                                    })?
                                        },
                                    }
                            }
                            name => {
                                return ::core::result::Result::Err(bevy_reflect::ApplyError::UnknownVariant {
                                            enum_name: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(self)),
                                            variant_name: ::core::convert::Into::into(name),
                                        });
                            }
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(__value_param),
                                to_kind: bevy_reflect::ReflectKind::Enum,
                            });
                }
                ::core::result::Result::Ok(())
            }
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Enum
            }
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Enum(self)
            }
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Enum(self)
            }
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Enum(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_hash(&self) -> ::core::option::Option<u64> {
                (bevy_reflect::enums::enum_hash)(self)
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::enums::enum_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for WindowPosition where  {
            fn from_reflect(__param0: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Enum(__param0) =
                        bevy_reflect::PartialReflect::reflect_ref(__param0) {
                    match bevy_reflect::enums::Enum::variant_name(__param0) {
                        "Automatic" =>
                            ::core::option::Option::Some(WindowPosition::Automatic {}),
                        "Centered" =>
                            ::core::option::Option::Some(WindowPosition::Centered {
                                    0: {
                                        let __0 = __param0.field_at(0usize);
                                        let __0 = __0?;
                                        <MonitorSelection as
                                                    bevy_reflect::FromReflect>::from_reflect(__0)?
                                    },
                                }),
                        "At" =>
                            ::core::option::Option::Some(WindowPosition::At {
                                    0: {
                                        let __0 = __param0.field_at(0usize);
                                        let __0 = __0?;
                                        <IVec2 as bevy_reflect::FromReflect>::from_reflect(__0)?
                                    },
                                }),
                        name => ::core::option::Option::None,
                    }
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
797    reflect(Debug, PartialEq, Clone)
798)]
799#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for WindowPosition {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    WindowPosition::Automatic =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "WindowPosition", 0u32, "Automatic"),
                    WindowPosition::Centered(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "WindowPosition", 1u32, "Centered", __field0),
                    WindowPosition::At(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "WindowPosition", 2u32, "At", __field0),
                }
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for WindowPosition {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field { __field0, __field1, __field2, }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "variant identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 3")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Automatic" => _serde::__private228::Ok(__Field::__field0),
                            "Centered" => _serde::__private228::Ok(__Field::__field1),
                            "At" => _serde::__private228::Ok(__Field::__field2),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"Automatic" => _serde::__private228::Ok(__Field::__field0),
                            b"Centered" => _serde::__private228::Ok(__Field::__field1),
                            b"At" => _serde::__private228::Ok(__Field::__field2),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<WindowPosition>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = WindowPosition;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum WindowPosition")
                    }
                    fn visit_enum<__A>(self, __data: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::EnumAccess<'de> {
                        match _serde::de::EnumAccess::variant(__data)? {
                            (__Field::__field0, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(WindowPosition::Automatic)
                            }
                            (__Field::__field1, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<MonitorSelection>(__variant),
                                    WindowPosition::Centered),
                            (__Field::__field2, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<IVec2>(__variant),
                                    WindowPosition::At),
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Automatic", "Centered", "At"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "WindowPosition", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<WindowPosition>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
800#[cfg_attr(
801    all(feature = "serialize", feature = "bevy_reflect"),
802    reflect(Serialize, Deserialize)
803)]
804pub enum WindowPosition {
805    /// Position will be set by the window manager.
806    /// Bevy will delegate this decision to the window manager and no guarantees can be made about where the window will be placed.
807    ///
808    /// Used at creation but will be changed to [`At`](WindowPosition::At).
809    #[default]
810    Automatic,
811    /// Window will be centered on the selected monitor.
812    ///
813    /// Note that this does not account for window decorations.
814    ///
815    /// Used at creation or for update but will be changed to [`At`](WindowPosition::At)
816    Centered(MonitorSelection),
817    /// The window's top-left corner should be placed at the specified position (in physical pixels).
818    ///
819    /// (0,0) represents top-left corner of screen space.
820    At(IVec2),
821}
822
823impl WindowPosition {
824    /// Creates a new [`WindowPosition`] at a position.
825    pub fn new(position: IVec2) -> Self {
826        Self::At(position)
827    }
828
829    /// Set the position to a specific point.
830    pub fn set(&mut self, position: IVec2) {
831        *self = WindowPosition::At(position);
832    }
833
834    /// Set the window to a specific monitor.
835    pub fn center(&mut self, monitor: MonitorSelection) {
836        *self = WindowPosition::Centered(monitor);
837    }
838}
839
840/// Controls the size of a [`Window`]
841///
842/// ## Physical, logical and requested sizes
843///
844/// There are three sizes associated with a window:
845/// - the physical size,
846///   which represents the actual height and width in physical pixels
847///   the window occupies on the monitor,
848/// - the logical size,
849///   which represents the size that should be used to scale elements
850///   inside the window, measured in logical pixels,
851/// - the requested size,
852///   measured in logical pixels, which is the value submitted
853///   to the API when creating the window, or requesting that it be resized.
854///
855/// ## Scale factor
856///
857/// The reason logical size and physical size are separated and can be different
858/// is to account for the cases where:
859/// - several monitors have different pixel densities,
860/// - the user has set up a pixel density preference in its operating system,
861/// - the Bevy `App` has specified a specific scale factor between both.
862///
863/// The factor between physical size and logical size can be retrieved with
864/// [`WindowResolution::scale_factor`].
865///
866/// For the first two cases, a scale factor is set automatically by the operating
867/// system through the window backend. You can get it with
868/// [`WindowResolution::base_scale_factor`].
869///
870/// For the third case, you can override this automatic scale factor with
871/// [`WindowResolution::set_scale_factor_override`].
872///
873/// ## Requested and obtained sizes
874///
875/// The logical size should be equal to the requested size after creating/resizing,
876/// when possible.
877/// The reason the requested size and logical size might be different
878/// is because the corresponding physical size might exceed limits (either the
879/// size limits of the monitor, or limits defined in [`WindowResizeConstraints`]).
880///
881/// Note: The requested size is not kept in memory, for example requesting a size
882/// too big for the screen, making the logical size different from the requested size,
883/// and then setting a scale factor that makes the previous requested size within
884/// the limits of the screen will not get back that previous requested size.
885
886#[derive(#[automatically_derived]
impl ::core::fmt::Debug for WindowResolution {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field4_finish(f,
            "WindowResolution", "physical_width", &self.physical_width,
            "physical_height", &self.physical_height, "scale_factor_override",
            &self.scale_factor_override, "scale_factor", &&self.scale_factor)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for WindowResolution {
    #[inline]
    fn clone(&self) -> WindowResolution {
        WindowResolution {
            physical_width: ::core::clone::Clone::clone(&self.physical_width),
            physical_height: ::core::clone::Clone::clone(&self.physical_height),
            scale_factor_override: ::core::clone::Clone::clone(&self.scale_factor_override),
            scale_factor: ::core::clone::Clone::clone(&self.scale_factor),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for WindowResolution {
    #[inline]
    fn eq(&self, other: &WindowResolution) -> bool {
        self.physical_width == other.physical_width &&
                    self.physical_height == other.physical_height &&
                self.scale_factor == other.scale_factor &&
            self.scale_factor_override == other.scale_factor_override
    }
}PartialEq)]
887#[cfg_attr(
888    feature = "bevy_reflect",
889    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for WindowResolution where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectDefault, Self>();
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <u32 as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <Option<f32> as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <f32 as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for WindowResolution where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[bevy_reflect::NamedField::new::<u32>("physical_width"),
                                                bevy_reflect::NamedField::new::<u32>("physical_height"),
                                                bevy_reflect::NamedField::new::<Option<f32>>("scale_factor_override"),
                                                bevy_reflect::NamedField::new::<f32>("scale_factor")]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for WindowResolution where  {
            fn type_path() -> &'static str {
                "bevy_window::window::WindowResolution"
            }
            fn short_type_path() -> &'static str { "WindowResolution" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("WindowResolution")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for WindowResolution where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<WindowResolution
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for WindowResolution where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name {
                    "physical_width" =>
                        ::core::option::Option::Some(&self.physical_width),
                    "physical_height" =>
                        ::core::option::Option::Some(&self.physical_height),
                    "scale_factor_override" =>
                        ::core::option::Option::Some(&self.scale_factor_override),
                    "scale_factor" =>
                        ::core::option::Option::Some(&self.scale_factor),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name {
                    "physical_width" =>
                        ::core::option::Option::Some(&mut self.physical_width),
                    "physical_height" =>
                        ::core::option::Option::Some(&mut self.physical_height),
                    "scale_factor_override" =>
                        ::core::option::Option::Some(&mut self.scale_factor_override),
                    "scale_factor" =>
                        ::core::option::Option::Some(&mut self.scale_factor),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize =>
                        ::core::option::Option::Some(&self.physical_width),
                    1usize =>
                        ::core::option::Option::Some(&self.physical_height),
                    2usize =>
                        ::core::option::Option::Some(&self.scale_factor_override),
                    3usize => ::core::option::Option::Some(&self.scale_factor),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize =>
                        ::core::option::Option::Some(&mut self.physical_width),
                    1usize =>
                        ::core::option::Option::Some(&mut self.physical_height),
                    2usize =>
                        ::core::option::Option::Some(&mut self.scale_factor_override),
                    3usize =>
                        ::core::option::Option::Some(&mut self.scale_factor),
                    _ => ::core::option::Option::None,
                }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index {
                    0usize => ::core::option::Option::Some("physical_width"),
                    1usize => ::core::option::Option::Some("physical_height"),
                    2usize =>
                        ::core::option::Option::Some("scale_factor_override"),
                    3usize => ::core::option::Option::Some("scale_factor"),
                    _ => ::core::option::Option::None,
                }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name {
                    "physical_width" => ::core::option::Option::Some(0usize),
                    "physical_height" => ::core::option::Option::Some(1usize),
                    "scale_factor_override" =>
                        ::core::option::Option::Some(2usize),
                    "scale_factor" => ::core::option::Option::Some(3usize),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_len(&self) -> usize { 4usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                -> bevy_reflect::structs::DynamicStruct {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                dynamic.insert_boxed("physical_width",
                    bevy_reflect::PartialReflect::to_dynamic(&self.physical_width));
                dynamic.insert_boxed("physical_height",
                    bevy_reflect::PartialReflect::to_dynamic(&self.physical_height));
                dynamic.insert_boxed("scale_factor_override",
                    bevy_reflect::PartialReflect::to_dynamic(&self.scale_factor_override));
                dynamic.insert_boxed("scale_factor",
                    bevy_reflect::PartialReflect::to_dynamic(&self.scale_factor));
                dynamic
            }
        }
        impl bevy_reflect::PartialReflect for WindowResolution where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for WindowResolution where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let mut __this =
                        <Self as ::core::default::Default>::default();
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <u32 as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "physical_width")?))() {
                        __this.physical_width = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <u32 as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "physical_height")?))() {
                        __this.physical_height = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <Option<f32> as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "scale_factor_override")?))() {
                        __this.scale_factor_override = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <f32 as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "scale_factor")?))() {
                        __this.scale_factor = __field;
                    }
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
890    reflect(Debug, PartialEq, Default, Clone)
891)]
892#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for WindowResolution {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "WindowResolution", false as usize + 1 + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "physical_width", &self.physical_width)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "physical_height", &self.physical_height)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "scale_factor_override", &self.scale_factor_override)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "scale_factor", &self.scale_factor)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for WindowResolution {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field {
                    __field0,
                    __field1,
                    __field2,
                    __field3,
                    __ignore,
                }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "field identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            _ => _serde::__private228::Ok(__Field::__ignore),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "physical_width" =>
                                _serde::__private228::Ok(__Field::__field0),
                            "physical_height" =>
                                _serde::__private228::Ok(__Field::__field1),
                            "scale_factor_override" =>
                                _serde::__private228::Ok(__Field::__field2),
                            "scale_factor" =>
                                _serde::__private228::Ok(__Field::__field3),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"physical_width" =>
                                _serde::__private228::Ok(__Field::__field0),
                            b"physical_height" =>
                                _serde::__private228::Ok(__Field::__field1),
                            b"scale_factor_override" =>
                                _serde::__private228::Ok(__Field::__field2),
                            b"scale_factor" =>
                                _serde::__private228::Ok(__Field::__field3),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<WindowResolution>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = WindowResolution;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct WindowResolution")
                    }
                    #[inline]
                    fn visit_seq<__A>(self, mut __seq: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::SeqAccess<'de> {
                        let __field0 =
                            match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct WindowResolution with 4 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct WindowResolution with 4 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<Option<f32>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct WindowResolution with 4 elements")),
                            };
                        let __field3 =
                            match _serde::de::SeqAccess::next_element::<f32>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
                                                &"struct WindowResolution with 4 elements")),
                            };
                        _serde::__private228::Ok(WindowResolution {
                                physical_width: __field0,
                                physical_height: __field1,
                                scale_factor_override: __field2,
                                scale_factor: __field3,
                            })
                    }
                    #[inline]
                    fn visit_map<__A>(self, mut __map: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::MapAccess<'de> {
                        let mut __field0: _serde::__private228::Option<u32> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<u32> =
                            _serde::__private228::None;
                        let mut __field2:
                                _serde::__private228::Option<Option<f32>> =
                            _serde::__private228::None;
                        let mut __field3: _serde::__private228::Option<f32> =
                            _serde::__private228::None;
                        while let _serde::__private228::Some(__key) =
                                _serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
                            match __key {
                                __Field::__field0 => {
                                    if _serde::__private228::Option::is_some(&__field0) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("physical_width"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<u32>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("physical_height"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<u32>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("scale_factor_override"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<f32>>(&mut __map)?);
                                }
                                __Field::__field3 => {
                                    if _serde::__private228::Option::is_some(&__field3) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("scale_factor"));
                                    }
                                    __field3 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<f32>(&mut __map)?);
                                }
                                _ => {
                                    let _ =
                                        _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
                                }
                            }
                        }
                        let __field0 =
                            match __field0 {
                                _serde::__private228::Some(__field0) => __field0,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("physical_width")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("physical_height")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("scale_factor_override")?,
                            };
                        let __field3 =
                            match __field3 {
                                _serde::__private228::Some(__field3) => __field3,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("scale_factor")?,
                            };
                        _serde::__private228::Ok(WindowResolution {
                                physical_width: __field0,
                                physical_height: __field1,
                                scale_factor_override: __field2,
                                scale_factor: __field3,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["physical_width", "physical_height",
                                "scale_factor_override", "scale_factor"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "WindowResolution", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<WindowResolution>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
893#[cfg_attr(
894    all(feature = "serialize", feature = "bevy_reflect"),
895    reflect(Serialize, Deserialize)
896)]
897pub struct WindowResolution {
898    /// Width of the window in physical pixels.
899    physical_width: u32,
900    /// Height of the window in physical pixels.
901    physical_height: u32,
902    /// Code-provided ratio of physical size to logical size.
903    ///
904    /// Should be used instead of `scale_factor` when set.
905    scale_factor_override: Option<f32>,
906    /// OS-provided ratio of physical size to logical size.
907    ///
908    /// Set automatically depending on the pixel density of the screen.
909    scale_factor: f32,
910}
911
912impl Default for WindowResolution {
913    fn default() -> Self {
914        WindowResolution {
915            physical_width: 1280,
916            physical_height: 720,
917            scale_factor_override: None,
918            scale_factor: 1.0,
919        }
920    }
921}
922
923impl WindowResolution {
924    /// Creates a new [`WindowResolution`].
925    pub fn new(physical_width: u32, physical_height: u32) -> Self {
926        Self {
927            physical_width,
928            physical_height,
929            ..Default::default()
930        }
931    }
932
933    /// Builder method for adding a scale factor override to the resolution.
934    pub fn with_scale_factor_override(mut self, scale_factor_override: f32) -> Self {
935        self.set_scale_factor_override(Some(scale_factor_override));
936        self
937    }
938
939    /// The window's client area width in logical pixels.
940    #[inline]
941    pub fn width(&self) -> f32 {
942        self.physical_width() as f32 / self.scale_factor()
943    }
944
945    /// The window's client area height in logical pixels.
946    #[inline]
947    pub fn height(&self) -> f32 {
948        self.physical_height() as f32 / self.scale_factor()
949    }
950
951    /// The window's client size in logical pixels
952    #[inline]
953    pub fn size(&self) -> Vec2 {
954        Vec2::new(self.width(), self.height())
955    }
956
957    /// The window's client area width in physical pixels.
958    #[inline]
959    pub fn physical_width(&self) -> u32 {
960        self.physical_width
961    }
962
963    /// The window's client area height in physical pixels.
964    #[inline]
965    pub fn physical_height(&self) -> u32 {
966        self.physical_height
967    }
968
969    /// The window's client size in physical pixels
970    #[inline]
971    pub fn physical_size(&self) -> UVec2 {
972        UVec2::new(self.physical_width, self.physical_height)
973    }
974
975    /// The ratio of physical pixels to logical pixels.
976    ///
977    /// `physical_pixels = logical_pixels * scale_factor`
978    pub fn scale_factor(&self) -> f32 {
979        self.scale_factor_override
980            .unwrap_or_else(|| self.base_scale_factor())
981    }
982
983    /// The window scale factor as reported by the window backend.
984    ///
985    /// This value is unaffected by [`WindowResolution::scale_factor_override`].
986    #[inline]
987    pub fn base_scale_factor(&self) -> f32 {
988        self.scale_factor
989    }
990
991    /// The scale factor set with [`WindowResolution::set_scale_factor_override`].
992    ///
993    /// This value may be different from the scale factor reported by the window backend.
994    #[inline]
995    pub fn scale_factor_override(&self) -> Option<f32> {
996        self.scale_factor_override
997    }
998
999    /// Set the window's logical resolution.
1000    #[inline]
1001    pub fn set(&mut self, width: f32, height: f32) {
1002        self.set_physical_resolution(
1003            (width * self.scale_factor()) as u32,
1004            (height * self.scale_factor()) as u32,
1005        );
1006    }
1007
1008    /// Set the window's physical resolution.
1009    ///
1010    /// This will ignore the scale factor setting, so most of the time you should
1011    /// prefer to use [`WindowResolution::set`].
1012    #[inline]
1013    pub fn set_physical_resolution(&mut self, width: u32, height: u32) {
1014        self.physical_width = width;
1015        self.physical_height = height;
1016    }
1017
1018    /// Set the window's scale factor, this may get overridden by the backend.
1019    #[inline]
1020    pub fn set_scale_factor(&mut self, scale_factor: f32) {
1021        self.scale_factor = scale_factor;
1022    }
1023
1024    /// Set the window's scale factor, and apply it to the currently known physical size.
1025    /// This may get overridden by the backend. This is mostly useful on window creation,
1026    /// so that the window is created with the expected size instead of waiting for a resize
1027    /// event after its creation.
1028    #[inline]
1029    #[doc(hidden)]
1030    pub fn set_scale_factor_and_apply_to_physical_size(&mut self, scale_factor: f32) {
1031        self.scale_factor = scale_factor;
1032        self.physical_width = (self.physical_width as f32 * scale_factor) as u32;
1033        self.physical_height = (self.physical_height as f32 * scale_factor) as u32;
1034    }
1035
1036    /// Set the window's scale factor, this will be used over what the backend decides.
1037    ///
1038    /// This can change the logical and physical sizes if the resulting physical
1039    /// size is not within the limits.
1040    #[inline]
1041    pub fn set_scale_factor_override(&mut self, scale_factor_override: Option<f32>) {
1042        self.scale_factor_override = scale_factor_override;
1043    }
1044}
1045
1046impl From<(u32, u32)> for WindowResolution {
1047    fn from((width, height): (u32, u32)) -> Self {
1048        WindowResolution::new(width, height)
1049    }
1050}
1051
1052impl From<[u32; 2]> for WindowResolution {
1053    fn from([width, height]: [u32; 2]) -> WindowResolution {
1054        WindowResolution::new(width, height)
1055    }
1056}
1057
1058impl From<UVec2> for WindowResolution {
1059    fn from(res: UVec2) -> WindowResolution {
1060        WindowResolution::new(res.x, res.y)
1061    }
1062}
1063
1064/// Defines if and how the cursor is grabbed by a [`Window`].
1065///
1066/// ## Platform-specific
1067///
1068/// - **`macOS`** doesn't support [`CursorGrabMode::Confined`]
1069/// - **`X11`** doesn't support [`CursorGrabMode::Locked`]
1070/// - **`iOS/Android`** don't have cursors.
1071///
1072/// Since `macOS` and `X11` don't have full [`CursorGrabMode`] support, we first try to set the grab mode that was asked for. If it doesn't work then use the alternate grab mode.
1073#[derive(#[automatically_derived]
impl ::core::default::Default for CursorGrabMode {
    #[inline]
    fn default() -> CursorGrabMode { Self::None }
}Default, #[automatically_derived]
impl ::core::fmt::Debug for CursorGrabMode {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                CursorGrabMode::None => "None",
                CursorGrabMode::Confined => "Confined",
                CursorGrabMode::Locked => "Locked",
            })
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for CursorGrabMode {
    #[inline]
    fn clone(&self) -> CursorGrabMode { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for CursorGrabMode { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for CursorGrabMode {
    #[inline]
    fn eq(&self, other: &CursorGrabMode) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for CursorGrabMode {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq)]
1074#[cfg_attr(
1075    feature = "bevy_reflect",
1076    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for CursorGrabMode where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectDefault, Self>();
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for CursorGrabMode where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Enum(bevy_reflect::enums::EnumInfo::new::<Self>(&[bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("None")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Confined")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Locked"))]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for CursorGrabMode where  {
            fn type_path() -> &'static str {
                "bevy_window::window::CursorGrabMode"
            }
            fn short_type_path() -> &'static str { "CursorGrabMode" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("CursorGrabMode")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for CursorGrabMode where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<CursorGrabMode
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::enums::Enum for CursorGrabMode where  {
            fn field(&self, __name_param: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, __index_param: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, __name_param: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, __index_param: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn index_of(&self, __name_param: &str)
                -> ::core::option::Option<usize> {
                match self { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, __index_param: usize)
                -> ::core::option::Option<&str> {
                match self { _ => ::core::option::Option::None, }
            }
            fn iter_fields(&self) -> bevy_reflect::enums::VariantFieldIter {
                bevy_reflect::enums::VariantFieldIter::new(self)
            }
            #[inline]
            fn field_len(&self) -> usize {
                match self {
                    CursorGrabMode::None { .. } => 0usize,
                    CursorGrabMode::Confined { .. } => 0usize,
                    CursorGrabMode::Locked { .. } => 0usize,
                    _ => 0,
                }
            }
            #[inline]
            fn variant_name(&self) -> &str {
                match self {
                    CursorGrabMode::None { .. } => "None",
                    CursorGrabMode::Confined { .. } => "Confined",
                    CursorGrabMode::Locked { .. } => "Locked",
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_index(&self) -> usize {
                match self {
                    CursorGrabMode::None { .. } => 0usize,
                    CursorGrabMode::Confined { .. } => 1usize,
                    CursorGrabMode::Locked { .. } => 2usize,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_type(&self) -> bevy_reflect::enums::VariantType {
                match self {
                    CursorGrabMode::None { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    CursorGrabMode::Confined { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    CursorGrabMode::Locked { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            fn to_dynamic_enum(&self) -> bevy_reflect::enums::DynamicEnum {
                bevy_reflect::enums::DynamicEnum::from_ref::<Self>(self)
            }
        }
        impl bevy_reflect::PartialReflect for CursorGrabMode where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self,
                __value_param: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Enum(__value_param) =
                        bevy_reflect::PartialReflect::reflect_ref(__value_param) {
                    if bevy_reflect::enums::Enum::variant_name(self) ==
                            bevy_reflect::enums::Enum::variant_name(__value_param) {
                        match bevy_reflect::enums::Enum::variant_type(__value_param)
                            {
                            bevy_reflect::enums::VariantType::Struct => {
                                for field in
                                    bevy_reflect::enums::Enum::iter_fields(__value_param) {
                                    let name = field.name().unwrap();
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_mut(self, name) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            bevy_reflect::enums::VariantType::Tuple => {
                                for (index, field) in
                                    ::core::iter::Iterator::enumerate(bevy_reflect::enums::Enum::iter_fields(__value_param))
                                    {
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_at_mut(self, index) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            _ => {}
                        }
                    } else {
                        match bevy_reflect::enums::Enum::variant_name(__value_param)
                            {
                            "None" => { *self = CursorGrabMode::None {} }
                            "Confined" => { *self = CursorGrabMode::Confined {} }
                            "Locked" => { *self = CursorGrabMode::Locked {} }
                            name => {
                                return ::core::result::Result::Err(bevy_reflect::ApplyError::UnknownVariant {
                                            enum_name: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(self)),
                                            variant_name: ::core::convert::Into::into(name),
                                        });
                            }
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(__value_param),
                                to_kind: bevy_reflect::ReflectKind::Enum,
                            });
                }
                ::core::result::Result::Ok(())
            }
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Enum
            }
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Enum(self)
            }
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Enum(self)
            }
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Enum(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_hash(&self) -> ::core::option::Option<u64> {
                (bevy_reflect::enums::enum_hash)(self)
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::enums::enum_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for CursorGrabMode where  {
            fn from_reflect(__param0: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Enum(__param0) =
                        bevy_reflect::PartialReflect::reflect_ref(__param0) {
                    match bevy_reflect::enums::Enum::variant_name(__param0) {
                        "None" =>
                            ::core::option::Option::Some(CursorGrabMode::None {}),
                        "Confined" =>
                            ::core::option::Option::Some(CursorGrabMode::Confined {}),
                        "Locked" =>
                            ::core::option::Option::Some(CursorGrabMode::Locked {}),
                        name => ::core::option::Option::None,
                    }
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
1077    reflect(Debug, PartialEq, Default, Clone)
1078)]
1079#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for CursorGrabMode {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    CursorGrabMode::None =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "CursorGrabMode", 0u32, "None"),
                    CursorGrabMode::Confined =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "CursorGrabMode", 1u32, "Confined"),
                    CursorGrabMode::Locked =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "CursorGrabMode", 2u32, "Locked"),
                }
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for CursorGrabMode {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field { __field0, __field1, __field2, }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "variant identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 3")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "None" => _serde::__private228::Ok(__Field::__field0),
                            "Confined" => _serde::__private228::Ok(__Field::__field1),
                            "Locked" => _serde::__private228::Ok(__Field::__field2),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"None" => _serde::__private228::Ok(__Field::__field0),
                            b"Confined" => _serde::__private228::Ok(__Field::__field1),
                            b"Locked" => _serde::__private228::Ok(__Field::__field2),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<CursorGrabMode>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = CursorGrabMode;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum CursorGrabMode")
                    }
                    fn visit_enum<__A>(self, __data: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::EnumAccess<'de> {
                        match _serde::de::EnumAccess::variant(__data)? {
                            (__Field::__field0, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(CursorGrabMode::None)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(CursorGrabMode::Confined)
                            }
                            (__Field::__field2, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(CursorGrabMode::Locked)
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["None", "Confined", "Locked"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "CursorGrabMode", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<CursorGrabMode>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
1080#[cfg_attr(
1081    all(feature = "serialize", feature = "bevy_reflect"),
1082    reflect(Serialize, Deserialize)
1083)]
1084pub enum CursorGrabMode {
1085    /// The cursor can freely leave the window.
1086    #[default]
1087    None,
1088    /// The cursor is confined to the window area.
1089    Confined,
1090    /// The cursor is locked inside the window area to a certain position.
1091    Locked,
1092}
1093
1094/// Stores internal [`Window`] state that isn't directly accessible.
1095#[derive(#[automatically_derived]
impl ::core::default::Default for InternalWindowState {
    #[inline]
    fn default() -> InternalWindowState {
        InternalWindowState {
            minimize_request: ::core::default::Default::default(),
            maximize_request: ::core::default::Default::default(),
            drag_move_request: ::core::default::Default::default(),
            drag_resize_request: ::core::default::Default::default(),
            physical_cursor_position: ::core::default::Default::default(),
        }
    }
}Default, #[automatically_derived]
impl ::core::fmt::Debug for InternalWindowState {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field5_finish(f,
            "InternalWindowState", "minimize_request", &self.minimize_request,
            "maximize_request", &self.maximize_request, "drag_move_request",
            &self.drag_move_request, "drag_resize_request",
            &self.drag_resize_request, "physical_cursor_position",
            &&self.physical_cursor_position)
    }
}Debug, #[automatically_derived]
impl ::core::marker::Copy for InternalWindowState { }Copy, #[automatically_derived]
impl ::core::clone::Clone for InternalWindowState {
    #[inline]
    fn clone(&self) -> InternalWindowState {
        let _: ::core::clone::AssertParamIsClone<Option<bool>>;
        let _: ::core::clone::AssertParamIsClone<Option<bool>>;
        let _: ::core::clone::AssertParamIsClone<bool>;
        let _: ::core::clone::AssertParamIsClone<Option<CompassOctant>>;
        let _: ::core::clone::AssertParamIsClone<Option<DVec2>>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for InternalWindowState {
    #[inline]
    fn eq(&self, other: &InternalWindowState) -> bool {
        self.drag_move_request == other.drag_move_request &&
                        self.minimize_request == other.minimize_request &&
                    self.maximize_request == other.maximize_request &&
                self.drag_resize_request == other.drag_resize_request &&
            self.physical_cursor_position == other.physical_cursor_position
    }
}PartialEq)]
1096#[cfg_attr(
1097    feature = "bevy_reflect",
1098    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for InternalWindowState where
            {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectDefault, Self>();
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <Option<bool> as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <bool as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <Option<CompassOctant> as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <Option<DVec2> as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for InternalWindowState where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[bevy_reflect::NamedField::new::<Option<bool>>("minimize_request"),
                                                bevy_reflect::NamedField::new::<Option<bool>>("maximize_request"),
                                                bevy_reflect::NamedField::new::<bool>("drag_move_request"),
                                                bevy_reflect::NamedField::new::<Option<CompassOctant>>("drag_resize_request"),
                                                bevy_reflect::NamedField::new::<Option<DVec2>>("physical_cursor_position")]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for InternalWindowState where  {
            fn type_path() -> &'static str {
                "bevy_window::window::InternalWindowState"
            }
            fn short_type_path() -> &'static str { "InternalWindowState" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("InternalWindowState")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for InternalWindowState where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<InternalWindowState
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for InternalWindowState where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name {
                    "minimize_request" =>
                        ::core::option::Option::Some(&self.minimize_request),
                    "maximize_request" =>
                        ::core::option::Option::Some(&self.maximize_request),
                    "drag_move_request" =>
                        ::core::option::Option::Some(&self.drag_move_request),
                    "drag_resize_request" =>
                        ::core::option::Option::Some(&self.drag_resize_request),
                    "physical_cursor_position" =>
                        ::core::option::Option::Some(&self.physical_cursor_position),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name {
                    "minimize_request" =>
                        ::core::option::Option::Some(&mut self.minimize_request),
                    "maximize_request" =>
                        ::core::option::Option::Some(&mut self.maximize_request),
                    "drag_move_request" =>
                        ::core::option::Option::Some(&mut self.drag_move_request),
                    "drag_resize_request" =>
                        ::core::option::Option::Some(&mut self.drag_resize_request),
                    "physical_cursor_position" =>
                        ::core::option::Option::Some(&mut self.physical_cursor_position),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize =>
                        ::core::option::Option::Some(&self.minimize_request),
                    1usize =>
                        ::core::option::Option::Some(&self.maximize_request),
                    2usize =>
                        ::core::option::Option::Some(&self.drag_move_request),
                    3usize =>
                        ::core::option::Option::Some(&self.drag_resize_request),
                    4usize =>
                        ::core::option::Option::Some(&self.physical_cursor_position),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize =>
                        ::core::option::Option::Some(&mut self.minimize_request),
                    1usize =>
                        ::core::option::Option::Some(&mut self.maximize_request),
                    2usize =>
                        ::core::option::Option::Some(&mut self.drag_move_request),
                    3usize =>
                        ::core::option::Option::Some(&mut self.drag_resize_request),
                    4usize =>
                        ::core::option::Option::Some(&mut self.physical_cursor_position),
                    _ => ::core::option::Option::None,
                }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index {
                    0usize => ::core::option::Option::Some("minimize_request"),
                    1usize => ::core::option::Option::Some("maximize_request"),
                    2usize => ::core::option::Option::Some("drag_move_request"),
                    3usize =>
                        ::core::option::Option::Some("drag_resize_request"),
                    4usize =>
                        ::core::option::Option::Some("physical_cursor_position"),
                    _ => ::core::option::Option::None,
                }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name {
                    "minimize_request" => ::core::option::Option::Some(0usize),
                    "maximize_request" => ::core::option::Option::Some(1usize),
                    "drag_move_request" => ::core::option::Option::Some(2usize),
                    "drag_resize_request" =>
                        ::core::option::Option::Some(3usize),
                    "physical_cursor_position" =>
                        ::core::option::Option::Some(4usize),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_len(&self) -> usize { 5usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                -> bevy_reflect::structs::DynamicStruct {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                dynamic.insert_boxed("minimize_request",
                    bevy_reflect::PartialReflect::to_dynamic(&self.minimize_request));
                dynamic.insert_boxed("maximize_request",
                    bevy_reflect::PartialReflect::to_dynamic(&self.maximize_request));
                dynamic.insert_boxed("drag_move_request",
                    bevy_reflect::PartialReflect::to_dynamic(&self.drag_move_request));
                dynamic.insert_boxed("drag_resize_request",
                    bevy_reflect::PartialReflect::to_dynamic(&self.drag_resize_request));
                dynamic.insert_boxed("physical_cursor_position",
                    bevy_reflect::PartialReflect::to_dynamic(&self.physical_cursor_position));
                dynamic
            }
        }
        impl bevy_reflect::PartialReflect for InternalWindowState where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for InternalWindowState where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let mut __this =
                        <Self as ::core::default::Default>::default();
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <Option<bool> as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "minimize_request")?))() {
                        __this.minimize_request = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <Option<bool> as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "maximize_request")?))() {
                        __this.maximize_request = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "drag_move_request")?))() {
                        __this.drag_move_request = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <Option<CompassOctant> as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "drag_resize_request")?))() {
                        __this.drag_resize_request = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <Option<DVec2> as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "physical_cursor_position")?))() {
                        __this.physical_cursor_position = __field;
                    }
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
1099    reflect(Debug, PartialEq, Default, Clone)
1100)]
1101#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for InternalWindowState {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "InternalWindowState", false as usize + 1 + 1 + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "minimize_request", &self.minimize_request)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "maximize_request", &self.maximize_request)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "drag_move_request", &self.drag_move_request)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "drag_resize_request", &self.drag_resize_request)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "physical_cursor_position",
                        &self.physical_cursor_position)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for InternalWindowState {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field {
                    __field0,
                    __field1,
                    __field2,
                    __field3,
                    __field4,
                    __ignore,
                }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "field identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            4u64 => _serde::__private228::Ok(__Field::__field4),
                            _ => _serde::__private228::Ok(__Field::__ignore),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "minimize_request" =>
                                _serde::__private228::Ok(__Field::__field0),
                            "maximize_request" =>
                                _serde::__private228::Ok(__Field::__field1),
                            "drag_move_request" =>
                                _serde::__private228::Ok(__Field::__field2),
                            "drag_resize_request" =>
                                _serde::__private228::Ok(__Field::__field3),
                            "physical_cursor_position" =>
                                _serde::__private228::Ok(__Field::__field4),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"minimize_request" =>
                                _serde::__private228::Ok(__Field::__field0),
                            b"maximize_request" =>
                                _serde::__private228::Ok(__Field::__field1),
                            b"drag_move_request" =>
                                _serde::__private228::Ok(__Field::__field2),
                            b"drag_resize_request" =>
                                _serde::__private228::Ok(__Field::__field3),
                            b"physical_cursor_position" =>
                                _serde::__private228::Ok(__Field::__field4),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<InternalWindowState>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = InternalWindowState;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct InternalWindowState")
                    }
                    #[inline]
                    fn visit_seq<__A>(self, mut __seq: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::SeqAccess<'de> {
                        let __field0 =
                            match _serde::de::SeqAccess::next_element::<Option<bool>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct InternalWindowState with 5 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<Option<bool>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct InternalWindowState with 5 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct InternalWindowState with 5 elements")),
                            };
                        let __field3 =
                            match _serde::de::SeqAccess::next_element::<Option<CompassOctant>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
                                                &"struct InternalWindowState with 5 elements")),
                            };
                        let __field4 =
                            match _serde::de::SeqAccess::next_element::<Option<DVec2>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(4usize,
                                                &"struct InternalWindowState with 5 elements")),
                            };
                        _serde::__private228::Ok(InternalWindowState {
                                minimize_request: __field0,
                                maximize_request: __field1,
                                drag_move_request: __field2,
                                drag_resize_request: __field3,
                                physical_cursor_position: __field4,
                            })
                    }
                    #[inline]
                    fn visit_map<__A>(self, mut __map: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::MapAccess<'de> {
                        let mut __field0:
                                _serde::__private228::Option<Option<bool>> =
                            _serde::__private228::None;
                        let mut __field1:
                                _serde::__private228::Option<Option<bool>> =
                            _serde::__private228::None;
                        let mut __field2: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field3:
                                _serde::__private228::Option<Option<CompassOctant>> =
                            _serde::__private228::None;
                        let mut __field4:
                                _serde::__private228::Option<Option<DVec2>> =
                            _serde::__private228::None;
                        while let _serde::__private228::Some(__key) =
                                _serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
                            match __key {
                                __Field::__field0 => {
                                    if _serde::__private228::Option::is_some(&__field0) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("minimize_request"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<bool>>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("maximize_request"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<bool>>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("drag_move_request"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field3 => {
                                    if _serde::__private228::Option::is_some(&__field3) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("drag_resize_request"));
                                    }
                                    __field3 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<CompassOctant>>(&mut __map)?);
                                }
                                __Field::__field4 => {
                                    if _serde::__private228::Option::is_some(&__field4) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("physical_cursor_position"));
                                    }
                                    __field4 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<DVec2>>(&mut __map)?);
                                }
                                _ => {
                                    let _ =
                                        _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
                                }
                            }
                        }
                        let __field0 =
                            match __field0 {
                                _serde::__private228::Some(__field0) => __field0,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("minimize_request")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("maximize_request")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("drag_move_request")?,
                            };
                        let __field3 =
                            match __field3 {
                                _serde::__private228::Some(__field3) => __field3,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("drag_resize_request")?,
                            };
                        let __field4 =
                            match __field4 {
                                _serde::__private228::Some(__field4) => __field4,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("physical_cursor_position")?,
                            };
                        _serde::__private228::Ok(InternalWindowState {
                                minimize_request: __field0,
                                maximize_request: __field1,
                                drag_move_request: __field2,
                                drag_resize_request: __field3,
                                physical_cursor_position: __field4,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["minimize_request", "maximize_request",
                                "drag_move_request", "drag_resize_request",
                                "physical_cursor_position"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "InternalWindowState", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<InternalWindowState>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
1102#[cfg_attr(
1103    all(feature = "serialize", feature = "bevy_reflect"),
1104    reflect(Serialize, Deserialize)
1105)]
1106pub struct InternalWindowState {
1107    /// If this is true then next frame we will ask to minimize the window.
1108    minimize_request: Option<bool>,
1109    /// If this is true then next frame we will ask to maximize/un-maximize the window depending on `maximized`.
1110    maximize_request: Option<bool>,
1111    /// If this is true then next frame we will ask to drag-move the window.
1112    drag_move_request: bool,
1113    /// If this is `Some` then the next frame we will ask to drag-resize the window.
1114    drag_resize_request: Option<CompassOctant>,
1115    /// Unscaled cursor position.
1116    physical_cursor_position: Option<DVec2>,
1117}
1118
1119impl InternalWindowState {
1120    /// Consumes the current maximize request, if it exists. This should only be called by window backends.
1121    pub fn take_maximize_request(&mut self) -> Option<bool> {
1122        self.maximize_request.take()
1123    }
1124
1125    /// Consumes the current minimize request, if it exists. This should only be called by window backends.
1126    pub fn take_minimize_request(&mut self) -> Option<bool> {
1127        self.minimize_request.take()
1128    }
1129
1130    /// Consumes the current move request, if it exists. This should only be called by window backends.
1131    pub fn take_move_request(&mut self) -> bool {
1132        core::mem::take(&mut self.drag_move_request)
1133    }
1134
1135    /// Consumes the current resize request, if it exists. This should only be called by window backends.
1136    pub fn take_resize_request(&mut self) -> Option<CompassOctant> {
1137        self.drag_resize_request.take()
1138    }
1139}
1140
1141/// References a screen monitor.
1142///
1143/// Used when centering a [`Window`] on a monitor.
1144#[derive(#[automatically_derived]
impl ::core::fmt::Debug for MonitorSelection {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            MonitorSelection::Current =>
                ::core::fmt::Formatter::write_str(f, "Current"),
            MonitorSelection::Primary =>
                ::core::fmt::Formatter::write_str(f, "Primary"),
            MonitorSelection::Index(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Index",
                    &__self_0),
            MonitorSelection::Entity(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Entity",
                    &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for MonitorSelection {
    #[inline]
    fn clone(&self) -> MonitorSelection {
        let _: ::core::clone::AssertParamIsClone<usize>;
        let _: ::core::clone::AssertParamIsClone<Entity>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for MonitorSelection { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for MonitorSelection {
    #[inline]
    fn eq(&self, other: &MonitorSelection) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (MonitorSelection::Index(__self_0),
                    MonitorSelection::Index(__arg1_0)) => __self_0 == __arg1_0,
                (MonitorSelection::Entity(__self_0),
                    MonitorSelection::Entity(__arg1_0)) => __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for MonitorSelection {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<usize>;
        let _: ::core::cmp::AssertParamIsEq<Entity>;
    }
}Eq)]
1145#[cfg_attr(
1146    feature = "bevy_reflect",
1147    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for MonitorSelection where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <usize as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <Entity as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for MonitorSelection where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Enum(bevy_reflect::enums::EnumInfo::new::<Self>(&[bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Current")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Primary")),
                                                bevy_reflect::enums::VariantInfo::Tuple(bevy_reflect::enums::TupleVariantInfo::new("Index",
                                                        &[bevy_reflect::UnnamedField::new::<usize>(0usize)])),
                                                bevy_reflect::enums::VariantInfo::Tuple(bevy_reflect::enums::TupleVariantInfo::new("Entity",
                                                        &[bevy_reflect::UnnamedField::new::<Entity>(0usize)]))]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for MonitorSelection where  {
            fn type_path() -> &'static str {
                "bevy_window::window::MonitorSelection"
            }
            fn short_type_path() -> &'static str { "MonitorSelection" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("MonitorSelection")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for MonitorSelection where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<MonitorSelection
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::enums::Enum for MonitorSelection where  {
            fn field(&self, __name_param: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, __index_param: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self {
                    MonitorSelection::Index { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    MonitorSelection::Entity { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, __name_param: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, __index_param: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self {
                    MonitorSelection::Index { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    MonitorSelection::Entity { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    _ => ::core::option::Option::None,
                }
            }
            fn index_of(&self, __name_param: &str)
                -> ::core::option::Option<usize> {
                match self { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, __index_param: usize)
                -> ::core::option::Option<&str> {
                match self { _ => ::core::option::Option::None, }
            }
            fn iter_fields(&self) -> bevy_reflect::enums::VariantFieldIter {
                bevy_reflect::enums::VariantFieldIter::new(self)
            }
            #[inline]
            fn field_len(&self) -> usize {
                match self {
                    MonitorSelection::Current { .. } => 0usize,
                    MonitorSelection::Primary { .. } => 0usize,
                    MonitorSelection::Index { .. } => 1usize,
                    MonitorSelection::Entity { .. } => 1usize,
                    _ => 0,
                }
            }
            #[inline]
            fn variant_name(&self) -> &str {
                match self {
                    MonitorSelection::Current { .. } => "Current",
                    MonitorSelection::Primary { .. } => "Primary",
                    MonitorSelection::Index { .. } => "Index",
                    MonitorSelection::Entity { .. } => "Entity",
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_index(&self) -> usize {
                match self {
                    MonitorSelection::Current { .. } => 0usize,
                    MonitorSelection::Primary { .. } => 1usize,
                    MonitorSelection::Index { .. } => 2usize,
                    MonitorSelection::Entity { .. } => 3usize,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_type(&self) -> bevy_reflect::enums::VariantType {
                match self {
                    MonitorSelection::Current { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    MonitorSelection::Primary { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    MonitorSelection::Index { .. } =>
                        bevy_reflect::enums::VariantType::Tuple,
                    MonitorSelection::Entity { .. } =>
                        bevy_reflect::enums::VariantType::Tuple,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            fn to_dynamic_enum(&self) -> bevy_reflect::enums::DynamicEnum {
                bevy_reflect::enums::DynamicEnum::from_ref::<Self>(self)
            }
        }
        impl bevy_reflect::PartialReflect for MonitorSelection where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self,
                __value_param: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Enum(__value_param) =
                        bevy_reflect::PartialReflect::reflect_ref(__value_param) {
                    if bevy_reflect::enums::Enum::variant_name(self) ==
                            bevy_reflect::enums::Enum::variant_name(__value_param) {
                        match bevy_reflect::enums::Enum::variant_type(__value_param)
                            {
                            bevy_reflect::enums::VariantType::Struct => {
                                for field in
                                    bevy_reflect::enums::Enum::iter_fields(__value_param) {
                                    let name = field.name().unwrap();
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_mut(self, name) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            bevy_reflect::enums::VariantType::Tuple => {
                                for (index, field) in
                                    ::core::iter::Iterator::enumerate(bevy_reflect::enums::Enum::iter_fields(__value_param))
                                    {
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_at_mut(self, index) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            _ => {}
                        }
                    } else {
                        match bevy_reflect::enums::Enum::variant_name(__value_param)
                            {
                            "Current" => { *self = MonitorSelection::Current {} }
                            "Primary" => { *self = MonitorSelection::Primary {} }
                            "Index" => {
                                *self =
                                    MonitorSelection::Index {
                                        0: {
                                            let __0 = __value_param.field_at(0usize);
                                            let __0 =
                                                __0.ok_or(bevy_reflect::ApplyError::MissingEnumField {
                                                            variant_name: ::core::convert::Into::into("Index"),
                                                            field_name: ::core::convert::Into::into(".0"),
                                                        })?;
                                            <usize as
                                                            bevy_reflect::FromReflect>::from_reflect(__0).ok_or(bevy_reflect::ApplyError::MismatchedTypes {
                                                        from_type: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(__0)),
                                                        to_type: ::core::convert::Into::into(<usize as
                                                                    bevy_reflect::TypePath>::type_path()),
                                                    })?
                                        },
                                    }
                            }
                            "Entity" => {
                                *self =
                                    MonitorSelection::Entity {
                                        0: {
                                            let __0 = __value_param.field_at(0usize);
                                            let __0 =
                                                __0.ok_or(bevy_reflect::ApplyError::MissingEnumField {
                                                            variant_name: ::core::convert::Into::into("Entity"),
                                                            field_name: ::core::convert::Into::into(".0"),
                                                        })?;
                                            <Entity as
                                                            bevy_reflect::FromReflect>::from_reflect(__0).ok_or(bevy_reflect::ApplyError::MismatchedTypes {
                                                        from_type: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(__0)),
                                                        to_type: ::core::convert::Into::into(<Entity as
                                                                    bevy_reflect::TypePath>::type_path()),
                                                    })?
                                        },
                                    }
                            }
                            name => {
                                return ::core::result::Result::Err(bevy_reflect::ApplyError::UnknownVariant {
                                            enum_name: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(self)),
                                            variant_name: ::core::convert::Into::into(name),
                                        });
                            }
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(__value_param),
                                to_kind: bevy_reflect::ReflectKind::Enum,
                            });
                }
                ::core::result::Result::Ok(())
            }
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Enum
            }
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Enum(self)
            }
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Enum(self)
            }
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Enum(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_hash(&self) -> ::core::option::Option<u64> {
                (bevy_reflect::enums::enum_hash)(self)
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::enums::enum_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for MonitorSelection where  {
            fn from_reflect(__param0: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Enum(__param0) =
                        bevy_reflect::PartialReflect::reflect_ref(__param0) {
                    match bevy_reflect::enums::Enum::variant_name(__param0) {
                        "Current" =>
                            ::core::option::Option::Some(MonitorSelection::Current {}),
                        "Primary" =>
                            ::core::option::Option::Some(MonitorSelection::Primary {}),
                        "Index" =>
                            ::core::option::Option::Some(MonitorSelection::Index {
                                    0: {
                                        let __0 = __param0.field_at(0usize);
                                        let __0 = __0?;
                                        <usize as bevy_reflect::FromReflect>::from_reflect(__0)?
                                    },
                                }),
                        "Entity" =>
                            ::core::option::Option::Some(MonitorSelection::Entity {
                                    0: {
                                        let __0 = __param0.field_at(0usize);
                                        let __0 = __0?;
                                        <Entity as bevy_reflect::FromReflect>::from_reflect(__0)?
                                    },
                                }),
                        name => ::core::option::Option::None,
                    }
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
1148    reflect(Debug, PartialEq, Clone)
1149)]
1150#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for MonitorSelection {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    MonitorSelection::Current =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "MonitorSelection", 0u32, "Current"),
                    MonitorSelection::Primary =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "MonitorSelection", 1u32, "Primary"),
                    MonitorSelection::Index(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "MonitorSelection", 2u32, "Index", __field0),
                    MonitorSelection::Entity(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "MonitorSelection", 3u32, "Entity", __field0),
                }
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for MonitorSelection {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field { __field0, __field1, __field2, __field3, }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "variant identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 4")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Current" => _serde::__private228::Ok(__Field::__field0),
                            "Primary" => _serde::__private228::Ok(__Field::__field1),
                            "Index" => _serde::__private228::Ok(__Field::__field2),
                            "Entity" => _serde::__private228::Ok(__Field::__field3),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"Current" => _serde::__private228::Ok(__Field::__field0),
                            b"Primary" => _serde::__private228::Ok(__Field::__field1),
                            b"Index" => _serde::__private228::Ok(__Field::__field2),
                            b"Entity" => _serde::__private228::Ok(__Field::__field3),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<MonitorSelection>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = MonitorSelection;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum MonitorSelection")
                    }
                    fn visit_enum<__A>(self, __data: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::EnumAccess<'de> {
                        match _serde::de::EnumAccess::variant(__data)? {
                            (__Field::__field0, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(MonitorSelection::Current)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(MonitorSelection::Primary)
                            }
                            (__Field::__field2, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<usize>(__variant),
                                    MonitorSelection::Index),
                            (__Field::__field3, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Entity>(__variant),
                                    MonitorSelection::Entity),
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Current", "Primary", "Index", "Entity"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "MonitorSelection", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<MonitorSelection>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
1151#[cfg_attr(
1152    all(feature = "serialize", feature = "bevy_reflect"),
1153    reflect(Serialize, Deserialize)
1154)]
1155pub enum MonitorSelection {
1156    /// Uses the current monitor of the window.
1157    ///
1158    /// If [`WindowPosition::Centered(MonitorSelection::Current)`](WindowPosition::Centered) is used when creating a window,
1159    /// the window doesn't have a monitor yet, this will fall back to [`WindowPosition::Automatic`].
1160    Current,
1161    /// Uses the primary monitor of the system.
1162    Primary,
1163    /// Uses the monitor with the specified index.
1164    Index(usize),
1165    /// Uses a given [`Monitor`](`crate::monitor::Monitor`) entity.
1166    Entity(Entity),
1167}
1168
1169/// References an exclusive fullscreen video mode.
1170///
1171/// Used when setting [`WindowMode::Fullscreen`] on a window.
1172#[derive(#[automatically_derived]
impl ::core::fmt::Debug for VideoModeSelection {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            VideoModeSelection::Current =>
                ::core::fmt::Formatter::write_str(f, "Current"),
            VideoModeSelection::Specific(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Specific", &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for VideoModeSelection {
    #[inline]
    fn clone(&self) -> VideoModeSelection {
        let _: ::core::clone::AssertParamIsClone<VideoMode>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for VideoModeSelection { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for VideoModeSelection {
    #[inline]
    fn eq(&self, other: &VideoModeSelection) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (VideoModeSelection::Specific(__self_0),
                    VideoModeSelection::Specific(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for VideoModeSelection {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<VideoMode>;
    }
}Eq)]
1173#[cfg_attr(
1174    feature = "bevy_reflect",
1175    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for VideoModeSelection where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <VideoMode as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for VideoModeSelection where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Enum(bevy_reflect::enums::EnumInfo::new::<Self>(&[bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Current")),
                                                bevy_reflect::enums::VariantInfo::Tuple(bevy_reflect::enums::TupleVariantInfo::new("Specific",
                                                        &[bevy_reflect::UnnamedField::new::<VideoMode>(0usize)]))]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for VideoModeSelection where  {
            fn type_path() -> &'static str {
                "bevy_window::window::VideoModeSelection"
            }
            fn short_type_path() -> &'static str { "VideoModeSelection" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("VideoModeSelection")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for VideoModeSelection where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<VideoModeSelection
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::enums::Enum for VideoModeSelection where  {
            fn field(&self, __name_param: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, __index_param: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self {
                    VideoModeSelection::Specific { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, __name_param: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, __index_param: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self {
                    VideoModeSelection::Specific { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    _ => ::core::option::Option::None,
                }
            }
            fn index_of(&self, __name_param: &str)
                -> ::core::option::Option<usize> {
                match self { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, __index_param: usize)
                -> ::core::option::Option<&str> {
                match self { _ => ::core::option::Option::None, }
            }
            fn iter_fields(&self) -> bevy_reflect::enums::VariantFieldIter {
                bevy_reflect::enums::VariantFieldIter::new(self)
            }
            #[inline]
            fn field_len(&self) -> usize {
                match self {
                    VideoModeSelection::Current { .. } => 0usize,
                    VideoModeSelection::Specific { .. } => 1usize,
                    _ => 0,
                }
            }
            #[inline]
            fn variant_name(&self) -> &str {
                match self {
                    VideoModeSelection::Current { .. } => "Current",
                    VideoModeSelection::Specific { .. } => "Specific",
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_index(&self) -> usize {
                match self {
                    VideoModeSelection::Current { .. } => 0usize,
                    VideoModeSelection::Specific { .. } => 1usize,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_type(&self) -> bevy_reflect::enums::VariantType {
                match self {
                    VideoModeSelection::Current { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    VideoModeSelection::Specific { .. } =>
                        bevy_reflect::enums::VariantType::Tuple,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            fn to_dynamic_enum(&self) -> bevy_reflect::enums::DynamicEnum {
                bevy_reflect::enums::DynamicEnum::from_ref::<Self>(self)
            }
        }
        impl bevy_reflect::PartialReflect for VideoModeSelection where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self,
                __value_param: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Enum(__value_param) =
                        bevy_reflect::PartialReflect::reflect_ref(__value_param) {
                    if bevy_reflect::enums::Enum::variant_name(self) ==
                            bevy_reflect::enums::Enum::variant_name(__value_param) {
                        match bevy_reflect::enums::Enum::variant_type(__value_param)
                            {
                            bevy_reflect::enums::VariantType::Struct => {
                                for field in
                                    bevy_reflect::enums::Enum::iter_fields(__value_param) {
                                    let name = field.name().unwrap();
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_mut(self, name) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            bevy_reflect::enums::VariantType::Tuple => {
                                for (index, field) in
                                    ::core::iter::Iterator::enumerate(bevy_reflect::enums::Enum::iter_fields(__value_param))
                                    {
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_at_mut(self, index) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            _ => {}
                        }
                    } else {
                        match bevy_reflect::enums::Enum::variant_name(__value_param)
                            {
                            "Current" => { *self = VideoModeSelection::Current {} }
                            "Specific" => {
                                *self =
                                    VideoModeSelection::Specific {
                                        0: {
                                            let __0 = __value_param.field_at(0usize);
                                            let __0 =
                                                __0.ok_or(bevy_reflect::ApplyError::MissingEnumField {
                                                            variant_name: ::core::convert::Into::into("Specific"),
                                                            field_name: ::core::convert::Into::into(".0"),
                                                        })?;
                                            <VideoMode as
                                                            bevy_reflect::FromReflect>::from_reflect(__0).ok_or(bevy_reflect::ApplyError::MismatchedTypes {
                                                        from_type: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(__0)),
                                                        to_type: ::core::convert::Into::into(<VideoMode as
                                                                    bevy_reflect::TypePath>::type_path()),
                                                    })?
                                        },
                                    }
                            }
                            name => {
                                return ::core::result::Result::Err(bevy_reflect::ApplyError::UnknownVariant {
                                            enum_name: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(self)),
                                            variant_name: ::core::convert::Into::into(name),
                                        });
                            }
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(__value_param),
                                to_kind: bevy_reflect::ReflectKind::Enum,
                            });
                }
                ::core::result::Result::Ok(())
            }
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Enum
            }
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Enum(self)
            }
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Enum(self)
            }
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Enum(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_hash(&self) -> ::core::option::Option<u64> {
                (bevy_reflect::enums::enum_hash)(self)
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::enums::enum_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for VideoModeSelection where  {
            fn from_reflect(__param0: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Enum(__param0) =
                        bevy_reflect::PartialReflect::reflect_ref(__param0) {
                    match bevy_reflect::enums::Enum::variant_name(__param0) {
                        "Current" =>
                            ::core::option::Option::Some(VideoModeSelection::Current {}),
                        "Specific" =>
                            ::core::option::Option::Some(VideoModeSelection::Specific {
                                    0: {
                                        let __0 = __param0.field_at(0usize);
                                        let __0 = __0?;
                                        <VideoMode as bevy_reflect::FromReflect>::from_reflect(__0)?
                                    },
                                }),
                        name => ::core::option::Option::None,
                    }
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
1176    reflect(Debug, PartialEq, Clone)
1177)]
1178#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for VideoModeSelection {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    VideoModeSelection::Current =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "VideoModeSelection", 0u32, "Current"),
                    VideoModeSelection::Specific(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "VideoModeSelection", 1u32, "Specific", __field0),
                }
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for VideoModeSelection {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field { __field0, __field1, }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "variant identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 2")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Current" => _serde::__private228::Ok(__Field::__field0),
                            "Specific" => _serde::__private228::Ok(__Field::__field1),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"Current" => _serde::__private228::Ok(__Field::__field0),
                            b"Specific" => _serde::__private228::Ok(__Field::__field1),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<VideoModeSelection>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = VideoModeSelection;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum VideoModeSelection")
                    }
                    fn visit_enum<__A>(self, __data: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::EnumAccess<'de> {
                        match _serde::de::EnumAccess::variant(__data)? {
                            (__Field::__field0, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(VideoModeSelection::Current)
                            }
                            (__Field::__field1, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<VideoMode>(__variant),
                                    VideoModeSelection::Specific),
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Current", "Specific"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "VideoModeSelection", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<VideoModeSelection>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
1179#[cfg_attr(
1180    all(feature = "serialize", feature = "bevy_reflect"),
1181    reflect(Serialize, Deserialize)
1182)]
1183pub enum VideoModeSelection {
1184    /// Uses the video mode that the monitor is already in.
1185    Current,
1186    /// Uses a given [`VideoMode`](`crate::monitor::VideoMode`). A list of video modes supported by the monitor
1187    /// is supplied by [`Monitor::video_modes`](`crate::monitor::Monitor::video_modes`).
1188    Specific(VideoMode),
1189}
1190
1191/// Presentation mode for a [`Window`].
1192///
1193/// The presentation mode specifies when a frame is presented to the window. The [`Fifo`]
1194/// option corresponds to a traditional `VSync`, where the framerate is capped by the
1195/// display refresh rate. Both [`Immediate`] and [`Mailbox`] are low-latency and are not
1196/// capped by the refresh rate, but may not be available on all platforms. Tearing
1197/// may be observed with [`Immediate`] mode, but will not be observed with [`Mailbox`] or
1198/// [`Fifo`].
1199///
1200/// [`AutoVsync`] or [`AutoNoVsync`] will gracefully fallback to [`Fifo`] when unavailable.
1201///
1202/// [`Immediate`] or [`Mailbox`] will panic if not supported by the platform.
1203///
1204/// [`Fifo`]: PresentMode::Fifo
1205/// [`FifoRelaxed`]: PresentMode::FifoRelaxed
1206/// [`Immediate`]: PresentMode::Immediate
1207/// [`Mailbox`]: PresentMode::Mailbox
1208/// [`AutoVsync`]: PresentMode::AutoVsync
1209/// [`AutoNoVsync`]: PresentMode::AutoNoVsync
1210#[repr(C)]
1211#[derive(#[automatically_derived]
impl ::core::default::Default for PresentMode {
    #[inline]
    fn default() -> PresentMode { Self::Fifo }
}Default, #[automatically_derived]
impl ::core::marker::Copy for PresentMode { }Copy, #[automatically_derived]
impl ::core::clone::Clone for PresentMode {
    #[inline]
    fn clone(&self) -> PresentMode { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for PresentMode {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                PresentMode::AutoVsync => "AutoVsync",
                PresentMode::AutoNoVsync => "AutoNoVsync",
                PresentMode::Fifo => "Fifo",
                PresentMode::FifoRelaxed => "FifoRelaxed",
                PresentMode::Immediate => "Immediate",
                PresentMode::Mailbox => "Mailbox",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for PresentMode {
    #[inline]
    fn eq(&self, other: &PresentMode) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for PresentMode {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for PresentMode {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state)
    }
}Hash)]
1212#[cfg_attr(
1213    feature = "bevy_reflect",
1214    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for PresentMode where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for PresentMode where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Enum(bevy_reflect::enums::EnumInfo::new::<Self>(&[bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("AutoVsync")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("AutoNoVsync")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Fifo")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("FifoRelaxed")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Immediate")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Mailbox"))]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for PresentMode where  {
            fn type_path() -> &'static str {
                "bevy_window::window::PresentMode"
            }
            fn short_type_path() -> &'static str { "PresentMode" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("PresentMode")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for PresentMode where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<PresentMode
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::enums::Enum for PresentMode where  {
            fn field(&self, __name_param: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, __index_param: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, __name_param: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, __index_param: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn index_of(&self, __name_param: &str)
                -> ::core::option::Option<usize> {
                match self { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, __index_param: usize)
                -> ::core::option::Option<&str> {
                match self { _ => ::core::option::Option::None, }
            }
            fn iter_fields(&self) -> bevy_reflect::enums::VariantFieldIter {
                bevy_reflect::enums::VariantFieldIter::new(self)
            }
            #[inline]
            fn field_len(&self) -> usize {
                match self {
                    PresentMode::AutoVsync { .. } => 0usize,
                    PresentMode::AutoNoVsync { .. } => 0usize,
                    PresentMode::Fifo { .. } => 0usize,
                    PresentMode::FifoRelaxed { .. } => 0usize,
                    PresentMode::Immediate { .. } => 0usize,
                    PresentMode::Mailbox { .. } => 0usize,
                    _ => 0,
                }
            }
            #[inline]
            fn variant_name(&self) -> &str {
                match self {
                    PresentMode::AutoVsync { .. } => "AutoVsync",
                    PresentMode::AutoNoVsync { .. } => "AutoNoVsync",
                    PresentMode::Fifo { .. } => "Fifo",
                    PresentMode::FifoRelaxed { .. } => "FifoRelaxed",
                    PresentMode::Immediate { .. } => "Immediate",
                    PresentMode::Mailbox { .. } => "Mailbox",
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_index(&self) -> usize {
                match self {
                    PresentMode::AutoVsync { .. } => 0usize,
                    PresentMode::AutoNoVsync { .. } => 1usize,
                    PresentMode::Fifo { .. } => 2usize,
                    PresentMode::FifoRelaxed { .. } => 3usize,
                    PresentMode::Immediate { .. } => 4usize,
                    PresentMode::Mailbox { .. } => 5usize,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_type(&self) -> bevy_reflect::enums::VariantType {
                match self {
                    PresentMode::AutoVsync { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    PresentMode::AutoNoVsync { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    PresentMode::Fifo { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    PresentMode::FifoRelaxed { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    PresentMode::Immediate { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    PresentMode::Mailbox { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            fn to_dynamic_enum(&self) -> bevy_reflect::enums::DynamicEnum {
                bevy_reflect::enums::DynamicEnum::from_ref::<Self>(self)
            }
        }
        impl bevy_reflect::PartialReflect for PresentMode where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self,
                __value_param: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Enum(__value_param) =
                        bevy_reflect::PartialReflect::reflect_ref(__value_param) {
                    if bevy_reflect::enums::Enum::variant_name(self) ==
                            bevy_reflect::enums::Enum::variant_name(__value_param) {
                        match bevy_reflect::enums::Enum::variant_type(__value_param)
                            {
                            bevy_reflect::enums::VariantType::Struct => {
                                for field in
                                    bevy_reflect::enums::Enum::iter_fields(__value_param) {
                                    let name = field.name().unwrap();
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_mut(self, name) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            bevy_reflect::enums::VariantType::Tuple => {
                                for (index, field) in
                                    ::core::iter::Iterator::enumerate(bevy_reflect::enums::Enum::iter_fields(__value_param))
                                    {
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_at_mut(self, index) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            _ => {}
                        }
                    } else {
                        match bevy_reflect::enums::Enum::variant_name(__value_param)
                            {
                            "AutoVsync" => { *self = PresentMode::AutoVsync {} }
                            "AutoNoVsync" => { *self = PresentMode::AutoNoVsync {} }
                            "Fifo" => { *self = PresentMode::Fifo {} }
                            "FifoRelaxed" => { *self = PresentMode::FifoRelaxed {} }
                            "Immediate" => { *self = PresentMode::Immediate {} }
                            "Mailbox" => { *self = PresentMode::Mailbox {} }
                            name => {
                                return ::core::result::Result::Err(bevy_reflect::ApplyError::UnknownVariant {
                                            enum_name: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(self)),
                                            variant_name: ::core::convert::Into::into(name),
                                        });
                            }
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(__value_param),
                                to_kind: bevy_reflect::ReflectKind::Enum,
                            });
                }
                ::core::result::Result::Ok(())
            }
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Enum
            }
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Enum(self)
            }
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Enum(self)
            }
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Enum(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_hash(&self) -> ::core::option::Option<u64> {
                use ::core::hash::{Hash, Hasher};
                let mut hasher = bevy_reflect::utility::reflect_hasher();
                Hash::hash(&::core::any::Any::type_id(self), &mut hasher);
                Hash::hash(self, &mut hasher);
                ::core::option::Option::Some(Hasher::finish(&hasher))
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::enums::enum_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for PresentMode where  {
            fn from_reflect(__param0: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Enum(__param0) =
                        bevy_reflect::PartialReflect::reflect_ref(__param0) {
                    match bevy_reflect::enums::Enum::variant_name(__param0) {
                        "AutoVsync" =>
                            ::core::option::Option::Some(PresentMode::AutoVsync {}),
                        "AutoNoVsync" =>
                            ::core::option::Option::Some(PresentMode::AutoNoVsync {}),
                        "Fifo" =>
                            ::core::option::Option::Some(PresentMode::Fifo {}),
                        "FifoRelaxed" =>
                            ::core::option::Option::Some(PresentMode::FifoRelaxed {}),
                        "Immediate" =>
                            ::core::option::Option::Some(PresentMode::Immediate {}),
                        "Mailbox" =>
                            ::core::option::Option::Some(PresentMode::Mailbox {}),
                        name => ::core::option::Option::None,
                    }
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
1215    reflect(Debug, PartialEq, Hash, Clone)
1216)]
1217#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for PresentMode {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    PresentMode::AutoVsync =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "PresentMode", 0u32, "AutoVsync"),
                    PresentMode::AutoNoVsync =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "PresentMode", 1u32, "AutoNoVsync"),
                    PresentMode::Fifo =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "PresentMode", 2u32, "Fifo"),
                    PresentMode::FifoRelaxed =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "PresentMode", 3u32, "FifoRelaxed"),
                    PresentMode::Immediate =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "PresentMode", 4u32, "Immediate"),
                    PresentMode::Mailbox =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "PresentMode", 5u32, "Mailbox"),
                }
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for PresentMode {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field {
                    __field0,
                    __field1,
                    __field2,
                    __field3,
                    __field4,
                    __field5,
                }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "variant identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            4u64 => _serde::__private228::Ok(__Field::__field4),
                            5u64 => _serde::__private228::Ok(__Field::__field5),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 6")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "AutoVsync" => _serde::__private228::Ok(__Field::__field0),
                            "AutoNoVsync" =>
                                _serde::__private228::Ok(__Field::__field1),
                            "Fifo" => _serde::__private228::Ok(__Field::__field2),
                            "FifoRelaxed" =>
                                _serde::__private228::Ok(__Field::__field3),
                            "Immediate" => _serde::__private228::Ok(__Field::__field4),
                            "Mailbox" => _serde::__private228::Ok(__Field::__field5),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"AutoVsync" => _serde::__private228::Ok(__Field::__field0),
                            b"AutoNoVsync" =>
                                _serde::__private228::Ok(__Field::__field1),
                            b"Fifo" => _serde::__private228::Ok(__Field::__field2),
                            b"FifoRelaxed" =>
                                _serde::__private228::Ok(__Field::__field3),
                            b"Immediate" => _serde::__private228::Ok(__Field::__field4),
                            b"Mailbox" => _serde::__private228::Ok(__Field::__field5),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<PresentMode>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = PresentMode;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum PresentMode")
                    }
                    fn visit_enum<__A>(self, __data: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::EnumAccess<'de> {
                        match _serde::de::EnumAccess::variant(__data)? {
                            (__Field::__field0, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(PresentMode::AutoVsync)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(PresentMode::AutoNoVsync)
                            }
                            (__Field::__field2, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(PresentMode::Fifo)
                            }
                            (__Field::__field3, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(PresentMode::FifoRelaxed)
                            }
                            (__Field::__field4, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(PresentMode::Immediate)
                            }
                            (__Field::__field5, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(PresentMode::Mailbox)
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["AutoVsync", "AutoNoVsync", "Fifo", "FifoRelaxed",
                                "Immediate", "Mailbox"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "PresentMode", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<PresentMode>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
1218#[cfg_attr(
1219    all(feature = "serialize", feature = "bevy_reflect"),
1220    reflect(Serialize, Deserialize)
1221)]
1222#[doc(alias = "vsync")]
1223pub enum PresentMode {
1224    /// Chooses [`FifoRelaxed`](Self::FifoRelaxed) -> [`Fifo`](Self::Fifo) based on availability.
1225    ///
1226    /// Because of the fallback behavior, it is supported everywhere.
1227    AutoVsync = 0, // NOTE: The explicit ordinal values mirror wgpu.
1228    /// Chooses [`Immediate`](Self::Immediate) -> [`Mailbox`](Self::Mailbox) -> [`Fifo`](Self::Fifo) (on web) based on availability.
1229    ///
1230    /// Because of the fallback behavior, it is supported everywhere.
1231    AutoNoVsync = 1,
1232    /// Presentation frames are kept in a First-In-First-Out queue approximately 3 frames
1233    /// long. Every vertical blanking period, the presentation engine will pop a frame
1234    /// off the queue to display. If there is no frame to display, it will present the same
1235    /// frame again until the next vblank.
1236    ///
1237    /// When a present command is executed on the gpu, the presented image is added on the queue.
1238    ///
1239    /// No tearing will be observed.
1240    ///
1241    /// Calls to `get_current_texture` will block until there is a spot in the queue.
1242    ///
1243    /// Supported on all platforms.
1244    ///
1245    /// If you don't know what mode to choose, choose this mode. This is traditionally called "Vsync On".
1246    #[default]
1247    Fifo = 2,
1248    /// Presentation frames are kept in a First-In-First-Out queue approximately 3 frames
1249    /// long. Every vertical blanking period, the presentation engine will pop a frame
1250    /// off the queue to display. If there is no frame to display, it will present the
1251    /// same frame until there is a frame in the queue. The moment there is a frame in the
1252    /// queue, it will immediately pop the frame off the queue.
1253    ///
1254    /// When a present command is executed on the gpu, the presented image is added on the queue.
1255    ///
1256    /// Tearing will be observed if frames last more than one vblank as the front buffer.
1257    ///
1258    /// Calls to `get_current_texture` will block until there is a spot in the queue.
1259    ///
1260    /// Supported on AMD on Vulkan.
1261    ///
1262    /// This is traditionally called "Adaptive Vsync"
1263    FifoRelaxed = 3,
1264    /// Presentation frames are not queued at all. The moment a present command
1265    /// is executed on the GPU, the presented image is swapped onto the front buffer
1266    /// immediately.
1267    ///
1268    /// Tearing can be observed.
1269    ///
1270    /// Supported on most platforms except older DX12 and Wayland.
1271    ///
1272    /// This is traditionally called "Vsync Off".
1273    Immediate = 4,
1274    /// Presentation frames are kept in a single-frame queue. Every vertical blanking period,
1275    /// the presentation engine will pop a frame from the queue. If there is no frame to display,
1276    /// it will present the same frame again until the next vblank.
1277    ///
1278    /// When a present command is executed on the gpu, the frame will be put into the queue.
1279    /// If there was already a frame in the queue, the new frame will _replace_ the old frame
1280    /// on the queue.
1281    ///
1282    /// No tearing will be observed.
1283    ///
1284    /// Supported on DX11/12 on Windows 10, NVidia on Vulkan and Wayland on Vulkan.
1285    ///
1286    /// This is traditionally called "Fast Vsync"
1287    Mailbox = 5,
1288}
1289
1290/// Specifies how the alpha channel of the textures should be handled during compositing, for a [`Window`].
1291#[repr(C)]
1292#[derive(#[automatically_derived]
impl ::core::default::Default for CompositeAlphaMode {
    #[inline]
    fn default() -> CompositeAlphaMode { Self::Auto }
}Default, #[automatically_derived]
impl ::core::fmt::Debug for CompositeAlphaMode {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                CompositeAlphaMode::Auto => "Auto",
                CompositeAlphaMode::Opaque => "Opaque",
                CompositeAlphaMode::PreMultiplied => "PreMultiplied",
                CompositeAlphaMode::PostMultiplied => "PostMultiplied",
                CompositeAlphaMode::Inherit => "Inherit",
            })
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for CompositeAlphaMode {
    #[inline]
    fn clone(&self) -> CompositeAlphaMode { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for CompositeAlphaMode { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for CompositeAlphaMode {
    #[inline]
    fn eq(&self, other: &CompositeAlphaMode) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for CompositeAlphaMode {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for CompositeAlphaMode {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state)
    }
}Hash)]
1293#[cfg_attr(
1294    feature = "bevy_reflect",
1295    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for CompositeAlphaMode where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for CompositeAlphaMode where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Enum(bevy_reflect::enums::EnumInfo::new::<Self>(&[bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Auto")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Opaque")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("PreMultiplied")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("PostMultiplied")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Inherit"))]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for CompositeAlphaMode where  {
            fn type_path() -> &'static str {
                "bevy_window::window::CompositeAlphaMode"
            }
            fn short_type_path() -> &'static str { "CompositeAlphaMode" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("CompositeAlphaMode")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for CompositeAlphaMode where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<CompositeAlphaMode
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::enums::Enum for CompositeAlphaMode where  {
            fn field(&self, __name_param: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, __index_param: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, __name_param: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, __index_param: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn index_of(&self, __name_param: &str)
                -> ::core::option::Option<usize> {
                match self { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, __index_param: usize)
                -> ::core::option::Option<&str> {
                match self { _ => ::core::option::Option::None, }
            }
            fn iter_fields(&self) -> bevy_reflect::enums::VariantFieldIter {
                bevy_reflect::enums::VariantFieldIter::new(self)
            }
            #[inline]
            fn field_len(&self) -> usize {
                match self {
                    CompositeAlphaMode::Auto { .. } => 0usize,
                    CompositeAlphaMode::Opaque { .. } => 0usize,
                    CompositeAlphaMode::PreMultiplied { .. } => 0usize,
                    CompositeAlphaMode::PostMultiplied { .. } => 0usize,
                    CompositeAlphaMode::Inherit { .. } => 0usize,
                    _ => 0,
                }
            }
            #[inline]
            fn variant_name(&self) -> &str {
                match self {
                    CompositeAlphaMode::Auto { .. } => "Auto",
                    CompositeAlphaMode::Opaque { .. } => "Opaque",
                    CompositeAlphaMode::PreMultiplied { .. } => "PreMultiplied",
                    CompositeAlphaMode::PostMultiplied { .. } =>
                        "PostMultiplied",
                    CompositeAlphaMode::Inherit { .. } => "Inherit",
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_index(&self) -> usize {
                match self {
                    CompositeAlphaMode::Auto { .. } => 0usize,
                    CompositeAlphaMode::Opaque { .. } => 1usize,
                    CompositeAlphaMode::PreMultiplied { .. } => 2usize,
                    CompositeAlphaMode::PostMultiplied { .. } => 3usize,
                    CompositeAlphaMode::Inherit { .. } => 4usize,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_type(&self) -> bevy_reflect::enums::VariantType {
                match self {
                    CompositeAlphaMode::Auto { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    CompositeAlphaMode::Opaque { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    CompositeAlphaMode::PreMultiplied { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    CompositeAlphaMode::PostMultiplied { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    CompositeAlphaMode::Inherit { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            fn to_dynamic_enum(&self) -> bevy_reflect::enums::DynamicEnum {
                bevy_reflect::enums::DynamicEnum::from_ref::<Self>(self)
            }
        }
        impl bevy_reflect::PartialReflect for CompositeAlphaMode where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self,
                __value_param: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Enum(__value_param) =
                        bevy_reflect::PartialReflect::reflect_ref(__value_param) {
                    if bevy_reflect::enums::Enum::variant_name(self) ==
                            bevy_reflect::enums::Enum::variant_name(__value_param) {
                        match bevy_reflect::enums::Enum::variant_type(__value_param)
                            {
                            bevy_reflect::enums::VariantType::Struct => {
                                for field in
                                    bevy_reflect::enums::Enum::iter_fields(__value_param) {
                                    let name = field.name().unwrap();
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_mut(self, name) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            bevy_reflect::enums::VariantType::Tuple => {
                                for (index, field) in
                                    ::core::iter::Iterator::enumerate(bevy_reflect::enums::Enum::iter_fields(__value_param))
                                    {
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_at_mut(self, index) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            _ => {}
                        }
                    } else {
                        match bevy_reflect::enums::Enum::variant_name(__value_param)
                            {
                            "Auto" => { *self = CompositeAlphaMode::Auto {} }
                            "Opaque" => { *self = CompositeAlphaMode::Opaque {} }
                            "PreMultiplied" => {
                                *self = CompositeAlphaMode::PreMultiplied {}
                            }
                            "PostMultiplied" => {
                                *self = CompositeAlphaMode::PostMultiplied {}
                            }
                            "Inherit" => { *self = CompositeAlphaMode::Inherit {} }
                            name => {
                                return ::core::result::Result::Err(bevy_reflect::ApplyError::UnknownVariant {
                                            enum_name: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(self)),
                                            variant_name: ::core::convert::Into::into(name),
                                        });
                            }
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(__value_param),
                                to_kind: bevy_reflect::ReflectKind::Enum,
                            });
                }
                ::core::result::Result::Ok(())
            }
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Enum
            }
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Enum(self)
            }
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Enum(self)
            }
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Enum(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_hash(&self) -> ::core::option::Option<u64> {
                use ::core::hash::{Hash, Hasher};
                let mut hasher = bevy_reflect::utility::reflect_hasher();
                Hash::hash(&::core::any::Any::type_id(self), &mut hasher);
                Hash::hash(self, &mut hasher);
                ::core::option::Option::Some(Hasher::finish(&hasher))
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::enums::enum_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for CompositeAlphaMode where  {
            fn from_reflect(__param0: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Enum(__param0) =
                        bevy_reflect::PartialReflect::reflect_ref(__param0) {
                    match bevy_reflect::enums::Enum::variant_name(__param0) {
                        "Auto" =>
                            ::core::option::Option::Some(CompositeAlphaMode::Auto {}),
                        "Opaque" =>
                            ::core::option::Option::Some(CompositeAlphaMode::Opaque {}),
                        "PreMultiplied" =>
                            ::core::option::Option::Some(CompositeAlphaMode::PreMultiplied {}),
                        "PostMultiplied" =>
                            ::core::option::Option::Some(CompositeAlphaMode::PostMultiplied {}),
                        "Inherit" =>
                            ::core::option::Option::Some(CompositeAlphaMode::Inherit {}),
                        name => ::core::option::Option::None,
                    }
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
1296    reflect(Debug, PartialEq, Hash, Clone)
1297)]
1298#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for CompositeAlphaMode {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    CompositeAlphaMode::Auto =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "CompositeAlphaMode", 0u32, "Auto"),
                    CompositeAlphaMode::Opaque =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "CompositeAlphaMode", 1u32, "Opaque"),
                    CompositeAlphaMode::PreMultiplied =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "CompositeAlphaMode", 2u32, "PreMultiplied"),
                    CompositeAlphaMode::PostMultiplied =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "CompositeAlphaMode", 3u32, "PostMultiplied"),
                    CompositeAlphaMode::Inherit =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "CompositeAlphaMode", 4u32, "Inherit"),
                }
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for CompositeAlphaMode {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field {
                    __field0,
                    __field1,
                    __field2,
                    __field3,
                    __field4,
                }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "variant identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            4u64 => _serde::__private228::Ok(__Field::__field4),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 5")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Auto" => _serde::__private228::Ok(__Field::__field0),
                            "Opaque" => _serde::__private228::Ok(__Field::__field1),
                            "PreMultiplied" =>
                                _serde::__private228::Ok(__Field::__field2),
                            "PostMultiplied" =>
                                _serde::__private228::Ok(__Field::__field3),
                            "Inherit" => _serde::__private228::Ok(__Field::__field4),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"Auto" => _serde::__private228::Ok(__Field::__field0),
                            b"Opaque" => _serde::__private228::Ok(__Field::__field1),
                            b"PreMultiplied" =>
                                _serde::__private228::Ok(__Field::__field2),
                            b"PostMultiplied" =>
                                _serde::__private228::Ok(__Field::__field3),
                            b"Inherit" => _serde::__private228::Ok(__Field::__field4),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<CompositeAlphaMode>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = CompositeAlphaMode;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum CompositeAlphaMode")
                    }
                    fn visit_enum<__A>(self, __data: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::EnumAccess<'de> {
                        match _serde::de::EnumAccess::variant(__data)? {
                            (__Field::__field0, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(CompositeAlphaMode::Auto)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(CompositeAlphaMode::Opaque)
                            }
                            (__Field::__field2, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(CompositeAlphaMode::PreMultiplied)
                            }
                            (__Field::__field3, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(CompositeAlphaMode::PostMultiplied)
                            }
                            (__Field::__field4, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(CompositeAlphaMode::Inherit)
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Auto", "Opaque", "PreMultiplied", "PostMultiplied",
                                "Inherit"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "CompositeAlphaMode", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<CompositeAlphaMode>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
1299#[cfg_attr(
1300    all(feature = "serialize", feature = "bevy_reflect"),
1301    reflect(Serialize, Deserialize)
1302)]
1303pub enum CompositeAlphaMode {
1304    /// Chooses either [`Opaque`](CompositeAlphaMode::Opaque) or [`Inherit`](CompositeAlphaMode::Inherit)
1305    /// automatically, depending on the `alpha_mode` that the current surface can support.
1306    #[default]
1307    Auto = 0,
1308    /// The alpha channel, if it exists, of the textures is ignored in the
1309    /// compositing process. Instead, the textures is treated as if it has a
1310    /// constant alpha of 1.0.
1311    Opaque = 1,
1312    /// The alpha channel, if it exists, of the textures is respected in the
1313    /// compositing process. The non-alpha channels of the textures are
1314    /// expected to already be multiplied by the alpha channel by the
1315    /// application.
1316    PreMultiplied = 2,
1317    /// The alpha channel, if it exists, of the textures is respected in the
1318    /// compositing process. The non-alpha channels of the textures are not
1319    /// expected to already be multiplied by the alpha channel by the
1320    /// application; instead, the compositor will multiply the non-alpha
1321    /// channels of the texture by the alpha channel during compositing.
1322    PostMultiplied = 3,
1323    /// The alpha channel, if it exists, of the textures is unknown for processing
1324    /// during compositing. Instead, the application is responsible for setting
1325    /// the composite alpha blending mode using native WSI command. If not set,
1326    /// then a platform-specific default will be used.
1327    Inherit = 4,
1328}
1329
1330/// Defines the way a [`Window`] is displayed.
1331#[derive(#[automatically_derived]
impl ::core::default::Default for WindowMode {
    #[inline]
    fn default() -> WindowMode { Self::Windowed }
}Default, #[automatically_derived]
impl ::core::fmt::Debug for WindowMode {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            WindowMode::Windowed =>
                ::core::fmt::Formatter::write_str(f, "Windowed"),
            WindowMode::BorderlessFullscreen(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "BorderlessFullscreen", &__self_0),
            WindowMode::Fullscreen(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "Fullscreen", __self_0, &__self_1),
        }
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for WindowMode {
    #[inline]
    fn clone(&self) -> WindowMode {
        let _: ::core::clone::AssertParamIsClone<MonitorSelection>;
        let _: ::core::clone::AssertParamIsClone<VideoModeSelection>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for WindowMode { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for WindowMode {
    #[inline]
    fn eq(&self, other: &WindowMode) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (WindowMode::BorderlessFullscreen(__self_0),
                    WindowMode::BorderlessFullscreen(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (WindowMode::Fullscreen(__self_0, __self_1),
                    WindowMode::Fullscreen(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                _ => true,
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for WindowMode {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<MonitorSelection>;
        let _: ::core::cmp::AssertParamIsEq<VideoModeSelection>;
    }
}Eq)]
1332#[cfg_attr(
1333    feature = "bevy_reflect",
1334    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for WindowMode where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <MonitorSelection as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <VideoModeSelection as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for WindowMode where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Enum(bevy_reflect::enums::EnumInfo::new::<Self>(&[bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Windowed")),
                                                bevy_reflect::enums::VariantInfo::Tuple(bevy_reflect::enums::TupleVariantInfo::new("BorderlessFullscreen",
                                                        &[bevy_reflect::UnnamedField::new::<MonitorSelection>(0usize)])),
                                                bevy_reflect::enums::VariantInfo::Tuple(bevy_reflect::enums::TupleVariantInfo::new("Fullscreen",
                                                        &[bevy_reflect::UnnamedField::new::<MonitorSelection>(0usize),
                                                                    bevy_reflect::UnnamedField::new::<VideoModeSelection>(1usize)]))]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for WindowMode where  {
            fn type_path() -> &'static str {
                "bevy_window::window::WindowMode"
            }
            fn short_type_path() -> &'static str { "WindowMode" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("WindowMode")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for WindowMode where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<WindowMode
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::enums::Enum for WindowMode where  {
            fn field(&self, __name_param: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, __index_param: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self {
                    WindowMode::BorderlessFullscreen { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    WindowMode::Fullscreen { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    WindowMode::Fullscreen { 1: __value, .. } if
                        __index_param == 1usize =>
                        ::core::option::Option::Some(__value),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, __name_param: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, __index_param: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self {
                    WindowMode::BorderlessFullscreen { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    WindowMode::Fullscreen { 0: __value, .. } if
                        __index_param == 0usize =>
                        ::core::option::Option::Some(__value),
                    WindowMode::Fullscreen { 1: __value, .. } if
                        __index_param == 1usize =>
                        ::core::option::Option::Some(__value),
                    _ => ::core::option::Option::None,
                }
            }
            fn index_of(&self, __name_param: &str)
                -> ::core::option::Option<usize> {
                match self { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, __index_param: usize)
                -> ::core::option::Option<&str> {
                match self { _ => ::core::option::Option::None, }
            }
            fn iter_fields(&self) -> bevy_reflect::enums::VariantFieldIter {
                bevy_reflect::enums::VariantFieldIter::new(self)
            }
            #[inline]
            fn field_len(&self) -> usize {
                match self {
                    WindowMode::Windowed { .. } => 0usize,
                    WindowMode::BorderlessFullscreen { .. } => 1usize,
                    WindowMode::Fullscreen { .. } => 2usize,
                    _ => 0,
                }
            }
            #[inline]
            fn variant_name(&self) -> &str {
                match self {
                    WindowMode::Windowed { .. } => "Windowed",
                    WindowMode::BorderlessFullscreen { .. } =>
                        "BorderlessFullscreen",
                    WindowMode::Fullscreen { .. } => "Fullscreen",
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_index(&self) -> usize {
                match self {
                    WindowMode::Windowed { .. } => 0usize,
                    WindowMode::BorderlessFullscreen { .. } => 1usize,
                    WindowMode::Fullscreen { .. } => 2usize,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_type(&self) -> bevy_reflect::enums::VariantType {
                match self {
                    WindowMode::Windowed { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    WindowMode::BorderlessFullscreen { .. } =>
                        bevy_reflect::enums::VariantType::Tuple,
                    WindowMode::Fullscreen { .. } =>
                        bevy_reflect::enums::VariantType::Tuple,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            fn to_dynamic_enum(&self) -> bevy_reflect::enums::DynamicEnum {
                bevy_reflect::enums::DynamicEnum::from_ref::<Self>(self)
            }
        }
        impl bevy_reflect::PartialReflect for WindowMode where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self,
                __value_param: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Enum(__value_param) =
                        bevy_reflect::PartialReflect::reflect_ref(__value_param) {
                    if bevy_reflect::enums::Enum::variant_name(self) ==
                            bevy_reflect::enums::Enum::variant_name(__value_param) {
                        match bevy_reflect::enums::Enum::variant_type(__value_param)
                            {
                            bevy_reflect::enums::VariantType::Struct => {
                                for field in
                                    bevy_reflect::enums::Enum::iter_fields(__value_param) {
                                    let name = field.name().unwrap();
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_mut(self, name) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            bevy_reflect::enums::VariantType::Tuple => {
                                for (index, field) in
                                    ::core::iter::Iterator::enumerate(bevy_reflect::enums::Enum::iter_fields(__value_param))
                                    {
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_at_mut(self, index) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            _ => {}
                        }
                    } else {
                        match bevy_reflect::enums::Enum::variant_name(__value_param)
                            {
                            "Windowed" => { *self = WindowMode::Windowed {} }
                            "BorderlessFullscreen" => {
                                *self =
                                    WindowMode::BorderlessFullscreen {
                                        0: {
                                            let __0 = __value_param.field_at(0usize);
                                            let __0 =
                                                __0.ok_or(bevy_reflect::ApplyError::MissingEnumField {
                                                            variant_name: ::core::convert::Into::into("BorderlessFullscreen"),
                                                            field_name: ::core::convert::Into::into(".0"),
                                                        })?;
                                            <MonitorSelection as
                                                            bevy_reflect::FromReflect>::from_reflect(__0).ok_or(bevy_reflect::ApplyError::MismatchedTypes {
                                                        from_type: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(__0)),
                                                        to_type: ::core::convert::Into::into(<MonitorSelection as
                                                                    bevy_reflect::TypePath>::type_path()),
                                                    })?
                                        },
                                    }
                            }
                            "Fullscreen" => {
                                *self =
                                    WindowMode::Fullscreen {
                                        0: {
                                            let __0 = __value_param.field_at(0usize);
                                            let __0 =
                                                __0.ok_or(bevy_reflect::ApplyError::MissingEnumField {
                                                            variant_name: ::core::convert::Into::into("Fullscreen"),
                                                            field_name: ::core::convert::Into::into(".0"),
                                                        })?;
                                            <MonitorSelection as
                                                            bevy_reflect::FromReflect>::from_reflect(__0).ok_or(bevy_reflect::ApplyError::MismatchedTypes {
                                                        from_type: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(__0)),
                                                        to_type: ::core::convert::Into::into(<MonitorSelection as
                                                                    bevy_reflect::TypePath>::type_path()),
                                                    })?
                                        },
                                        1: {
                                            let __1 = __value_param.field_at(1usize);
                                            let __1 =
                                                __1.ok_or(bevy_reflect::ApplyError::MissingEnumField {
                                                            variant_name: ::core::convert::Into::into("Fullscreen"),
                                                            field_name: ::core::convert::Into::into(".1"),
                                                        })?;
                                            <VideoModeSelection as
                                                            bevy_reflect::FromReflect>::from_reflect(__1).ok_or(bevy_reflect::ApplyError::MismatchedTypes {
                                                        from_type: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(__1)),
                                                        to_type: ::core::convert::Into::into(<VideoModeSelection as
                                                                    bevy_reflect::TypePath>::type_path()),
                                                    })?
                                        },
                                    }
                            }
                            name => {
                                return ::core::result::Result::Err(bevy_reflect::ApplyError::UnknownVariant {
                                            enum_name: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(self)),
                                            variant_name: ::core::convert::Into::into(name),
                                        });
                            }
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(__value_param),
                                to_kind: bevy_reflect::ReflectKind::Enum,
                            });
                }
                ::core::result::Result::Ok(())
            }
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Enum
            }
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Enum(self)
            }
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Enum(self)
            }
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Enum(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_hash(&self) -> ::core::option::Option<u64> {
                (bevy_reflect::enums::enum_hash)(self)
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::enums::enum_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for WindowMode where  {
            fn from_reflect(__param0: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Enum(__param0) =
                        bevy_reflect::PartialReflect::reflect_ref(__param0) {
                    match bevy_reflect::enums::Enum::variant_name(__param0) {
                        "Windowed" =>
                            ::core::option::Option::Some(WindowMode::Windowed {}),
                        "BorderlessFullscreen" =>
                            ::core::option::Option::Some(WindowMode::BorderlessFullscreen {
                                    0: {
                                        let __0 = __param0.field_at(0usize);
                                        let __0 = __0?;
                                        <MonitorSelection as
                                                    bevy_reflect::FromReflect>::from_reflect(__0)?
                                    },
                                }),
                        "Fullscreen" =>
                            ::core::option::Option::Some(WindowMode::Fullscreen {
                                    0: {
                                        let __0 = __param0.field_at(0usize);
                                        let __0 = __0?;
                                        <MonitorSelection as
                                                    bevy_reflect::FromReflect>::from_reflect(__0)?
                                    },
                                    1: {
                                        let __1 = __param0.field_at(1usize);
                                        let __1 = __1?;
                                        <VideoModeSelection as
                                                    bevy_reflect::FromReflect>::from_reflect(__1)?
                                    },
                                }),
                        name => ::core::option::Option::None,
                    }
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
1335    reflect(Debug, PartialEq, Clone)
1336)]
1337#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for WindowMode {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    WindowMode::Windowed =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "WindowMode", 0u32, "Windowed"),
                    WindowMode::BorderlessFullscreen(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "WindowMode", 1u32, "BorderlessFullscreen", __field0),
                    WindowMode::Fullscreen(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "WindowMode", 2u32, "Fullscreen", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                }
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for WindowMode {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field { __field0, __field1, __field2, }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "variant identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 3")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Windowed" => _serde::__private228::Ok(__Field::__field0),
                            "BorderlessFullscreen" =>
                                _serde::__private228::Ok(__Field::__field1),
                            "Fullscreen" => _serde::__private228::Ok(__Field::__field2),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"Windowed" => _serde::__private228::Ok(__Field::__field0),
                            b"BorderlessFullscreen" =>
                                _serde::__private228::Ok(__Field::__field1),
                            b"Fullscreen" =>
                                _serde::__private228::Ok(__Field::__field2),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<WindowMode>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = WindowMode;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum WindowMode")
                    }
                    fn visit_enum<__A>(self, __data: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::EnumAccess<'de> {
                        match _serde::de::EnumAccess::variant(__data)? {
                            (__Field::__field0, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(WindowMode::Windowed)
                            }
                            (__Field::__field1, __variant) =>
                                _serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<MonitorSelection>(__variant),
                                    WindowMode::BorderlessFullscreen),
                            (__Field::__field2, __variant) => {
                                #[doc(hidden)]
                                struct __Visitor<'de> {
                                    marker: _serde::__private228::PhantomData<WindowMode>,
                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                }
                                #[automatically_derived]
                                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                                    type Value = WindowMode;
                                    fn expecting(&self,
                                        __formatter: &mut _serde::__private228::Formatter)
                                        -> _serde::__private228::fmt::Result {
                                        _serde::__private228::Formatter::write_str(__formatter,
                                            "tuple variant WindowMode::Fullscreen")
                                    }
                                    #[inline]
                                    fn visit_seq<__A>(self, mut __seq: __A)
                                        -> _serde::__private228::Result<Self::Value, __A::Error>
                                        where __A: _serde::de::SeqAccess<'de> {
                                        let __field0 =
                                            match _serde::de::SeqAccess::next_element::<MonitorSelection>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                                &"tuple variant WindowMode::Fullscreen with 2 elements")),
                                            };
                                        let __field1 =
                                            match _serde::de::SeqAccess::next_element::<VideoModeSelection>(&mut __seq)?
                                                {
                                                _serde::__private228::Some(__value) => __value,
                                                _serde::__private228::None =>
                                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                                &"tuple variant WindowMode::Fullscreen with 2 elements")),
                                            };
                                        _serde::__private228::Ok(WindowMode::Fullscreen(__field0,
                                                __field1))
                                    }
                                }
                                _serde::de::VariantAccess::tuple_variant(__variant, 2usize,
                                    __Visitor {
                                        marker: _serde::__private228::PhantomData::<WindowMode>,
                                        lifetime: _serde::__private228::PhantomData,
                                    })
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["Windowed", "BorderlessFullscreen", "Fullscreen"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "WindowMode", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<WindowMode>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
1338#[cfg_attr(
1339    all(feature = "serialize", feature = "bevy_reflect"),
1340    reflect(Serialize, Deserialize)
1341)]
1342pub enum WindowMode {
1343    /// The window should take a portion of the screen, using the window resolution size.
1344    #[default]
1345    Windowed,
1346    /// The window should appear fullscreen by being borderless and using the full
1347    /// size of the screen on the given [`MonitorSelection`].
1348    ///
1349    /// When setting this, the window's physical size will be modified to match the size
1350    /// of the current monitor resolution, and the logical size will follow based
1351    /// on the scale factor, see [`WindowResolution`].
1352    ///
1353    /// Note: As this mode respects the scale factor provided by the operating system,
1354    /// the window's logical size may be different from its physical size.
1355    /// If you want to avoid that behavior, you can use the [`WindowResolution::set_scale_factor_override`] function
1356    /// or the [`WindowResolution::with_scale_factor_override`] builder method to set the scale factor to 1.0.
1357    BorderlessFullscreen(MonitorSelection),
1358    /// The window should be in "true"/"legacy"/"exclusive" Fullscreen mode on the given [`MonitorSelection`].
1359    ///
1360    /// The resolution, refresh rate, and bit depth are selected based on the given [`VideoModeSelection`].
1361    ///
1362    /// Note: As this mode respects the scale factor provided by the operating system,
1363    /// the window's logical size may be different from its physical size.
1364    /// If you want to avoid that behavior, you can use the [`WindowResolution::set_scale_factor_override`] function
1365    /// or the [`WindowResolution::with_scale_factor_override`] builder method to set the scale factor to 1.0.
1366    Fullscreen(MonitorSelection, VideoModeSelection),
1367}
1368
1369/// Specifies where a [`Window`] should appear relative to other overlapping windows (on top or under) .
1370///
1371/// Levels are groups of windows with respect to their z-position.
1372///
1373/// The relative ordering between windows in different window levels is fixed.
1374/// The z-order of windows within the same window level may change dynamically on user interaction.
1375///
1376/// ## Platform-specific
1377///
1378/// - **iOS / Android / Web / Wayland:** Unsupported.
1379#[derive(#[automatically_derived]
impl ::core::default::Default for WindowLevel {
    #[inline]
    fn default() -> WindowLevel { Self::Normal }
}Default, #[automatically_derived]
impl ::core::fmt::Debug for WindowLevel {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                WindowLevel::AlwaysOnBottom => "AlwaysOnBottom",
                WindowLevel::Normal => "Normal",
                WindowLevel::AlwaysOnTop => "AlwaysOnTop",
            })
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for WindowLevel {
    #[inline]
    fn clone(&self) -> WindowLevel { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for WindowLevel { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for WindowLevel {
    #[inline]
    fn eq(&self, other: &WindowLevel) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for WindowLevel {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq)]
1380#[cfg_attr(
1381    feature = "bevy_reflect",
1382    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for WindowLevel where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for WindowLevel where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Enum(bevy_reflect::enums::EnumInfo::new::<Self>(&[bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("AlwaysOnBottom")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Normal")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("AlwaysOnTop"))]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for WindowLevel where  {
            fn type_path() -> &'static str {
                "bevy_window::window::WindowLevel"
            }
            fn short_type_path() -> &'static str { "WindowLevel" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("WindowLevel")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for WindowLevel where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<WindowLevel
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::enums::Enum for WindowLevel where  {
            fn field(&self, __name_param: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, __index_param: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, __name_param: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, __index_param: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn index_of(&self, __name_param: &str)
                -> ::core::option::Option<usize> {
                match self { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, __index_param: usize)
                -> ::core::option::Option<&str> {
                match self { _ => ::core::option::Option::None, }
            }
            fn iter_fields(&self) -> bevy_reflect::enums::VariantFieldIter {
                bevy_reflect::enums::VariantFieldIter::new(self)
            }
            #[inline]
            fn field_len(&self) -> usize {
                match self {
                    WindowLevel::AlwaysOnBottom { .. } => 0usize,
                    WindowLevel::Normal { .. } => 0usize,
                    WindowLevel::AlwaysOnTop { .. } => 0usize,
                    _ => 0,
                }
            }
            #[inline]
            fn variant_name(&self) -> &str {
                match self {
                    WindowLevel::AlwaysOnBottom { .. } => "AlwaysOnBottom",
                    WindowLevel::Normal { .. } => "Normal",
                    WindowLevel::AlwaysOnTop { .. } => "AlwaysOnTop",
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_index(&self) -> usize {
                match self {
                    WindowLevel::AlwaysOnBottom { .. } => 0usize,
                    WindowLevel::Normal { .. } => 1usize,
                    WindowLevel::AlwaysOnTop { .. } => 2usize,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_type(&self) -> bevy_reflect::enums::VariantType {
                match self {
                    WindowLevel::AlwaysOnBottom { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    WindowLevel::Normal { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    WindowLevel::AlwaysOnTop { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            fn to_dynamic_enum(&self) -> bevy_reflect::enums::DynamicEnum {
                bevy_reflect::enums::DynamicEnum::from_ref::<Self>(self)
            }
        }
        impl bevy_reflect::PartialReflect for WindowLevel where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self,
                __value_param: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Enum(__value_param) =
                        bevy_reflect::PartialReflect::reflect_ref(__value_param) {
                    if bevy_reflect::enums::Enum::variant_name(self) ==
                            bevy_reflect::enums::Enum::variant_name(__value_param) {
                        match bevy_reflect::enums::Enum::variant_type(__value_param)
                            {
                            bevy_reflect::enums::VariantType::Struct => {
                                for field in
                                    bevy_reflect::enums::Enum::iter_fields(__value_param) {
                                    let name = field.name().unwrap();
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_mut(self, name) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            bevy_reflect::enums::VariantType::Tuple => {
                                for (index, field) in
                                    ::core::iter::Iterator::enumerate(bevy_reflect::enums::Enum::iter_fields(__value_param))
                                    {
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_at_mut(self, index) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            _ => {}
                        }
                    } else {
                        match bevy_reflect::enums::Enum::variant_name(__value_param)
                            {
                            "AlwaysOnBottom" => {
                                *self = WindowLevel::AlwaysOnBottom {}
                            }
                            "Normal" => { *self = WindowLevel::Normal {} }
                            "AlwaysOnTop" => { *self = WindowLevel::AlwaysOnTop {} }
                            name => {
                                return ::core::result::Result::Err(bevy_reflect::ApplyError::UnknownVariant {
                                            enum_name: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(self)),
                                            variant_name: ::core::convert::Into::into(name),
                                        });
                            }
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(__value_param),
                                to_kind: bevy_reflect::ReflectKind::Enum,
                            });
                }
                ::core::result::Result::Ok(())
            }
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Enum
            }
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Enum(self)
            }
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Enum(self)
            }
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Enum(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_hash(&self) -> ::core::option::Option<u64> {
                (bevy_reflect::enums::enum_hash)(self)
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::enums::enum_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for WindowLevel where  {
            fn from_reflect(__param0: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Enum(__param0) =
                        bevy_reflect::PartialReflect::reflect_ref(__param0) {
                    match bevy_reflect::enums::Enum::variant_name(__param0) {
                        "AlwaysOnBottom" =>
                            ::core::option::Option::Some(WindowLevel::AlwaysOnBottom {}),
                        "Normal" =>
                            ::core::option::Option::Some(WindowLevel::Normal {}),
                        "AlwaysOnTop" =>
                            ::core::option::Option::Some(WindowLevel::AlwaysOnTop {}),
                        name => ::core::option::Option::None,
                    }
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
1383    reflect(Debug, PartialEq, Clone)
1384)]
1385#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for WindowLevel {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    WindowLevel::AlwaysOnBottom =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "WindowLevel", 0u32, "AlwaysOnBottom"),
                    WindowLevel::Normal =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "WindowLevel", 1u32, "Normal"),
                    WindowLevel::AlwaysOnTop =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "WindowLevel", 2u32, "AlwaysOnTop"),
                }
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for WindowLevel {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field { __field0, __field1, __field2, }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "variant identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 3")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "AlwaysOnBottom" =>
                                _serde::__private228::Ok(__Field::__field0),
                            "Normal" => _serde::__private228::Ok(__Field::__field1),
                            "AlwaysOnTop" =>
                                _serde::__private228::Ok(__Field::__field2),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"AlwaysOnBottom" =>
                                _serde::__private228::Ok(__Field::__field0),
                            b"Normal" => _serde::__private228::Ok(__Field::__field1),
                            b"AlwaysOnTop" =>
                                _serde::__private228::Ok(__Field::__field2),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<WindowLevel>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = WindowLevel;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum WindowLevel")
                    }
                    fn visit_enum<__A>(self, __data: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::EnumAccess<'de> {
                        match _serde::de::EnumAccess::variant(__data)? {
                            (__Field::__field0, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(WindowLevel::AlwaysOnBottom)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(WindowLevel::Normal)
                            }
                            (__Field::__field2, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(WindowLevel::AlwaysOnTop)
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["AlwaysOnBottom", "Normal", "AlwaysOnTop"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "WindowLevel", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<WindowLevel>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
1386#[cfg_attr(
1387    all(feature = "serialize", feature = "bevy_reflect"),
1388    reflect(Serialize, Deserialize)
1389)]
1390pub enum WindowLevel {
1391    /// The window will always be below [`WindowLevel::Normal`] and [`WindowLevel::AlwaysOnTop`] windows.
1392    ///
1393    /// This is useful for a widget-based app.
1394    AlwaysOnBottom,
1395    /// The default group.
1396    #[default]
1397    Normal,
1398    /// The window will always be on top of [`WindowLevel::Normal`] and [`WindowLevel::AlwaysOnBottom`] windows.
1399    AlwaysOnTop,
1400}
1401
1402/// The [`Window`] theme variant to use.
1403#[derive(#[automatically_derived]
impl ::core::fmt::Debug for WindowTheme {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                WindowTheme::Light => "Light",
                WindowTheme::Dark => "Dark",
            })
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for WindowTheme {
    #[inline]
    fn clone(&self) -> WindowTheme { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for WindowTheme { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for WindowTheme {
    #[inline]
    fn eq(&self, other: &WindowTheme) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for WindowTheme {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq)]
1404#[cfg_attr(
1405    feature = "bevy_reflect",
1406    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for WindowTheme where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for WindowTheme where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Enum(bevy_reflect::enums::EnumInfo::new::<Self>(&[bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Light")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Dark"))]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for WindowTheme where  {
            fn type_path() -> &'static str {
                "bevy_window::window::WindowTheme"
            }
            fn short_type_path() -> &'static str { "WindowTheme" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("WindowTheme")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for WindowTheme where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<WindowTheme
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::enums::Enum for WindowTheme where  {
            fn field(&self, __name_param: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, __index_param: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, __name_param: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, __index_param: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn index_of(&self, __name_param: &str)
                -> ::core::option::Option<usize> {
                match self { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, __index_param: usize)
                -> ::core::option::Option<&str> {
                match self { _ => ::core::option::Option::None, }
            }
            fn iter_fields(&self) -> bevy_reflect::enums::VariantFieldIter {
                bevy_reflect::enums::VariantFieldIter::new(self)
            }
            #[inline]
            fn field_len(&self) -> usize {
                match self {
                    WindowTheme::Light { .. } => 0usize,
                    WindowTheme::Dark { .. } => 0usize,
                    _ => 0,
                }
            }
            #[inline]
            fn variant_name(&self) -> &str {
                match self {
                    WindowTheme::Light { .. } => "Light",
                    WindowTheme::Dark { .. } => "Dark",
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_index(&self) -> usize {
                match self {
                    WindowTheme::Light { .. } => 0usize,
                    WindowTheme::Dark { .. } => 1usize,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_type(&self) -> bevy_reflect::enums::VariantType {
                match self {
                    WindowTheme::Light { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    WindowTheme::Dark { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            fn to_dynamic_enum(&self) -> bevy_reflect::enums::DynamicEnum {
                bevy_reflect::enums::DynamicEnum::from_ref::<Self>(self)
            }
        }
        impl bevy_reflect::PartialReflect for WindowTheme where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self,
                __value_param: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Enum(__value_param) =
                        bevy_reflect::PartialReflect::reflect_ref(__value_param) {
                    if bevy_reflect::enums::Enum::variant_name(self) ==
                            bevy_reflect::enums::Enum::variant_name(__value_param) {
                        match bevy_reflect::enums::Enum::variant_type(__value_param)
                            {
                            bevy_reflect::enums::VariantType::Struct => {
                                for field in
                                    bevy_reflect::enums::Enum::iter_fields(__value_param) {
                                    let name = field.name().unwrap();
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_mut(self, name) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            bevy_reflect::enums::VariantType::Tuple => {
                                for (index, field) in
                                    ::core::iter::Iterator::enumerate(bevy_reflect::enums::Enum::iter_fields(__value_param))
                                    {
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_at_mut(self, index) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            _ => {}
                        }
                    } else {
                        match bevy_reflect::enums::Enum::variant_name(__value_param)
                            {
                            "Light" => { *self = WindowTheme::Light {} }
                            "Dark" => { *self = WindowTheme::Dark {} }
                            name => {
                                return ::core::result::Result::Err(bevy_reflect::ApplyError::UnknownVariant {
                                            enum_name: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(self)),
                                            variant_name: ::core::convert::Into::into(name),
                                        });
                            }
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(__value_param),
                                to_kind: bevy_reflect::ReflectKind::Enum,
                            });
                }
                ::core::result::Result::Ok(())
            }
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Enum
            }
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Enum(self)
            }
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Enum(self)
            }
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Enum(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_hash(&self) -> ::core::option::Option<u64> {
                (bevy_reflect::enums::enum_hash)(self)
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::enums::enum_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for WindowTheme where  {
            fn from_reflect(__param0: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Enum(__param0) =
                        bevy_reflect::PartialReflect::reflect_ref(__param0) {
                    match bevy_reflect::enums::Enum::variant_name(__param0) {
                        "Light" =>
                            ::core::option::Option::Some(WindowTheme::Light {}),
                        "Dark" =>
                            ::core::option::Option::Some(WindowTheme::Dark {}),
                        name => ::core::option::Option::None,
                    }
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
1407    reflect(Debug, PartialEq, Clone)
1408)]
1409#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for WindowTheme {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    WindowTheme::Light =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "WindowTheme", 0u32, "Light"),
                    WindowTheme::Dark =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "WindowTheme", 1u32, "Dark"),
                }
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for WindowTheme {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field { __field0, __field1, }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "variant identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 2")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "Light" => _serde::__private228::Ok(__Field::__field0),
                            "Dark" => _serde::__private228::Ok(__Field::__field1),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"Light" => _serde::__private228::Ok(__Field::__field0),
                            b"Dark" => _serde::__private228::Ok(__Field::__field1),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<WindowTheme>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = WindowTheme;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum WindowTheme")
                    }
                    fn visit_enum<__A>(self, __data: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::EnumAccess<'de> {
                        match _serde::de::EnumAccess::variant(__data)? {
                            (__Field::__field0, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(WindowTheme::Light)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(WindowTheme::Dark)
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] = &["Light", "Dark"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "WindowTheme", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<WindowTheme>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
1410#[cfg_attr(
1411    all(feature = "serialize", feature = "bevy_reflect"),
1412    reflect(Serialize, Deserialize)
1413)]
1414pub enum WindowTheme {
1415    /// Use the light variant.
1416    Light,
1417
1418    /// Use the dark variant.
1419    Dark,
1420}
1421
1422/// Specifies which [`Window`] control buttons should be enabled.
1423///
1424/// ## Platform-specific
1425///
1426/// **`iOS`**, **`Android`**, and the **`Web`** do not have window control buttons.
1427///
1428/// On some **`Linux`** environments these values have no effect.
1429#[derive(#[automatically_derived]
impl ::core::fmt::Debug for EnabledButtons {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f,
            "EnabledButtons", "minimize", &self.minimize, "maximize",
            &self.maximize, "close", &&self.close)
    }
}Debug, #[automatically_derived]
impl ::core::marker::Copy for EnabledButtons { }Copy, #[automatically_derived]
impl ::core::clone::Clone for EnabledButtons {
    #[inline]
    fn clone(&self) -> EnabledButtons {
        let _: ::core::clone::AssertParamIsClone<bool>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for EnabledButtons {
    #[inline]
    fn eq(&self, other: &EnabledButtons) -> bool {
        self.minimize == other.minimize && self.maximize == other.maximize &&
            self.close == other.close
    }
}PartialEq)]
1430#[cfg_attr(
1431    feature = "bevy_reflect",
1432    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for EnabledButtons where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration.register_type_data::<ReflectDefault, Self>();
                registration.register_type_data::<ReflectSerialize, Self>();
                registration.register_type_data::<ReflectDeserialize, Self>();
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <bool as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for EnabledButtons where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[bevy_reflect::NamedField::new::<bool>("minimize"),
                                                bevy_reflect::NamedField::new::<bool>("maximize"),
                                                bevy_reflect::NamedField::new::<bool>("close")]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for EnabledButtons where  {
            fn type_path() -> &'static str {
                "bevy_window::window::EnabledButtons"
            }
            fn short_type_path() -> &'static str { "EnabledButtons" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("EnabledButtons")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for EnabledButtons where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<EnabledButtons
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for EnabledButtons where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name {
                    "minimize" => ::core::option::Option::Some(&self.minimize),
                    "maximize" => ::core::option::Option::Some(&self.maximize),
                    "close" => ::core::option::Option::Some(&self.close),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name {
                    "minimize" =>
                        ::core::option::Option::Some(&mut self.minimize),
                    "maximize" =>
                        ::core::option::Option::Some(&mut self.maximize),
                    "close" => ::core::option::Option::Some(&mut self.close),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize => ::core::option::Option::Some(&self.minimize),
                    1usize => ::core::option::Option::Some(&self.maximize),
                    2usize => ::core::option::Option::Some(&self.close),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize => ::core::option::Option::Some(&mut self.minimize),
                    1usize => ::core::option::Option::Some(&mut self.maximize),
                    2usize => ::core::option::Option::Some(&mut self.close),
                    _ => ::core::option::Option::None,
                }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index {
                    0usize => ::core::option::Option::Some("minimize"),
                    1usize => ::core::option::Option::Some("maximize"),
                    2usize => ::core::option::Option::Some("close"),
                    _ => ::core::option::Option::None,
                }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name {
                    "minimize" => ::core::option::Option::Some(0usize),
                    "maximize" => ::core::option::Option::Some(1usize),
                    "close" => ::core::option::Option::Some(2usize),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_len(&self) -> usize { 3usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                -> bevy_reflect::structs::DynamicStruct {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                dynamic.insert_boxed("minimize",
                    bevy_reflect::PartialReflect::to_dynamic(&self.minimize));
                dynamic.insert_boxed("maximize",
                    bevy_reflect::PartialReflect::to_dynamic(&self.maximize));
                dynamic.insert_boxed("close",
                    bevy_reflect::PartialReflect::to_dynamic(&self.close));
                dynamic
            }
        }
        impl bevy_reflect::PartialReflect for EnabledButtons where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                let value =
                    <dyn bevy_reflect::PartialReflect>::try_downcast_ref::<Self>(value);
                if let ::core::option::Option::Some(value) = value {
                    ::core::option::Option::Some(::core::cmp::PartialEq::eq(self,
                            value))
                } else { ::core::option::Option::Some(false) }
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for EnabledButtons where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let mut __this =
                        <Self as ::core::default::Default>::default();
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "minimize")?))() {
                        __this.minimize = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "maximize")?))() {
                        __this.maximize = __field;
                    }
                    if let ::core::option::Option::Some(__field) =
                            (||
                                        <bool as
                                                bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                                    "close")?))() {
                        __this.close = __field;
                    }
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
1433    reflect(Debug, PartialEq, Default, Clone)
1434)]
1435#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for EnabledButtons {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "EnabledButtons", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "minimize", &self.minimize)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "maximize", &self.maximize)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "close", &self.close)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for EnabledButtons {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field { __field0, __field1, __field2, __ignore, }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "field identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            _ => _serde::__private228::Ok(__Field::__ignore),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "minimize" => _serde::__private228::Ok(__Field::__field0),
                            "maximize" => _serde::__private228::Ok(__Field::__field1),
                            "close" => _serde::__private228::Ok(__Field::__field2),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"minimize" => _serde::__private228::Ok(__Field::__field0),
                            b"maximize" => _serde::__private228::Ok(__Field::__field1),
                            b"close" => _serde::__private228::Ok(__Field::__field2),
                            _ => { _serde::__private228::Ok(__Field::__ignore) }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<EnabledButtons>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = EnabledButtons;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct EnabledButtons")
                    }
                    #[inline]
                    fn visit_seq<__A>(self, mut __seq: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::SeqAccess<'de> {
                        let __field0 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct EnabledButtons with 3 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct EnabledButtons with 3 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct EnabledButtons with 3 elements")),
                            };
                        _serde::__private228::Ok(EnabledButtons {
                                minimize: __field0,
                                maximize: __field1,
                                close: __field2,
                            })
                    }
                    #[inline]
                    fn visit_map<__A>(self, mut __map: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::MapAccess<'de> {
                        let mut __field0: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field2: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        while let _serde::__private228::Some(__key) =
                                _serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
                            match __key {
                                __Field::__field0 => {
                                    if _serde::__private228::Option::is_some(&__field0) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("minimize"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("maximize"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("close"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
                                }
                                _ => {
                                    let _ =
                                        _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
                                }
                            }
                        }
                        let __field0 =
                            match __field0 {
                                _serde::__private228::Some(__field0) => __field0,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("minimize")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("maximize")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("close")?,
                            };
                        _serde::__private228::Ok(EnabledButtons {
                                minimize: __field0,
                                maximize: __field1,
                                close: __field2,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["minimize", "maximize", "close"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "EnabledButtons", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<EnabledButtons>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
1436#[cfg_attr(
1437    all(feature = "serialize", feature = "bevy_reflect"),
1438    reflect(Serialize, Deserialize)
1439)]
1440pub struct EnabledButtons {
1441    /// Enables the functionality of the minimize button.
1442    pub minimize: bool,
1443    /// Enables the functionality of the maximize button.
1444    ///
1445    /// macOS note: When [`Window`] `resizable` member is set to `false`
1446    /// the maximize button will be disabled regardless of this value.
1447    /// Additionally, when `resizable` is set to `true` the window will
1448    /// be maximized when its bar is double-clicked regardless of whether
1449    /// the maximize button is enabled or not.
1450    pub maximize: bool,
1451    /// Enables the functionality of the close button.
1452    pub close: bool,
1453}
1454
1455impl Default for EnabledButtons {
1456    fn default() -> Self {
1457        Self {
1458            minimize: true,
1459            maximize: true,
1460            close: true,
1461        }
1462    }
1463}
1464
1465/// Marker component for a [`Window`] that has been requested to close and
1466/// is in the process of closing (on the next frame).
1467#[derive(impl bevy_ecs::component::Component for ClosingWindow where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    const STORAGE_TYPE: bevy_ecs::component::StorageType =
        bevy_ecs::component::StorageType::Table;
    type Mutability = bevy_ecs::component::Mutable;
    fn register_required_components(_requiree:
            bevy_ecs::component::ComponentId,
        required_components:
            &mut bevy_ecs::component::RequiredComponentsRegistrator) {}
    fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
        use bevy_ecs::component::{
            DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
        };
        (&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
    }
    fn relationship_accessor()
        ->
            ::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
        ::core::option::Option::None
    }
}Component, #[automatically_derived]
impl ::core::default::Default for ClosingWindow {
    #[inline]
    fn default() -> ClosingWindow { ClosingWindow {} }
}Default)]
1468pub struct ClosingWindow;
1469
1470/// The edges of a screen. Corresponds to [`winit::platform::ios::ScreenEdge`].
1471///
1472/// # Platform-specific
1473///
1474/// - Only used on iOS.
1475///
1476/// [`winit::platform::ios::ScreenEdge`]: https://docs.rs/winit/latest/x86_64-apple-darwin/winit/platform/ios/struct.ScreenEdge.html
1477#[derive(#[automatically_derived]
impl ::core::default::Default for ScreenEdge {
    #[inline]
    fn default() -> ScreenEdge { Self::None }
}Default, #[automatically_derived]
impl ::core::fmt::Debug for ScreenEdge {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                ScreenEdge::None => "None",
                ScreenEdge::Top => "Top",
                ScreenEdge::Left => "Left",
                ScreenEdge::Bottom => "Bottom",
                ScreenEdge::Right => "Right",
                ScreenEdge::All => "All",
            })
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for ScreenEdge {
    #[inline]
    fn clone(&self) -> ScreenEdge { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for ScreenEdge { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for ScreenEdge {
    #[inline]
    fn eq(&self, other: &ScreenEdge) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ScreenEdge {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for ScreenEdge {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state)
    }
}Hash)]
1478#[cfg_attr(feature = "bevy_reflect", derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for ScreenEdge where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
                registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for ScreenEdge where  {
            #[inline]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(||
                        {
                            bevy_reflect::TypeInfo::Enum(bevy_reflect::enums::EnumInfo::new::<Self>(&[bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("None")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Top")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Left")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Bottom")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("Right")),
                                                bevy_reflect::enums::VariantInfo::Unit(bevy_reflect::enums::UnitVariantInfo::new("All"))]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for ScreenEdge where  {
            fn type_path() -> &'static str {
                "bevy_window::window::ScreenEdge"
            }
            fn short_type_path() -> &'static str { "ScreenEdge" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("ScreenEdge")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::window")
            }
        }
        impl bevy_reflect::Reflect for ScreenEdge where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<ScreenEdge
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::enums::Enum for ScreenEdge where  {
            fn field(&self, __name_param: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, __index_param: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, __name_param: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, __index_param: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match self { _ => ::core::option::Option::None, }
            }
            fn index_of(&self, __name_param: &str)
                -> ::core::option::Option<usize> {
                match self { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, __index_param: usize)
                -> ::core::option::Option<&str> {
                match self { _ => ::core::option::Option::None, }
            }
            fn iter_fields(&self) -> bevy_reflect::enums::VariantFieldIter {
                bevy_reflect::enums::VariantFieldIter::new(self)
            }
            #[inline]
            fn field_len(&self) -> usize {
                match self {
                    ScreenEdge::None { .. } => 0usize,
                    ScreenEdge::Top { .. } => 0usize,
                    ScreenEdge::Left { .. } => 0usize,
                    ScreenEdge::Bottom { .. } => 0usize,
                    ScreenEdge::Right { .. } => 0usize,
                    ScreenEdge::All { .. } => 0usize,
                    _ => 0,
                }
            }
            #[inline]
            fn variant_name(&self) -> &str {
                match self {
                    ScreenEdge::None { .. } => "None",
                    ScreenEdge::Top { .. } => "Top",
                    ScreenEdge::Left { .. } => "Left",
                    ScreenEdge::Bottom { .. } => "Bottom",
                    ScreenEdge::Right { .. } => "Right",
                    ScreenEdge::All { .. } => "All",
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_index(&self) -> usize {
                match self {
                    ScreenEdge::None { .. } => 0usize,
                    ScreenEdge::Top { .. } => 1usize,
                    ScreenEdge::Left { .. } => 2usize,
                    ScreenEdge::Bottom { .. } => 3usize,
                    ScreenEdge::Right { .. } => 4usize,
                    ScreenEdge::All { .. } => 5usize,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            #[inline]
            fn variant_type(&self) -> bevy_reflect::enums::VariantType {
                match self {
                    ScreenEdge::None { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    ScreenEdge::Top { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    ScreenEdge::Left { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    ScreenEdge::Bottom { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    ScreenEdge::Right { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    ScreenEdge::All { .. } =>
                        bevy_reflect::enums::VariantType::Unit,
                    _ =>
                        ::core::panicking::panic("internal error: entered unreachable code"),
                }
            }
            fn to_dynamic_enum(&self) -> bevy_reflect::enums::DynamicEnum {
                bevy_reflect::enums::DynamicEnum::from_ref::<Self>(self)
            }
        }
        impl bevy_reflect::PartialReflect for ScreenEdge where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self,
                __value_param: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Enum(__value_param) =
                        bevy_reflect::PartialReflect::reflect_ref(__value_param) {
                    if bevy_reflect::enums::Enum::variant_name(self) ==
                            bevy_reflect::enums::Enum::variant_name(__value_param) {
                        match bevy_reflect::enums::Enum::variant_type(__value_param)
                            {
                            bevy_reflect::enums::VariantType::Struct => {
                                for field in
                                    bevy_reflect::enums::Enum::iter_fields(__value_param) {
                                    let name = field.name().unwrap();
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_mut(self, name) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            bevy_reflect::enums::VariantType::Tuple => {
                                for (index, field) in
                                    ::core::iter::Iterator::enumerate(bevy_reflect::enums::Enum::iter_fields(__value_param))
                                    {
                                    if let ::core::option::Option::Some(v) =
                                            bevy_reflect::enums::Enum::field_at_mut(self, index) {
                                        bevy_reflect::PartialReflect::try_apply(v, field.value())?;
                                    }
                                }
                            }
                            _ => {}
                        }
                    } else {
                        match bevy_reflect::enums::Enum::variant_name(__value_param)
                            {
                            "None" => { *self = ScreenEdge::None {} }
                            "Top" => { *self = ScreenEdge::Top {} }
                            "Left" => { *self = ScreenEdge::Left {} }
                            "Bottom" => { *self = ScreenEdge::Bottom {} }
                            "Right" => { *self = ScreenEdge::Right {} }
                            "All" => { *self = ScreenEdge::All {} }
                            name => {
                                return ::core::result::Result::Err(bevy_reflect::ApplyError::UnknownVariant {
                                            enum_name: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(self)),
                                            variant_name: ::core::convert::Into::into(name),
                                        });
                            }
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(__value_param),
                                to_kind: bevy_reflect::ReflectKind::Enum,
                            });
                }
                ::core::result::Result::Ok(())
            }
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Enum
            }
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Enum(self)
            }
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Enum(self)
            }
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Enum(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_hash(&self) -> ::core::option::Option<u64> {
                (bevy_reflect::enums::enum_hash)(self)
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                (bevy_reflect::enums::enum_partial_eq)(self, value)
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::enums::enum_partial_cmp)(self, value)
            }
            #[inline]
            #[allow(unreachable_code, reason =
            "Ignored fields without a `clone` attribute will early-return with an error")]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                let this = self;
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(match this
                            {
                            ScreenEdge::None {} => ScreenEdge::None {},
                            ScreenEdge::Top {} => ScreenEdge::Top {},
                            ScreenEdge::Left {} => ScreenEdge::Left {},
                            ScreenEdge::Bottom {} => ScreenEdge::Bottom {},
                            ScreenEdge::Right {} => ScreenEdge::Right {},
                            ScreenEdge::All {} => ScreenEdge::All {},
                        }))
            }
        }
        impl bevy_reflect::FromReflect for ScreenEdge where  {
            fn from_reflect(__param0: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Enum(__param0) =
                        bevy_reflect::PartialReflect::reflect_ref(__param0) {
                    match bevy_reflect::enums::Enum::variant_name(__param0) {
                        "None" => ::core::option::Option::Some(ScreenEdge::None {}),
                        "Top" => ::core::option::Option::Some(ScreenEdge::Top {}),
                        "Left" => ::core::option::Option::Some(ScreenEdge::Left {}),
                        "Bottom" =>
                            ::core::option::Option::Some(ScreenEdge::Bottom {}),
                        "Right" =>
                            ::core::option::Option::Some(ScreenEdge::Right {}),
                        "All" => ::core::option::Option::Some(ScreenEdge::All {}),
                        name => ::core::option::Option::None,
                    }
                } else { ::core::option::Option::None }
            }
        }
    };Reflect))]
1479#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ScreenEdge {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    ScreenEdge::None =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "ScreenEdge", 0u32, "None"),
                    ScreenEdge::Top =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "ScreenEdge", 1u32, "Top"),
                    ScreenEdge::Left =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "ScreenEdge", 2u32, "Left"),
                    ScreenEdge::Bottom =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "ScreenEdge", 3u32, "Bottom"),
                    ScreenEdge::Right =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "ScreenEdge", 4u32, "Right"),
                    ScreenEdge::All =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "ScreenEdge", 5u32, "All"),
                }
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for ScreenEdge {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field {
                    __field0,
                    __field1,
                    __field2,
                    __field3,
                    __field4,
                    __field5,
                }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "variant identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            4u64 => _serde::__private228::Ok(__Field::__field4),
                            5u64 => _serde::__private228::Ok(__Field::__field5),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"variant index 0 <= i < 6")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "None" => _serde::__private228::Ok(__Field::__field0),
                            "Top" => _serde::__private228::Ok(__Field::__field1),
                            "Left" => _serde::__private228::Ok(__Field::__field2),
                            "Bottom" => _serde::__private228::Ok(__Field::__field3),
                            "Right" => _serde::__private228::Ok(__Field::__field4),
                            "All" => _serde::__private228::Ok(__Field::__field5),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"None" => _serde::__private228::Ok(__Field::__field0),
                            b"Top" => _serde::__private228::Ok(__Field::__field1),
                            b"Left" => _serde::__private228::Ok(__Field::__field2),
                            b"Bottom" => _serde::__private228::Ok(__Field::__field3),
                            b"Right" => _serde::__private228::Ok(__Field::__field4),
                            b"All" => _serde::__private228::Ok(__Field::__field5),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
                                        VARIANTS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<ScreenEdge>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = ScreenEdge;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "enum ScreenEdge")
                    }
                    fn visit_enum<__A>(self, __data: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::EnumAccess<'de> {
                        match _serde::de::EnumAccess::variant(__data)? {
                            (__Field::__field0, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(ScreenEdge::None)
                            }
                            (__Field::__field1, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(ScreenEdge::Top)
                            }
                            (__Field::__field2, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(ScreenEdge::Left)
                            }
                            (__Field::__field3, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(ScreenEdge::Bottom)
                            }
                            (__Field::__field4, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(ScreenEdge::Right)
                            }
                            (__Field::__field5, __variant) => {
                                _serde::de::VariantAccess::unit_variant(__variant)?;
                                _serde::__private228::Ok(ScreenEdge::All)
                            }
                        }
                    }
                }
                #[doc(hidden)]
                const VARIANTS: &'static [&'static str] =
                    &["None", "Top", "Left", "Bottom", "Right", "All"];
                _serde::Deserializer::deserialize_enum(__deserializer,
                    "ScreenEdge", VARIANTS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<ScreenEdge>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
1480pub enum ScreenEdge {
1481    #[default]
1482    /// No edge.
1483    None,
1484    /// The top edge of the screen.
1485    Top,
1486    /// The left edge of the screen.
1487    Left,
1488    /// The bottom edge of the screen.
1489    Bottom,
1490    /// The right edge of the screen.
1491    Right,
1492    /// All edges of the screen.
1493    All,
1494}
1495
1496#[cfg(test)]
1497mod tests {
1498    use super::*;
1499
1500    // Checks that `Window::physical_cursor_position` returns the cursor position if it is within
1501    // the bounds of the window.
1502    #[test]
1503    fn cursor_position_within_window_bounds() {
1504        let mut window = Window {
1505            resolution: WindowResolution::new(800, 600),
1506            ..Default::default()
1507        };
1508
1509        window.set_physical_cursor_position(Some(DVec2::new(0., 300.)));
1510        assert_eq!(window.physical_cursor_position(), Some(Vec2::new(0., 300.)));
1511
1512        window.set_physical_cursor_position(Some(DVec2::new(400., 0.)));
1513        assert_eq!(window.physical_cursor_position(), Some(Vec2::new(400., 0.)));
1514
1515        window.set_physical_cursor_position(Some(DVec2::new(799.999, 300.)));
1516        assert_eq!(
1517            window.physical_cursor_position(),
1518            Some(Vec2::new(799.999, 300.)),
1519        );
1520
1521        window.set_physical_cursor_position(Some(DVec2::new(400., 599.999)));
1522        assert_eq!(
1523            window.physical_cursor_position(),
1524            Some(Vec2::new(400., 599.999))
1525        );
1526    }
1527
1528    // Checks that `Window::physical_cursor_position` returns `None` if the cursor position is not
1529    // within the bounds of the window.
1530    #[test]
1531    fn cursor_position_not_within_window_bounds() {
1532        let mut window = Window {
1533            resolution: WindowResolution::new(800, 600),
1534            ..Default::default()
1535        };
1536
1537        window.set_physical_cursor_position(Some(DVec2::new(-0.001, 300.)));
1538        assert!(window.physical_cursor_position().is_none());
1539
1540        window.set_physical_cursor_position(Some(DVec2::new(400., -0.001)));
1541        assert!(window.physical_cursor_position().is_none());
1542
1543        window.set_physical_cursor_position(Some(DVec2::new(800., 300.)));
1544        assert!(window.physical_cursor_position().is_none());
1545
1546        window.set_physical_cursor_position(Some(DVec2::new(400., 600.)));
1547        assert!(window.physical_cursor_position().is_none());
1548    }
1549}
1550
1551/// Represents the relationship between a Window and the Monitor it is currently on.
1552///
1553/// # Note
1554/// This component is inserted after window creation, this means that there is a small period of
1555/// time when the Window exists, but does not know the monitor it is on.
1556#[derive(impl bevy_ecs::relationship::Relationship for OnMonitor {
    type RelationshipTarget = crate::monitor::HasWindows;
    const ALLOW_SELF_REFERENTIAL: bool = false;
    #[inline(always)]
    fn get(&self) -> bevy_ecs::entity::Entity { self.0 }
    #[inline]
    fn from(entity: bevy_ecs::entity::Entity) -> Self { Self { 0: entity } }
    #[inline]
    fn set_risky(&mut self, entity: bevy_ecs::entity::Entity) {
        self.0 = entity;
    }
}Component, #[automatically_derived]
impl ::core::fmt::Debug for OnMonitor {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field1_finish(f, "OnMonitor",
            &&self.0)
    }
}Debug)]
1557#[relationship(relationship_target=crate::monitor::HasWindows)]
1558pub struct OnMonitor(pub Entity);