2024-05-15 10:16:58 +12:00
|
|
|
defmodule Scenic.Driver.Renderling.Window.Config do
|
2024-05-15 19:33:59 +12:00
|
|
|
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
|
2024-05-15 10:16:58 +12:00
|
|
|
|
|
|
|
@type t :: %__MODULE__{
|
2024-05-15 19:33:59 +12:00
|
|
|
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()]
|
2024-05-15 10:16:58 +12:00
|
|
|
}
|
2024-05-15 19:33:59 +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/renderling_window_server")
|
|
|
|
end
|
2024-05-15 10:16:58 +12:00
|
|
|
end
|