Giter VIP home page Giter VIP logo

humble-deck's Introduction

“When you design a new user interface, you have to start off humbly”

— Steve Jobs presenting Aqua

Humble UI is a desktop UI framework for Clojure. No Electron. No JavaScript. Only JVM and native code.

Goal

  • A way to build high-quality desktop UIs
  • Build better apps that’s possible with web now, while staying cross-platform
  • Build them faster in Clojure

Motivation

  • Create desktop apps in Clojure
  • Electron is a great landmark
    • People prefer native apps to web apps
      • Normal shortcuts, icon, its own window, file system access, notifications, OS integrations
    • Developing real native apps is expensive
    • JavaScript + Chrome have huge overhead, can be slow
  • Java has “UI curse”
    • Previous attempts were cumbersome for user
    • Mimicking native look and feel didn’t work
    • Looked bad
  • Time of declarative UIs is now
    • React
    • Flutter
    • SwiftUI
    • Jetpack Compose
  • Web + Electron cleared the way for non-native look and feel
    • Write once, run everywhere is no longer rejected by users
    • Even native apps have many custom UI elements
  • Flutter proved new UI stack is a feasible task
  • Clojure is the best language for UI development
    • Performant enough to not noticeably lag
    • Access to full power of your computer (multithreaded)
    • REPL + interactive development == instant feedback loop
    • Proven itself great in CLJS world, can do the same on desktop

How is it going to be different

  • No goal to look native, aim for web look (write once, run everywhere)
  • Embrace platform differences in OS integration
  • Declarative UI API is much more pleasant to work with (+plays well with FP)
  • Expose low-level APIs along with high-level API
    • People can solve non-trivial problems in their own way, without hacks
  • Superpowers of Clojure

Architecture

  • Leverage Skia via Skija for high-performance GPU-accelerated graphics
  • JWM (Java Window Manager) for OS integration (simple, common ground, embrace the differences)

Status

Work in progress. No docs, and everything changes every day.

Resources

Slack:

Posts:

Videos:

Sample apps:

Development

Run REPL server:

./script/repl.py

To reload demo app using tools.namespace, evaluate:

(user/reload)

Examples

