Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
Gromit ---------- Gromit (GRaphics Over MIscellaneous Things) is a small tool to make annotations on the screen. When making presentations of the Gimp I found myself often moving the mousepointer around the point of interest until hopefully everybody noticed it. This annoyed me, since it is a very vague way to highlight something. I dreamt of a small programm which allows me to simply draw on the screen, ignoring any window-borders. Gromit is a first implementation of this program. The main usage problem of Gromit is its activation. You need a special command to make Gromit grab the mouse, since you typically want to use the program you are demonstrating and highlighting something is a short interruption of your workflow. Gromit offers two ways to make this possible. It grabs the "Pause" key, so that no other application can use it and it is available to Gromit only. The available commands are: Pause: toggle painting SHIFT-Pause: clear screen CTRL-Pause: toggle visibility ALT-Pause: Quit Gromit. You can specify the key to grab via "gromit --key <keysym>". Specifying an empty string or "none" for the keysym will prevent gromit from grabbing a key. Alternatively you can invoke Gromit with various arguments to control an already running Gromit (If you are curious: Communication between two gromit instances is done via a special X-Selection). Usage: gromit --quit will cause the main Gromit process to quit (or "-q") gromit --toggle will toggle the grabbing of the cursor (or "-t") gromit --visibility will toggle the visibility of the window (or "-v") gromit --clear will clear the screen (or "-c") If activated Gromit prevents you from using other programs with the mouse. You can press the button and paint on the screen. Key presses (except the "Pause"-Key, see above) will still reach the currently active window but it may be difficult to change the window-focus without mouse... The next "gromit --toggle" will deactivate Gromit and you can use your programs as usual - only the painted regions will be obscured. Gromit is pressure sensitive, if you are using properly configured XInput-Devices you can draw lines with varying width. It is possible to erase something with the other end of the (Wacom) pen. Building: Gromit is small and lightwight. It needs GTK+ 2.X to build and the Makefile is straightforward. No need for autoconf/automake yet :-) Simply type "make" and copy the resulting binary to a convenient place. Stripping the binary can reduce its size. I just tested it on Linux/XFree86, reports from other platforms are welcome. Configuration: Gromit is configurable via the file ".gromitrc" in your Homedirectory. Here you can specify which Device/Button/Modifier combination invokes which tool. See the file "gromitconf" distributed with this program for an example. An overview on the syntax: # Comments can be either # Shell-Style or /* C-Style. */ This entry defines the tool "red Pen", a pen with size 7 and color red. You can specify the color in X-Style: e.g. "#FF0033" or colors from rgb.txt. "red Pen" = PEN (size=7 color="red"); The following Entries copy an existing configuration (in this case "red Pen") and modify the color. "blue Pen" = "red Pen" (color="blue"); "yellow Pen" = "red Pen" (color="yellow"); You can also draw lines that end in an arrow head. For this you have to specify "arrowsize". This is a factor relative to the width of the line. For reasonable arrowheads start with 1. "blue Pen" = "blue Arrow" (arrowsize=2); An "ERASER" is a tool that erases the drawings on screen. The color parameter is not important. "Eraser" = ERASER (size = 75); A "RECOLOR"-Tool changes the color of the drawing without changing the shape. Try it out to see the effect. "green Marker" = RECOLOR (color = "Limegreen"); If you define a tool with the same name as an input-device (see the output of "xsetpointer -l", if there is a "SWITCH"-Tool it is uninteresting...) this input-device uses this tool. Additionally you can limit the Scope to specific combinations of Mousebuttons (1,2,3,4,5 or Button1,...,Button5) and Modifiers (SHIFT, CONTROL, ALT, META, while ALT==META). "Core Pointer" = "red Pen"; "Core Pointer"[SHIFT] = "blue Pen"; "Core Pointer"[CONTROL] = "yellow Pen"; "Core Pointer" = "green Marker"; "Core Pointer"[Button3] = "Eraser"; The descision, which tool to use follows a simple policy: a) Buttons are more important than Modifiers b) Low number Buttons are more important than higher ones c) Modifiers: SHIFT > CONTROL > ALT/META. d) Gromit tries partial matches: If you define "Core Pointer" and "Core Pointer"[SHIFT, CONTROL] and only SHIFT actually is pressed, Gromit will use the second definition if there is no "Core Pointer"[SHIFT] definition. Same logic goes for the buttons. Problems: Gromit may drastically slow down your X-Server, especially when you draw very thin lines. It makes heavily use of the shape extension, which is quite expensive if you paint a complex pattern on screen. Especially terminal-programs tend to scroll incredibly slow if something is painted over their window. There is nothing I can do about this. Gromit partially disables DnD, since it lays a transparent window across the whole screen and everything gets "dropped" to this (invisible) window. Gromit tries to minimize this effect: When you clear the screen the shaped window will be hidden. It will be resurrected, when you want to paint something again. However: The window does not hide, if you erase everything with the eraser tool, you have to clear the screen explicitely with the "gromit --clear" command or hide Gromit with "gromit --visibility". This Program is distributed under the Gnu General Public License. See the file COPYING for details. Have fun, Simon Budig <firstname.lastname@example.org>