Pushed more patches at github right now. :-)
* Support for libfm's file menu.
libfm shared object is not loaded when program starts, but dlopen()'ed
at runtime. That allows libfm to be optional runtime dependency. I
already used the same technique in lxpanelx.
The only thing we need from libfm is "just give me GtkMenu* for that
file", so nothing complicated here.
* Buttons change their sensitivity depending on current program state:
* file menu, rotate, flip, save, delete operations are disabled in
slideshow mode (or when no image opened);
* prev, next, slideshow operations are disabled if image list
contain less than 2 items;
* zoom operations are disabled when no image opened (or when scale
is max/min, for zoom in and zoom out operations respectively).
* Confirmation dialog for delete operation shows real file name, not
just "the file".
* Little optimization in image-view.c: do not repaint surface second
time when scale is 100%. (Second update is used to erase artifacts of
GDK_INTERP_NEAREST interpolation. Drawing with 100% scale makes no
* Implemented caching and preloading of images. It may look somewhat
frustrating when you see in htop that gpicview eats 100-200MB RSS, but
I tested the feature on a relatively slow system (1GB RAM, Celeron D
2.6GHz) with high memory load (run several browsers with lots of sites
opened in them, so the system swapped pages in and out constantly),
and it works quite well. Cache limit is adjusted automatically based
on RAM size. However, we probably should allow user completely disable
that feature, as some users will be not happy of that.
Note on an implementation detail: I used g_timeout_add() instead of
g_idle_add(), as the latter conflicts with on_idle handler in
image-view.c. We've got the following sequence of events: the surface
painted with GDK_INTERP_NEAREST, next image preloaded, the surface
painted with GDK_INTERP_BILINEAR. That is not what we want, so
g_timeout_add() helps keep things in the right order (first update,
second update, preloading).
* New option: "Auto-select background color based on image edge".
Oh... I love it! ;-)
And by the way, I checked out eog, mirage and viewnior, and all of
them lack such feature.
* Massive refactoring of main-win.c. Not fully completed yet.
The futher direction, as I see it:
* Complete refactoring of main-win.c.
* Optimize image scaling and drawing. gpicview works really fast,
compared to eog, but that is more eog's "feature", than ours. (Oh...
How did they manage to achieve so sloooow image loading?) There are
many places to optimize. I think we can dramatically improve rendering
* Remove files into Trash Bin, not unlink() them.
* Handle multiple file arguments in the command line.
* Some editing operations, in addition to rotate and flip: crop,
resize, adjust brightness and saturation.
2012/8/5 Julien Lavergne <gilir@...>:
> Le 08/03/2012 07:57 PM, Vadim Ushakov a écrit :
>> I made some improvements for gpicview: https://github.com/geekless/gpicview
>> * Builds successfully with Gtk3. It seems to run almost fine. The only
>> problem I noticed is hang up in fullscreen mode. I failed to locate
>> that bug, unfortunately.
>> * Fixed a scrolling problem when scale is 100%
>> * Fixed a bug with "Fit Image" button state.
>> New features:
>> * Keep zoom mode and/or scale when switching between images.
>> * Show/hide toolbar on T key press.
>> * When run as "gpicview path/to/some/directory", do not display error
>> message, but open images from the directory.
>> * When run without arguments, open images from current directory.
> Thanks :-) Looks ok, merged to master to get more testing.
> Julien Lavergne