(require '[io.github.humbleui.ui :as ui])

(def ui
  (ui/default-theme {}
    (ui/center
      (ui/label "Hello from Humble UI! 👋"))))

(ui/start-app!
  (ui/window
    {:title "Humble 🐝 UI"}
    #'ui))

humble-deck's People

Contributors

pangloss avatar tonsky avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

humble-deck's Issues

Unable to run `clj -M -m humble-deck.main` on Linux / SwayWM

Not sure what platforms you're interested in supporting, but I hit an error trying to start the application, and figured I'd write it down here.

I'm on Linux using https://swaywm.org/, which probably represents a tiny portion of users.

Happy to provide more details if there's something I can do. Loved the presentation on Dutch Clojure Days!

$ clj -M -m humble-deck.main

	java.lang.Thread::run                                      	Thread.java                 	:833
	java.util.concurrent.ThreadPoolExecutor$Worker::run        	ThreadPoolExecutor.java     	:635
	java.util.concurrent.ThreadPoolExecutor::runWorker         	ThreadPoolExecutor.java     	:1136
	java.util.concurrent.FutureTask::run                       	FutureTask.java             	:264
	clojure.core/binding-conveyor-fn/fn--5823                  	core.clj                    	:2047
	humble-deck.main/-main/fn--3170                            	src/humble_deck/main.clj    	:38
	io.github.humbleui.app/start                               	app.clj                     	:16
	io.github.humbleui.jwm.App::start                          	App.java                    	:28
	io.github.humbleui.jwm.App::_nStart                        	App.java                    	:-2
	io.github.humbleui.jwm.Window::accept                      	Window.java                 	:11
	io.github.humbleui.jwm.Window::accept                      	Window.java                 	:387
	io.github.humbleui.jwm.skija.LayerGLSkija::frame           	LayerGLSkija.java           	:35
	io.github.humbleui.jwm.Window::accept                      	Window.java                 	:393
	io.github.humbleui.window/make/reify--952/accept           	window.clj                  	:80
	io.github.humbleui.window/make/reify--952/fn--958          	window.clj                  	:82
	io.github.humbleui.ui/window/paint-fn--2389                	ui.clj                      	:1061
	io.github.humbleui.core/draw                               	core.clj                    	:319
	io.github.humbleui.ui.WithBounds/-draw                     	ui.clj                      	:120
	io.github.humbleui.core/draw-child                         	core.clj                    	:325
	io.github.humbleui.core/draw                               	core.clj                    	:319
	io.github.humbleui.ui.dynamic.Contextual/-draw             	dynamic.clj                 	:30
	io.github.humbleui.core/draw-child                         	core.clj                    	:325
	io.github.humbleui.core/draw                               	core.clj                    	:319
	io.github.humbleui.ui.dynamic.Contextual/-draw             	dynamic.clj                 	:30
	io.github.humbleui.core/draw-child                         	core.clj                    	:325
	io.github.humbleui.core/draw                               	core.clj                    	:319
	io.github.humbleui.ui.with-context.WithContext/-draw       	with_context.clj            	:19
	io.github.humbleui.core/draw-child                         	core.clj                    	:325
	io.github.humbleui.core/draw                               	core.clj                    	:319
	io.github.humbleui.ui.with-context.WithContext/-draw       	with_context.clj            	:19
	io.github.humbleui.core/draw-child                         	core.clj                    	:325
	io.github.humbleui.core/draw                               	core.clj                    	:319
	io.github.humbleui.ui.key-listener.KeyListener/-draw       	key_listener.clj            	:14
	io.github.humbleui.core/draw-child                         	core.clj                    	:325
	io.github.humbleui.core/draw                               	core.clj                    	:319
	io.github.humbleui.ui.stack.Stack/-draw                    	stack.clj                   	:21
	io.github.humbleui.core/draw-child                         	core.clj                    	:325
	io.github.humbleui.core/draw                               	core.clj                    	:319
	io.github.humbleui.ui.mouse-listener.MouseListener/-draw   	mouse_listener.clj          	:24
	io.github.humbleui.core/draw-child                         	core.clj                    	:325
	io.github.humbleui.core/draw                               	core.clj                    	:319
	io.github.humbleui.ui.VAlign/-draw                         	ui.clj                      	:232
	io.github.humbleui.core/measure                            	core.clj                    	:315
	io.github.humbleui.ui.dynamic.Contextual/-measure          	dynamic.clj                 	:20
	io.github.humbleui.core/measure                            	core.clj                    	:315
	io.github.humbleui.ui.mouse-listener.MouseListener/-measure	mouse_listener.clj          	:19
	io.github.humbleui.core/measure                            	core.clj                    	:315
	io.github.humbleui.ui.with-context.WithContext/-measure    	with_context.clj            	:15
	io.github.humbleui.core/measure                            	core.clj                    	:315
	io.github.humbleui.ui.backdrop.Backdrop/-measure           	backdrop.clj                	:14
	io.github.humbleui.core/measure                            	core.clj                    	:315
	io.github.humbleui.ui.rect.Rect/-measure                   	rect.clj                    	:13
	io.github.humbleui.core/measure                            	core.clj                    	:315
	io.github.humbleui.ui.dynamic.Contextual/-measure          	dynamic.clj                 	:20
	io.github.humbleui.core/measure                            	core.clj                    	:315
	io.github.humbleui.ui.Row/-measure                         	ui.clj                      	:427
	clojure.core/reduce                                        	core.clj                    	:6886
	clojure.core.protocols/fn--8178/G--8173--8191              	protocols.clj               	:13
	clojure.core.protocols/fn--8236                            	protocols.clj               	:75
	clojure.core.protocols/seq-reduce                          	protocols.clj               	:31
	clojure.core.protocols/fn--8204/G--8199--8213              	protocols.clj               	:19
	clojure.core.protocols/fn--8244                            	protocols.clj               	:136
	clojure.lang.ArrayChunk::reduce                            	ArrayChunk.java             	:63
	io.github.humbleui.ui.Row/fn--2142                         	ui.clj                      	:429
	io.github.humbleui.core/measure                            	core.clj                    	:315
	io.github.humbleui.ui.dynamic.Contextual/-measure          	dynamic.clj                 	:14
	io.github.humbleui.ui.dynamic/contextual/fn--1100          	dynamic.clj                 	:49
	humble-deck.controls/fn--2554/fn--2555/fn--2579            	src/humble_deck/controls.clj	:214
	io.github.humbleui.window/full-screen?                     	window.clj                  	:148
	io.github.humbleui.jwm.WindowX11::isFullScreen             	WindowX11.java              	:188
UnsupportedOperationException: impl me!
java.lang.Thread::run                                   	Thread.java                 	:833
java.util.concurrent.ThreadPoolExecutor$Worker::run     	ThreadPoolExecutor.java     	:635
java.util.concurrent.ThreadPoolExecutor::runWorker      	ThreadPoolExecutor.java     	:1136
java.util.concurrent.FutureTask::run                    	FutureTask.java             	:264
clojure.core/binding-conveyor-fn/fn--5823               	core.clj                    	:2047
humble-deck.main/-main/fn--3170                         	src/humble_deck/main.clj    	:38
io.github.humbleui.app/start                            	app.clj                     	:16
io.github.humbleui.jwm.App::start                       	App.java                    	:28
io.github.humbleui.jwm.App::_nStart                     	App.java                    	:-2
io.github.humbleui.jwm.Window::accept                   	Window.java                 	:11
io.github.humbleui.jwm.Window::accept                   	Window.java                 	:387
io.github.humbleui.jwm.skija.LayerGLSkija::frame        	LayerGLSkija.java           	:35
io.github.humbleui.jwm.Window::accept                   	Window.java                 	:393
io.github.humbleui.window/make/reify--952/accept        	window.clj                  	:80
io.github.humbleui.window/make/reify--952/fn--958       	window.clj                  	:82
io.github.humbleui.ui/window/paint-fn--2389             	ui.clj                      	:1061
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.WithBounds/-draw                  	ui.clj                      	:120
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj                 	:30
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj                 	:30
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.with-context.WithContext/-draw    	with_context.clj            	:19
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.with-context.WithContext/-draw    	with_context.clj            	:19
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.key-listener.KeyListener/-draw    	key_listener.clj            	:14
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.stack.Stack/-draw                 	stack.clj                   	:21
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.mouse-listener.MouseListener/-draw	mouse_listener.clj          	:24
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.VAlign/-draw                      	ui.clj                      	:237
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj                 	:30
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.mouse-listener.MouseListener/-draw	mouse_listener.clj          	:24
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.with-context.WithContext/-draw    	with_context.clj            	:19
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.backdrop.Backdrop/-draw           	backdrop.clj                	:21
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.rect.Rect/-draw                   	rect.clj                    	:18
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj                 	:30
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.Row/-draw                         	ui.clj                      	:435
clojure.core/reduce                                     	core.clj                    	:6885
clojure.lang.PersistentVector::reduce                   	PersistentVector.java       	:343
io.github.humbleui.ui.Row/fn--2153                      	ui.clj                      	:435
io.github.humbleui.core/measure                         	core.clj                    	:315
io.github.humbleui.ui.dynamic.Contextual/-measure       	dynamic.clj                 	:14
io.github.humbleui.ui.dynamic/contextual/fn--1100       	dynamic.clj                 	:49
humble-deck.controls/fn--2554/fn--2555/fn--2579         	src/humble_deck/controls.clj	:214
io.github.humbleui.window/full-screen?                  	window.clj                  	:148
io.github.humbleui.jwm.WindowX11::isFullScreen          	WindowX11.java              	:188

UnsupportedOperationException: impl me!

java.lang.Thread::run                                   	Thread.java             	:833
java.util.concurrent.ThreadPoolExecutor$Worker::run     	ThreadPoolExecutor.java 	:635
java.util.concurrent.ThreadPoolExecutor::runWorker      	ThreadPoolExecutor.java 	:1136
java.util.concurrent.FutureTask::run                    	FutureTask.java         	:264
clojure.core/binding-conveyor-fn/fn--5823               	core.clj                	:2047
humble-deck.main/-main/fn--3170                         	src/humble_deck/main.clj	:38
io.github.humbleui.app/start                            	app.clj                 	:16
io.github.humbleui.jwm.App::start                       	App.java                	:28
io.github.humbleui.jwm.App::_nStart                     	App.java                	:-2
io.github.humbleui.jwm.Window::accept                   	Window.java             	:11
io.github.humbleui.jwm.Window::accept                   	Window.java             	:387
io.github.humbleui.jwm.skija.LayerGLSkija::frame        	LayerGLSkija.java       	:35
io.github.humbleui.jwm.Window::accept                   	Window.java             	:393
io.github.humbleui.window/make/reify--952/accept        	window.clj              	:80
io.github.humbleui.window/make/reify--952/fn--958       	window.clj              	:82
io.github.humbleui.ui/window/paint-fn--2389             	ui.clj                  	:1061
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.WithBounds/-draw                  	ui.clj                  	:120
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj             	:30
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj             	:30
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.with-context.WithContext/-draw    	with_context.clj        	:19
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.with-context.WithContext/-draw    	with_context.clj        	:19
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.key-listener.KeyListener/-draw    	key_listener.clj        	:14
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.stack.Stack/-draw                 	stack.clj               	:21
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.mouse-listener.MouseListener/-draw	mouse_listener.clj      	:24
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.VAlign/-draw                      	ui.clj                  	:237
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj             	:30
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.mouse-listener.MouseListener/-draw	mouse_listener.clj      	:24
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.with-context.WithContext/-draw    	with_context.clj        	:19
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.backdrop.Backdrop/-draw           	backdrop.clj            	:21
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.rect.Rect/-draw                   	rect.clj                	:18
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj             	:30
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.Row/-draw                         	ui.clj                  	:455
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.VAlign/-draw                      	ui.clj                  	:237
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.slider.Slider/-draw               	slider.clj              	:98
io.github.humbleui.core/irect-ltrb/invokePrim           	core.clj                	:-1
io.github.humbleui.core/irect-ltrb                      	core.clj                	:279
io.github.humbleui.types.IRect::makeLTRB                	IRect.java              	:46

IllegalArgumentException: IRect::makeLTRB expected l <= r, got 95 > 92

java.lang.Thread::run                                      	Thread.java                 	:833
java.util.concurrent.ThreadPoolExecutor$Worker::run        	ThreadPoolExecutor.java     	:635
java.util.concurrent.ThreadPoolExecutor::runWorker         	ThreadPoolExecutor.java     	:1136
java.util.concurrent.FutureTask::run                       	FutureTask.java             	:264
clojure.core/binding-conveyor-fn/fn--5823                  	core.clj                    	:2047
humble-deck.main/-main/fn--3170                            	src/humble_deck/main.clj    	:38
io.github.humbleui.app/start                               	app.clj                     	:16
io.github.humbleui.jwm.App::start                          	App.java                    	:28
io.github.humbleui.jwm.App::_nStart                        	App.java                    	:-2
io.github.humbleui.jwm.Window::accept                      	Window.java                 	:11
io.github.humbleui.jwm.Window::accept                      	Window.java                 	:387
io.github.humbleui.jwm.skija.LayerGLSkija::frame           	LayerGLSkija.java           	:35
io.github.humbleui.jwm.Window::accept                      	Window.java                 	:393
io.github.humbleui.window/make/reify--952/accept           	window.clj                  	:80
io.github.humbleui.window/make/reify--952/fn--958          	window.clj                  	:82
io.github.humbleui.ui/window/paint-fn--2389                	ui.clj                      	:1061
io.github.humbleui.core/draw                               	core.clj                    	:319
io.github.humbleui.ui.WithBounds/-draw                     	ui.clj                      	:120
io.github.humbleui.core/draw-child                         	core.clj                    	:325
io.github.humbleui.core/draw                               	core.clj                    	:319
io.github.humbleui.ui.dynamic.Contextual/-draw             	dynamic.clj                 	:30
io.github.humbleui.core/draw-child                         	core.clj                    	:325
io.github.humbleui.core/draw                               	core.clj                    	:319
io.github.humbleui.ui.dynamic.Contextual/-draw             	dynamic.clj                 	:30
io.github.humbleui.core/draw-child                         	core.clj                    	:325
io.github.humbleui.core/draw                               	core.clj                    	:319
io.github.humbleui.ui.with-context.WithContext/-draw       	with_context.clj            	:19
io.github.humbleui.core/draw-child                         	core.clj                    	:325
io.github.humbleui.core/draw                               	core.clj                    	:319
io.github.humbleui.ui.with-context.WithContext/-draw       	with_context.clj            	:19
io.github.humbleui.core/draw-child                         	core.clj                    	:325
io.github.humbleui.core/draw                               	core.clj                    	:319
io.github.humbleui.ui.key-listener.KeyListener/-draw       	key_listener.clj            	:14
io.github.humbleui.core/draw-child                         	core.clj                    	:325
io.github.humbleui.core/draw                               	core.clj                    	:319
io.github.humbleui.ui.stack.Stack/-draw                    	stack.clj                   	:21
io.github.humbleui.core/draw-child                         	core.clj                    	:325
io.github.humbleui.core/draw                               	core.clj                    	:319
io.github.humbleui.ui.mouse-listener.MouseListener/-draw   	mouse_listener.clj          	:24
io.github.humbleui.core/draw-child                         	core.clj                    	:325
io.github.humbleui.core/draw                               	core.clj                    	:319
io.github.humbleui.ui.VAlign/-draw                         	ui.clj                      	:232
io.github.humbleui.core/measure                            	core.clj                    	:315
io.github.humbleui.ui.dynamic.Contextual/-measure          	dynamic.clj                 	:20
io.github.humbleui.core/measure                            	core.clj                    	:315
io.github.humbleui.ui.mouse-listener.MouseListener/-measure	mouse_listener.clj          	:19
io.github.humbleui.core/measure                            	core.clj                    	:315
io.github.humbleui.ui.with-context.WithContext/-measure    	with_context.clj            	:15
io.github.humbleui.core/measure                            	core.clj                    	:315
io.github.humbleui.ui.backdrop.Backdrop/-measure           	backdrop.clj                	:14
io.github.humbleui.core/measure                            	core.clj                    	:315
io.github.humbleui.ui.rect.Rect/-measure                   	rect.clj                    	:13
io.github.humbleui.core/measure                            	core.clj                    	:315
io.github.humbleui.ui.dynamic.Contextual/-measure          	dynamic.clj                 	:20
io.github.humbleui.core/measure                            	core.clj                    	:315
io.github.humbleui.ui.Row/-measure                         	ui.clj                      	:427
clojure.core/reduce                                        	core.clj                    	:6886
clojure.core.protocols/fn--8178/G--8173--8191              	protocols.clj               	:13
clojure.core.protocols/fn--8236                            	protocols.clj               	:75
clojure.core.protocols/seq-reduce                          	protocols.clj               	:31
clojure.core.protocols/fn--8204/G--8199--8213              	protocols.clj               	:19
clojure.core.protocols/fn--8244                            	protocols.clj               	:136
clojure.lang.ArrayChunk::reduce                            	ArrayChunk.java             	:63
io.github.humbleui.ui.Row/fn--2142                         	ui.clj                      	:429
io.github.humbleui.core/measure                            	core.clj                    	:315
io.github.humbleui.ui.dynamic.Contextual/-measure          	dynamic.clj                 	:14
io.github.humbleui.ui.dynamic/contextual/fn--1100          	dynamic.clj                 	:49
humble-deck.controls/fn--2554/fn--2555/fn--2579            	src/humble_deck/controls.clj	:214
io.github.humbleui.window/full-screen?                     	window.clj                  	:148
io.github.humbleui.jwm.WindowX11::isFullScreen             	WindowX11.java              	:188

UnsupportedOperationException: impl me!

java.lang.Thread::run                                   	Thread.java                 	:833
java.util.concurrent.ThreadPoolExecutor$Worker::run     	ThreadPoolExecutor.java     	:635
java.util.concurrent.ThreadPoolExecutor::runWorker      	ThreadPoolExecutor.java     	:1136
java.util.concurrent.FutureTask::run                    	FutureTask.java             	:264
clojure.core/binding-conveyor-fn/fn--5823               	core.clj                    	:2047
humble-deck.main/-main/fn--3170                         	src/humble_deck/main.clj    	:38
io.github.humbleui.app/start                            	app.clj                     	:16
io.github.humbleui.jwm.App::start                       	App.java                    	:28
io.github.humbleui.jwm.App::_nStart                     	App.java                    	:-2
io.github.humbleui.jwm.Window::accept                   	Window.java                 	:11
io.github.humbleui.jwm.Window::accept                   	Window.java                 	:387
io.github.humbleui.jwm.skija.LayerGLSkija::frame        	LayerGLSkija.java           	:35
io.github.humbleui.jwm.Window::accept                   	Window.java                 	:393
io.github.humbleui.window/make/reify--952/accept        	window.clj                  	:80
io.github.humbleui.window/make/reify--952/fn--958       	window.clj                  	:82
io.github.humbleui.ui/window/paint-fn--2389             	ui.clj                      	:1061
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.WithBounds/-draw                  	ui.clj                      	:120
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj                 	:30
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj                 	:30
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.with-context.WithContext/-draw    	with_context.clj            	:19
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.with-context.WithContext/-draw    	with_context.clj            	:19
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.key-listener.KeyListener/-draw    	key_listener.clj            	:14
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.stack.Stack/-draw                 	stack.clj                   	:21
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.mouse-listener.MouseListener/-draw	mouse_listener.clj          	:24
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.VAlign/-draw                      	ui.clj                      	:237
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj                 	:30
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.mouse-listener.MouseListener/-draw	mouse_listener.clj          	:24
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.with-context.WithContext/-draw    	with_context.clj            	:19
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.backdrop.Backdrop/-draw           	backdrop.clj                	:21
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.rect.Rect/-draw                   	rect.clj                    	:18
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj                 	:30
io.github.humbleui.core/draw-child                      	core.clj                    	:325
io.github.humbleui.core/draw                            	core.clj                    	:319
io.github.humbleui.ui.Row/-draw                         	ui.clj                      	:435
clojure.core/reduce                                     	core.clj                    	:6885
clojure.lang.PersistentVector::reduce                   	PersistentVector.java       	:343
io.github.humbleui.ui.Row/fn--2153                      	ui.clj                      	:435
io.github.humbleui.core/measure                         	core.clj                    	:315
io.github.humbleui.ui.dynamic.Contextual/-measure       	dynamic.clj                 	:14
io.github.humbleui.ui.dynamic/contextual/fn--1100       	dynamic.clj                 	:49
humble-deck.controls/fn--2554/fn--2555/fn--2579         	src/humble_deck/controls.clj	:214
io.github.humbleui.window/full-screen?                  	window.clj                  	:148
io.github.humbleui.jwm.WindowX11::isFullScreen          	WindowX11.java              	:188

UnsupportedOperationException: impl me!

java.lang.Thread::run                                   	Thread.java             	:833
java.util.concurrent.ThreadPoolExecutor$Worker::run     	ThreadPoolExecutor.java 	:635
java.util.concurrent.ThreadPoolExecutor::runWorker      	ThreadPoolExecutor.java 	:1136
java.util.concurrent.FutureTask::run                    	FutureTask.java         	:264
clojure.core/binding-conveyor-fn/fn--5823               	core.clj                	:2047
humble-deck.main/-main/fn--3170                         	src/humble_deck/main.clj	:38
io.github.humbleui.app/start                            	app.clj                 	:16
io.github.humbleui.jwm.App::start                       	App.java                	:28
io.github.humbleui.jwm.App::_nStart                     	App.java                	:-2
io.github.humbleui.jwm.Window::accept                   	Window.java             	:11
io.github.humbleui.jwm.Window::accept                   	Window.java             	:387
io.github.humbleui.jwm.skija.LayerGLSkija::frame        	LayerGLSkija.java       	:35
io.github.humbleui.jwm.Window::accept                   	Window.java             	:393
io.github.humbleui.window/make/reify--952/accept        	window.clj              	:80
io.github.humbleui.window/make/reify--952/fn--958       	window.clj              	:82
io.github.humbleui.ui/window/paint-fn--2389             	ui.clj                  	:1061
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.WithBounds/-draw                  	ui.clj                  	:120
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj             	:30
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj             	:30
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.with-context.WithContext/-draw    	with_context.clj        	:19
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.with-context.WithContext/-draw    	with_context.clj        	:19
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.key-listener.KeyListener/-draw    	key_listener.clj        	:14
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.stack.Stack/-draw                 	stack.clj               	:21
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.mouse-listener.MouseListener/-draw	mouse_listener.clj      	:24
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.VAlign/-draw                      	ui.clj                  	:237
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj             	:30
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.mouse-listener.MouseListener/-draw	mouse_listener.clj      	:24
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.with-context.WithContext/-draw    	with_context.clj        	:19
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.backdrop.Backdrop/-draw           	backdrop.clj            	:21
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.rect.Rect/-draw                   	rect.clj                	:18
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.dynamic.Contextual/-draw          	dynamic.clj             	:30
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.Row/-draw                         	ui.clj                  	:455
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.VAlign/-draw                      	ui.clj                  	:237
io.github.humbleui.core/draw-child                      	core.clj                	:325
io.github.humbleui.core/draw                            	core.clj                	:319
io.github.humbleui.ui.slider.Slider/-draw               	slider.clj              	:98
io.github.humbleui.core/irect-ltrb/invokePrim           	core.clj                	:-1
io.github.humbleui.core/irect-ltrb                      	core.clj                	:279
io.github.humbleui.types.IRect::makeLTRB                	IRect.java              	:46

IllegalArgumentException: IRect::makeLTRB expected l <= r, got 95 > 92
Execution error (ClassCastException) at humble-deck.main/-main (main.clj:45).
class io.github.humbleui.jwm.skija.LayerGLSkija cannot be cast to class io.github.humbleui.jwm.skija.LayerMetalSkija (io.github.humbleui.jwm.skija.LayerGLSkija and io.github.humbleui.jwm.skija.LayerMetalSkija are in unnamed module of loader 'app')

Full report at:
/tmp/clojure-300715686594846707.edn

clj -M -m humble-deck.main 9,90s user 0,44s system 379% cpu 2,725 total

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.