elm_image: changed orient_set code to use evas_object_image_orient_set API

Summary:
evas_image_orient_set is a newly added API to set orientation of evas image.
Using this API to set orientation of image widget.
Also removed Elm_Image_Orient enums and replaced it with Evas_Image_Orient enums.

Signed-off-by: kabeer khan <kabeer.khan@samsung.com>

Reviewers: raster, seoz, cedric

Differential Revision: https://phab.enlightenment.org/D1987

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
kabeer khan 2015-02-20 14:26:01 +01:00 committed by Cedric BAIL
parent e55e740b0a
commit 97cefca273
3 changed files with 28 additions and 334 deletions

View File

@ -4,17 +4,17 @@
#include <Elementary.h>
static const struct {
Elm_Image_Orient orient;
Evas_Image_Orient orient;
const char *name;
} images_orient[] = {
{ ELM_IMAGE_ORIENT_NONE, "None" },
{ ELM_IMAGE_ROTATE_90, "Rotate 90" },
{ ELM_IMAGE_ROTATE_180, "Rotate 180" },
{ ELM_IMAGE_ROTATE_270, "Rotate 270" },
{ ELM_IMAGE_FLIP_HORIZONTAL, "Horizontal Flip" },
{ ELM_IMAGE_FLIP_VERTICAL, "Vertical Flip" },
{ ELM_IMAGE_FLIP_TRANSPOSE, "Transpose" },
{ ELM_IMAGE_FLIP_TRANSVERSE, "Transverse" },
{ EVAS_IMAGE_ORIENT_NONE, "None" },
{ EVAS_IMAGE_ORIENT_90, "Rotate 90" },
{ EVAS_IMAGE_ORIENT_180, "Rotate 180" },
{ EVAS_IMAGE_ORIENT_270, "Rotate 270" },
{ EVAS_IMAGE_FLIP_HORIZONTAL, "Horizontal Flip" },
{ EVAS_IMAGE_FLIP_VERTICAL, "Vertical Flip" },
{ EVAS_IMAGE_FLIP_TRANSPOSE, "Transpose" },
{ EVAS_IMAGE_FLIP_TRANSVERSE, "Transverse" },
{ 0, NULL }
};
@ -24,7 +24,7 @@ my_im_ch(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
Evas_Object *win = data;
Evas_Object *im = evas_object_data_get(win, "im");
Evas_Object *rdg = evas_object_data_get(win, "rdg");
Elm_Image_Orient v = elm_radio_value_get(rdg);
Evas_Image_Orient v = elm_radio_value_get(rdg);
elm_image_orient_set(im, v);
fprintf(stderr, "Set %i and got %i\n",

View File

@ -1031,319 +1031,16 @@ _elm_image_efl_image_load_size_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd, int
if (h) *h = sd->load_size;
}
static void
_elm_image_flip_horizontal(Elm_Image_Data *sd)
{
unsigned int *p1, *p2, tmp;
unsigned int *data;
int x, y, iw, ih;
evas_object_image_size_get(sd->img, &iw, &ih);
data = evas_object_image_data_get(sd->img, EINA_TRUE);
for (y = 0; y < ih; y++)
{
p1 = data + (y * iw);
p2 = data + ((y + 1) * iw) - 1;
for (x = 0; x < (iw >> 1); x++)
{
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
p1++;
p2--;
}
}
evas_object_image_data_set(sd->img, data);
}
static void
_elm_image_flip_vertical(Elm_Image_Data *sd)
{
unsigned int *p1, *p2, tmp;
unsigned int *data;
int x, y, iw, ih;
evas_object_image_size_get(sd->img, &iw, &ih);
data = evas_object_image_data_get(sd->img, EINA_TRUE);
for (y = 0; y < (ih >> 1); y++)
{
p1 = data + (y * iw);
p2 = data + ((ih - 1 - y) * iw);
for (x = 0; x < iw; x++)
{
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
p1++;
p2++;
}
}
evas_object_image_data_set(sd->img, data);
}
static void
_elm_image_smart_rotate_180(Elm_Image_Data *sd)
{
unsigned int *p1, *p2, tmp;
unsigned int *data;
int x, hw, iw, ih;
evas_object_image_size_get(sd->img, &iw, &ih);
data = evas_object_image_data_get(sd->img, 1);
hw = iw * ih;
x = (hw / 2);
p1 = data;
p2 = data + hw - 1;
for (; --x > 0; )
{
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
p1++;
p2--;
}
evas_object_image_data_set(sd->img, data);
}
#define GETDAT(neww, newh) \
unsigned int *data, *data2; \
int iw, ih, w, h; \
evas_object_image_size_get(sd->img, &iw, &ih); \
data = evas_object_image_data_get(sd->img, EINA_FALSE); \
if (!data) return; \
data2 = malloc(iw * ih * sizeof(int)); \
if (!data2) { \
evas_object_image_data_set(sd->img, data); \
return; \
} \
memcpy(data2, data, iw * ih * sizeof(int)); \
evas_object_image_data_set(sd->img, data); \
w = neww; h = newh; \
evas_object_image_size_set(sd->img, w, h); \
data = evas_object_image_data_get(sd->img, EINA_TRUE); \
if (!data) { \
free(data2); \
return; \
} \
#define PUTDAT \
evas_object_image_data_set(sd->img, data); \
free(data2);
#define TILE 32
static void
_elm_image_smart_rotate_90(Elm_Image_Data *sd)
{
GETDAT(ih, iw);
int x, y, xx, yy, xx2, yy2;
unsigned int *src, *dst;
for (y = 0; y < ih; y += TILE)
{
yy2 = y + TILE;
if (yy2 > ih) yy2 = ih;
for (x = 0; x < iw; x += TILE)
{
xx2 = x + TILE;
if (xx2 > iw) xx2 = iw;
for (yy = y; yy < yy2; yy++)
{
src = data2 + (yy * iw) + x;
dst = data + (x * w) + (w - yy - 1);
for (xx = x; xx < xx2; xx++)
{
*dst = *src;
src++;
dst += w;
}
}
}
}
PUTDAT;
}
static void
_elm_image_smart_rotate_270(Elm_Image_Data *sd)
{
GETDAT(ih, iw);
int x, y, xx, yy, xx2, yy2;
unsigned int *src, *dst;
for (y = 0; y < ih; y += TILE)
{
yy2 = y + TILE;
if (yy2 > ih) yy2 = ih;
for (x = 0; x < iw; x += TILE)
{
xx2 = x + TILE;
if (xx2 > iw) xx2 = iw;
for (yy = y; yy < yy2; yy++)
{
src = data2 + (yy * iw) + x;
dst = data + ((h - x - 1) * w) + yy;
for (xx = x; xx < xx2; xx++)
{
*dst = *src;
src++;
dst -= w;
}
}
}
}
PUTDAT;
}
static void
_elm_image_smart_flip_transverse(Elm_Image_Data *sd)
{
GETDAT(ih, iw);
int x, y;
unsigned int *src, *dst;
src = data2;
for (y = 0; y < ih; y++)
{
dst = data + y;
for (x = 0; x < iw; x++)
{
*dst = *src;
src++;
dst += w;
}
}
PUTDAT;
}
static void
_elm_image_smart_flip_transpose(Elm_Image_Data *sd)
{
GETDAT(ih, iw);
int x, y;
unsigned int *src, *dst;
src = data2 + (iw * ih) - 1;
for (y = 0; y < ih; y++)
{
dst = data + y;
for (x = 0; x < iw; x++)
{
*dst = *src;
src--;
dst += w;
}
}
PUTDAT;
}
EOLIAN static void
_elm_image_orient_set(Eo *obj, Elm_Image_Data *sd, Elm_Image_Orient orient)
{
int iw, ih;
if (sd->edje) return;
if (sd->orient == orient) return;
evas_object_image_size_get(sd->img, &iw, &ih);
if ((sd->orient >= ELM_IMAGE_ORIENT_0) &&
(sd->orient <= ELM_IMAGE_ROTATE_270) &&
(orient >= ELM_IMAGE_ORIENT_0) &&
(orient <= ELM_IMAGE_ROTATE_270))
{
// we are rotating from one anglee to another, so figure out delta
// and apply that delta
Elm_Image_Orient rot_delta = (4 + orient - sd->orient) % 4;
switch (rot_delta)
{
case ELM_IMAGE_ORIENT_0:
// this should never hppen
break;
case ELM_IMAGE_ORIENT_90:
_elm_image_smart_rotate_90(sd);
sd->orient = orient;
break;
case ELM_IMAGE_ORIENT_180:
_elm_image_smart_rotate_180(sd);
sd->orient = orient;
break;
case ELM_IMAGE_ORIENT_270:
_elm_image_smart_rotate_270(sd);
sd->orient = orient;
break;
default:
// this should never hppen
break;
}
}
else if (((sd->orient == ELM_IMAGE_ORIENT_NONE) &&
(orient == ELM_IMAGE_FLIP_HORIZONTAL)) ||
((sd->orient == ELM_IMAGE_FLIP_HORIZONTAL) &&
(orient == ELM_IMAGE_ORIENT_NONE)))
{
// flip horizontally to get thew new orientation
_elm_image_flip_horizontal(sd);
sd->orient = orient;
}
else if (((sd->orient == ELM_IMAGE_ORIENT_NONE) &&
(orient == ELM_IMAGE_FLIP_VERTICAL)) ||
((sd->orient == ELM_IMAGE_FLIP_VERTICAL) &&
(orient == ELM_IMAGE_ORIENT_NONE)))
{
// flipvertically to get thew new orientation
_elm_image_flip_vertical(sd);
sd->orient = orient;
}
else
{
// generic solution - undo the previous orientation and then apply the
// new one after that
int i;
for (i = 0; i < 2; i++)
{
switch (sd->orient)
{
case ELM_IMAGE_ORIENT_0:
break;
case ELM_IMAGE_ORIENT_90:
if (i == 0) _elm_image_smart_rotate_270(sd);
else _elm_image_smart_rotate_90(sd);
break;
case ELM_IMAGE_ORIENT_180:
_elm_image_smart_rotate_180(sd);
break;
case ELM_IMAGE_ORIENT_270:
if (i == 0) _elm_image_smart_rotate_90(sd);
else _elm_image_smart_rotate_270(sd);
break;
case ELM_IMAGE_FLIP_HORIZONTAL:
_elm_image_flip_horizontal(sd);
break;
case ELM_IMAGE_FLIP_VERTICAL:
_elm_image_flip_vertical(sd);
break;
case ELM_IMAGE_FLIP_TRANSPOSE:
_elm_image_smart_flip_transpose(sd);
break;
case ELM_IMAGE_FLIP_TRANSVERSE:
_elm_image_smart_flip_transverse(sd);
break;
default:
// this should never hppen
break;
}
sd->orient = orient;
}
}
evas_object_image_orient_set(sd->img, orient);
sd->orient = orient;
evas_object_image_size_get(sd->img, &iw, &ih);
evas_object_image_data_update_add(sd->img, 0, 0, iw, ih);
_elm_image_internal_sizing_eval(obj, sd);

View File

@ -5,26 +5,23 @@
*/
/**
* Possible orientation options for elm_image_orient_set().
*
* @image html elm_image_orient_set.png
* @image latex elm_image_orient_set.eps width=\textwidth
* Using Evas_Image_Orient enums
* @since 1.14
*/
typedef enum
{
ELM_IMAGE_ORIENT_NONE = 0, /**< no orientation change */
ELM_IMAGE_ORIENT_0 = 0, /**< no orientation change */
ELM_IMAGE_ROTATE_90 = 1, /**< rotate 90 degrees clockwise */
ELM_IMAGE_ORIENT_90 = 1, /**< rotate 90 degrees clockwise @since 1.13 */
ELM_IMAGE_ROTATE_180 = 2, /**< rotate 180 degrees clockwise */
ELM_IMAGE_ORIENT_180 = 2, /**< rotate 180 degrees clockwise @since 1.13 */
ELM_IMAGE_ROTATE_270 = 3, /**< rotate 90 degrees counter-clockwise (i.e. 270 degrees clockwise) */
ELM_IMAGE_ORIENT_270 = 3, /**< rotate 90 degrees counter-clockwise (i.e. 270 degrees clockwise) @since 1.13 */
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) */
} Elm_Image_Orient;
typedef Evas_Image_Orient Elm_Image_Orient;
#define ELM_IMAGE_ORIENT_NONE EVAS_IMAGE_ORIENT_NONE
#define ELM_IMAGE_ORIENT_0 EVAS_IMAGE_ORIENT_0
#define ELM_IMAGE_ROTATE_90 EVAS_IMAGE_ORIENT_90
#define ELM_IMAGE_ORIENT_90 EVAS_IMAGE_ORIENT_90
#define ELM_IMAGE_ROTATE_180 EVAS_IMAGE_ORIENT_180
#define ELM_IMAGE_ORIENT_180 EVAS_IMAGE_ORIENT_180
#define ELM_IMAGE_ROTATE_270 EVAS_IMAGE_ORIENT_270
#define ELM_IMAGE_ORIENT_270 EVAS_IMAGE_ORIENT_270
#define ELM_IMAGE_FLIP_HORIZONTAL EVAS_IMAGE_FLIP_HORIZONTAL
#define ELM_IMAGE_FLIP_VERTICAL EVAS_IMAGE_FLIP_VERTICAL
#define ELM_IMAGE_FLIP_TRANSPOSE EVAS_IMAGE_FLIP_TRANSPOSE
#define ELM_IMAGE_FLIP_TRANSVERSE EVAS_IMAGE_FLIP_TRANSVERSE
/**
* Structure associated with smart callback 'download,progress'.