Zoomer application for Linux.
- Development is done on https://twitch.tv/tsoding
- Archive of the streams: https://www.twitch.tv/collections/HlRy-q69uBXmpQ
Scrolling direction is reversed. I find it easier to scroll towards me, and there's also the nice semantic effect of feeling like I'm pulling the screen towards me.
Right click does almost the same thing as 0: it keeps the same position, instead or resetting it.
w, however, is equivalent to 0.
Middle click closes boomer. e does as well.
Flashlight moved to g.
The biggest, and most important change, is how the zooming happens.
In upstream, the more you zoom in, the more effort it takes to zoom in further. I'm guessing that either Tsoding didn't mind that behavior, or made it that way to avoid accidental overscrolling.
In this fork, instead of adding velocity flatly any time you scroll to zoom, the velocity is multiplied by the current scale. This results in that the effort you need to put in to scroll doesn't change depending on your current zoom level.
You get reasonably okay keyboard support. a, s, d, f, h, j, k, l move the camera to 8 different directions; x and v zoom out / in, relative to (unfortunately) your mouse cursor. These moving and zooming hotkeys still play by the new velocity rules nicely.
$ sudo apt-get install libgl1-mesa-dev libx11-dev libxext-dev libxrandr-dev
$ nimble build
$ ./boomer --help
$ ./boomer # to just start using
For additional Developer Capabilities compile the application with the following flags:
$ nimble build -d:developer
This will enable reloading the shaders with Ctrl+R
. The shader files (frag.glsl
and vert.glsl
) should be located in the same folder as boomer.nim
for this feature to work. If the shader files not found the program won't even start.
Keep in mind that the developer build is not suitable for day-to-day usage because it creates the external dependency on the shader files. Compiling the program without -d:developer
"bakes" the shaders into the executable and eliminates the dependency.
Control | Description |
---|---|
0 or w | Reset the application state (position, scale, velocity, etc). |
d or Right click | Reset the application state, excluding position. |
q or ESC or Middle click or e | Quit the application. |
r | Reload configuration. |
Ctrl + r | Reload the shaders (only for Developer mode) |
g | Toggle flashlight effect. |
Drag with left mouse button | Move the image around. |
Scroll wheel or =/- | Zoom in/out. |
Ctrl + Scroll wheel | Change the radious of the flaslight. |
Configuration file is located at $HOME/.config/boomer/config
and has roughly the following format:
<param-1> = <value-1>
<param-2> = <value-2>
# comment
<param-3> = <value-3>
You can generate a new config at $HOME/.config/boomer/config
with $ boomer --new-config
.
Supported parameters:
Name | Description |
---|---|
min_scale | The smallest it can get when zooming out |
scroll_speed | How quickly you can zoom in/out by scrolling |
drag_friction | How quickly the movement slows down after dragging |
scale_friction | How quickly the zoom slows down after scrolling |
Experimental or unstable features can be enabled by passing the following flags to nimble build
command:
Flag | Description |
---|---|
-d:live |
Live image update. See issue #26. |
-d:mitshm |
Enables faster Live image update using MIT-SHM X11 extension. Should be used along with -d:live to have an effect |
-d:select |
Application lets the user to click on te window to "track" and it will track that specific window instead of the whole screen. |
$ git clone git://github.com/tsoding/boomer.git /path/to/boomer
$ mkdir -p ~/.config/nixpkgs/overlays
$ cd ~/.config/nixpkgs/overlays
$ ln -s /path/to/boomer/overlay/ boomer
$ nix-env -iA nixos.boomer
- https://github.com/nim-lang/x11/blob/bf9dc74dd196a98b7c2a2beea4d92640734f7c60/examples/x11ex.nim
- http://archive.xfce.org/src/xfce/xfwm4/4.13/
- https://www.khronos.org/opengl/wiki/Programming_OpenGL_in_Linux:_GLX_and_Xlib
- https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glXIntro.xml
- https://stackoverflow.com/questions/24988164/c-fast-screenshots-in-linux-for-use-with-opencv
- https://github.com/lolilolicon/xrectsel
- https://github.com/naelstrof/slop
- https://www.x.org/releases/X11R7.7/doc/xextproto/shm.html
- http://netpbm.sourceforge.net/doc/ppm.html
- https://github.com/def-/nim-syscall
- https://github.com/dreamer/scrot
You can support my work via
- Twitch channel: https://www.twitch.tv/subs/tsoding
- Patreon: https://www.patreon.com/tsoding