Packages
Scenic.Clock - Analog and Digital clock components for Scenic
Current section
Files
Jump to
Current section
Files
lib/components.ex
#
# Created by Boyd Multerer April 30, 2018.
# Copyright © 2018 Kry10 Industries. All rights reserved.
#
# convenience functions for adding basic components to a graph.
# this module should be updated as new base components are added
defmodule Scenic.Clock.Components do
alias Scenic.Graph
alias Scenic.Primitive
# alias Scenic.Primitive.SceneRef
alias Scenic.Clock
# import IEx
@moduledoc """
A set of helper functions to make it easy to add, or modify, clocks
to a graph.
"""
#--------------------------------------------------------
@doc """
Add an analog clock to a graph.
There is no required data, only styles.
### Styles
Analog Clocks honor the following styles
* `:hidden` - If `false` the clock is rendered. If true, it is skipped. The default
is `false`.
* `:theme` - The color set used to draw. See below. The default is `:dark`
### Additional Styles
Analog clocks honor the following list of additional styles.
* `:radius` - the radius of the clock's main circle.
* `:timezone` - which timezone to display the time in. Should be one of the timezones supported by the Timex Hex package. See `Timex.timezones()`. The default is whatever Timex says is the system timezone.
* `:seconds` - `true` or `false`. Show the seconds hand. Note: Showing the seconds hand uses more energy by rendering the scene every second. The default is `false`.
* `:ticks` - `true` or `false`. Show ticks marking the hour positions. Default is `true` if the radius is >= 30.
## Theme
To pass in a custom theme, supply a map with at least the following entries:
* `:border` - the color of the ring around the clock
* `:background` - the normal background of the clock
The following theme colors are optional. If they are not supplied, `:border` will be used.
* `:hours` - the color of the hours hand
* `:minutes` - the color of the minutes hand
* `:seconds` - the color of the seconds hand
### Examples
The following example creates an analog clock it on the screen.
graph
|> analog_clock( translate: {20, 20} )
The next example makes the same clock as before, but shows the seconds hand.
graph
|> analog_clock( seconds: true, translate: {20, 20} )
"""
def analog_clock( graph, options \\ [] )
def analog_clock( %Graph{} = g, options ) do
add_to_graph( g, Clock.Analog, nil, options )
end
def analog_clock( %Primitive{module: Primitive.SceneRef} = p, options ) do
modify( p, Clock.Analog, nil, options )
end
#--------------------------------------------------------
@doc """
Add an digital clock to a graph.
There is no required data, only configuration options.
### Styles
Digital Clocks honors all the styles you would expect to render text.
### Additional Styles
Digital clocks honor the following list of additional styles.
* `:timezone` - which timezone to display the time in. Should be one of the timezones supported by the Timex Hex package. See `Timex.timezones()`. The default is whatever Timex sais is the system timexone.
* `:format` - [strftime](https://www.foragoodstrftime.com/) format for the time string. Default is `"%a %l:%M %p"`.
## Theme
The Digital clock does not use the current theme for coloring. Add a :fill style
instead, just as you would for a text primitive.
### Examples
The following example creates an analog clock it on the screen.
graph
|> digital_clock( translate: {20, 20} )
"""
def digital_clock( graph, options \\ [] )
def digital_clock( %Graph{} = g, options ) do
add_to_graph( g, Clock.Digital, nil, options )
end
def digital_clock( %Primitive{module: Primitive.SceneRef} = p, options ) do
modify( p, Clock.Digital, nil, options )
end
#============================================================================
# internal utilities
defp add_to_graph( %Graph{} = g, mod, data, options ) do
mod.verify!(data)
mod.add_to_graph(g, data, options)
end
defp modify( %Primitive{module: Primitive.SceneRef} = p, mod, data, options ) do
mod.verify!(data)
Primitive.put( p, {mod, data}, options )
end
end