Page MenuHomePhabricator

Image Viewer: Photo Orientation Features
Updated 3,103 Days AgoPublic

General description

EPhoto is a simple graphics viewer application for the Enlightenment desktop.

It can deal with large images, and zoom and scroll with low memory usage.
It has directory views / navigation and slideshow mode.
Its simple interface is very friendly to mobile or tablets, yet fitting desktop application requirements.

To be considered feature complete, it needs to support flipping and rotation images. Since it's built with Elementary, the Enlightenment project widgets toolkit library, some changes are required there, in the
photo widget.

The Elementary photo widget is intended for displaying a photo, for ex., a person's image (contact). Simple, yet with a very specific purpose. It has a decorative frame around the inner image itself, on the default theme. If and while no photo is set on it, it displays a person icon, indicating it's a photo placeholder.

For this task, it should support changing photos orientation, flipping or rotating it.
The API should be consistent with other Elementary widgets.

Since its implementation would involves maps and proxy objects, we expect some time will be spent studying our canvas library, Evas. Many changes were done recently regarding these two components, and they are not yet vastly used, so the student could face some bugs on them.

elm_photo API description

Two general functions and a type definition should be enough.
Something like:

  • elm_photo_orient_set(widget, orientation_change)
  • orientation_change elm_photo_orient_get(widget)

orientation change:

  • ELM_IMAGE_ORIENT_NONE = 0, /**< no orientation change */
  • ELM_IMAGE_ROTATE_90 = 1, /**< rotate 90 degrees clockwise */
  • ELM_IMAGE_ROTATE_180 = 2, /**< rotate 180 degrees clockwise */
  • ELM_IMAGE_ROTATE_270 = 3, /**< rotate 90 degrees counter-clockwise (i.e. 270 degrees clockwise) */
  • ELM_IMAGE_FLIP_HORIZONTAL = 4, /**< flip image horizontally */
  • ELM_IMAGE_FLIP_VERTICAL = 5, /**< flip image vertically */
  • ELM_IMAGE_FLIP_TRANSPOSE = 6, /**< flip the image along the y = (width - x) line (bottom-left to top-right) */
  • ELM_IMAGE_FLIP_TRANSVERSE = 7 /**< flip the image along the y = x line (top-left to bottom-right) */

EPhoto UI description

EPhoto has a very minimalist user interface.

A box with 4 buttons would be enough:

  • Rotate clockwise
  • Rotate counterclockwise
  • Flip Horizontal
  • Flip Vertical


For the mid-term validation, is expected that:

  1. the widget elm_photo supports flipping.
  2. a test covering this feature should be added to elementary_test test suit

For the final evaluation, we expect:

  1. elm_photo also supports rotation
  2. elementary_test covering rotation
  3. EPhoto should already support flipping and rotating images

Stretch Goals

Depending on student skills, this task could be accomplished a bit early.
In this case, a small, extra task would be to speed up thumbnails displaying.

EPhoto uses ethumb to display thumbnails. It is a thumbnail generation library, part of the Enlightenment Foundation Libraries.

So a cleanup on ethumb would be required and it would need to run more than one queue.
More details should be discussed with the student if she gets there.

Enlightenment project benefit

EPhoto is under development for a few years, but to be largely used by the Enlightenment community, it still needs some features. After this GSoC project is concluded, however, EPhoto will be as feature complete as Eye of Gnome. So Enlightenment users will be able to use it and avoid image viewers depending on other toolkits. So we intend to release a new version of EPhoto after this task is done.

Since it will be required to improve our widgets toolkit library (Elementary) to support these changes, another benefit is to have more powerful widgets, that could be useful for applications to be developed in the future.

Project technical details

  • Mentors :
    • Bruno Dilly
    • Daniel Juyung Seo
  • Skills required :
    • C background

The difficulty of this project is assumed to be an easy one.

Last Author
Unknown Object (User)
Last Edited
Mar 29 2013, 6:52 AM