module ScreenSize exposing (..) import Browser.Dom import Browser.Events import Pixels exposing (Pixels) import Quantity exposing (Quantity) import Task type alias ScreenSize = { height : Quantity Int Pixels , width : Quantity Int Pixels } init : ScreenSize init = { width = Pixels.pixels 960, height = Pixels.pixels 480 } onResize : (ScreenSize -> msg) -> Sub msg onResize toMsg = Browser.Events.onResize (\w h -> toMsg { height = Pixels.pixels h , width = Pixels.pixels w } ) updateScreenSize : (ScreenSize -> msg) -> Cmd msg updateScreenSize toMsg = Browser.Dom.getViewport |> Task.map (\viewport -> { height = Pixels.pixels (floor viewport.viewport.height) , width = Pixels.pixels (floor viewport.viewport.width) } ) |> Task.perform toMsg