scenic_driver_renderling/lib/scenic_driver_rendering/window/config.ex

64 lines
1.8 KiB
Elixir
Raw Normal View History

2024-05-15 10:16:58 +12:00
defmodule Scenic.Driver.Renderling.Window.Config do
defstruct name: nil,
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
2024-05-15 10:16:58 +12:00
@type t :: %__MODULE__{
name: atom | String.t(),
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()],
server_path: Path.t()
2024-05-15 10:16:58 +12:00
}
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/scenic_window_server")
end
2024-05-15 10:16:58 +12:00
end