scenic_driver_renderling/lib/scenic_driver_rendering/window/config.ex

74 lines
2 KiB
Elixir

defmodule Scenic.Driver.Renderling.Window.Config do
defstruct name: nil,
limit_ms: nil,
layer: nil,
opacity: nil,
debug: false,
debugger: "",
debug_fps: 0,
antialias: true,
position: nil,
window: nil,
cursor: false,
key_map: Scenic.KeyMap.USEnglish,
on_close: :restart,
input_blacklist: [],
server_path: nil
defmodule Position do
defstruct scaled: false, centered: false, orientation: :normal
@type t :: %__MODULE__{
scaled: boolean,
centered: boolean,
orientation: :normal | :left | :right | :upside_down
}
def init(opts), do: struct(__MODULE__, opts)
end
defmodule Window do
defstruct title: "Scenic Window", resizeable: false, width: nil, height: nil
@type t :: %__MODULE__{
title: String.t(),
resizeable: false,
width: nil | non_neg_integer(),
height: nil | non_neg_integer()
}
def init(opts), do: struct(__MODULE__, opts)
end
@type t :: %__MODULE__{
name: atom | String.t(),
limit_ms: non_neg_integer(),
layer: integer,
opacity: integer,
debug: boolean,
debugger: String.t(),
debug_fps: integer,
antialias: boolean,
position: Position.t(),
window: Window.t(),
cursor: boolean,
key_map: module,
on_close: :restart | :stop_driver | :stop_viewport | :stop_system | :halt_system,
input_blacklist: [String.t()]
}
def init(opts) do
attrs =
opts
|> Keyword.update(:position, Position.init([]), &Position.init/1)
|> Keyword.update(:window, Window.init([]), &Window.init/1)
|> Keyword.put(:server_path, compute_server_path())
struct(__MODULE__, attrs)
end
defp compute_server_path do
:scenic_driver_renderling
|> :code.priv_dir()
|> Path.join("native/renderling_window_server")
end
end