forked from enlightenment/efl
Interface: Flip and orientation interface
Summary: Added flip and orientation interface and used them in evas_image. Removed efl_image_orientation_set API and used efl_orientation_set and efl_flip_set API. In implementation part, converted enums back and forth in order to keep current implementation as it is. Test Plan: src/examples/evas/evas-images5.c Reviewers: singh.amitesh, raster, tasn, herdsman, woohyun, cedric, felipealmeida, jpeg Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D3844
This commit is contained in:
parent
a142f0bd39
commit
98edbd23a4
|
@ -23,6 +23,8 @@ efl_eolian_files = \
|
|||
lib/efl/interfaces/efl_gfx_filter.eo \
|
||||
lib/efl/interfaces/efl_model_base.eo \
|
||||
lib/efl/interfaces/efl_animator.eo \
|
||||
lib/efl/interfaces/efl_orientation.eo \
|
||||
lib/efl/interfaces/efl_flip.eo \
|
||||
lib/efl/interfaces/efl_vpath.eo \
|
||||
lib/efl/interfaces/efl_vpath_manager.eo \
|
||||
lib/efl/interfaces/efl_vpath_file.eo \
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
/evas_images2
|
||||
/evas_images3
|
||||
/evas_images4
|
||||
/evas_images5
|
||||
/evas_init_shutdown
|
||||
/evas_object_manipulation
|
||||
/evas_object_manipulation-eo
|
||||
|
|
|
@ -154,6 +154,11 @@ evas_images4_SOURCES = evas-images4.c
|
|||
evas_images4_LDADD = $(ECORE_EVAS_COMMON_LDADD)
|
||||
evas_images4_CPPFLAGS = $(ECORE_EVAS_COMMON_CPPFLAGS)
|
||||
|
||||
EXTRA_PROGRAMS += evas_images5
|
||||
evas_images5_SOURCES = evas-images5.c
|
||||
evas_images5_LDADD = $(ECORE_EVAS_COMMON_LDADD)
|
||||
evas_images5_CPPFLAGS = $(ECORE_EVAS_COMMON_CPPFLAGS)
|
||||
|
||||
EXTRA_PROGRAMS += evas_text
|
||||
evas_text_SOURCES = evas-text.c
|
||||
evas_text_LDADD = $(ECORE_EVAS_COMMON_LDADD)
|
||||
|
@ -347,6 +352,7 @@ evas-images.c \
|
|||
evas-images2.c \
|
||||
evas-images3.c \
|
||||
evas-images4.c \
|
||||
evas-images5.c \
|
||||
evas-init-shutdown.c \
|
||||
evas-map-utils.c \
|
||||
evas-map-aa.c \
|
||||
|
|
|
@ -15,6 +15,7 @@ EXAMPLES= evas-aspect-hints \
|
|||
evas-images2 \
|
||||
evas-images3 \
|
||||
evas-images4 \
|
||||
evas-images5 \
|
||||
evas-init-shutdown \
|
||||
evas-map-utils \
|
||||
evas-object-manipulation \
|
||||
|
|
|
@ -0,0 +1,200 @@
|
|||
/**
|
||||
* Simple Evas example illustrating some image objects functions
|
||||
*
|
||||
* You'll need at least one engine built for it (excluding the buffer
|
||||
* one) and the png image loader/saver also built. See stdout/stderr
|
||||
* for output.
|
||||
*
|
||||
* @verbatim
|
||||
* gcc -o evas-images5 evas-images5.c `pkg-config --libs --cflags evas ecore ecore-evas efl`
|
||||
* @endverbatim
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#else
|
||||
#define PACKAGE_EXAMPLES_DIR "."
|
||||
#endif
|
||||
|
||||
#define EFL_BETA_API_SUPPORT
|
||||
|
||||
#include <Ecore.h>
|
||||
#include <Ecore_Evas.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <Efl.h>
|
||||
#include "evas-common.h"
|
||||
|
||||
#define WIDTH (320)
|
||||
#define HEIGHT (240)
|
||||
|
||||
static const char *img_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/im1.png";
|
||||
static const char *commands = \
|
||||
"commands are:\n"
|
||||
"\tp - print image fill property\n"
|
||||
"\t0 - rotate by 0\n"
|
||||
"\t1 - rotate by 90\n"
|
||||
"\t2 - rotate by 180\n"
|
||||
"\t3 - rotate by 270\n"
|
||||
"\t4 - flip horizontal\n"
|
||||
"\t5 - flip vertical\n"
|
||||
"\t6 - flip none\n"
|
||||
"\ts - save noise image to disk (/tmp dir)\n"
|
||||
"\th - print help\n";
|
||||
|
||||
const char *file_path = "/tmp/evas-images4-example.png";
|
||||
const char *quality_str = "quality=100";
|
||||
|
||||
struct test_data
|
||||
{
|
||||
Ecore_Evas *ee;
|
||||
Evas *evas;
|
||||
Evas_Object *bg, *img;
|
||||
};
|
||||
|
||||
static struct test_data d = {0};
|
||||
|
||||
static void
|
||||
_on_destroy(Ecore_Evas *ee EINA_UNUSED)
|
||||
{
|
||||
ecore_main_loop_quit();
|
||||
}
|
||||
|
||||
/* here just to keep our example's window size and background image's
|
||||
* size in synchrony */
|
||||
static void
|
||||
_canvas_resize_cb(Ecore_Evas *ee)
|
||||
{
|
||||
int w, h;
|
||||
|
||||
ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
|
||||
evas_object_resize(d.bg, w, h);
|
||||
}
|
||||
|
||||
static void
|
||||
_on_keydown(void *data EINA_UNUSED,
|
||||
Evas *evas EINA_UNUSED,
|
||||
Evas_Object *o EINA_UNUSED,
|
||||
void *einfo)
|
||||
{
|
||||
Evas_Event_Key_Down *ev = einfo;
|
||||
|
||||
if (strcmp(ev->key, "h") == 0) /* print help */
|
||||
{
|
||||
puts(commands);
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(ev->key, "s") == 0) /* save noise image to disk */
|
||||
{
|
||||
if (!evas_object_image_save(d.img, file_path, NULL, quality_str))
|
||||
fprintf(stderr, "Cannot save image to '%s' (flags '%s')\n",
|
||||
file_path, quality_str);
|
||||
else
|
||||
fprintf(stdout, "Image saved to '%s' (flags '%s'), check it out with "
|
||||
"an image viewer\n", file_path, quality_str);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(ev->key, "p") == 0) /* print image size*/
|
||||
{
|
||||
Evas_Coord w, h;
|
||||
|
||||
evas_object_image_size_get(d.img, &w, &h);
|
||||
fprintf(stdout, "Image has size set to: w=%d, h=%d\n", w, h);
|
||||
return;
|
||||
}
|
||||
|
||||
int key_val = ev->key[0] - '0';
|
||||
|
||||
switch (key_val)
|
||||
{
|
||||
case 0:
|
||||
efl_orientation_set(d.img, EFL_ORIENT_0);
|
||||
break;
|
||||
case 1:
|
||||
efl_orientation_set(d.img, EFL_ORIENT_90);
|
||||
break;
|
||||
case 2:
|
||||
efl_orientation_set(d.img, EFL_ORIENT_180);
|
||||
break;
|
||||
case 3:
|
||||
efl_orientation_set(d.img, EFL_ORIENT_270);
|
||||
break;
|
||||
case 4:
|
||||
efl_flip_set(d.img, EFL_FLIP_HORIZONTAL);
|
||||
break;
|
||||
case 5:
|
||||
efl_flip_set(d.img, EFL_FLIP_VERTICAL);
|
||||
break;
|
||||
case 6:
|
||||
efl_flip_set(d.img, EFL_FLIP_NONE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
if (!ecore_evas_init())
|
||||
return EXIT_FAILURE;
|
||||
|
||||
/* this will give you a window with an Evas canvas under the first
|
||||
* engine available */
|
||||
d.ee = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
|
||||
if (!d.ee)
|
||||
goto error;
|
||||
|
||||
ecore_evas_callback_destroy_set(d.ee, _on_destroy);
|
||||
ecore_evas_callback_resize_set(d.ee, _canvas_resize_cb);
|
||||
ecore_evas_show(d.ee);
|
||||
|
||||
/* the canvas pointer, de facto */
|
||||
d.evas = ecore_evas_get(d.ee);
|
||||
|
||||
d.bg = evas_object_rectangle_add(d.evas);
|
||||
evas_object_color_set(d.bg, 255, 255, 255, 255); /* white bg */
|
||||
evas_object_move(d.bg, 0, 0); /* at canvas' origin */
|
||||
evas_object_resize(d.bg, WIDTH, HEIGHT); /* covers full canvas */
|
||||
evas_object_show(d.bg);
|
||||
|
||||
d.img = evas_object_image_add(d.evas);
|
||||
evas_object_image_file_set(d.img, img_path, NULL);
|
||||
err = evas_object_image_load_error_get(d.img);
|
||||
if (err != EVAS_LOAD_ERROR_NONE)
|
||||
{
|
||||
fprintf(stderr, "could not load image '%s'. error string is \"%s\"\n",
|
||||
img_path, evas_load_error_str(err));
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stdout,
|
||||
"loaded image '%s' with succes! error string is \"%s\"\n",
|
||||
img_path, evas_load_error_str(err));
|
||||
|
||||
evas_object_move(d.img, WIDTH / 2, HEIGHT / 2);
|
||||
evas_object_image_fill_set(d.img, 0, 0, WIDTH / 2, HEIGHT / 2);
|
||||
evas_object_resize(d.img, WIDTH / 2, HEIGHT / 2);
|
||||
evas_object_show(d.img);
|
||||
|
||||
evas_object_focus_set(d.bg, EINA_TRUE);
|
||||
evas_object_event_callback_add(
|
||||
d.bg, EVAS_CALLBACK_KEY_DOWN, _on_keydown, NULL);
|
||||
}
|
||||
|
||||
puts(commands);
|
||||
ecore_main_loop_begin();
|
||||
|
||||
ecore_evas_free(d.ee);
|
||||
ecore_evas_shutdown();
|
||||
return 0;
|
||||
|
||||
error:
|
||||
fprintf(stderr, "you got to have at least one evas engine built and linked"
|
||||
" up to ecore-evas for this example to run properly.\n");
|
||||
ecore_evas_shutdown();
|
||||
return -1;
|
||||
}
|
|
@ -69,6 +69,8 @@ typedef Efl_Gfx_Path_Command_Type Efl_Gfx_Path_Command;
|
|||
#include "interfaces/efl_player.eo.h"
|
||||
#include "interfaces/efl_text.eo.h"
|
||||
#include "interfaces/efl_text_properties.eo.h"
|
||||
#include "interfaces/efl_orientation.eo.h"
|
||||
#include "interfaces/efl_flip.eo.h"
|
||||
|
||||
/* Core interface */
|
||||
#include "interfaces/efl_animator.eo.h"
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
enum Efl.Flip_Value
|
||||
{
|
||||
[[Flip
|
||||
|
||||
See also @Efl.Flip
|
||||
]]
|
||||
legacy: efl;
|
||||
flip_none = 0, [[no flip]]
|
||||
flip_horizontal = 1, [[flip image horizontally]]
|
||||
flip_vertical = 2 [[flip image vertically]]
|
||||
}
|
||||
|
||||
interface Efl.Flip
|
||||
{
|
||||
legacy_prefix: null;
|
||||
methods {
|
||||
@property flip{
|
||||
[[Control the flip of the given image
|
||||
|
||||
Use this function to change how your image is to be
|
||||
flipped: vertically or horizontally or transpose
|
||||
or traverse]]
|
||||
set {
|
||||
}
|
||||
get {
|
||||
}
|
||||
values {
|
||||
flip: Efl.Flip_Value; [[Flip]]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -159,18 +159,3 @@ enum Efl.Gfx.Border_Fill_Mode
|
|||
solid = 2 [[Image's center region is to be made solid, even if it has transparency on it]]
|
||||
}
|
||||
|
||||
enum Efl.Gfx.Orientation
|
||||
{
|
||||
[[Orientation options for $Efl.Image.orientation
|
||||
@since 1.14]]
|
||||
/* FIXME: legacy: evas_image; */
|
||||
orient_none = 0, [[no orientation change]]
|
||||
orient_0 = 0, [[no orientation change]]
|
||||
orient_90 = 1, [[orient 90 degrees clockwise]]
|
||||
orient_180 = 2, [[orient 180 degrees clockwise]]
|
||||
orient_270 = 3, [[rotate 90 degrees counter-clockwise (i.e. 270 degrees clockwise)]]
|
||||
flip_horizontal = 4, [[flip image horizontally]]
|
||||
flip_vertical = 5, [[flip image vertically]]
|
||||
flip_transpose = 6, [[flip image along the y = (width - x) line (bottom-left to top-right)]]
|
||||
flip_transverse = 7 [[flip image along the y = x line (top-left to bottom-right)]]
|
||||
}
|
||||
|
|
|
@ -48,21 +48,6 @@ interface Efl.Image ()
|
|||
ratio: double; [[The image's ratio.]]
|
||||
}
|
||||
}
|
||||
@property orientation {
|
||||
[[The image orientation allows rotating and flipping the image
|
||||
at render time.
|
||||
|
||||
Default is @Efl.Gfx.Orientation.orient_none
|
||||
|
||||
@since 1.14
|
||||
]]
|
||||
set {}
|
||||
get {}
|
||||
values {
|
||||
orient: Efl.Gfx.Orientation;
|
||||
}
|
||||
}
|
||||
|
||||
@property border {
|
||||
[[Dimensions of this image's border, a region that does not scale
|
||||
with the center area.
|
||||
|
|
|
@ -35,3 +35,5 @@ EAPI const Eo_Event_Description _EFL_GFX_PATH_CHANGED =
|
|||
|
||||
#include "interfaces/efl_model_base.eo.c"
|
||||
#include "interfaces/efl_animator.eo.c"
|
||||
#include "interfaces/efl_orientation.eo.c"
|
||||
#include "interfaces/efl_flip.eo.c"
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
enum Efl.Orient
|
||||
{
|
||||
[[Orientation
|
||||
|
||||
See also @Efl.Orientation
|
||||
]]
|
||||
legacy: efl;
|
||||
orient_none = 0,
|
||||
orient_0 = 0, [[no orientation change]]
|
||||
orient_90 = 90, [[orient 90 degrees clockwise]]
|
||||
orient_180 = 180, [[orient 180 degrees clockwise]]
|
||||
orient_270 = 270, [[rotate 90 degrees counter-clockwise (i.e. 270 degrees clockwise)]]
|
||||
orient_up = 0, [[orient up]]
|
||||
orient_right = 90, [[orient right]]
|
||||
orient_down = 180, [[orient down]]
|
||||
orient_left = 270, [[orient left]]
|
||||
orient_vertical = 0, [[orient vertical]]
|
||||
orient_horizontal = 90 [[orient horizontal]]
|
||||
|
||||
}
|
||||
|
||||
interface Efl.Orientation
|
||||
{
|
||||
legacy_prefix: null;
|
||||
methods {
|
||||
@property orientation{
|
||||
[[Control the orientation of a given widget
|
||||
|
||||
Use this function to change how your widget is to be
|
||||
disposed: vertically or horizontally or inverted vertically
|
||||
or inverted horizontally]]
|
||||
set {
|
||||
}
|
||||
get {
|
||||
}
|
||||
values {
|
||||
dir: Efl.Orient; [[Direction]]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1229,22 +1229,42 @@ _elm_image_efl_image_load_load_size_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd,
|
|||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_image_efl_image_orientation_set(Eo *obj, Elm_Image_Data *sd, Efl_Gfx_Orientation orient)
|
||||
_elm_image_efl_orientation_orientation_set(Eo *obj, Elm_Image_Data *sd, Efl_Orient orient)
|
||||
{
|
||||
if (sd->edje) return;
|
||||
if (sd->orient == orient) return;
|
||||
|
||||
evas_object_image_orient_set(sd->img, (Evas_Image_Orient) orient);
|
||||
efl_orientation_set(sd->img, orient);
|
||||
|
||||
sd->orient = orient;
|
||||
_elm_image_internal_sizing_eval(obj, sd);
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Gfx_Orientation
|
||||
_elm_image_efl_image_orientation_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
|
||||
EOLIAN static Efl_Orient
|
||||
_elm_image_efl_orientation_orientation_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
|
||||
{
|
||||
return sd->orient;
|
||||
}
|
||||
|
||||
|
||||
EOLIAN static void
|
||||
_elm_image_efl_flip_flip_set(Eo *obj, Elm_Image_Data *sd, Efl_Flip_Value flip)
|
||||
{
|
||||
if (sd->edje) return;
|
||||
if (sd->flip == flip) return;
|
||||
|
||||
efl_flip_set(sd->img, flip);
|
||||
|
||||
sd->flip = flip;
|
||||
_elm_image_internal_sizing_eval(obj, sd);
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Flip_Value
|
||||
_elm_image_efl_flip_flip_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
|
||||
{
|
||||
return sd->flip;
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns on editing through drag and drop and copy and paste.
|
||||
*/
|
||||
|
@ -1633,13 +1653,63 @@ elm_image_preload_disabled_set(Evas_Object *obj, Eina_Bool disable)
|
|||
EAPI void
|
||||
elm_image_orient_set(Evas_Object *obj, Elm_Image_Orient orient)
|
||||
{
|
||||
efl_image_orientation_set(obj, (Efl_Gfx_Orientation) orient);
|
||||
Efl_Orient dir;
|
||||
Efl_Flip_Value flip;
|
||||
|
||||
ELM_IMAGE_DATA_GET(obj, sd);
|
||||
sd->image_orient = orient;
|
||||
|
||||
switch (orient)
|
||||
{
|
||||
case EVAS_IMAGE_ORIENT_0:
|
||||
dir = EFL_ORIENT_0;
|
||||
flip = EFL_FLIP_NONE;
|
||||
break;
|
||||
case EVAS_IMAGE_ORIENT_90:
|
||||
dir = EFL_ORIENT_90;
|
||||
flip = EFL_FLIP_NONE;
|
||||
break;
|
||||
case EVAS_IMAGE_ORIENT_180:
|
||||
dir = EFL_ORIENT_180;
|
||||
flip = EFL_FLIP_NONE;
|
||||
break;
|
||||
case EVAS_IMAGE_ORIENT_270:
|
||||
dir = EFL_ORIENT_270;
|
||||
flip = EFL_FLIP_NONE;
|
||||
break;
|
||||
case EVAS_IMAGE_FLIP_HORIZONTAL:
|
||||
dir = EFL_ORIENT_0;
|
||||
flip = EFL_FLIP_HORIZONTAL;
|
||||
break;
|
||||
case EVAS_IMAGE_FLIP_VERTICAL:
|
||||
dir = EFL_ORIENT_0;
|
||||
flip = EFL_FLIP_VERTICAL;
|
||||
break;
|
||||
case EVAS_IMAGE_FLIP_TRANSVERSE:
|
||||
dir = EFL_ORIENT_270;
|
||||
flip = EFL_FLIP_HORIZONTAL;
|
||||
break;
|
||||
case EVAS_IMAGE_FLIP_TRANSPOSE:
|
||||
dir = EFL_ORIENT_270;
|
||||
flip = EFL_FLIP_VERTICAL;
|
||||
break;
|
||||
default:
|
||||
dir = EFL_ORIENT_0;
|
||||
flip = EFL_FLIP_NONE;
|
||||
break;
|
||||
}
|
||||
|
||||
efl_orientation_set(obj, dir);
|
||||
efl_flip_set(obj, flip);
|
||||
}
|
||||
|
||||
EAPI Elm_Image_Orient
|
||||
elm_image_orient_get(const Evas_Object *obj)
|
||||
{
|
||||
return (Elm_Image_Orient) efl_image_orientation_get(obj);
|
||||
ELM_IMAGE_CHECK(obj) EVAS_IMAGE_ORIENT_NONE;
|
||||
ELM_IMAGE_DATA_GET(obj, sd);
|
||||
|
||||
return sd->image_orient;
|
||||
}
|
||||
|
||||
EAPI Evas_Object*
|
||||
|
|
|
@ -23,7 +23,7 @@ struct Elm.Image.Error
|
|||
class Elm.Image (Elm.Widget, Evas.Clickable_Interface, Evas.Draggable_Interface,
|
||||
Efl.File, Efl.Image, Efl.Image_Load, Efl.Player, Efl.Gfx.View, Efl.Player,
|
||||
Elm.Interface_Atspi_Image, Elm.Interface_Atspi_Widget_Action,
|
||||
Edje.Object)
|
||||
Edje.Object, Efl.Orientation, Efl.Flip)
|
||||
{
|
||||
eo_prefix: elm_obj_image;
|
||||
methods {
|
||||
|
@ -115,8 +115,10 @@ class Elm.Image (Elm.Widget, Evas.Clickable_Interface, Evas.Draggable_Interface,
|
|||
Efl.Image_Load.load_size.get;
|
||||
Efl.Image.smooth_scale.set;
|
||||
Efl.Image.smooth_scale.get;
|
||||
Efl.Image.orientation.set;
|
||||
Efl.Image.orientation.get;
|
||||
Efl.Orientation.orientation.set;
|
||||
Efl.Orientation.orientation.get;
|
||||
Efl.Flip.flip.set;
|
||||
Efl.Flip.flip.get;
|
||||
Efl.Player.playable.get;
|
||||
Efl.Player.play.set;
|
||||
Efl.Player.play.get;
|
||||
|
|
|
@ -61,7 +61,9 @@ struct _Elm_Image_Data
|
|||
int frame_count;
|
||||
int cur_frame;
|
||||
|
||||
Efl_Gfx_Orientation orient;
|
||||
Elm_Image_Orient image_orient; // to support EAPI
|
||||
Efl_Orient orient;
|
||||
Efl_Flip_Value flip;
|
||||
|
||||
struct {
|
||||
Ecore_Thread *th;
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
type @extern Evas_Object_Image_Pixels_Get_Cb: __undefined_type; /* FIXME: func pointers are not supported. */
|
||||
|
||||
class Evas.Image (Evas.Object, Evas.Filter,
|
||||
Efl.Image, Efl.Gfx.Buffer, Efl.Gfx.Fill, Efl.Gfx.View, Efl.File)
|
||||
Efl.Image, Efl.Gfx.Buffer, Efl.Gfx.Fill, Efl.Gfx.View, Efl.File,
|
||||
Efl.Orientation, Efl.Flip)
|
||||
{
|
||||
/* Legacy is implement inside Efl.Canvas.Image */
|
||||
legacy_prefix: evas_object_image;
|
||||
|
@ -12,8 +13,10 @@ class Evas.Image (Evas.Object, Evas.Filter,
|
|||
Eo.Base.dbg_info_get;
|
||||
Eo.Base.finalize;
|
||||
Efl.File.save;
|
||||
Efl.Image.orientation.get;
|
||||
Efl.Image.orientation.set;
|
||||
Efl.Orientation.orientation.get;
|
||||
Efl.Orientation.orientation.set;
|
||||
Efl.Flip.flip.set;
|
||||
Efl.Flip.flip.get;
|
||||
Efl.Image.smooth_scale.set;
|
||||
Efl.Image.smooth_scale.get;
|
||||
Efl.Image.ratio.get;
|
||||
|
|
|
@ -347,14 +347,19 @@ EAPI void
|
|||
evas_object_image_orient_set(Evas_Object *obj, Evas_Image_Orient orient)
|
||||
{
|
||||
EVAS_IMAGE_API(obj);
|
||||
efl_image_orientation_set(obj, (Efl_Gfx_Orientation) orient);
|
||||
|
||||
Evas_Image_Data *o = eo_data_scope_get(obj, EVAS_IMAGE_CLASS);
|
||||
_evas_image_orientation_set(obj, o, orient);
|
||||
}
|
||||
|
||||
EAPI Evas_Image_Orient
|
||||
evas_object_image_orient_get(const Evas_Object *obj)
|
||||
{
|
||||
EVAS_IMAGE_API(obj, EVAS_IMAGE_ORIENT_NONE);
|
||||
return (Evas_Image_Orient) efl_image_orientation_get(obj);
|
||||
|
||||
Evas_Image_Data *o = eo_data_scope_get(obj, EVAS_IMAGE_CLASS);
|
||||
|
||||
return o->cur->orient;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
|
|
@ -114,6 +114,8 @@ struct _Evas_Image_Data
|
|||
|
||||
Efl_Image_Scale_Hint scale_hint;
|
||||
Efl_Image_Content_Hint content_hint;
|
||||
Efl_Flip_Value flip_value;
|
||||
Efl_Orient orient_value;
|
||||
|
||||
Eina_Bool changed : 1;
|
||||
Eina_Bool dirty_pixels : 1;
|
||||
|
@ -169,6 +171,7 @@ void _evas_image_load_region_get(const Eo *eo_obj, int *x, int *y, int *w, int *
|
|||
void _evas_image_load_orientation_set(Eo *eo_obj, Eina_Bool enable);
|
||||
Eina_Bool _evas_image_load_orientation_get(const Eo *eo_obj);
|
||||
Eina_Bool _evas_image_load_region_support_get(const Eo *eo_obj);
|
||||
void _evas_image_orientation_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Image_Orient orient);
|
||||
|
||||
/* Efl.Image.Animated */
|
||||
Eina_Bool _evas_image_animated_get(const Eo *eo_obj);
|
||||
|
|
|
@ -341,11 +341,10 @@ _evas_image_done_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Image_Dat
|
|||
evas_object_change(eo_obj, obj);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_evas_image_efl_image_orientation_set(Eo *eo_obj, Evas_Image_Data *o, Efl_Gfx_Orientation _orient)
|
||||
void
|
||||
_evas_image_orientation_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Image_Orient orient)
|
||||
{
|
||||
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
||||
Evas_Image_Orient orient = (Evas_Image_Orient) _orient;
|
||||
int iw, ih;
|
||||
|
||||
if (o->cur->orient == orient) return;
|
||||
|
@ -391,10 +390,76 @@ _evas_image_efl_image_orientation_set(Eo *eo_obj, Evas_Image_Data *o, Efl_Gfx_Or
|
|||
evas_object_change(eo_obj, obj);
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Gfx_Orientation
|
||||
_evas_image_efl_image_orientation_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
|
||||
static Evas_Image_Orient
|
||||
_get_image_orient_from_orient_flip(Efl_Orient orient, Efl_Flip_Value flip)
|
||||
{
|
||||
return (Efl_Gfx_Orientation) o->cur->orient;
|
||||
switch (orient)
|
||||
{
|
||||
case EFL_ORIENT_0:
|
||||
if (flip == EFL_FLIP_HORIZONTAL)
|
||||
return EVAS_IMAGE_FLIP_HORIZONTAL;
|
||||
else if (flip == EFL_FLIP_VERTICAL)
|
||||
return EVAS_IMAGE_FLIP_VERTICAL;
|
||||
else
|
||||
return EVAS_IMAGE_ORIENT_0;
|
||||
case EFL_ORIENT_90:
|
||||
if (flip == EFL_FLIP_HORIZONTAL)
|
||||
return EVAS_IMAGE_FLIP_TRANSPOSE;
|
||||
else if (flip == EFL_FLIP_VERTICAL)
|
||||
return EVAS_IMAGE_FLIP_TRANSVERSE;
|
||||
else
|
||||
return EVAS_IMAGE_ORIENT_90;
|
||||
case EFL_ORIENT_180:
|
||||
if (flip == EFL_FLIP_HORIZONTAL)
|
||||
return EVAS_IMAGE_FLIP_VERTICAL;
|
||||
else if (flip == EFL_FLIP_VERTICAL)
|
||||
return EVAS_IMAGE_FLIP_HORIZONTAL;
|
||||
else
|
||||
return EVAS_IMAGE_ORIENT_180;
|
||||
case EFL_ORIENT_270:
|
||||
if (flip == EFL_FLIP_HORIZONTAL)
|
||||
return EVAS_IMAGE_FLIP_TRANSVERSE;
|
||||
else if (flip == EFL_FLIP_VERTICAL)
|
||||
return EVAS_IMAGE_FLIP_TRANSPOSE;
|
||||
else
|
||||
return EVAS_IMAGE_ORIENT_270;
|
||||
default:
|
||||
return EVAS_IMAGE_ORIENT_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_evas_image_efl_orientation_orientation_set(Eo *obj, Evas_Image_Data *o, Efl_Orient dir)
|
||||
{
|
||||
Evas_Image_Orient orient;
|
||||
|
||||
o->orient_value = dir;
|
||||
orient = _get_image_orient_from_orient_flip(dir, o->flip_value);
|
||||
|
||||
_evas_image_orientation_set(obj, o, orient);
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Orient
|
||||
_evas_image_efl_orientation_orientation_get(Eo *obj EINA_UNUSED, Evas_Image_Data *o)
|
||||
{
|
||||
return o->orient_value;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_evas_image_efl_flip_flip_set(Eo *obj, Evas_Image_Data *o, Efl_Flip_Value flip)
|
||||
{
|
||||
Evas_Image_Orient orient;
|
||||
|
||||
o->flip_value = flip;
|
||||
orient = _get_image_orient_from_orient_flip(o->orient_value, flip);
|
||||
|
||||
_evas_image_orientation_set(obj, o, orient);
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Flip_Value
|
||||
_evas_image_efl_flip_flip_get(Eo *obj EINA_UNUSED, Evas_Image_Data *o)
|
||||
{
|
||||
return o->flip_value;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
|
|
Loading…
Reference in New Issue