~exec64/imv

console: update libgrapheme API to version 1
wl_window: Fix segfault with latest wlroots

imv is currently binding to the latest version of all the interfaces,
but should instead bind the latest version that it supports. imv is not
compatible with wl_output v4 and so was crashing when the latest wlroots
offered it.

This patch pins a maximum version for each wayland interface that is
bound.

https://todo.sr.ht/~exec64/imv/1
rsvg: Suppress deprecation warnings

Newer APIs will be used when necessary, to maintain compatibility with
older versions of rsvg. In the mean time, disable the noisy warnings.
x11_window: Fix typo in if statement
Add support for libgrapheme as an icu replacement
Add '-w' option to specify window title at startup
Update contributing guidelines
Draw background rectangle behind the (possibly multiline) overlay text

Before this commit, the background rectangle was drawn to cover only one line
of text (which was ok since multiline overlay text was not supported). Now
the code correctly calculates the dimensions on the rendered text and put the
rectangle of the right size under it.
Move Cairo layout creation and display code to two separate functions

This effectively splits the imv_canvas_printf function into two separate
functions, one to create a layout containing given text and the other one
to show it on the canvas. These functions can be useful for the future code
I will add to display text with a background rectangle behind it. Existing
imv_canvas_printf function does not allow this
Set IFS env variable to "" for overlay_text shell expansion

This prevents wordexp function from splitting the output of shell expansion
into “words” and, as a consequence, removing the newlines from it. With this
commit applied, setting

  overlay_text = $(echo -e 'hello\nworld!')

displays

  hello
  world!

in Imv window. Without this commit, the same overlay_text setting would display

  hello world!

since wordexp splits the string "hello\nworld!" into two words and connects
them with a space.

This should not break any of the commands executed in $(), because the IFS
variable is *not* inherited by their shell. The commands don't see this change
and run with the default IFS value.
9ae3ee1d — Tuomas Siipola 2 years ago
Show chequered pattern on image instead of viewport

OpenGL is used for rendering because `cairo_rectangle` and
`cairo_pattern_t` had performance problems on zoomed and rotated images.

The size and contrast of the chequered pattern is also reduces to match
other image viewers and editors.

Closes #253
doc: simpliy → simplify
doc: Fix awkward run-on sentence in overlay_text
Add limit for looking through STDIN
Pull path from pipe when -n given
f58e8128 — Maxim Karasev 9 months ago
Rename imv-folder to imv-dir

There is no such thing as 'folder' in Unix. We only have directories
(also sometimes called 'catalogs').
daea88c5 — Maxim Karasev 9 months ago
Simplify imv-folder script

This changes make it more portable by removing bash dependency and not
using GNU-specific 'sort' syntax. Also this fixes issue with selected
image not being displayed first.
Make freeimage backend have preceedence over libjpeg

The current implementation of freeimage backend automatically rotates the
images based on EXIF info. Libjpeg backed doesn't do that (although libjpeg
itself may be able to, I didn't check). This commit makes Imv use freeimage for
jpeg files when both backends are available to enable automatic image rotation
when possible.

A cleaner solution could be to add automatic rotaiton functionality to libjpeg
backend as well, but this quick hack is better than nothing ☺
Next