This commit is contained in:
Miloslav Ciz 2022-05-21 23:20:09 +02:00
parent f0c3f6aecf
commit e54040171b
24 changed files with 159 additions and 23 deletions

8
gui.md
View file

@ -1,12 +1,12 @@
# Graphical User Interface
Graphical user interface (GUI) is a visual [user interface](ui.md) that uses images; basically this includes icons, colors, shapes, mouse cursor, windows, buttons, pictures etc. This stands in contrast with [text user interface](tui.md) (TUI) which is also visual but only uses text for communication.
Graphical user interface (GUI) is a visual [user interface](ui.md) that uses graphics such as images and geometrical shapes. This stands in contrast with [text user interface](tui.md) (TUI) which is also visual but only uses text for communication.
Expert computer users normally frown upon GUI because it is the "noobish", inefficient, limiting, hard to automate way of interacting with computer. GUI brings [complexity](complexity.md) and [bloat](bloat.md), they are slow, inefficient and distracting. We try no to use them and prefer the [command line](cli.md).
Expert computer users normally frown upon GUI because it is the "noobish", inefficient, limiting, cumbersome, hard to automate way of interacting with computer. GUI brings [complexity](complexity.md) and [bloat](bloat.md), they are slow, inefficient and distracting. We try no to use them and prefer the [command line](cli.md).
GUIs mostly use [callback](callback.md)-based programming, which again is more complicated than standard polling non-interactive I/O.
## How and When to Do GUI
## How And When To Say Yes To GUI
GUI is not forbidden, it has its place, but today it's way too overused -- it should be used only if completely necessary (e.g. in a painting program) or as a completely optional thing build upon a more [suckless](suckless.md) text interface or [API](api.md). So remember: first create a program working without GUI and only then consider creating an optional GUI [frontend](frontend.md).
@ -17,3 +17,5 @@ The ergonomics and aesthetic design of GUIs has its own field and can't be cover
- Don't have too many elements (buttons etc.) at the screen at once, it's confusing as hell and drives noobs away.
- Things must be intuitive, i.e. behave in a way that they normally do (e.g. main menu should be at the top of the window, not the bottom etc.).
- Just use your brain. If a button is important and often used, it should probably be bigger than a button that's used almost never, etc.
The million dollar question is: **which GUI framework to use?** Ideally none. GUI is just pixels, buttons are just rectangles; make your GUI simple enough so that you don't need any shitty abstraction such as widget hierarchies etc. If you absolutely need some framework, look for a suckless one; e.g. [nuklear](nuklear.md) is worth checking out.