From 65703bef0bbe77d63c37875e6f4dc04d12403adf Mon Sep 17 00:00:00 2001 From: Charles Comstock Date: Sat, 28 Oct 2023 15:03:35 -0500 Subject: [PATCH] experiment with adjusting backing resolution with restart for flow-pairs --- src/shimmers/common/ui/controls.cljs | 29 ++++++++++++------- src/shimmers/sketches/flow_pairs.cljs | 40 +++++++++++++++++---------- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/src/shimmers/common/ui/controls.cljs b/src/shimmers/common/ui/controls.cljs index 4381c241a..dd1380281 100644 --- a/src/shimmers/common/ui/controls.cljs +++ b/src/shimmers/common/ui/controls.cljs @@ -19,9 +19,15 @@ (defn state [m] (r/atom m)) -(defn assoc-value [settings field-ref reader] - (fn [e] (swap! settings assoc-in field-ref - (reader (.-target.value e))))) +(defn assoc-value + ([settings field-ref reader] + (assoc-value settings field-ref reader (fn []))) + ([settings field-ref reader on-change] + (fn [e] + (swap! settings assoc-in field-ref + (reader (.-target.value e))) + (when on-change + (on-change))))) (defn toggle-value [settings field-ref] (fn [_] @@ -63,13 +69,16 @@ [:input {:type "checkbox" :checked (get-in @settings field-ref) :on-change (toggle-value settings field-ref)}]]) -(defn dropdown [settings label field-ref options] - [:div.label-set.dropdown {:key (str "dropdown-" field-ref)} - [:label label] - [:select {:on-change (assoc-value settings field-ref identity) - :value (get-in @settings field-ref)} - (for [[name value] options] - [:option {:key value :value value} name])]]) +(defn dropdown + ([settings label field-ref options] + (dropdown settings label field-ref options nil)) + ([settings label field-ref options {:keys [on-change]}] + [:div.label-set.dropdown {:key (str "dropdown-" field-ref)} + [:label label] + [:select {:on-change (assoc-value settings field-ref identity on-change) + :value (get-in @settings field-ref)} + (for [[name value] options] + [:option {:key value :value value} name])]])) (defn slider [settings label-fn field-ref [lower upper step]] (let [value (get-in @settings field-ref)] diff --git a/src/shimmers/sketches/flow_pairs.cljs b/src/shimmers/sketches/flow_pairs.cljs index 4eb12bbe2..37321e9fc 100644 --- a/src/shimmers/sketches/flow_pairs.cljs +++ b/src/shimmers/sketches/flow_pairs.cljs @@ -11,11 +11,15 @@ [shimmers.math.equations :as eq] [shimmers.math.vector :as v] [shimmers.sketch :as sketch :include-macros true] + [shimmers.view.sketch :as view-sketch] [thi.ng.geom.core :as g] [thi.ng.geom.vector :as gv] [thi.ng.math.core :as tm])) -(defonce ui-state (ctrl/state {:snap "0"})) +(defonce ui-state + (ctrl/state + {:snap "0" + :screen-size "800x600"})) (defn make-pair [p] (let [distance (cq/rel-h (max 0.02 (dr/gaussian 0.075 0.05)))] @@ -75,20 +79,26 @@ (defn page [] [sketch/with-explanation (sketch/component - :size [800 600] - :setup setup - :update update-state - :draw draw - :middleware [m/fun-mode framerate/mode]) - (ctrl/container - (ctrl/dropdown ui-state "Snap Resolution" [:snap] - {"Disabled" 0 - "90 degrees" 4 - "60 degrees" 6 - "45 degrees" 8}))]) + :size (case (:screen-size @ui-state) + "800x600" [800 600] + "1600x1200" [1600 1200]) + :setup setup + :update update-state + :draw draw + :middleware [m/fun-mode framerate/mode]) + [ctrl/container + [ctrl/dropdown ui-state "Screen Size" [:screen-size] + {"800x600" "800x600" + "1600x1200" "1600x1200"} + {:on-change #(view-sketch/restart-sketch :flow-pairs)}] + [ctrl/dropdown ui-state "Snap Resolution" [:snap] + {"Disabled" 0 + "90 degrees" 4 + "60 degrees" 6 + "45 degrees" 8}]]]) (sketch/definition flow-pairs - {:created-at "2023-05-10" - :tags #{} - :type :quil} + {:created-at "2023-05-10" + :tags #{} + :type :quil} (ctrl/mount page))