1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
#[deny(missing_doc_code_examples)]
mod display;
mod methods;
use dioxus::core::ScopeState;
use gloo_events::EventListener;
use std::{
fmt::{Display, Formatter},
marker::PhantomData,
};
use web_sys::window;
const MISSING_W: f64 = 375.0;
const MISSING_H: f64 = 812.0;
/// Window size effect handler
#[derive(Debug)]
pub struct WindowSize {
x: f64,
y: f64,
listener: Option<EventListener>,
}
/// hooks for window's size
///
/// # Arguments
///
/// * `cx`: [`Scope`] or [`ScopeState`]
///
/// returns: [`WindowSize`]
///
/// # Examples
///
/// ```
/// use dioxus::prelude::*;
/// use dioxus_use_window::use_window_size;
///
/// fn App(cx: Scope) -> Element {
/// let size = use_window_size(&cx);
///
/// cx.render(rsx!(
/// h1 { "Window size: {size}" }
/// ))
/// }
/// ```
pub fn use_window_size(cx: &ScopeState) -> WindowSize {
WindowSize::new(&cx, MISSING_W, MISSING_H).unwrap_or_default()
}
/// Window layout effect handler
#[derive(Debug)]
pub struct WindowLayout<T> {
inner: WindowSize,
bound: PhantomData<T>,
}
/// hooks for window's layout
///
/// # Arguments
///
/// * `cx`: [`Scope`] or [`ScopeState`]
///
/// returns: [`WindowLayout`]
///
/// # Examples
///
/// ```
/// use dioxus::prelude::*;
/// use dioxus_use_window::use_window_layout;
///
/// fn App(cx: Scope) -> Element {
/// let layout = use_window_layout(&cx);
///
/// cx.render(rsx!(
/// h1 { "Window layout: {layout}" }
/// ))
/// }
/// ```
pub fn use_window_layout<T>(cx: &ScopeState) -> WindowLayout<T>
where
T: From<usize>,
{
WindowLayout { inner: WindowSize::new(cx, MISSING_W, MISSING_H).unwrap_or_default(), bound: Default::default() }
}
/// Window width effect handler
#[derive(Debug)]
pub struct WindowWidth {
inner: WindowSize,
}
/// hooks for window's width
///
/// # Arguments
///
/// * `cx`: [`Scope`] or [`ScopeState`]
///
/// returns: [`WindowWidth`]
///
/// # Examples
///
/// ```
/// use dioxus::prelude::*;
/// use dioxus_use_window::use_width;
///
/// fn App(cx: Scope) -> Element {
/// let width = use_width(&cx);
///
/// cx.render(rsx!(
/// h1 { "Window width: {width}" }
/// ))
/// }
/// ```
pub fn use_width(cx: &ScopeState) -> WindowWidth {
WindowWidth { inner: WindowSize::new(cx, MISSING_W, MISSING_H).unwrap_or_default() }
}
/// Window height effect handler
#[derive(Debug)]
pub struct WindowHeight {
inner: WindowSize,
}
/// hooks for window's height
///
/// # Arguments
///
/// * `cx`: [`Scope`] or [`ScopeState`]
///
/// returns: [`WindowHeight`]
///
/// # Examples
///
/// ```
/// use dioxus::prelude::*;
/// use dioxus_use_window::use_height;
///
/// fn App(cx: Scope) -> Element {
/// let height = use_height(&cx);
///
/// cx.render(rsx!(
/// h1 { "Window height: {height}" }
/// ))
/// }
/// ```
pub fn use_height(cx: &ScopeState) -> WindowHeight {
WindowHeight { inner: WindowSize::new(cx, MISSING_W, MISSING_H).unwrap_or_default() }
}