and add doce for photocam. and a todo of less essential features

SVN revision: 42677
This commit is contained in:
Carsten Haitzler 2009-09-24 13:57:04 +00:00
parent cd712671a6
commit fdb8792448
3 changed files with 80 additions and 16 deletions

View File

@ -45,6 +45,7 @@ test_photocam(void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *win, *bg, *ph, *tb2, *bt;
char buf[PATH_MAX];
// FIXME: add a file selector and a "select a file" button.
const char *img[4] =
{
"/home/raster/t1.jpg", // 5 mpixel
@ -66,7 +67,7 @@ test_photocam(void *data, Evas_Object *obj, void *event_info)
evas_object_size_hint_weight_set(ph, 1.0, 1.0);
elm_win_resize_object_add(win, ph);
elm_photocam_file_set(ph, img[1]);
elm_photocam_file_set(ph, img[3]);
evas_object_show(ph);

View File

@ -878,11 +878,12 @@ extern "C" {
ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL
} Elm_Photocam_Zoom_Mode;
EAPI Evas_Object *elm_photocam_add(Evas_Object *parent);
EAPI void elm_photocam_file_set(Evas_Object *obj, const char *file);
EAPI int elm_photocam_file_set(Evas_Object *obj, const char *file);
EAPI void elm_photocam_zoom_set(Evas_Object *obj, int zoom);
EAPI int elm_photocam_zoom_get(Evas_Object *obj);
EAPI void elm_photocam_zoom_mode_set(Evas_Object *obj, Elm_Photocam_Zoom_Mode mode);
EAPI Elm_Photocam_Zoom_Mode elm_photocam_zoom_mode_get(Evas_Object *obj);
EAPI void elm_photocam_image_size_get(Evas_Object *obj, int *w, int *h);
#ifdef __cplusplus
}

View File

@ -4,7 +4,25 @@
/**
* @defgroup Photocam Photocam
*
* XXX
* This is a widget specifically for displaying high-resolution digital
* camera photos giving speedy feedback (fast load), low memory footprint
* and zooming and panning as well as fitting logic.
*
* TODO:
*
* 1. clicked signal - get mouse down/up etc. on photo
* 2. longpress signal "
* 3. wrap photo in theme edje so u can have styling around photo
* 4. handle styles properly
* 5. signals for stages of load (main preload, each tile, all done)
* 6. signals for change in zoom level
* 7. signals for change in pan
* 8. controls for setting panning
*
* optional?
*
* 9. exif handling
* 10. rotation flags in exif handling (nasty! should have rot in evas)
*
* Signals that you can add callbacks for are:
*
@ -742,16 +760,22 @@ elm_photocam_add(Evas_Object *parent)
}
/**
* XXX
* Set the photo file to be shown
*
* xxx
* This sets (and shows) the specified file (with a relative or absolute path)
* and will return a load error (same error that
* evas_object_image_load_error_get() will return). The image will change and
* adjust its size at this point and begin a background load process for this
* photo that at some time in the future will be displayed at the full quality
* needed.
*
* @param obj The photocam object
* @param file The photo file
* @return The return error (see EVAS_LOAD_ERROR_NONE, EVAS_LOAD_ERROR_GENERIC etc.)
*
* @ingroup Photocam
*/
EAPI void
EAPI int
elm_photocam_file_set(Evas_Object *obj, const char *file)
{
Widget_Data *wd = elm_widget_data_get(obj);
@ -785,12 +809,17 @@ elm_photocam_file_set(Evas_Object *obj, const char *file)
grid_clearall(obj);
if (wd->calc_job) ecore_job_del(wd->calc_job);
wd->calc_job = ecore_job_add(_calc_job, wd);
return evas_object_image_load_error_get(wd->img);
}
/**
* XXX
* Set the zoom level of the photo
*
* xxx
* This sets the zoom level. 1 will be 1:1 pixel for pixel. 2 will be 2:1
* (that is 2x2 photo pixels will display as 1 on-screen pixel). 4:1 will be
* 4x4 photo pixels as 1 screen pixel, and so on. The @p zoom parameter must
* be a power of 2 (1, 2, 4, 8, 16, 32, 64 etc.) to work correctly, and be
* greater than 0. Other values will have undefined behavior.
*
* @param obj The photocam object
*
@ -839,7 +868,6 @@ elm_photocam_zoom_set(Evas_Object *obj, int zoom)
z = wd->size.imw / pw;
else
z = wd->size.imh / ph;
// z++;
if (z >= 8) z = 8;
else if (z >= 4) z = 4;
else if (z >= 2) z = 2;
@ -864,7 +892,6 @@ elm_photocam_zoom_set(Evas_Object *obj, int zoom)
z = wd->size.imw / pw;
else
z = wd->size.imh / ph;
// z++;
if (z >= 8) z = 8;
else if (z >= 4) z = 4;
else if (z >= 2) z = 2;
@ -924,11 +951,15 @@ elm_photocam_zoom_set(Evas_Object *obj, int zoom)
}
/**
* XXX
* Get the zoom level of the photo
*
* xxx
* This returns the current zoom level of the photocam object. Note that if
* you set the fill mode to other than ELM_PHOTOCAM_ZOOM_MODE_MANUAL
* (which is the default), the zoom level may be changed at any time by the
* photocam object itself to account for photo size and photocam viewpoer size
*
* @param obj The photocam object
* @return The current zoom level
*
* @ingroup Photocam
*/
@ -940,11 +971,20 @@ elm_photocam_zoom_get(Evas_Object *obj)
}
/**
* XXX
* Set the zoom mode
*
* xxx
* This sets the zoom mode to manual or one of several automatic levels.
* Manual (ELM_PHOTOCAM_ZOOM_MODE_MANUAL) means that zoom is set manually by
* elm_photocam_zoom_set() and will stay at that level until changed by code
* or until zoom mode is changed. This is the default mode.
* The Automatic modes will allow the photocam object to automatically
* adjust zoom mode based on properties. ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT) will
* adjust zoom so the photo fits EXACTLY inside the scroll frame with no pixels
* outside this area. ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL will be similar but
* ensure no pixels within the frame are left unfilled.
*
* @param obj The photocam object
* @param mode The desired mode
*
* @ingroup Photocam
*/
@ -959,11 +999,12 @@ elm_photocam_zoom_mode_set(Evas_Object *obj, Elm_Photocam_Zoom_Mode mode)
}
/**
* XXX
* Get the zoom mode
*
* xxx
* This gets the current zoom mode of the photocam object
*
* @param obj The photocam object
* @return The current zoom mode
*
* @ingroup Photocam
*/
@ -973,3 +1014,24 @@ elm_photocam_zoom_mode_get(Evas_Object *obj)
Widget_Data *wd = elm_widget_data_get(obj);
return wd->mode;
}
/**
* Get the current image pixel width and height
*
* This gets the current photo pixel width and height (for the original).
* The size will be returned in the integers @p w and @p h that are pointed
* to.
*
* @param obj The photocam object
* @param w A pointer to the width return
* @param h A pointer to the height return
*
* @ingroup Photocam
*/
EAPI void
elm_photocam_image_size_get(Evas_Object *obj, int *w, int *h)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (w) *w = wd->size.imw;
if (h) *h = wd->size.imh;
}