diff --git a/desktop/src-common/advent/screens/credits.clj b/desktop/src-common/advent/screens/credits.clj index 7a95a6c1..3569105e 100644 --- a/desktop/src-common/advent/screens/credits.clj +++ b/desktop/src-common/advent/screens/credits.clj @@ -96,10 +96,6 @@ :the-end (assoc (utils/get-texture "the-end.png") :x 0 :y 0 :scale-x 4 :scale-y 4 :origin-x 0 :origin-y 0) :tweens {:fade-in (tween/tween :fade-in screen [:fade :opacity] 1.0 0.0 5.0 :ease tween/ease-out-cubic)}})) - - :on-pause (fn [_ _] - (utils/set-fullscreen! false) - nil) :on-render (fn [{:keys [^FitViewport viewport] :as screen} [entities]] diff --git a/desktop/src-common/advent/screens/scene.clj b/desktop/src-common/advent/screens/scene.clj index 0a540ea1..484876be 100644 --- a/desktop/src-common/advent/screens/scene.clj +++ b/desktop/src-common/advent/screens/scene.clj @@ -1169,9 +1169,6 @@ void main () (doseq [[k [start time fn]] (get-in entities [:room :timers])] (add-timer! screen k start time))) - :on-pause (fn [_ _] - (utils/set-fullscreen! false) - nil) :on-key-up (fn [screen entities] diff --git a/desktop/src-common/advent/screens/title.clj b/desktop/src-common/advent/screens/title.clj index d4bcd07f..04c2f877 100644 --- a/desktop/src-common/advent/screens/title.clj +++ b/desktop/src-common/advent/screens/title.clj @@ -371,10 +371,7 @@ :ease tween/ease-in-quadratic)}} ] (merge entities (:main-menu entities))))) - - :on-pause (fn [_ _] - (utils/set-fullscreen! false) - nil) + :on-render (fn [{:keys [^FitViewport viewport] :as screen} [entities]] @@ -387,7 +384,7 @@ entities (update-in entities [:banner-back] merge (animation->texture screen (:anim (:banner-back entities))))] (when (:fullscreen-button (:settings-menu entities)) (text-button! (:fullscreen-button (:settings-menu entities)) - :set-text (if (.isFullscreen Gdx/graphics) + :set-text (if (utils/is-fullscreen?) "Windowed" "Fullscreen"))) diff --git a/desktop/src-common/advent/utils.clj b/desktop/src-common/advent/utils.clj index 6b99dc64..e7ad7471 100644 --- a/desktop/src-common/advent/utils.clj +++ b/desktop/src-common/advent/utils.clj @@ -432,19 +432,73 @@ (dotimes [_ 160] (particle-effect! p :update 0.2))) +(defn os->key [] + (let [os-name (System/getProperty "os.name")] + (cond + (or (.startsWith os-name "Linux") (.startsWith os-name "LINUX")) :linux + (.startsWith os-name "Mac") :mac + :else :windows))) + +(defmulti make-windowed os->key) +(defmulti make-fullscreen os->key) +(defmulti is-fullscreen? os->key) + + +(defmethod make-windowed :linux [] + (do + (log/info "Making windowed 800x600 decorated window") + (System/setProperty "org.lwjgl.opengl.Window.undecorated", "false") + (.setDisplayMode Gdx/graphics 800 600 false))) + +(defmethod make-fullscreen :linux [] + (let [width (-> Gdx/graphics .getDesktopDisplayMode .width) + height (-> Gdx/graphics .getDesktopDisplayMode .height)] + (log/info "Making fullscreen " width "x" height " as undecorated window") + (System/setProperty "org.lwjgl.opengl.Window.undecorated", "true") + (.setDisplayMode Gdx/graphics + width + height + false))) + +(defmethod is-fullscreen? :linux [] + (= "true" (System/getProperty "org.lwjgl.opengl.Window.undecorated"))) + +(defn make-fullscreen-normal [] + (let [width (-> Gdx/graphics .getDesktopDisplayMode .width) + height (-> Gdx/graphics .getDesktopDisplayMode .height)] + (log/info "Making fullscreen " width "x" height " as true fullscreen") + (.setDisplayMode Gdx/graphics + width + height + true) + (set! (.foregroundFPS (-> (class Gdx/graphics) + (.getDeclaredField (name "config")) + (doto (.setAccessible true)) + (.get Gdx/graphics))) 60))) + +(defn make-windowed-normal [] + (do + (log/info "Making windowed 1280x960 decorated window") + (System/setProperty "org.lwjgl.opengl.Window.undecorated", "false") + (.setDisplayMode Gdx/graphics 1280 960 false))) + +(defn is-fullscreen?-normal [] + (.isFullscreen Gdx/graphics)) + + +(defmethod make-windowed :mac [] (make-windowed-normal)) +(defmethod make-fullscreen :mac [] (make-fullscreen-normal)) +(defmethod is-fullscreen? :mac [] (is-fullscreen?-normal)) + +(defmethod make-windowed :windows [] (make-windowed-normal)) +(defmethod make-fullscreen :windows [] (make-fullscreen-normal)) +(defmethod is-fullscreen? :windows [] (is-fullscreen?-normal)) (defn set-fullscreen! [val] (try (if val - (on-gl (.setDisplayMode Gdx/graphics - (doto (.width (.getDesktopDisplayMode Gdx/graphics)) log/info) - (doto (.height (.getDesktopDisplayMode Gdx/graphics)) log/info) - true) - (set! (.foregroundFPS (-> (class Gdx/graphics) - (.getDeclaredField (name "config")) - (doto (.setAccessible true)) - (.get Gdx/graphics))) 60)) - (on-gl (.setDisplayMode Gdx/graphics 1280 960 false))) + (on-gl (make-fullscreen)) + (on-gl (make-windowed))) (on-gl (swap! settings assoc :fullscreen val) (save-settings!)) @@ -453,7 +507,7 @@ (log/error e)))) (defn toggle-fullscreen! [] - (if (.isFullscreen Gdx/graphics) + (if (is-fullscreen?) (set-fullscreen! false) (set-fullscreen! true)))