summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2016-02-29 15:23:18 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2016-03-02 12:57:23 +0900
commit24f19dc770093e9c7d67887502a384cbe894c47f (patch)
tree478711d63e535cd5ba98855b2cef3f66fa1eb4d4
parent7920e66f29e7b2bed8f58d1768c008b199be322a (diff)
Efl.Gfx.Filter: Rework APIs and mark as stable
- Remove @beta flags, - Update @since to match stabilization, - Change methods to properties with keys, - Use eo_prefix and add filter_ prefix to all properties since they use very generic names, The filter API stays under Efl.Gfx since there are other kinds of filters, and this one is the particular "graphical filter" or "effect" API. The EO API mostly not change from an application point of view, except for "source_get" which now returns a string directly. Also, state and data can now be queried.
-rw-r--r--src/lib/efl/interfaces/efl_gfx_filter.eo107
-rw-r--r--src/lib/evas/canvas/evas_filter.eo39
-rw-r--r--src/lib/evas/canvas/evas_filter_mixin.c88
-rw-r--r--src/lib/evas/canvas/evas_image.eo8
-rw-r--r--src/lib/evas/canvas/evas_object_image.c15
-rw-r--r--src/lib/evas/canvas/evas_object_text.c14
-rw-r--r--src/lib/evas/canvas/evas_text.eo8
-rw-r--r--src/tests/edje/edje_test_edje.c2
8 files changed, 177 insertions, 104 deletions
diff --git a/src/lib/efl/interfaces/efl_gfx_filter.eo b/src/lib/efl/interfaces/efl_gfx_filter.eo
index f9cf35fb2b..f4aabf0c59 100644
--- a/src/lib/efl/interfaces/efl_gfx_filter.eo
+++ b/src/lib/efl/interfaces/efl_gfx_filter.eo
@@ -1,45 +1,69 @@
1interface Efl.Gfx.Filter 1interface Efl.Gfx.Filter
2{ 2{
3 [[Graphical filters can be applied to any object implementing this interface.
4
5 Filters are programmable effects that run whenever the object is rendered
6 on its canvas. The program language is Lua and a complete reference can
7 be found under "EFL Graphics Filters".
8
9 This was a beta feature since 1.15.
10
11 @since 1.18
12 ]]
13 eo_prefix: efl_gfx;
3 legacy_prefix: null; 14 legacy_prefix: null;
4 /* @since 1.15 */
5 methods { 15 methods {
6 @property program @beta { 16 @property filter_program {
7 set { 17 set {
8 [[Set an evas filter program on this object. 18 [[Set a graphical filter program on this object.
9 19
10 Valid for Text and Image objects at the moment. 20 Valid for Text and Image objects at the moment.
11 21
12 The argument passed to this function is a string 22 The argument passed to this function is a string containing
13 containing a valid Lua program based on the filters 23 a valid Lua program based on the filters API as described in
14 API as described in the "Evas filters reference" 24 the "EFL Graphics Filters" reference page.
15 page.
16 25
17 Set to null to disable filtering. 26 Set to $null to disable filtering.
18 ]] 27 ]]
19 } 28 }
20 get { 29 get {
21 [[Gets the code of the filter program set on this object. 30 [[Gets the code of the filter program set on this object.
22 May be null. 31 May be $null.
23 ]] 32 ]]
24 } 33 }
25 values { 34 values {
26 code: const(char)*; [[filter program source code]] 35 code: const(char)*; [[The Lua program source code.]]
27 name: const(char)*(0); [[filter name (optional)]] 36 name: const(char)* @optional; [[An optional name for this filter.]]
28 } 37 }
29 } 38 }
30 @property state @beta { 39 @property filter_state {
31 set { 40 [[Set the current state of the filter.
32 [[Set the current state of the filter (for use from Edje).]] 41
33 } 42 This should be used by Edje (EFL's internal layout engine), but
43 could also be used when implementing animations programmatically.
44
45 A full state is defined by two states (name + value): origin state
46 and target state of an ongoing animation, as well as the $pos
47 progress (from 0 to 1) of that animation timeline. The second state
48 can be omitted if there is no ongoing animation.
49 ]]
50 get {}
51 set {}
34 values { 52 values {
35 cur_state: const(char)*; 53 cur_state: const(char)*;
36 cur_val: double(0.0); 54 cur_val: double;
37 next_state: const(char)*; 55 next_state: const(char)* @optional;
38 next_val: double(0.0); 56 next_val: double @optional;
39 pos: double(0.0); 57 pos: double @optional;
40 } 58 }
41 } 59 }
42 @property padding @beta { 60 @property filter_padding {
61 [[Required padding to apply this filter without cropping.
62
63 Read-only property that can be used to calculate the object's final
64 geometry. This can be overriden (set) from inside the filter program
65 by using the function 'padding_set' in the Lua program.
66 ]]
43 get { 67 get {
44 [[Gets the padding required to apply this filter.]] 68 [[Gets the padding required to apply this filter.]]
45 } 69 }
@@ -50,34 +74,37 @@ interface Efl.Gfx.Filter
50 b: int; 74 b: int;
51 } 75 }
52 } 76 }
53 source_set @beta { 77 @property filter_source {
54 [[Bind an object to use as a mask or texture with Evas Filters. 78 [[Bind an object to use as a mask or texture in a filter program.
55 79
56 This will create automatically a new RGBA buffer containing 80 This will create automatically a new RGBA buffer containing
57 the source object's pixels (as it is rendered). 81 the source object's pixels (as it is rendered).
58 ]] 82 ]]
59 params { 83 set {}
60 @in name: const(char)*; [[buffer name as used in the program]] 84 get {}
61 @in source: Efl.Gfx.Base*; [[object to use as a proxy source]] 85 keys {
86 name: const(char)*; [[Buffer name as used in the program.]]
62 } 87 }
63 } 88 values {
64 source_get @const @beta { 89 source: Efl.Gfx.Base*; [[Object to use as a source of pixels.]]
65 [[Retrieve which object is attached to this filter given its
66 buffer name.
67 ]]
68 params {
69 @in name: const(char)*; [[buffer name as used in the program]]
70 @out source: Efl.Gfx.Base*; [[object used as a proxy source]]
71 } 90 }
72 } 91 }
73 data_set @beta { 92 @property filter_data {
74 [[Pass extra data to the filter program. 93 [[Extra data used by the filter program.
75 94
76 This sets a global value as a string.]] 95 Each data element is a string ($value) stored as a global variable
77 params { 96 $name. The program is then responsible for conversion to numbers,
78 @in name: const(char)*; [[Name of the global variable]] 97 tables, etc...
79 @in value: const(char)*; [[String value to use as data]] 98
80 @in execute: bool; [[If true, execute 'name = value']] 99 If the $execute flag is set, then the $value can be complex and
100 run, as if the original Lua program contained a line 'name = value'.
101 ]]
102 keys {
103 name: const(char)*; [[Name of the global variable]]
104 }
105 values {
106 value: const(char)*; [[String value to use as data]]
107 execute: bool(false); [[If $true, execute 'name = value']]
81 } 108 }
82 } 109 }
83 } 110 }
diff --git a/src/lib/evas/canvas/evas_filter.eo b/src/lib/evas/canvas/evas_filter.eo
index 18a4d28ce2..8383567987 100644
--- a/src/lib/evas/canvas/evas_filter.eo
+++ b/src/lib/evas/canvas/evas_filter.eo
@@ -1,9 +1,12 @@
1mixin Evas.Filter (Efl.Gfx.Filter, Eo.Base) 1mixin Evas.Filter (Efl.Gfx.Filter, Eo.Base)
2{ 2{
3 // Evas internal implementation 3 [[Evas internal implementation of filters.]]
4
5 eo_prefix: evas;
4 legacy_prefix: null; 6 legacy_prefix: null;
7
5 methods { 8 methods {
6 @property changed @protected { 9 @property filter_changed @protected {
7 set { 10 set {
8 [[Marks this filter as changed.]] 11 [[Marks this filter as changed.]]
9 } 12 }
@@ -11,7 +14,7 @@ mixin Evas.Filter (Efl.Gfx.Filter, Eo.Base)
11 val: bool; 14 val: bool;
12 } 15 }
13 } 16 }
14 @property invalid @protected { 17 @property filter_invalid @protected {
15 set { 18 set {
16 [[Marks this filter as invalid.]] 19 [[Marks this filter as invalid.]]
17 } 20 }
@@ -19,11 +22,11 @@ mixin Evas.Filter (Efl.Gfx.Filter, Eo.Base)
19 val: bool; 22 val: bool;
20 } 23 }
21 } 24 }
22 input_alpha @protected { 25 filter_input_alpha @protected {
23 [[Called by Evas.Filter to determine whether the input is alpha or rgba.]] 26 [[Called by Evas.Filter to determine whether the input is alpha or rgba.]]
24 return: bool; 27 return: bool;
25 } 28 }
26 input_render @protected { 29 filter_input_render @protected {
27 [[Called by Evas.Filter when the parent class must render the input. 30 [[Called by Evas.Filter when the parent class must render the input.
28 ; 31 ;
29 ]] 32 ]]
@@ -38,13 +41,13 @@ mixin Evas.Filter (Efl.Gfx.Filter, Eo.Base)
38 do_async: bool; 41 do_async: bool;
39 } 42 }
40 } 43 }
41 dirty @protected { 44 filter_dirty @protected {
42 [[Called when the filter changes must trigger a redraw of the object. 45 [[Called when the filter changes must trigger a redraw of the object.
43 46
44 Virtual, to be implemented in the parent class. 47 Virtual, to be implemented in the parent class.
45 ]] 48 ]]
46 } 49 }
47 @property output_buffer @protected { 50 @property filter_output_buffer @protected {
48 get { 51 get {
49 [[Retrieve cached output buffer, if any. 52 [[Retrieve cached output buffer, if any.
50 53
@@ -59,15 +62,17 @@ mixin Evas.Filter (Efl.Gfx.Filter, Eo.Base)
59 implements { 62 implements {
60 Eo.Base.constructor; 63 Eo.Base.constructor;
61 Eo.Base.destructor; 64 Eo.Base.destructor;
62 Efl.Gfx.Filter.program.set; 65 Efl.Gfx.Filter.filter_program.set;
63 Efl.Gfx.Filter.program.get; 66 Efl.Gfx.Filter.filter_program.get;
64 Efl.Gfx.Filter.state.set; 67 Efl.Gfx.Filter.filter_state.get;
65 Efl.Gfx.Filter.padding.get; 68 Efl.Gfx.Filter.filter_state.set;
66 Efl.Gfx.Filter.source_set; 69 Efl.Gfx.Filter.filter_padding.get;
67 Efl.Gfx.Filter.source_get; 70 Efl.Gfx.Filter.filter_source.set;
68 Efl.Gfx.Filter.data_set; 71 Efl.Gfx.Filter.filter_source.get;
69 @virtual .input_alpha; 72 Efl.Gfx.Filter.filter_data.get;
70 @virtual .input_render; 73 Efl.Gfx.Filter.filter_data.set;
71 @virtual .dirty; 74 @virtual .filter_input_alpha;
75 @virtual .filter_input_render;
76 @virtual .filter_dirty;
72 } 77 }
73} 78}
diff --git a/src/lib/evas/canvas/evas_filter_mixin.c b/src/lib/evas/canvas/evas_filter_mixin.c
index 643f5ad9ed..eb2f557a1c 100644
--- a/src/lib/evas/canvas/evas_filter_mixin.c
+++ b/src/lib/evas/canvas/evas_filter_mixin.c
@@ -352,8 +352,8 @@ evas_filter_object_render(Eo *eo_obj, Evas_Object_Protected_Data *obj,
352} 352}
353 353
354EOLIAN static void 354EOLIAN static void
355_evas_filter_efl_gfx_filter_program_set(Eo *eo_obj, Evas_Filter_Data *pd, 355_evas_filter_efl_gfx_filter_filter_program_set(Eo *eo_obj, Evas_Filter_Data *pd,
356 const char *code, const char *name) 356 const char *code, const char *name)
357{ 357{
358 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 358 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
359 Evas_Filter_Program *pgm = NULL; 359 Evas_Filter_Program *pgm = NULL;
@@ -404,15 +404,15 @@ _evas_filter_efl_gfx_filter_program_set(Eo *eo_obj, Evas_Filter_Data *pd,
404} 404}
405 405
406EOLIAN static void 406EOLIAN static void
407_evas_filter_efl_gfx_filter_program_get(Eo *eo_obj EINA_UNUSED, Evas_Filter_Data *pd, const char **code, const char **name) 407_evas_filter_efl_gfx_filter_filter_program_get(Eo *eo_obj EINA_UNUSED, Evas_Filter_Data *pd, const char **code, const char **name)
408{ 408{
409 if (code) *code = pd->data->code; 409 if (code) *code = pd->data->code;
410 if (name) *name = pd->data->name; 410 if (name) *name = pd->data->name;
411} 411}
412 412
413EOLIAN static void 413EOLIAN static void
414_evas_filter_efl_gfx_filter_source_set(Eo *eo_obj, Evas_Filter_Data *pd, 414_evas_filter_efl_gfx_filter_filter_source_set(Eo *eo_obj, Evas_Filter_Data *pd,
415 const char *name, Efl_Gfx_Base *eo_source) 415 const char *name, Efl_Gfx_Base *eo_source)
416{ 416{
417 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 417 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
418 Evas_Filter_Proxy_Binding *pb, *pb_old = NULL; 418 Evas_Filter_Proxy_Binding *pb, *pb_old = NULL;
@@ -497,19 +497,20 @@ update:
497 evas_object_inform_call_resize(eo_obj); 497 evas_object_inform_call_resize(eo_obj);
498} 498}
499 499
500EOLIAN static void 500EOLIAN static Efl_Gfx_Base *
501_evas_filter_efl_gfx_filter_source_get(const Eo *eo_obj EINA_UNUSED, Evas_Filter_Data *pd, 501_evas_filter_efl_gfx_filter_filter_source_get(Eo *obj EINA_UNUSED, Evas_Filter_Data *pd,
502 const char *name, Efl_Gfx_Base **source) 502 const char * name)
503{ 503{
504 if (!source) return; 504 Evas_Filter_Proxy_Binding *pb = eina_hash_find(pd->data->sources, name);
505 *source = eina_hash_find(pd->data->sources, name); 505 if (!pb) return NULL;
506 return pb->eo_source;
506} 507}
507 508
508EOLIAN static void 509EOLIAN static void
509_evas_filter_efl_gfx_filter_state_set(Eo *eo_obj, Evas_Filter_Data *pd, 510_evas_filter_efl_gfx_filter_filter_state_set(Eo *eo_obj, Evas_Filter_Data *pd,
510 const char *cur_state, double cur_val, 511 const char *cur_state, double cur_val,
511 const char *next_state, double next_val, 512 const char *next_state, double next_val,
512 double pos) 513 double pos)
513{ 514{
514 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 515 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
515 516
@@ -520,9 +521,9 @@ _evas_filter_efl_gfx_filter_state_set(Eo *eo_obj, Evas_Filter_Data *pd,
520 { 521 {
521 Evas_Object_Filter_Data *fcow = FCOW_BEGIN(pd); 522 Evas_Object_Filter_Data *fcow = FCOW_BEGIN(pd);
522 fcow->changed = 1; 523 fcow->changed = 1;
523 fcow->state.cur.name = cur_state; 524 eina_stringshare_replace(&fcow->state.cur.name, cur_state);
524 fcow->state.cur.value = cur_val; 525 fcow->state.cur.value = cur_val;
525 fcow->state.next.name = next_state; 526 eina_stringshare_replace(&fcow->state.next.name, next_state);
526 fcow->state.next.value = next_val; 527 fcow->state.next.value = next_val;
527 fcow->state.pos = pos; 528 fcow->state.pos = pos;
528 FCOW_END(fcow, pd); 529 FCOW_END(fcow, pd);
@@ -545,8 +546,21 @@ _evas_filter_efl_gfx_filter_state_set(Eo *eo_obj, Evas_Filter_Data *pd,
545} 546}
546 547
547EOLIAN static void 548EOLIAN static void
548_evas_filter_efl_gfx_filter_padding_get(Eo *eo_obj EINA_UNUSED, Evas_Filter_Data *pd, 549_evas_filter_efl_gfx_filter_filter_state_get(Eo *obj EINA_UNUSED, Evas_Filter_Data *pd,
549 int *l, int *r, int *t, int *b) 550 const char **cur_state, double *cur_val,
551 const char **next_state, double *next_val,
552 double *pos)
553{
554 if (cur_state) *cur_state = pd->data->state.cur.name;
555 if (cur_val) *cur_val = pd->data->state.cur.value;
556 if (next_state) *next_state = pd->data->state.next.name;
557 if (next_val) *next_val = pd->data->state.next.value;
558 if (pos) *pos = pd->data->state.pos;
559}
560
561EOLIAN static void
562_evas_filter_efl_gfx_filter_filter_padding_get(Eo *eo_obj EINA_UNUSED, Evas_Filter_Data *pd,
563 int *l, int *r, int *t, int *b)
550{ 564{
551 if (!pd->data->chain) 565 if (!pd->data->chain)
552 { 566 {
@@ -560,7 +574,7 @@ _evas_filter_efl_gfx_filter_padding_get(Eo *eo_obj EINA_UNUSED, Evas_Filter_Data
560} 574}
561 575
562EOLIAN static void 576EOLIAN static void
563_evas_filter_changed_set(Eo *eo_obj EINA_UNUSED, Evas_Filter_Data *pd, Eina_Bool val) 577_evas_filter_filter_changed_set(Eo *eo_obj EINA_UNUSED, Evas_Filter_Data *pd, Eina_Bool val)
564{ 578{
565 if ((evas_object_filter_cow_default != pd->data) && (pd->data->changed != val)) 579 if ((evas_object_filter_cow_default != pd->data) && (pd->data->changed != val))
566 { 580 {
@@ -571,7 +585,7 @@ _evas_filter_changed_set(Eo *eo_obj EINA_UNUSED, Evas_Filter_Data *pd, Eina_Bool
571} 585}
572 586
573EOLIAN static void 587EOLIAN static void
574_evas_filter_invalid_set(Eo *eo_obj EINA_UNUSED, Evas_Filter_Data *pd, Eina_Bool val) 588_evas_filter_filter_invalid_set(Eo *eo_obj EINA_UNUSED, Evas_Filter_Data *pd, Eina_Bool val)
575{ 589{
576 if (pd->data->invalid != val) 590 if (pd->data->invalid != val)
577 { 591 {
@@ -619,6 +633,8 @@ _evas_filter_eo_base_destructor(Eo *eo_obj, Evas_Filter_Data *pd)
619 } 633 }
620 evas_filter_program_del(pd->data->chain); 634 evas_filter_program_del(pd->data->chain);
621 eina_stringshare_del(pd->data->code); 635 eina_stringshare_del(pd->data->code);
636 eina_stringshare_del(pd->data->state.cur.name);
637 eina_stringshare_del(pd->data->state.next.name);
622 638
623finish: 639finish:
624 eina_cow_free(evas_object_filter_cow, (const Eina_Cow_Data **) &pd->data); 640 eina_cow_free(evas_object_filter_cow, (const Eina_Cow_Data **) &pd->data);
@@ -634,9 +650,9 @@ finish:
634} 650}
635 651
636EOLIAN static void 652EOLIAN static void
637_evas_filter_efl_gfx_filter_data_set(Eo *obj EINA_UNUSED, Evas_Filter_Data *pd, 653_evas_filter_efl_gfx_filter_filter_data_set(Eo *obj EINA_UNUSED, Evas_Filter_Data *pd,
638 const char *name, const char *value, 654 const char *name, const char *value,
639 Eina_Bool execute) 655 Eina_Bool execute)
640{ 656{
641 Evas_Filter_Data_Binding *db, *found = NULL; 657 Evas_Filter_Data_Binding *db, *found = NULL;
642 Evas_Object_Filter_Data *fcow; 658 Evas_Object_Filter_Data *fcow;
@@ -680,8 +696,32 @@ _evas_filter_efl_gfx_filter_data_set(Eo *obj EINA_UNUSED, Evas_Filter_Data *pd,
680 FCOW_END(fcow, pd); 696 FCOW_END(fcow, pd);
681} 697}
682 698
699EOLIAN static void
700_evas_filter_efl_gfx_filter_filter_data_get(Eo *obj EINA_UNUSED, Evas_Filter_Data *pd,
701 const char *name, const char **value,
702 Eina_Bool *execute)
703{
704 Evas_Filter_Data_Binding *db;
705
706 if (!value && !execute) return;
707 EINA_SAFETY_ON_NULL_RETURN(pd->data);
708
709 EINA_INLIST_FOREACH(pd->data->data, db)
710 {
711 if (!strcmp(name, db->name))
712 {
713 if (value) *value = db->value;
714 if (execute) *execute = db->execute;
715 return;
716 }
717 }
718
719 if (value) *value = NULL;
720 if (execute) *execute = EINA_FALSE;
721}
722
683EOLIAN static void * 723EOLIAN static void *
684_evas_filter_output_buffer_get(Eo *obj EINA_UNUSED, Evas_Filter_Data *pd) 724_evas_filter_filter_output_buffer_get(Eo *obj EINA_UNUSED, Evas_Filter_Data *pd)
685{ 725{
686 return pd->data->output; 726 return pd->data->output;
687} 727}
diff --git a/src/lib/evas/canvas/evas_image.eo b/src/lib/evas/canvas/evas_image.eo
index a14f183cd6..7eff63ae7e 100644
--- a/src/lib/evas/canvas/evas_image.eo
+++ b/src/lib/evas/canvas/evas_image.eo
@@ -784,9 +784,9 @@ class Evas.Image (Evas.Object, Efl.File, Efl.Image, Efl.Gfx.Fill, Efl.Gfx.View,
784 Efl.Gfx.Fill.fill.get; 784 Efl.Gfx.Fill.fill.get;
785 Efl.Gfx.View.size.set; 785 Efl.Gfx.View.size.set;
786 Efl.Gfx.View.size.get; 786 Efl.Gfx.View.size.get;
787 Efl.Gfx.Filter.program.set; 787 Efl.Gfx.Filter.filter_program.set;
788 Evas.Filter.input_alpha; 788 Evas.Filter.filter_input_alpha;
789 Evas.Filter.input_render; 789 Evas.Filter.filter_input_render;
790 Evas.Filter.dirty; 790 Evas.Filter.filter_dirty;
791 } 791 }
792} 792}
diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c
index 474386f91a..ed2e604bd6 100644
--- a/src/lib/evas/canvas/evas_object_image.c
+++ b/src/lib/evas/canvas/evas_object_image.c
@@ -3208,22 +3208,22 @@ evas_process_dirty_pixels(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj,
3208} 3208}
3209 3209
3210EOLIAN static void 3210EOLIAN static void
3211_evas_image_evas_filter_dirty(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o) 3211_evas_image_evas_filter_filter_dirty(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
3212{ 3212{
3213 o->changed = 1; 3213 o->changed = 1;
3214} 3214}
3215 3215
3216EOLIAN static Eina_Bool 3216EOLIAN static Eina_Bool
3217_evas_image_evas_filter_input_alpha(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o EINA_UNUSED) 3217_evas_image_evas_filter_filter_input_alpha(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o EINA_UNUSED)
3218{ 3218{
3219 return EINA_FALSE; 3219 return EINA_FALSE;
3220} 3220}
3221 3221
3222EOLIAN static Eina_Bool 3222EOLIAN static Eina_Bool
3223_evas_image_evas_filter_input_render(Eo *eo_obj, Evas_Image_Data *o, 3223_evas_image_evas_filter_filter_input_render(Eo *eo_obj, Evas_Image_Data *o,
3224 void *_filter, void *context, 3224 void *_filter, void *context,
3225 int l, int r EINA_UNUSED, int t, int b EINA_UNUSED, 3225 int l, int r EINA_UNUSED, int t, int b EINA_UNUSED,
3226 Eina_Bool do_async) 3226 Eina_Bool do_async)
3227{ 3227{
3228 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 3228 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
3229 Evas_Filter_Context *filter = _filter; 3229 Evas_Filter_Context *filter = _filter;
@@ -4974,7 +4974,8 @@ evas_object_image_smooth_scale_get(const Eo *obj)
4974} 4974}
4975 4975
4976EOLIAN static void 4976EOLIAN static void
4977_evas_image_efl_gfx_filter_program_set(Eo *obj, Evas_Image_Data *pd EINA_UNUSED, const char *code, const char *name) 4977_evas_image_efl_gfx_filter_filter_program_set(Eo *obj, Evas_Image_Data *pd EINA_UNUSED,
4978 const char *code, const char *name)
4978{ 4979{
4979 pd->has_filter = (code != NULL); 4980 pd->has_filter = (code != NULL);
4980 eo_do_super(obj, MY_CLASS, efl_gfx_filter_program_set(code, name)); 4981 eo_do_super(obj, MY_CLASS, efl_gfx_filter_program_set(code, name));
diff --git a/src/lib/evas/canvas/evas_object_text.c b/src/lib/evas/canvas/evas_object_text.c
index 28e756cdb1..70f527fade 100644
--- a/src/lib/evas/canvas/evas_object_text.c
+++ b/src/lib/evas/canvas/evas_object_text.c
@@ -1664,7 +1664,7 @@ evas_font_draw_async_check(Evas_Object_Protected_Data *obj,
1664/* ugly binding between evas_fitler_mixin.c and this object */ 1664/* ugly binding between evas_fitler_mixin.c and this object */
1665 1665
1666EOLIAN static void 1666EOLIAN static void
1667_evas_text_evas_filter_dirty(Eo *eo_obj, Evas_Text_Data *o) 1667_evas_text_evas_filter_filter_dirty(Eo *eo_obj, Evas_Text_Data *o)
1668{ 1668{
1669 _evas_object_text_items_clear(o); 1669 _evas_object_text_items_clear(o);
1670 o->changed = 1; 1670 o->changed = 1;
@@ -1672,16 +1672,16 @@ _evas_text_evas_filter_dirty(Eo *eo_obj, Evas_Text_Data *o)
1672} 1672}
1673 1673
1674EOLIAN static Eina_Bool 1674EOLIAN static Eina_Bool
1675_evas_text_evas_filter_input_alpha(Eo *eo_obj EINA_UNUSED, Evas_Text_Data *o EINA_UNUSED) 1675_evas_text_evas_filter_filter_input_alpha(Eo *eo_obj EINA_UNUSED, Evas_Text_Data *o EINA_UNUSED)
1676{ 1676{
1677 return EINA_TRUE; 1677 return EINA_TRUE;
1678} 1678}
1679 1679
1680EOLIAN static Eina_Bool 1680EOLIAN static Eina_Bool
1681_evas_text_evas_filter_input_render(Eo *eo_obj EINA_UNUSED, Evas_Text_Data *o, 1681_evas_text_evas_filter_filter_input_render(Eo *eo_obj EINA_UNUSED, Evas_Text_Data *o,
1682 void *_filter, void *drawctx, 1682 void *_filter, void *drawctx,
1683 int l, int r EINA_UNUSED, int t, int b EINA_UNUSED, 1683 int l, int r EINA_UNUSED, int t, int b EINA_UNUSED,
1684 Eina_Bool do_async) 1684 Eina_Bool do_async)
1685{ 1685{
1686 Evas_Filter_Context *filter = _filter; 1686 Evas_Filter_Context *filter = _filter;
1687 Evas_Object_Text_Item *it; 1687 Evas_Object_Text_Item *it;
@@ -2336,7 +2336,7 @@ evas_object_text_text_get(const Eo *obj)
2336} 2336}
2337 2337
2338EOLIAN static void 2338EOLIAN static void
2339_evas_text_efl_gfx_filter_program_set(Eo *obj, Evas_Text_Data *pd EINA_UNUSED, const char *code, const char *name) 2339_evas_text_efl_gfx_filter_filter_program_set(Eo *obj, Evas_Text_Data *pd EINA_UNUSED, const char *code, const char *name)
2340{ 2340{
2341 pd->has_filter = (code != NULL); 2341 pd->has_filter = (code != NULL);
2342 eo_do_super(obj, MY_CLASS, efl_gfx_filter_program_set(code, name)); 2342 eo_do_super(obj, MY_CLASS, efl_gfx_filter_program_set(code, name));
diff --git a/src/lib/evas/canvas/evas_text.eo b/src/lib/evas/canvas/evas_text.eo
index e26c56162c..9e326a21ed 100644
--- a/src/lib/evas/canvas/evas_text.eo
+++ b/src/lib/evas/canvas/evas_text.eo
@@ -260,10 +260,10 @@ class Evas.Text (Evas.Object, Efl.Text, Efl.Text_Properties, Evas.Filter)
260 Efl.Text_Properties.font.set; 260 Efl.Text_Properties.font.set;
261 Efl.Text_Properties.font_source.get; 261 Efl.Text_Properties.font_source.get;
262 Efl.Text_Properties.font_source.set; 262 Efl.Text_Properties.font_source.set;
263 Efl.Gfx.Filter.program.set; 263 Efl.Gfx.Filter.filter_program.set;
264 Evas.Filter.input_alpha; 264 Evas.Filter.filter_input_alpha;
265 Evas.Filter.input_render; 265 Evas.Filter.filter_input_render;
266 Evas.Filter.dirty; 266 Evas.Filter.filter_dirty;
267 Evas.Object.paragraph_direction.set; 267 Evas.Object.paragraph_direction.set;
268 Evas.Object.paragraph_direction.get; 268 Evas.Object.paragraph_direction.get;
269 } 269 }
diff --git a/src/tests/edje/edje_test_edje.c b/src/tests/edje/edje_test_edje.c
index 8d5f725e64..b406bad1de 100644
--- a/src/tests/edje/edje_test_edje.c
+++ b/src/tests/edje/edje_test_edje.c
@@ -240,7 +240,7 @@ START_TEST(edje_test_filters)
240 fail_if(!prg); 240 fail_if(!prg);
241 fail_if(!name || strcmp(name, "filterfile")); 241 fail_if(!name || strcmp(name, "filterfile"));
242 242
243 eo_do(text, efl_gfx_filter_source_get("mask", &src)); 243 eo_do(text, src = efl_gfx_filter_source_get("mask"));
244 fail_if(!src); 244 fail_if(!src);
245 245
246 // TODO: Verify properly that the filter runs well 246 // TODO: Verify properly that the filter runs well