After long work and deep rework, i’m please to announce the availability of GnomeScan-0.1 !

GnomeScan aim to provide scan to the Gnome infrastructure. The plateforme part of the project consists of two library : libgnomescan — which may be considered as libsane-glib — and libgnomescanui — a collection of widgets to write scan interfaces. The desktop part consists of a tiny app : flegita and more to come.

This release features a lot of changes in almost every part of the project, especially libgnomescan and libgnomescanui. The code has been entirely review in order to write documentation using gtk-doc tool. This lead to many changes in the naming schemes and coding style. The coding style is now much closer to gtk+ one. The code has been simplified in some part (e.g. using G_DEFINE_TYPE). The autotools files has been corrected so that make distcheck pass successfully.

What changed ?

  • libgnomescan:
    • GnomeScanBackend device probe has been deeply reviewed. API has been cleaned of loosy function such as gnome_scan_backend_compute_image_measure() and other. Use boxed type GnomeScanContextInfo to share context data instead of applying sane option (like “tl-x” and other). Work around some unfollowed SANE convention (never use string where an enum is possible).
    • GnomeScanner recevied the following properties:
      • “dimension”: the dimension of the device (in mm)
      • “resolution-range”: the range of available resolution on the device.
      • “sources”: an array of available source (Automatic document feeder, flatbed, etc.).
    • GnomeScanner:”device-type” is now an enum value which make it far more easy to use.
    • GnomeScanContext received new signals:
      • “preview-started”
      • “preview-terminated”
    • GnomeScanContext has been deeply review with GnomeScanBackend and GnomeScanner. rotation is appointing, but not yet implemented. The API has been cleaned. image-size, image-measure and other loose code has been dropped. More signals are to come since this allow GnomeScanContext to marshall all widgets of a scan UI.
    • GnomeScannerOptionSet has been drop.
    • Scan option (resolution, area, source, etc.) and device option (light, etc.) are now separated. gnome_scanner_get_options() now give only scanner options. Scan options are now handle only with GnomeScanContext.
    • gnomescanutils has been a lot completed. New types has been created. Glib enums are generated. Types used in GObjects properties are now registered in the Glib type system. Also a set of useful function has been implemented such as g_value_new_{int,boolean,double,string}(), g_enum_get_{name,nick}() and other.
    • The library is entirely documented.
  • libgnomescanui:
    • New widgets:
      • GnomeScanOptionWidget: a widget that make simple the creation of other option widget, showing a nice label, storing a GnomeScanContext and packing a child widget. That save a lot of codes :).
      • GnomeScanSourceSelector: a widget that allow to select a source if a device has several choices.
    • GnomeScannerSelector is now base on GnomeScanOptionWidget. Also the combo box now show an icon representing the device type. The overall look of this widget has been review so it take less place. See screenshots.
    • GnomeScanDialog now set it sensitivity according to GnomeScanContext “preview-started”, “preview-terminated”, “acquisition-started” and “acquisition-terminated”. One time it will also react on a “probe-started” and “probe-terminated” signal. That kill the bug of a partly insensitive window during preview acquisition.
    • GnomeScanPreviewArea now show an empty pictures of the size of the selected device (thanks to GnomeScanner:”dimension” property). The widget does not insensitive itself during preview acquisition.
    • The library has been entirely documented. That lead to a lot of code clean up. Most widgets has now a screenshot of it. Some widget screenshot are obsolete, but this is a details.
  • flegita:
    • Now use GnomeScanSourceSelector above the GnomeScannerSelector widget.
    • a new FlegitaActionWidget appeared in the code, but is still hidden and non functionnal. A preview screenshot is available. (Uncomment lines 113, 115 and 117-121 in order to show the widget).

What didn’t happen ?

  • The Gimp plugin: This is the next step before the end of the Summer of Code. I wish to publish it before the end of the month in GnomeScan 0.2. This plugin require a new widget : GnomeScanAdvancedPreview.
  • Rotation: This feature needed the deep review i made in libgnomescan. A bit of code has been written for that feature. This feature include another widget : GnomeScanRotationSelector based on GnomeScanOptionWidget. Also, all the infrastructure of the post acquisition image manipulation has to be designed. Since the review of the acquisition configuration design, this should be a lot simpler.
  • Preview zoom: Not for 0.2.
  • Mass acquisition: source selection is one step in the way to implement this feature. But a lot of work has to be done do design and implement this feature. GnomeScanAcquisitionDialog is to be deeply review for this feature. Not for 0.2.

Notes

I made myself the icons using the great Inkscape and trying to follow Tango guidelines. But I’m not satisfied with the icons. If anyone wants to contribute a bit and create an icon for each device type described in the libgnomescan reference manual, I’m open to any contribution :-).

Known bugs

  • Preview: the scan area selection is not efficient.
  • Preview: dimension of the preview seems buggy on certain devices.
  • Funky picture: raw data aren’t handle correctly. Currently, GnomeScanBackend just put raw data into a GdkPixbuf using gdk_pixbuf_new_from_data().

Thanks

If you read this blog you may know i wheren’t motivated to dive back in the code. I want to thank my mento Vincent Untz that help me re-entering the game. Thanks all the people who help me on IRC, especially on -hackers (chpe, nud, hub, etc.) and on , etc. Thanks to all Gnome developers that help making great software in happyness. Thanks to Marc-André Lureau, GSmartMix developers with whom i had nice discussions and happy testings of the the wonderful Vista killer GSmartMix project !

Further

Documentation, code review, 0.1 release. All that things make GnomeScan an ever more mature project. This release is kind of Request For Comments. Especially for the API of both libgnomescan and libgnomescanui. Sent me your comments. Add your ideas in at http://live.gnome.org/GnomeScanning/Ideas.

Hosting is a key point in order to get feedback and code. The bzr branch at http://bersace.ath.cx/bersace/flegita is far from accessible. I’m wondering wether to use sf.net, gna or launchpad. More important, i don’t know well if and when this project will be included in Gnome and then hosted in cvs.gnome.org. After using bzr, CVS looks really backward for me :|.

Next step is 0.2 realease which mainly include GnomeScanAdvancedPreview widget and Gimp plugin based on this widget. This will end the Summer of Code projet. Of course, i intend to continue the work as long as the project is useful. At the end of the Summer of Code, a lot of work has been done. But the overall project is still in an obvious alpha state. Key feature like rotation, save as pdf, mass acquisition are missing.

Thanks.

Update: A 0.1.0.1 version has been released which use gnome crash report tool !

4 Responses to “gnomescan-0.1: the road to maturity”

  1. Nelson Says:

    GNOME is moving to Subversion, you could ask for an account for your project here[1], I think your project *should* be in GNOME servers.

    [1] http://live.gnome.org/NewSVNRepos

  2. Étienne Bersac Says:

    Thanks nelson. I know that Gnome is moving to subversion, but with the migration failure, i just wonder if i had to register CVS modules. Gnome.org with SVN is clearly the best solution.

  3. Anonymous Says:

    at the end of ./configure, I get this:

    checking for sane/sane.h… no
    configure: error: SANE not found

    However, in synaptic I can see that I have libsane, python2.4-imaging-sane, sane, sane-utils, xsane and xsane-common installed.

    All these packages were installed from the Ubuntu Dapper Drake repositories.

    What am I doing wrong?

  4. Étienne Bersac Says:

    Install libsane-dev. And wait 30 minutes, i’m releasing gnomescan-0.2 (with many feature). You can discover the features by yourself at usual download page.


Leave a Reply