From f6ecdb4955c210fc01c5637cc8d94af261a33df3 Mon Sep 17 00:00:00 2001 From: Ju Liu Date: Tue, 5 Mar 2019 22:48:50 +0000 Subject: [PATCH] Get live reload to work --- config/config.exs | 4 ++-- config/dev.exs | 5 +++++ config/test.exs | 1 + lib/fitting.ex | 2 +- lib/scenes/home.ex | 14 +++++++------- lib/scenic_escher.ex | 1 + lib/scenic_escher/refresher.ex | 30 ++++++++++++++++++++++++++++++ mix.exs | 3 ++- mix.lock | 2 ++ 9 files changed, 51 insertions(+), 11 deletions(-) create mode 100644 config/dev.exs create mode 100644 config/test.exs create mode 100644 lib/scenic_escher/refresher.ex diff --git a/config/config.exs b/config/config.exs index dca5180..956a7ea 100644 --- a/config/config.exs +++ b/config/config.exs @@ -21,5 +21,5 @@ config :scenic_escher, :viewport, %{ # by uncommenting the line below and defining dev.exs, test.exs and such. # Configuration from the imported file will override the ones defined # here (which is why it is important to import them last). -# -# import_config "prod.exs" + +import_config "#{Mix.env()}.exs" diff --git a/config/dev.exs b/config/dev.exs new file mode 100644 index 0000000..e2030b0 --- /dev/null +++ b/config/dev.exs @@ -0,0 +1,5 @@ +use Mix.Config + +config :exsync, + reload_timeout: 75, + reload_callback: {GenServer, :call, [ScenicEscher.Refresher, :refresh_home]} diff --git a/config/test.exs b/config/test.exs new file mode 100644 index 0000000..d2d855e --- /dev/null +++ b/config/test.exs @@ -0,0 +1 @@ +use Mix.Config diff --git a/lib/fitting.ex b/lib/fitting.ex index a847180..653ac96 100644 --- a/lib/fitting.ex +++ b/lib/fitting.ex @@ -7,7 +7,7 @@ defmodule Fitting do end def get_stroke_width(%Box{b: b, c: c}) do - max(Vector.length(b), Vector.length(c)) / 150.0 + max(Vector.length(b), Vector.length(c)) / 100.0 end def create_picture(shapes, options \\ []) do diff --git a/lib/scenes/home.ex b/lib/scenes/home.ex index 59e0f8c..4b589cc 100644 --- a/lib/scenes/home.ex +++ b/lib/scenes/home.ex @@ -5,10 +5,6 @@ defmodule ScenicEscher.Scene.Home do import Scenic.Primitives - @note """ - Hello World! - """ - @graph Graph.build(font: :roboto, font_size: 24, theme: :light) |> group( fn g -> @@ -20,7 +16,11 @@ defmodule ScenicEscher.Scene.Home do {width, height} = Box.dimensions(box) - george = Fitting.create_picture(Figure.george()) + george = + Fitting.create_picture( + Figure.george(), + debug: true + ) atom = Picture.above( @@ -54,10 +54,9 @@ defmodule ScenicEscher.Scene.Home do box |> picture.() |> Rendering.to_paths({width, height}) - |> IO.inspect() initial = g - # |> text(@note, fill: :black, translate: {20, 40}) + # |> text("Hello!", fill: :black, translate: {20, 40}) paths |> Enum.reduce(initial, fn {elem, options}, acc -> @@ -69,6 +68,7 @@ defmodule ScenicEscher.Scene.Home do ) def init(_, _) do + Process.register(self(), __MODULE__) push_graph(@graph) {:ok, @graph} end diff --git a/lib/scenic_escher.ex b/lib/scenic_escher.ex index 45f9867..e2837a9 100644 --- a/lib/scenic_escher.ex +++ b/lib/scenic_escher.ex @@ -9,6 +9,7 @@ defmodule ScenicEscher do # start the application with the viewport children = [ + ScenicEscher.Refresher, {Scenic, viewports: [main_viewport_config]} ] diff --git a/lib/scenic_escher/refresher.ex b/lib/scenic_escher/refresher.ex new file mode 100644 index 0000000..9275388 --- /dev/null +++ b/lib/scenic_escher/refresher.ex @@ -0,0 +1,30 @@ +defmodule ScenicEscher.Refresher do + use GenServer + + def start_link(_) do + GenServer.start_link(__MODULE__, :hello) + end + + def init(_) do + Process.register(self(), __MODULE__) + {:ok, :started} + end + + def handle_call(:refresh_home, _, state) do + send(self(), :refresh_home) + Process.send_after(self(), :refresh_home, 100) + {:reply, :ok, state} + end + + def handle_info(:refresh_home, state) do + case Process.whereis(ScenicEscher.Scene.Home) do + nil -> + :no_op + + pid -> + Process.exit(pid, :kill) + end + + {:noreply, state} + end +end diff --git a/mix.exs b/mix.exs index 8505d6e..277edf8 100644 --- a/mix.exs +++ b/mix.exs @@ -24,7 +24,8 @@ defmodule ScenicEscher.MixProject do defp deps do [ {:scenic, "~> 0.9"}, - {:scenic_driver_glfw, "~> 0.9", targets: :host} + {:scenic_driver_glfw, "~> 0.9", targets: :host}, + {:exsync, git: "https://github.com/Arkham/exsync", branch: "support-escher", only: :dev} ] end end diff --git a/mix.lock b/mix.lock index bd469e3..17c8b1f 100644 --- a/mix.lock +++ b/mix.lock @@ -1,5 +1,7 @@ %{ "elixir_make": {:hex, :elixir_make, "0.5.2", "96a28c79f5b8d34879cd95ebc04d2a0d678cfbbd3e74c43cb63a76adf0ee8054", [:mix], [], "hexpm"}, + "exsync": {:git, "https://github.com/Arkham/exsync", "7d35547a27ada1c0a8bcf679cb9a1ccf42db9c36", [branch: "support-escher"]}, + "file_system": {:hex, :file_system, "0.2.6", "fd4dc3af89b9ab1dc8ccbcc214a0e60c41f34be251d9307920748a14bf41f1d3", [:mix], [], "hexpm"}, "scenic": {:hex, :scenic, "0.9.0", "129594f918b4e2dd97465b95b4fb3582294ac6bb3e931f12edd09913743964eb", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm"}, "scenic_driver_glfw": {:hex, :scenic_driver_glfw, "0.9.1", "b64d345929007186c6b2ca603aec21b1fdde758d3eb32f8467a236e58ccd6a19", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:scenic, "~> 0.9", [hex: :scenic, repo: "hexpm", optional: false]}], "hexpm"}, }