42 lines
940 B
Elm
42 lines
940 B
Elm
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
|