Compare commits

...

86 Commits

Author SHA1 Message Date
Cedric BAIL 5f9bdb6120 eina: populate memory in the right limit. 2016-09-19 15:26:06 -07:00
Cedric BAIL 32ecb77191 evas: fix use after free.
Thanks to Thanatermesis for tracking this in T2135.
2015-03-24 23:13:30 +01:00
Carsten Haitzler 3fabf9f952 evas textgrid - fix drawing of codepoints that are 0
this fixes artifacts if you have cells with 0 codepoints and also have
underlines or strikethroughs in them.

@fix
2015-01-07 16:49:08 +01:00
Jean-Philippe Andre 864c137471 Evas fonts: Fix minor deviation in RLE font render
So I've discovered some weird output values after drawing
some text. The destination alpha would become 0xFE even
when the back buffer had a background with 0xFF alpha.

Example:
Dest is 0xff00ff00 (green).
Color is 0xffffffff (white).
Current font alpha is 170 (0xaa).
--> Output was 0xFEaaFEaa instead of 0xFFaaFFaa.

This is because of some slightly invalid calculation
when doing the font masking (mtab[v] = 0x55 above).

Indeed, MUL_256 takes alpha values in the range [1-256]
and not [0-256] as was assumed.
2015-01-06 13:14:08 +01:00
Eduardo Lima (Etrunko) d64e3a27e5 Revert "evas: GL_X11 context need to always be with alpha or it will fail to change."
This reverts commit 12eeebb544.
2014-10-20 11:34:53 -02:00
Eduardo Lima (Etrunko) 4fb4d7c77c Revert "evas_gl_x11: Fix build after lastest break by Cedric"
This reverts commit 5a4ac4e7ca.
2014-10-20 11:34:37 -02:00
Eduardo Lima (Etrunko) 5a4ac4e7ca evas_gl_x11: Fix build after lastest break by Cedric
modules/evas/engines/gl_x11/evas_engine.c: In function 'eng_setup':
modules/evas/engines/gl_x11/evas_engine.c:896:34: error: too many arguments to function 'eng_window_new'
                                  re->info->info.rotation);
                                  ^
In file included from modules/evas/engines/gl_x11/evas_engine.c:2:0:
modules/evas/engines/gl_x11/evas_engine.h:94:21: note: declared here
 Evas_GL_X11_Window *eng_window_new(Display *disp, Window win, int screen,
                     ^
modules/evas/engines/gl_x11/evas_engine.c:960:44: error: too many arguments to function 'eng_window_new'
                                            re->info->info.rotation);
                                            ^
@fix

Signed-off-by: Eduardo Lima (Etrunko) <eduardo.lima@intel.com>
2014-10-17 16:11:39 -03:00
Cedric BAIL 12eeebb544 evas: GL_X11 context need to always be with alpha or it will fail to change.
@fix
2014-10-09 12:27:48 +02:00
Julien Isorce 895692f0cd evas: GL_X11 - make sure to re-create the gl context when window visual change
Reviewers: cedric

Subscribers: seoz, capOM, cedric

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

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2014-09-30 16:32:03 +02:00
Cedric BAIL 5c852d1f4e evas: actually just define the right number of events. 2014-09-02 16:04:28 +02:00
Cedric BAIL 807a5aa263 evas: forgotten evas canvas event EVAS_CANVAS_EVENT_DEVICE_CHANGED. 2014-09-02 15:34:57 +02:00
Cedric BAIL b1caa37177 evas: fix evas events order and count.
Before this patch, if you were hooking to any event above
EVAS_OBJECT_EVENT_IMAGE_PRELOADED you will end up receiving another
event instead and be fooled into receiving the right one.

In the mean time I did discover that our table is missing one item, the
equivalent to EVAS_CALLBACK_DEVICE_CHANGED. I don't know how to properly
fix that one for now, so put NULL instead to at least avoid a random
memory access.
2014-09-02 15:34:56 +02:00
Julien Isorce 380756f6fb xlib: fix undefined behaviour when freeing colormap too early
Summary:
On Ubuntu 14.04 it makes a 32 bit depth window un-responsive
to any XEvent.

Reviewers: cedric, raster

Reviewed By: raster

Subscribers: raster, capOM, cedric

Differential Revision: https://phab.enlightenment.org/D1236
2014-08-21 16:02:31 +02:00
Cedric BAIL cf86cf5588 ecore_evas: Ecore_Evas_X - make sure that ecore evas post render is always called.
This fix a case where when doing asynchronous rendering and no update was done,
the post render evas event would never be triggered and so no call to ecore evas
post render callback were made. Now the async X backend follow all other backend
behavior.

@fix
2014-08-21 16:01:37 +02:00
Cedric BAIL 60c3dd385c lz4: fix another security issue on ARM 32bits. 2014-07-14 16:05:16 +02:00
Doug Newgard cb410fc8a6 Evas: Update for giflib 5.1 api change
Summary: Slight change in the file close function.

Reviewers: jpeg

CC: cedric

Differential Revision: https://phab.enlightenment.org/D916
2014-07-04 08:42:52 +02:00
Cedric BAIL 45f526580b lz4: fix possible security issue.
See :
- http://fastcompression.blogspot.fr/2014/06/lets-move-on.html
- http://www.openwall.com/lists/oss-security/2014/06/26/25

@fix
2014-06-30 09:27:51 +02:00
Sebastian Dransfeld f309703d23 efreet: remove code duplication
If the menu starts with either kde- or gnome- the resulting action is
the same.
(cherry picked from commit a10d4167f1)

Signed-off-by: Thanatermesis <thanatermesis@gmail.com>
2014-06-12 15:42:17 +02:00
Sebastian Dransfeld fecdca678c efreet: improve handling of merged menus
If the menu is of the format ${XDG_MENU_PREFIX}applications.menu, we
want to merge applications-merged/, not
${XDG_MENU_PREFIX}applications-merged
(cherry picked from commit 9415f8a7ef)

Signed-off-by: Thanatermesis <thanatermesis@gmail.com>
2014-06-12 15:42:17 +02:00
Sebastian Dransfeld aee73ce086 efreet: Correctly handle default merge dir
When main menu file is gnome-applications.menu or kde-applications.menu,
we should be using applications as base for merged dir.

Part of T1284
(cherry picked from commit ffda8635fe)

Signed-off-by: Thanatermesis <thanatermesis@gmail.com>
2014-06-12 15:42:17 +02:00
Stefan Schmidt afb76a881d release: Update NEWS and bump version for 1.9.5 release 2014-06-02 12:09:34 +02:00
Mike Blumenkrantz d59e2b42fa edje should only match swallow visibility if it's actually a group part 2014-05-26 12:24:38 -04:00
zmike c625279a85 recursively hide edje group objects on edje hide
this massively improves edje performance when using groups, which previously would continue calculating their parts even when their parent object was hidden

CPU usage in my test case went from 20-30% to 1%.

@fix
2014-05-26 08:53:56 -04:00
Youngbok Shin 736b02cd22 evas/text: fix abnormal ellipsis logic when harfbuzz is enabled.
Summary:
text_props.len indicates visual length from harfbuzz logic when it is available.
But, input pram "idx" is logical length. So, ellipsis works abnormally in some case.
@fix

Test Plan: D870

Reviewers: tasn, woohyun

CC: cedric, herdsman

Differential Revision: https://phab.enlightenment.org/D871
2014-05-21 10:42:19 +01:00
Youngbok Shin 316b35a0c6 evas/text: add text ellipsis test case for ligatures special case.
Summary:
Some fonts has combination information for "ff".
When harfbuzz is enabled with the font, evas text ellipsis logic can be broken.

Reviewers: tasn, woohyun, cedric

Reviewed By: tasn

CC: cedric, herdsman

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

Some comment/commit message improvements by TAsn.
2014-05-21 10:42:11 +01:00
Shinwoo Kim 4327673072 Win32: Add configuration to cross-compile
Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>
2014-05-20 17:17:01 +09:00
Jean-Philippe Andre 1a4e40bfdc Win32: Fix ecore_evas engine search path
Engines are stored in a lib/ folder, while the main DLL files
are in the bin/ folder, so the engine would never be found.

A solution was to add the proper checkme file in the share
folder, but since this is necessary only for Windows, we
can simply use ../lib instead of using the full eina_prefix
detector.

Thanks vtorri for the review.
2014-05-20 17:16:57 +09:00
Stefan Schmidt 3d7f20cff8 release: Update NEWS and bump version for 1.9.4 release 2014-05-15 10:47:46 +02:00
Stefan Schmidt f4748ad34b configure: Only allow wayland + egl with opengl ES
We only support the Wayland EGL engine build with OpenGL ES but not full
OpenGL. Reflect this in our configure to avoid compile errors after a
successful configure run. Fixes T1202
@fix
2014-05-15 10:35:44 +02:00
Mike Blumenkrantz d34466c2f3 ecore_x_image_get() should not abort when shm creation fails 2014-05-09 10:42:10 -04:00
Mike Blumenkrantz 8788cac287 ...also when shmat() fails 2014-05-09 10:42:05 -04:00
Mike Blumenkrantz f16bda07b9 ecore-x should print an error when shmget fails 2014-05-09 10:41:59 -04:00
Mike Blumenkrantz ad3b4905b4 fix emotion_test signal emit object
@fix
2014-05-07 13:16:26 -04:00
Mike Blumenkrantz ee1af1e177 eldbus-codegen no longer passes garbage values to error callbacks
@fix
2014-05-04 20:38:05 -04:00
Jaeun Choi 35c9fb8876 Evas: gif decoding bug fix
Gif decoder decodes prior frames sequentially to decode a specific frame.
The last frame of sequential decoding, which is the frame we want to decode,
remains un-decoded until the while loop stops.
The frame count should be incremented after the comparison statement.

This was a @fix (missing tag in master)
cherry picked from commit 96f9353f4c
2014-04-25 16:30:37 +09:00
Mike Blumenkrantz d36f22c384 Revert "edje now correctly forces ellipsis setting on text parts"
This reverts commit d7af4c1ff5.

this is too much of a clusterfuck to put into a stable release.
2014-04-22 20:22:00 -04:00
Mike Blumenkrantz d7af4c1ff5 edje now correctly forces ellipsis setting on text parts
this should always be applied, not just when min_x isn't set; failure to do so causes erroneous ellipsizing in some cases where it should be explicitly prohibited

@fix
2014-04-22 19:19:56 -04:00
Wonguk Jeong 1f363c488e emotion: fix triggering condition of fallback module loading
@fix

Summary:
In emotion_engine_instance_new(), if given module name is wrong or if loding is failed, fallback module loading should be triggered.a (previously, it check just whether name is NULL or not)

In case of T1025, "vlc" was given name. Therefore, fallback was not triggered.

Fixes T1025

Test Plan: enlightenment -> efm -> mouse over multimedia files -> check whether preview is shown properly or not

Reviewers: raster, cedric

CC: seoz, cedric, zmike

Maniphest Tasks: T1025

Differential Revision: https://phab.enlightenment.org/D773
2014-04-20 10:00:20 -04:00
Stefan Schmidt 753817b283 release: Update NEWS and bump version for 1.9.3 release 2014-04-14 11:44:39 +02:00
Carsten Haitzler 385176976a fix swap buffers with damage to not detect if ext str is not there
@fix
2014-04-05 22:22:38 +09:00
Carsten Haitzler 99fb2666ab ecore-con - deal with internal buffer growing over 2g in size
@fix this fixes a corner case where you may buffer 2g or more of data
in ecore-con buffers. this leads to a stall. @fix
2014-04-04 19:36:25 +09:00
Jean-Philippe Andre f8fbb5abc2 Evas cserve2: Fix crash in elm_test GLView
This whole cache/cache2 API duplication is a complete mess.

This was a @fix (forgot the tag in master).

(cherry picked from commit 0e1b52875d)
2014-04-04 10:34:13 +09:00
Carsten Haitzler b9480fc7d8 it seems the if 0'd code was wrong and ecore win32 doesnt support nocursor 2014-04-03 19:56:46 +09:00
Carsten Haitzler fef45870b0 ecore-evas - fix object cursor to not delete the same cursor when set
this fixes a misbehavior with ecore evas object cursors when you set
one, the old one is deleted, but if the old is the same, the new one
you set gets deleted, rather than just updated.

@fix

Conflicts:
	src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
2014-04-02 20:45:50 +09:00
ChunEon Park 1918038640 evas - fix incorrect object reset.
If the children are rendered in the proxy render time,
they should not be reset the changes always since we don't sure
they will be rendered in normal rendering after.

In this case, we leave them as they are.
But maybe they can be optimized by comments says.

@fix
2014-04-01 14:12:02 +09:00
Ryuan Choi c2088d8326 edje_cc: Fix the crash when compiled wrong edc file containing empty part
It's regression since cff3ec04b.

@fix (master : c2077f4853)
2014-03-31 22:13:19 +09:00
Stefan Schmidt e59c14eda9 evas/textblock: Correct evas_textblock_text_utf8_to_markup docs
Input and output was documented in the wrong direction.This function
takes plain text and gives markup.
2014-03-27 12:27:47 +01:00
ChunEon Park 90f05a5721 evas/proxy - actually, I missed updating is_active of the object.
this commit is introduced by this b2070f8c39.
2014-03-27 16:18:32 +09:00
ChunEon Park 25391697e6 evas/proxy - redraw proxy source properly.
This patch fixes the proxy drawing problem that source won't be updated in some case

If the image object is the one member of the smart that has the proxy,
the proxy(image part) won't be redrawed properly unless evas tries to draw the image object.
This can be heppend if the image object is inactive cause of some reasone(ie. outside of the screen)
So, the proxy object never can be never updated even the image part is changed.
Now let try to be active if the parent is both active and source object.

and revert previous change with regarded to a739716cee,
that's no more required now.

@fix
2014-03-27 15:52:53 +09:00
Stefan Schmidt 42c7f55c2f build: Disallow non-working sdl + opengl ES combination
To build SDL with OpenGL ES we need a SDL version which ships these headers
which only starts with SDL 2.x. So we only allow it for full OpenGL right
now until someone wants to port our code over to SDL 2.x

Fixes T856
@fix
2014-03-26 10:02:49 +01:00
Carsten Haitzler 987a83ba96 fixes enlightenment working over non-shm paths.
this technically adds a feature - it adds non-mitshm support for
ecore_x image grabbing, but that fixes a bug. it doesn't touch xcb
support though.

this fixes T1127 andshould probably be backported.
2014-03-26 16:04:10 +09:00
Stefan Schmidt c0a961610f release: Update NEWS and bump version for 1.9.2 release 2014-03-24 12:02:36 +01:00
ChunEon Park 0645512fea evas/gl - fill up missed blend mode.
Still there few mode are unsatisfied.

@fix

Conflicts:

	src/modules/evas/engines/gl_common/evas_gl_context.c
2014-03-22 21:13:08 +09:00
Mike Blumenkrantz 6a2eff512f edje_cc uses macros for some of its handler setup
this reduces code size, ensures consistency, and actually fixes bugs where the "filter" keyword was erroneously disallowed in some places

@fix
2014-03-21 22:37:25 -04:00
Jean-Philippe Andre 409319ec9d Evas filters: fix potential memory leak
Unlikely use case trying to delete a source when there are no
sources yet.

@fix (master b027e58a96)
2014-03-21 15:40:56 +09:00
Mike Blumenkrantz 088c16fab1 edje_cc also checks min args correctly for STATE_SET actions
@fix
2014-03-20 19:28:05 -04:00
Mike Blumenkrantz b35d1af4d7 edje_cc now correctly handles lack of state int in STATE_SET action
@fix
2014-03-20 19:21:07 -04:00
Mike Blumenkrantz 1c21b0d5ad edje_cc no longer fails on collections.group{}
@fix
2014-03-20 15:01:31 -04:00
Jean-Philippe Andre e54b9da65b Evas gl: Fix clip in image_draw if it's not set
In evas_gl_common_image_draw, if an image is drawn with a fresh context,
containing no clip and no cutouts, then it will be wrongly clipped to
the source image size instead of the destination surface size.

This case seems to never happen, ever, since the contexts are always
fully set by the render functions.

@fix

(cherry picked from commit 7cbe636311)
2014-03-18 18:03:56 +09:00
Jean-Philippe Andre 5671816193 Evas cserve2: Fix client crashes when a file changed
Clients must ignore changed file entries as they are not valid
anymore. The server will also mark the entry as invalid in case
of file update.

@fix

(cherry picked from commit 320a9f18c5)
2014-03-18 13:53:49 +09:00
Cedric BAIL cd21cf50d2 edje: check font change in edje text part cache infra.
@fix
2014-03-17 19:18:30 +09:00
Gustavo Sverzut Barbieri edb19d7a53 eet: fix tokenizer's escape logic.
Tokenizer's approach of looking back is horrible and breaks the
following simple case (bug I had that lead to this patch):

          "string\\"

As the parser would get the end quote and check the previous character
if it was a backslash and it was, but it was not escaping the quote,
but being escaped by the previous backslash.

The best approach is to first check for escape and then go to
quote. Escape is simple and only the following byte, so we enter
escape, process the byte and then are back to regular mode (be it
quote or unquote).

Added testcase so we avoid breaking it again.

@bugfix cherry-pick
2014-03-13 22:10:31 -03:00
Tom Hacohen 7f524decd0 Ecore x: Add back the two symbols removed in 1.9.
This fixes ABI that got broken in 1.9.

@fix.
2014-03-13 11:07:42 +00:00
Jean-Philippe Andre 528489c31c Evas filters: Fix memory leak when destroying the object
The GL buffers set to be freed were released only the async case...
which doesn't make sense since GL is sync.

@fix

Conflicts:
	src/lib/evas/filters/evas_filter.c
2014-03-12 15:15:52 +09:00
Jean-Philippe Andre 79a2c8d503 Evas filters: Fix 1-D blurs on a single buffer
When a blur operation requires a copy-back to the source
buffer, then the render_op must be set to COPY instead of
BLEND. Otherwise the non blurred content will be visible.

@fix
2014-03-12 15:12:59 +09:00
Stefan Schmidt bd29207395 release: Remove uinrelevant NEWS file entry.
Hopefully the last change to this file before the release.
2014-03-11 12:54:37 +01:00
Stefan Schmidt f3aacba22f release: Update NEWS for last minute changes to 1.9.1
Last minute fixes to avoid crashes and ABI breaks with 1.9.1.
2014-03-11 11:07:55 +01:00
WooHyun Jung 7a0fb49773 evas: Replace EINA_LIST_FOREACH_SAFE to while statement.
Clipees can be cleared before the loop is finished because
evas_object_clip_unset calls smart function of clip_unset.
So, if we use EINA_LIST_FOREACH_SAFE, invalid next list pointer
can be kept and read after obj->clip.clipees is freed.

Thanks to Davide Andreoli for reporting.

@fix
2014-03-11 16:39:30 +09:00
Tom Hacohen da06a4d316 Eina Log: Fixed ABI break introduce by the addition of 'color'.
ABI break was introduced here 5913ce7ec8

Always add new members at the end of public structures.
2014-03-10 16:51:02 +00:00
Tom Hacohen b9664c1059 Evas font: Don't add canvas specific path to the global fontconfig path list.
This will come back when D621 gets in (which implements it correctly).
2014-03-10 16:25:14 +00:00
Stefan Schmidt bd039ce80d release: Update NEWS and bump version for 1.9.1 release 2014-03-10 16:18:01 +01:00
ChunEon Park 820ff24337 edje - allow lager clipper space.
In acutal case, some application encounted that a proxy object is larger than a source clipper size.
So the proxy is clipped by the edje clipper.
We don't have to limit the clipper size to 10000x10000

@fix
2014-03-10 22:27:18 +09:00
Andy Williams 85c9084856 eina_log: Update domain colouring when color_disable_set is called
After color_disable is set we should update the domain_str for each domain
as this cached the setting from when the domain was registered.
This required storing the colour within the domain for later use.
Fixes T1029
2014-02-26 06:48:12 +00:00
Youngbok Shin 3fb2d843cc edje/entry: fix to not emit "changed" signal in unnecessary cases of password mode.
Summary:
When text is hidden by password character, "changed" signal should be emitted.
But, even if there is no visible text, the signal was emitted.

@fix

Reviewers: woohyun, tasn, cedric

Reviewed By: cedric

CC: cedric

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

Signed-off-by: Cedric BAIL <cedric.bail@samsung.com>
2014-03-07 14:44:54 +09:00
Jihoon Kim e778366b94 Edje entry: fix bug preedit text is committed in the next entry when Tab key is pressed.
Key events which ecore_imf_context_filter_event function returns EINA_TRUE should be not propagated.

@fix
2014-03-06 11:26:24 +09:00
Jean-Philippe ANDRE 791c0ca1af Evas filters: Avoid CRI message when using the GL engine
A CRItical message was always displayed when setting a filter
on a text object, saying that proxy rendering is not supported on GL.

Reduce CRI to ERR and skip proxy rendering altogether if there are
no proxy sources.

This @fix needs to be backported.

Thanks zmike for reporting this.

Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>
2014-03-04 11:13:15 +09:00
Jean-Philippe Andre 9ca37bf4d4 Evas filters: fix clip to target calculation
It was possible to keep negative values for dx,dy which would
then draw pixels out of bounds (= crash).

Make check crashed after the previous commit.

@fix
2014-03-04 11:12:54 +09:00
Jean-Philippe ANDRE 9c096eac83 Evas filters: fix random cases of 'dancing text'
In some situations, text with filters would be rendered in an invalid
position (somewhere too high).
I am not entirely sure of the reason why the original code with BLEND
doesn't work, but this new version is simpler as GL and SW have more
similar behaviours:

- render text to our 'output' buffer
- draw this buffer as an image onto the set target

Thanks zmike for reporting the issue.
And thanks A LOT for using the filters :D

@fix

Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>
2014-03-04 11:12:35 +09:00
Jean-Philippe ANDRE 3e65e6d4dd Evas filters: fix black squares with the GL engine
If a text object changes regularily, there might be cases where
the object will be rendered as a simple black rectangle for just
one frame.

It seems that the previous output buffer is deleted before being
actually rendered on screen. This patch will delay the deletion
of the previous buffer until the current one has been rendered
to the target surface.

And again, thanks zmike for reporting.

@fix

Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>
2014-03-04 11:12:28 +09:00
Cedric Bail 2c615df2d2 ecore_avahi: @fix timeout to avoid pitfall of forever frozen timer.
@backport.
2014-02-28 20:01:05 -03:00
Stefan Schmidt 8f3188d42e examples/evas: Set a proper format string for fprintf
Instead of abusing the format string we should set it.
Was made aware of this problme by chinmaya061 in
https://phab.enlightenment.org/D585

@fix
2014-02-28 12:16:44 +01:00
Cedric Bail 5f236092c5 ecore_avahi: fix timeout to be relative from now. 2014-02-27 20:09:52 -03:00
Cedric Bail 776c0664d4 ecore: @fix race condition when using ecore_main_loop_thread_safe_call_sync. 2014-02-27 12:26:21 -03:00
Jaehwan Kim 5a7321a314 edje: Fix CURRENT option works.
By this code the CURRENT option didn't work.
Don't remove rp->current before the animation is excuted.
The memory leak issue is resolved by commit(d636c0f801).
2014-02-27 13:41:29 +09:00
WooHyun Jung e6eafc517f evas: replace EINA_LIST_FREE to EINA_LIST_FOREACH_SAFE.
EINA_LIST_FREE does eina_list_remove_list, and clip_unset does
the same thing to the same list pointer. So, EINA_LIST_FOREACH_SAFE
is proper for this case.
2014-02-27 11:12:15 +09:00
Chris Michael 6c418895e2 bugfix: Fix Wayland Shm engine destination calculation typo
When rotation is 0, we need to advance the destination pointer in the
X direction by a Multiple of Bits-Per-Pixel...not an addition.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2014-02-26 13:15:44 +00:00
71 changed files with 3498 additions and 2298 deletions

89
NEWS
View File

@ -1,7 +1,93 @@
=========
EFL 1.9.0
EFL 1.9.5
=========
Changes since 1.9.4:
--------------------
Fixes:
* evas/text: fix abnormal ellipsis logic when harfbuzz is enabled.
* recursively hide edje group objects on edje hide
Changes since 1.9.3:
--------------------
Fixes:
* emotion: fix triggering condition of fallback module loading (T1025)
* edje now correctly forces ellipsis setting on text parts
* Evas: gif decoding bug fix
* eldbus-codegen no longer passes garbage values to error callbacks
* fix emotion_test signal emit object
* configure: Only allow wayland + egl with opengl ES (T1202)
Changes since 1.9.2:
--------------------
Fixes:
* build: Disallow non-working sdl + opengl ES combination (T856)
* evas/proxy - redraw proxy source properly.
* edje_cc: Fix the crash when compiled wrong edc file containing empty part
* evas - fix incorrect object reset.
* ecore-evas - fix object cursor to not delete the same cursor when set
* Evas cserve2: Fix crash in elm_test GLView
* ecore-con - deal with internal buffer growing over 2g in size
* fix swap buffers with damage to not detect if ext str is not there
Changes since 1.9.1:
--------------------
Fixes:
* Evas filters: Fix 1-D blurs on a single buffer
* Evas filters: Fix memory leak when destroying the object
* Ecore x: Add back the two symbols removed in 1.9.
* eet: fix tokenizer's escape logic.
* edje: check font change in edje text part cache infra.
* Evas cserve2: Fix client crashes when a file changed
* Evas gl: Fix clip in image_draw if it's not set
* edje_cc no longer fails on collections.group{}
* edje_cc now correctly handles lack of state int in STATE_SET action
* edje_cc also checks min args correctly for STATE_SET actions
* Evas filters: fix potential memory leak
* edje_cc uses macros for some of its handler setup
* evas/gl - fill up missed blend mode.
Changes since 1.9.0:
--------------------
Additions:
Improvements:
Fixes:
* evas: Replace EINA_LIST_FOREACH_SAFE to while statement.
* Evas font: Don't add canvas specific path to the global fontconfig path list.
* edje - allow lager clipper space.
* eina_log: Update domain colouring when color_disable_set is called (T1029)
* edje/entry: fix to not emit "changed" signal in unnecessary cases of password mode.
* Edje entry: fix bug preedit text is committed in the next entry when Tab key is pressed.
* Evas filters: Avoid CRI message when using the GL engine
* Evas filters: fix clip to target calculation
* Evas filters: fix random cases of 'dancing text'
* Evas filters: fix black squares with the GL engine
* ecore_avahi: @fix timeout to avoid pitfall of forever frozen timer.
* examples/evas: Set a proper format string for fprintf
* ecore_avahi: fix timeout to be relative from now.
* ecore: @fix race condition when using ecore_main_loop_thread_safe_call_sync.
* edje: Fix CURRENT option works.
* evas: replace EINA_LIST_FREE to EINA_LIST_FOREACH_SAFE.
* Fix Wayland Shm engine destination calculation typo
Removals:
Changes since 1.8.0:
--------------------
@ -429,6 +515,7 @@ Fixes:
* textgrid - with new fallback fonts we cant depend on glyph extents anymore
* textgrid - out-of-bounds chars cause update artifacts - fix.
* Emotion test: fix calculation of the displayed time.
* eina: Update domain output if eina_log_color_disable_set is called after a domain is registered (T1029).
Removals:

View File

@ -1,4 +1,4 @@
EFL_VERSION([1], [9], [0], [release])
EFL_VERSION([1], [9], [5], [release])
AC_INIT([efl], [efl_version], [enlightenment-devel@lists.sourceforge.net])
AC_PREREQ([2.60])
@ -971,6 +971,7 @@ AM_CONDITIONAL([EO_BUILD_EXAMPLE_EVAS], [test "x${have_elm}" = "xyes"])
### Checks for linker characteristics
### Checks for library functions
EFL_CHECK_FUNCS([EO], [dladdr])
### Check availability
@ -1091,8 +1092,14 @@ if test "${want_sdl}" = "yes"; then
EFL_PKG_CHECK_STRICT([sdl >= 1.2.0])
fi
# We only enable SDL with opengl if it is not the full version and not ES
# This can be changed if we ported our SDL code over to SDL 2.0. For older
# versions the SDL_opengles.h has never been released.
want_gl_sdl="no"
if test "${want_sdl}" = "yes" && test "${with_opengl}" != "none"; then
if test "${want_sdl}" = "yes" && test "${with_opengl}" = "es"; then
AC_MSG_ERROR([We currently do not support SDL with OpenGL ES. Please consider full OpenGL if you want to use it with SDL.])
fi
if test "${want_sdl}" = "yes" && test "${with_opengl}" = "full"; then
want_gl_sdl="yes"
fi
@ -1321,7 +1328,7 @@ want_evas_engine_software_gdi="${have_win32}"
want_evas_engine_software_ddraw="${have_win32}"
want_evas_engine_gl_cocoa="${want_cocoa}"
want_evas_engine_wayland_egl="no"
if test "${want_wayland}" = "yes" && test "${want_egl}" = "yes"; then
if test "${want_wayland}" = "yes" && test "${want_egl}" = "yes" && test "${with_opengl}" = "es"; then
want_evas_engine_wayland_egl="yes"
fi

View File

@ -57,7 +57,7 @@ lib_ecore_libecore_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl \
-DPACKAGE_DATA_DIR=\"$(datadir)/ecore\" \
-DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)\" \
@ECORE_CFLAGS@
lib_ecore_libecore_la_LIBADD = @ECORE_LIBS@
lib_ecore_libecore_la_LIBADD = @ECORE_LIBS@ @EVIL_LIBS@
lib_ecore_libecore_la_DEPENDENCIES = @ECORE_INTERNAL_LIBS@
lib_ecore_libecore_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@

View File

@ -34,6 +34,6 @@ endif
endif
lib_ecore_con_libecore_con_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl @ECORE_CON_CFLAGS@
lib_ecore_con_libecore_con_la_LIBADD = @ECORE_CON_LIBS@
lib_ecore_con_libecore_con_la_LIBADD = @ECORE_CON_LIBS@ @EVIL_LIBS@
lib_ecore_con_libecore_con_la_DEPENDENCIES = @ECORE_CON_INTERNAL_LIBS@
lib_ecore_con_libecore_con_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@

View File

@ -26,7 +26,9 @@ lib/ecore_evas/ecore_evas_util.c
lib_ecore_evas_libecore_evas_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl \
-I$(top_srcdir)/src/modules/evas/engines/buffer \
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
-DPACKAGE_DATA_DIR=\"$(datadir)/ecore_evas\" \
-DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)\" \
@ECORE_EVAS_CFLAGS@
lib_ecore_evas_libecore_evas_la_LIBADD = @ECORE_EVAS_LIBS@

View File

@ -12,6 +12,6 @@ lib/ecore_ipc/ecore_ipc.c \
lib/ecore_ipc/ecore_ipc_private.h
lib_ecore_ipc_libecore_ipc_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl @ECORE_IPC_CFLAGS@
lib_ecore_ipc_libecore_ipc_la_LIBADD = @ECORE_IPC_LIBS@
lib_ecore_ipc_libecore_ipc_la_LIBADD = @ECORE_IPC_LIBS@ @EVIL_LIBS@
lib_ecore_ipc_libecore_ipc_la_DEPENDENCIES = @ECORE_IPC_INTERNAL_LIBS@
lib_ecore_ipc_libecore_ipc_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@

View File

@ -28,7 +28,7 @@ lib_eet_libeet_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl \
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
-DPACKAGE_DATA_DIR=\"$(datadir)/eet\" \
@EET_CFLAGS@
lib_eet_libeet_la_LIBADD = @EET_LIBS@
lib_eet_libeet_la_LIBADD = @EET_LIBS@ @EVIL_LIBS@
lib_eet_libeet_la_DEPENDENCIES = @EET_INTERNAL_LIBS@
lib_eet_libeet_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@

View File

@ -46,21 +46,21 @@ lib/efreet/efreet_xml.h \
lib/efreet/efreet_cache_private.h
lib_efreet_libefreet_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl $(EFREET_COMMON_CPPFLAGS)
lib_efreet_libefreet_la_LIBADD = @EFREET_LIBS@
lib_efreet_libefreet_la_LIBADD = @EFREET_LIBS@ @EVIL_LIBS@
lib_efreet_libefreet_la_DEPENDENCIES = @EFREET_INTERNAL_LIBS@
lib_efreet_libefreet_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@
# libefreet_mime.la
lib_efreet_libefreet_mime_la_SOURCES = lib/efreet/efreet_mime.c
lib_efreet_libefreet_mime_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl $(EFREET_COMMON_CPPFLAGS)
lib_efreet_libefreet_mime_la_LIBADD = @USE_EFREET_LIBS@
lib_efreet_libefreet_mime_la_LIBADD = @USE_EFREET_LIBS@ @EVIL_LIBS@
lib_efreet_libefreet_mime_la_DEPENDENCIES = @USE_EFREET_INTERNAL_LIBS@
lib_efreet_libefreet_mime_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@
# libefreet_trash.la
lib_efreet_libefreet_trash_la_SOURCES = lib/efreet/efreet_trash.c
lib_efreet_libefreet_trash_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl $(EFREET_COMMON_CPPFLAGS)
lib_efreet_libefreet_trash_la_LIBADD = @USE_EFREET_LIBS@
lib_efreet_libefreet_trash_la_LIBADD = @USE_EFREET_LIBS@ @EVIL_LIBS@
lib_efreet_libefreet_trash_la_DEPENDENCIES = @USE_EFREET_INTERNAL_LIBS@
lib_efreet_libefreet_trash_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@

View File

@ -395,6 +395,42 @@ static void st_collections_group_physics_world_depth(void);
/*****/
#define PROGRAM_STATEMENTS(PREFIX) \
{PREFIX".programs.image", st_images_image}, /* dup */ \
{PREFIX".programs.set.name", st_images_set_name}, /* dup */ \
{PREFIX".programs.set.image.image", st_images_set_image_image}, /* dup */ \
{PREFIX".programs.set.image.size", st_images_set_image_size}, /* dup */ \
{PREFIX".programs.set.image.border", st_images_set_image_border}, /* dup */ \
{PREFIX".programs.set.image.scale_by", st_images_set_image_border_scale_by}, /* dup */ \
{PREFIX".programs.images.image", st_images_image}, /* dup */ \
{PREFIX".programs.images.set.name", st_images_set_name}, /* dup */ \
{PREFIX".programs.images.set.image.image", st_images_set_image_image}, /* dup */ \
{PREFIX".programs.images.set.image.size", st_images_set_image_size}, /* dup */ \
{PREFIX".programs.images.set.image.border", st_images_set_image_border}, /* dup */ \
{PREFIX".programs.images.set.image.scale_by", st_images_set_image_border_scale_by}, /* dup */ \
{PREFIX".programs.font", st_fonts_font}, /* dup */ \
{PREFIX".programs.fonts.font", st_fonts_font}, /* dup */ \
{PREFIX".programs.program.name", st_collections_group_programs_program_name}, /* dup */ \
{PREFIX".programs.program.signal", st_collections_group_programs_program_signal}, /* dup */ \
{PREFIX".programs.program.source", st_collections_group_programs_program_source}, /* dup */ \
{PREFIX".programs.program.in", st_collections_group_programs_program_in}, /* dup */ \
{PREFIX".programs.program.action", st_collections_group_programs_program_action}, /* dup */ \
{PREFIX".programs.program.transition", st_collections_group_programs_program_transition}, /* dup */ \
{PREFIX".programs.program.target", st_collections_group_programs_program_target}, /* dup */ \
{PREFIX".programs.program.after", st_collections_group_programs_program_after}, /* dup */ \
{PREFIX".programs.program.api", st_collections_group_programs_program_api}, /* dup */ \
{PREFIX".programs.program.filter", st_collections_group_programs_program_filter}, /* dup */ \
{PREFIX".program.name", st_collections_group_programs_program_name}, /* dup */ \
{PREFIX".program.signal", st_collections_group_programs_program_signal}, /* dup */ \
{PREFIX".program.source", st_collections_group_programs_program_source}, /* dup */ \
{PREFIX".program.in", st_collections_group_programs_program_in}, /* dup */ \
{PREFIX".program.action", st_collections_group_programs_program_action}, /* dup */ \
{PREFIX".program.transition", st_collections_group_programs_program_transition}, /* dup */ \
{PREFIX".program.target", st_collections_group_programs_program_target}, /* dup */ \
{PREFIX".program.after", st_collections_group_programs_program_after}, /* dup */ \
{PREFIX".program.api", st_collections_group_programs_program_api}, /* dup */ \
{PREFIX".program.filter", st_collections_group_programs_program_filter}, /* dup */ \
New_Statement_Handler statement_handlers[] =
{
{"externals.external", st_externals_external},
@ -717,146 +753,33 @@ New_Statement_Handler statement_handlers[] =
{"collections.group.parts.part.description.color_classes.color_class.color", st_color_class_color}, /* dup */
{"collections.group.parts.part.description.color_classes.color_class.color2", st_color_class_color2}, /* dup */
{"collections.group.parts.part.description.color_classes.color_class.color3", st_color_class_color3}, /* dup */
{"collections.group.parts.part.description.programs.image", st_images_image}, /* dup */
{"collections.group.parts.part.description.programs.set.name", st_images_set_name}, /* dup */
{"collections.group.parts.part.description.programs.set.image.image", st_images_set_image_image}, /* dup */
{"collections.group.parts.part.description.programs.set.image.size", st_images_set_image_size}, /* dup */
{"collections.group.parts.part.description.programs.set.image.border", st_images_set_image_border}, /* dup */
{"collections.group.parts.part.description.programs.set.image.scale_by", st_images_set_image_border_scale_by}, /* dup */
{"collections.group.parts.part.description.programs.images.image", st_images_image}, /* dup */
{"collections.group.parts.part.description.programs.images.set.name", st_images_set_name}, /* dup */
{"collections.group.parts.part.description.programs.images.set.image.image", st_images_set_image_image}, /* dup */
{"collections.group.parts.part.description.programs.images.set.image.size", st_images_set_image_size}, /* dup */
{"collections.group.parts.part.description.programs.images.set.image.border", st_images_set_image_border}, /* dup */
{"collections.group.parts.part.description.programs.images.set.image.scale_by", st_images_set_image_border_scale_by}, /* dup */
{"collections.group.parts.part.description.programs.font", st_fonts_font}, /* dup */
{"collections.group.parts.part.description.programs.fonts.font", st_fonts_font}, /* dup */
{"collections.group.parts.part.description.programs.program.name", st_collections_group_programs_program_name}, /* dup */
{"collections.group.parts.part.description.programs.program.signal", st_collections_group_programs_program_signal}, /* dup */
{"collections.group.parts.part.description.programs.program.source", st_collections_group_programs_program_source}, /* dup */
{"collections.group.parts.part.description.programs.program.in", st_collections_group_programs_program_in}, /* dup */
{"collections.group.parts.part.description.programs.program.action", st_collections_group_programs_program_action}, /* dup */
{"collections.group.parts.part.description.programs.program.transition", st_collections_group_programs_program_transition}, /* dup */
{"collections.group.parts.part.description.programs.program.target", st_collections_group_programs_program_target}, /* dup */
{"collections.group.parts.part.description.programs.program.after", st_collections_group_programs_program_after}, /* dup */
{"collections.group.parts.part.description.programs.program.api", st_collections_group_programs_program_api}, /* dup */
{"collections.group.parts.part.description.program.name", st_collections_group_programs_program_name}, /* dup */
{"collections.group.parts.part.description.program.signal", st_collections_group_programs_program_signal}, /* dup */
{"collections.group.parts.part.description.program.source", st_collections_group_programs_program_source}, /* dup */
{"collections.group.parts.part.description.program.in", st_collections_group_programs_program_in}, /* dup */
{"collections.group.parts.part.description.program.action", st_collections_group_programs_program_action}, /* dup */
{"collections.group.parts.part.description.program.transition", st_collections_group_programs_program_transition}, /* dup */
{"collections.group.parts.part.description.program.target", st_collections_group_programs_program_target}, /* dup */
{"collections.group.parts.part.description.program.after", st_collections_group_programs_program_after}, /* dup */
{"collections.group.parts.part.description.program.api", st_collections_group_programs_program_api}, /* dup */
{"collections.group.parts.part.programs.image", st_images_image}, /* dup */
{"collections.group.parts.part.programs.set.name", st_images_set_name}, /* dup */
{"collections.group.parts.part.programs.set.image.image", st_images_set_image_image}, /* dup */
{"collections.group.parts.part.programs.set.image.size", st_images_set_image_size}, /* dup */
{"collections.group.parts.part.programs.set.image.border", st_images_set_image_border}, /* dup */
{"collections.group.parts.part.programs.set.image.scale_by", st_images_set_image_border_scale_by}, /* dup */
{"collections.group.parts.part.programs.images.image", st_images_image}, /* dup */
{"collections.group.parts.part.programs.images.set.name", st_images_set_name}, /* dup */
{"collections.group.parts.part.programs.images.set.image.image", st_images_set_image_image}, /* dup */
{"collections.group.parts.part.programs.images.set.image.size", st_images_set_image_size}, /* dup */
{"collections.group.parts.part.programs.images.set.image.border", st_images_set_image_border}, /* dup */
{"collections.group.parts.part.programs.images.set.image.scale_by", st_images_set_image_border_scale_by}, /* dup */
{"collections.group.parts.part.programs.font", st_fonts_font}, /* dup */
{"collections.group.parts.part.programs.fonts.font", st_fonts_font}, /* dup */
{"collections.group.parts.part.programs.program.name", st_collections_group_programs_program_name}, /* dup */
{"collections.group.parts.part.programs.program.signal", st_collections_group_programs_program_signal}, /* dup */
{"collections.group.parts.part.programs.program.source", st_collections_group_programs_program_source}, /* dup */
{"collections.group.parts.part.programs.program.in", st_collections_group_programs_program_in}, /* dup */
{"collections.group.parts.part.programs.program.action", st_collections_group_programs_program_action}, /* dup */
{"collections.group.parts.part.programs.program.transition", st_collections_group_programs_program_transition}, /* dup */
{"collections.group.parts.part.programs.program.target", st_collections_group_programs_program_target}, /* dup */
{"collections.group.parts.part.programs.program.after", st_collections_group_programs_program_after}, /* dup */
{"collections.group.parts.part.programs.program.api", st_collections_group_programs_program_api}, /* dup */
{"collections.group.parts.part.program.name", st_collections_group_programs_program_name}, /* dup */
{"collections.group.parts.part.program.signal", st_collections_group_programs_program_signal}, /* dup */
{"collections.group.parts.part.program.source", st_collections_group_programs_program_source}, /* dup */
{"collections.group.parts.part.program.in", st_collections_group_programs_program_in}, /* dup */
{"collections.group.parts.part.program.action", st_collections_group_programs_program_action}, /* dup */
{"collections.group.parts.part.program.transition", st_collections_group_programs_program_transition}, /* dup */
{"collections.group.parts.part.program.target", st_collections_group_programs_program_target}, /* dup */
{"collections.group.parts.part.program.after", st_collections_group_programs_program_after}, /* dup */
{"collections.group.parts.part.program.api", st_collections_group_programs_program_api}, /* dup */
{"collections.group.parts.programs.image", st_images_image}, /* dup */
{"collections.group.parts.programs.set.name", st_images_set_name}, /* dup */
{"collections.group.parts.programs.set.image.image", st_images_set_image_image}, /* dup */
{"collections.group.parts.programs.set.image.size", st_images_set_image_size}, /* dup */
{"collections.group.parts.programs.set.image.border", st_images_set_image_border}, /* dup */
{"collections.group.parts.programs.set.image.scale_by", st_images_set_image_border_scale_by}, /* dup */
{"collections.group.parts.programs.images.image", st_images_image}, /* dup */
{"collections.group.parts.programs.images.set.name", st_images_set_name}, /* dup */
{"collections.group.parts.programs.images.set.image.image", st_images_set_image_image}, /* dup */
{"collections.group.parts.programs.images.set.image.size", st_images_set_image_size}, /* dup */
{"collections.group.parts.programs.images.set.image.border", st_images_set_image_border}, /* dup */
{"collections.group.parts.programs.images.set.image.scale_by", st_images_set_image_border_scale_by}, /* dup */
{"collections.group.parts.programs.font", st_fonts_font}, /* dup */
{"collections.group.parts.programs.fonts.font", st_fonts_font}, /* dup */
{"collections.group.parts.programs.program.name", st_collections_group_programs_program_name}, /* dup */
{"collections.group.parts.programs.program.signal", st_collections_group_programs_program_signal}, /* dup */
{"collections.group.parts.programs.program.source", st_collections_group_programs_program_source}, /* dup */
{"collections.group.parts.programs.program.filter", st_collections_group_programs_program_filter}, /* dup */
{"collections.group.parts.programs.program.in", st_collections_group_programs_program_in}, /* dup */
{"collections.group.parts.programs.program.action", st_collections_group_programs_program_action}, /* dup */
{"collections.group.parts.programs.program.transition", st_collections_group_programs_program_transition}, /* dup */
{"collections.group.parts.programs.program.target", st_collections_group_programs_program_target}, /* dup */
{"collections.group.parts.programs.program.after", st_collections_group_programs_program_after},
{"collections.group.parts.programs.program.api", st_collections_group_programs_program_api},
{"collections.group.parts.program.name", st_collections_group_programs_program_name}, /* dup */
{"collections.group.parts.program.signal", st_collections_group_programs_program_signal}, /* dup */
{"collections.group.parts.program.source", st_collections_group_programs_program_source}, /* dup */
{"collections.group.parts.program.filter", st_collections_group_programs_program_filter}, /* dup */
{"collections.group.parts.program.in", st_collections_group_programs_program_in}, /* dup */
{"collections.group.parts.program.action", st_collections_group_programs_program_action}, /* dup */
{"collections.group.parts.program.transition", st_collections_group_programs_program_transition}, /* dup */
{"collections.group.parts.program.target", st_collections_group_programs_program_target}, /* dup */
{"collections.group.parts.program.after", st_collections_group_programs_program_after}, /* dup */
{"collections.group.parts.program.api", st_collections_group_programs_program_api}, /* dup */
#ifdef HAVE_EPHYSICS
{"collections.group.physics.world.gravity", st_collections_group_physics_world_gravity},
{"collections.group.physics.world.rate", st_collections_group_physics_world_rate},
{"collections.group.physics.world.z", st_collections_group_physics_world_z},
{"collections.group.physics.world.depth", st_collections_group_physics_world_depth},
#endif
{"collections.group.program.name", st_collections_group_programs_program_name}, /* dup */
{"collections.group.program.signal", st_collections_group_programs_program_signal}, /* dup */
{"collections.group.program.source", st_collections_group_programs_program_source}, /* dup */
{"collections.group.program.filter", st_collections_group_programs_program_filter}, /* dup */
{"collections.group.program.in", st_collections_group_programs_program_in}, /* dup */
{"collections.group.program.action", st_collections_group_programs_program_action}, /* dup */
{"collections.group.program.transition", st_collections_group_programs_program_transition}, /* dup */
{"collections.group.program.target", st_collections_group_programs_program_target}, /* dup */
{"collections.group.program.after", st_collections_group_programs_program_after}, /* dup */
{"collections.group.program.api", st_collections_group_programs_program_api}, /* dup */
{"collections.group.programs.program.name", st_collections_group_programs_program_name},
{"collections.group.programs.program.signal", st_collections_group_programs_program_signal},
{"collections.group.programs.program.source", st_collections_group_programs_program_source},
{"collections.group.programs.program.filter", st_collections_group_programs_program_filter}, /* dup */
{"collections.group.programs.program.in", st_collections_group_programs_program_in},
{"collections.group.programs.program.action", st_collections_group_programs_program_action},
{"collections.group.programs.program.transition", st_collections_group_programs_program_transition},
{"collections.group.programs.program.target", st_collections_group_programs_program_target},
{"collections.group.programs.program.after", st_collections_group_programs_program_after},
{"collections.group.programs.program.api", st_collections_group_programs_program_api},
{"collections.group.programs.image", st_images_image}, /* dup */
{"collections.group.programs.set.name", st_images_set_name}, /* dup */
{"collections.group.programs.set.image.image", st_images_set_image_image}, /* dup */
{"collections.group.programs.set.image.size", st_images_set_image_size}, /* dup */
{"collections.group.programs.set.image.border", st_images_set_image_border}, /* dup */
{"collections.group.programs.set.image.scale_by", st_images_set_image_border_scale_by}, /* dup */
{"collections.group.programs.images.image", st_images_image}, /* dup */
{"collections.group.programs.images.set.name", st_images_set_name}, /* dup */
{"collections.group.programs.images.set.image.image", st_images_set_image_image}, /* dup */
{"collections.group.programs.images.set.image.size", st_images_set_image_size}, /* dup */
{"collections.group.programs.images.set.image.border", st_images_set_image_border}, /* dup */
{"collections.group.programs.images.set.image.scale_by", st_images_set_image_border_scale_by}, /* dup */
{"collections.group.programs.font", st_fonts_font}, /* dup */
{"collections.group.programs.fonts.font", st_fonts_font} /* dup */
PROGRAM_STATEMENTS("collections.group.parts.part.description")
PROGRAM_STATEMENTS("collections.group.parts.part")
PROGRAM_STATEMENTS("collections.group.parts")
PROGRAM_STATEMENTS("collections.group")
};
#define PROGRAM_OBJECTS(PREFIX) \
{PREFIX".program", ob_collections_group_programs_program}, /* dup */ \
{PREFIX".program.script", ob_collections_group_programs_program_script}, /* dup */ \
{PREFIX".programs", NULL}, /* dup */ \
{PREFIX".programs.set", ob_images_set}, /* dup */ \
{PREFIX".programs.set.image", ob_images_set_image}, /* dup */ \
{PREFIX".programs.images", NULL}, /* dup */ \
{PREFIX".programs.images.set", ob_images_set}, /* dup */ \
{PREFIX".programs.images.set.image", ob_images_set_image}, /* dup */ \
{PREFIX".programs.fonts", NULL}, /* dup */ \
{PREFIX".programs.program", ob_collections_group_programs_program}, /* dup */ \
{PREFIX".programs.program.script", ob_collections_group_programs_program_script}, /* dup */ \
{PREFIX".programs.script", ob_collections_group_script}, /* dup */ \
{PREFIX".script", ob_collections_group_script}, /* dup */
New_Object_Handler object_handlers[] =
{
{"externals", NULL},
@ -965,58 +888,14 @@ New_Object_Handler object_handlers[] =
{"collections.group.parts.part.description.params", NULL},
{"collections.group.parts.part.description.color_classes", NULL}, /* dup */
{"collections.group.parts.part.description.color_classes.color_class", ob_color_class}, /* dup */
{"collections.group.parts.part.description.program", ob_collections_group_programs_program}, /* dup */
{"collections.group.parts.part.description.program.script", ob_collections_group_programs_program_script}, /* dup */
{"collections.group.parts.part.description.programs", NULL}, /* dup */
{"collections.group.parts.part.description.programs.set", ob_images_set}, /* dup */
{"collections.group.parts.part.description.programs.set.image", ob_images_set_image}, /* dup */
{"collections.group.parts.part.description.programs.images", NULL}, /* dup */
{"collections.group.parts.part.description.programs.images.set", ob_images_set},
{"collections.group.parts.part.description.programs.images.set.image", ob_images_set_image}, /* dup */
{"collections.group.parts.part.description.programs.fonts", NULL}, /* dup */
{"collections.group.parts.part.description.programs.program", ob_collections_group_programs_program}, /* dup */
{"collections.group.parts.part.description.programs.program.script", ob_collections_group_programs_program_script}, /* dup */
{"collections.group.parts.part.description.script", ob_collections_group_script}, /* dup */
{"collections.group.parts.part.program", ob_collections_group_programs_program}, /* dup */
{"collections.group.parts.part.program.script", ob_collections_group_programs_program_script}, /* dup */
{"collections.group.parts.part.programs", NULL}, /* dup */
{"collections.group.parts.part.programs.set", ob_images_set}, /* dup */
{"collections.group.parts.part.programs.set.image", ob_images_set_image}, /* dup */
{"collections.group.parts.part.programs.images", NULL}, /* dup */
{"collections.group.parts.part.programs.images.set", ob_images_set}, /* dup */
{"collections.group.parts.part.programs.images.set.image", ob_images_set_image}, /* dup */
{"collections.group.parts.part.programs.fonts", NULL}, /* dup */
{"collections.group.parts.part.programs.program", ob_collections_group_programs_program}, /* dup */
{"collections.group.parts.part.programs.program.script", ob_collections_group_programs_program_script}, /* dup */
{"collections.group.parts.part.script", ob_collections_group_script}, /* dup */
{"collections.group.parts.program", ob_collections_group_programs_program}, /* dup */
{"collections.group.parts.program.script", ob_collections_group_programs_program_script}, /* dup */
{"collections.group.parts.programs", NULL}, /* dup */
{"collections.group.parts.programs.set", ob_images_set}, /* dup */
{"collections.group.parts.programs.set.image", ob_images_set_image}, /* dup */
{"collections.group.parts.programs.images", NULL}, /* dup */
{"collections.group.parts.programs.images.set", ob_images_set}, /* dup */
{"collections.group.parts.programs.images.set.image", ob_images_set_image}, /* dup */
{"collections.group.parts.programs.fonts", NULL}, /* dup */
{"collections.group.parts.programs.program", ob_collections_group_programs_program}, /* dup */
{"collections.group.parts.programs.program.script", ob_collections_group_programs_program_script}, /* dup */
{"collections.group.parts.script", ob_collections_group_script}, /* dup */
#ifdef HAVE_EPHYSICS
{"collections.group.physics", NULL},
{"collections.group.physics.world", NULL},
#endif
{"collections.group.program", ob_collections_group_programs_program}, /* dup */
{"collections.group.program.script", ob_collections_group_programs_program_script}, /* dup */
{"collections.group.programs", NULL},
{"collections.group.programs.set", ob_images_set}, /* dup */
{"collections.group.programs.set.image", ob_images_set_image}, /* dup */
{"collections.group.programs.images", NULL}, /* dup */
{"collections.group.programs.images.set", ob_images_set}, /* dup */
{"collections.group.programs.images.set.image", ob_images_set_image}, /* dup */
{"collections.group.programs.fonts", NULL}, /* dup */
{"collections.group.programs.program", ob_collections_group_programs_program},
{"collections.group.programs.program.script", ob_collections_group_programs_program_script},
{"collections.group.programs.script", ob_collections_group_script} /* dup */
PROGRAM_OBJECTS("collections.group.parts.part.description")
PROGRAM_OBJECTS("collections.group.parts.part")
PROGRAM_OBJECTS("collections.group.parts")
PROGRAM_OBJECTS("collections.group")
};
New_Nested_Handler nested_handlers[] = {
@ -2568,6 +2447,8 @@ ob_collections_group(void)
current_de = mem_alloc(SZ(Edje_Part_Collection_Directory_Entry));
current_de->id = eina_list_count(edje_collections);
if (!edje_collections_lookup)
ob_collections();
eina_hash_add(edje_collections_lookup, &current_de->id, current_de);
pc = mem_alloc(SZ(Edje_Part_Collection_Parser));
@ -9169,7 +9050,7 @@ st_collections_group_programs_program_action(void)
if (ep->action == EDJE_ACTION_TYPE_STATE_SET)
{
ep->state = parse_str(1);
if (get_arg_count() == 1)
if (get_arg_count() == 2)
ep->value = 0.0;
else
ep->value = parse_float_range(2, 0.0, 1.0);
@ -9309,6 +9190,9 @@ st_collections_group_programs_program_action(void)
break;
case EDJE_ACTION_TYPE_SOUND_SAMPLE:
break;
case EDJE_ACTION_TYPE_STATE_SET:
check_min_arg_count(2);
break;
default:
check_arg_count(3);
}

View File

@ -2248,6 +2248,7 @@ _data_image_id_update(Eina_List *images_unused_list)
if (part->type == EDJE_PART_TYPE_IMAGE)
{
part_desc_image = (Edje_Part_Description_Image *)part->default_desc;
if (!part_desc_image) continue;
PART_DESC_IMAGE_ID_UPDATE
for (j = 0; j < part->other.desc_count; j++)
{

View File

@ -7,6 +7,14 @@
static const char *code_prefix = NULL;
static char buffer[4028];
static const char *
null_or_zero(const char *type)
{
if (type[0] == 's' || type[0] == 'o' || type[0] == 'v' || type[1])
return "NULL";
return "0";
}
static const char *
prefix_append(const char *text)
{
@ -252,7 +260,7 @@ source_client_simple_method_callback_generate(const DBus_Method *method, Eina_St
continue;
eina_strbuf_append(full_signature, arg->type);
eina_strbuf_append_printf(h, ", %s%s", dbus_type2c_type(arg->type), arg->c_name);
eina_strbuf_append_printf(c_code, " %s%s;\n", dbus_type2c_type(arg->type), arg->c_name);
eina_strbuf_append_printf(c_code, " %s%s = %s;\n", dbus_type2c_type(arg->type), arg->c_name, null_or_zero(arg->type));
eina_strbuf_append_printf(end_cb, ", %s", arg->c_name);
eina_strbuf_append_printf(arguments_get, ", &%s", arg->c_name);
}
@ -416,14 +424,6 @@ prop_cb_get(const DBus_Property *prop)
}
}
static const char *
null_or_zero(const char *type)
{
if (type[0] == 's' || type[0] == 'o' || type[0] == 'v' || type[1])
return "NULL";
return "0";
}
static void
source_client_property_generate_get(const DBus_Property *prop, Eina_Strbuf *c_code, Eina_Strbuf *h)
{

View File

@ -1712,6 +1712,7 @@ _file_changed_cb(const char *path EINA_UNUSED, Eina_Bool deleted EINA_UNUSED, vo
if (fd)
{
fd->changed = EINA_TRUE;
fd->valid = EINA_FALSE;
_file_id_free(fd);
eina_hash_set(file_entries, &fd->id, NULL);
}

View File

@ -108,7 +108,7 @@ _on_keydown(void *data EINA_UNUSED,
if (strcmp(ev->key, "h") == 0) /* print help */
{
fprintf(stdout, commands);
fprintf(stdout, "%s", commands);
return;
}
@ -361,7 +361,7 @@ main(void)
evas_object_image_border_center_fill_set(d.border, EVAS_BORDER_FILL_NONE);
evas_object_show(d.border);
fprintf(stdout, commands);
fprintf(stdout, "%s", commands);
_canvas_resize_cb(d.ee);
ecore_main_loop_begin();

View File

@ -610,9 +610,8 @@ ecore_main_loop_thread_safe_call_sync(Ecore_Data_Cb callback,
order->sync = EINA_TRUE;
order->suspend = EINA_FALSE;
_ecore_main_loop_thread_safe_call(order);
eina_lock_take(&order->m);
_ecore_main_loop_thread_safe_call(order);
eina_condition_wait(&order->c);
eina_lock_release(&order->m);
@ -1023,7 +1022,9 @@ _ecore_main_call_flush(void)
else if (call->sync)
{
call->data = call->cb.sync(call->data);
eina_lock_take(&call->m);
eina_condition_broadcast(&call->c);
eina_lock_release(&call->m);
}
else
{

View File

@ -44,7 +44,7 @@ _ecore_avahi_events2ecore(AvahiWatchEvent events)
{
return (events & AVAHI_WATCH_IN ? ECORE_FD_READ : 0) |
(events & AVAHI_WATCH_OUT ? ECORE_FD_WRITE : 0) |
(events & AVAHI_WATCH_ERR ? ECORE_FD_ERROR : 0);
ECORE_FD_ERROR;
}
static Eina_Bool
@ -88,7 +88,7 @@ _ecore_avahi_watch_new(const AvahiPoll *api,
static void
_ecore_avahi_watch_update(AvahiWatch *w, AvahiWatchEvent events)
{
Ecore_Avahi_Watch *watch = (Ecore_Avahi_Watch *) w;
Ecore_Avahi_Watch *watch = (Ecore_Avahi_Watch *) w;
ecore_main_fd_handler_active_set(watch->handler, _ecore_avahi_events2ecore(events));
}
@ -119,8 +119,17 @@ _ecore_avahi_watch_get_events(AvahiWatch *w)
static double
_ecore_avahi_timeval2double(const struct timeval *tv)
{
struct timeval now;
double tm;
if (!tv) return 3600;
return tv->tv_sec + (double) tv->tv_usec / 1000000;
gettimeofday(&now, NULL);
tm = tv->tv_sec - now.tv_sec + (double) (tv->tv_usec - now.tv_usec) / 1000000;
if (tm < 0) tm = 0.001;
return tm;
}
static Eina_Bool
@ -128,10 +137,10 @@ _ecore_avahi_timeout_cb(void *data)
{
Ecore_Avahi_Timeout *timeout = data;
ecore_timer_freeze(timeout->timer);
timeout->callback((AvahiTimeout*) timeout, timeout->callback_data);
return ECORE_CALLBACK_RENEW;
timeout->timer = NULL;
return ECORE_CALLBACK_CANCEL;
}
static AvahiTimeout *
@ -144,9 +153,8 @@ _ecore_avahi_timeout_new(const AvahiPoll *api, const struct timeval *tv,
ea = api->userdata;
timeout = calloc(1, sizeof (Ecore_Avahi_Timeout));
if (!timeout) return NULL;
timeout->timer = ecore_timer_add(_ecore_avahi_timeval2double(tv), _ecore_avahi_timeout_cb, timeout);
if (!tv) ecore_timer_freeze(timeout->timer);
if (tv) timeout->timer = ecore_timer_add(_ecore_avahi_timeval2double(tv),
_ecore_avahi_timeout_cb, timeout);
timeout->callback = callback;
timeout->callback_data = userdata;
timeout->parent = ea;
@ -161,16 +169,12 @@ _ecore_avahi_timeout_update(AvahiTimeout *t, const struct timeval *tv)
{
Ecore_Avahi_Timeout *timeout = (Ecore_Avahi_Timeout *) t;
if (timeout->timer) ecore_timer_del(timeout->timer);
timeout->timer = NULL;
if (tv)
{
ecore_timer_interval_set(timeout->timer, _ecore_avahi_timeval2double(tv));
if (ecore_timer_freeze_get(timeout->timer))
ecore_timer_thaw(timeout->timer);
}
else
{
ecore_timer_freeze(timeout->timer);
}
timeout->timer = ecore_timer_add(_ecore_avahi_timeval2double(tv),
_ecore_avahi_timeout_cb, timeout);
}
static void
@ -178,7 +182,7 @@ _ecore_avahi_timeout_free(AvahiTimeout *t)
{
Ecore_Avahi_Timeout *timeout = (Ecore_Avahi_Timeout *) t;
ecore_timer_del(timeout->timer);
if (timeout->timer) ecore_timer_del(timeout->timer);
timeout->parent->timeouts = eina_list_remove(timeout->parent->timeouts, timeout);
free(timeout);
}

View File

@ -702,7 +702,8 @@ ecore_con_server_send(Ecore_Con_Server *svr,
}
#endif
}
eina_binbuf_append_length(svr->buf, data, size);
if (!eina_binbuf_append_length(svr->buf, data, size))
ERR("eina_binbuf_append_length() failed");
return size;
}
@ -815,7 +816,8 @@ ecore_con_client_send(Ecore_Con_Client *cl,
}
#endif
}
eina_binbuf_append_length(cl->buf, data, size);
if (!eina_binbuf_append_length(cl->buf, data, size))
ERR("eina_binbuf_append_length() failed");
}
return size;
}
@ -2291,9 +2293,10 @@ _ecore_con_svr_cl_handler(void *data,
static void
_ecore_con_server_flush(Ecore_Con_Server *svr)
{
int count, num;
int count;
size_t num;
size_t buf_len;
unsigned int *buf_offset;
size_t *buf_offset;
const unsigned char *buf;
Eina_Binbuf *buf_p;
@ -2400,7 +2403,8 @@ _ecore_con_server_flush(Ecore_Con_Server *svr)
static void
_ecore_con_client_flush(Ecore_Con_Client *cl)
{
int num = 0, count = 0;
int count = 0;
size_t num = 0;
if (!cl->fd_handler) return;
#ifdef _WIN32

View File

@ -659,7 +659,7 @@ close_pipe:
Eina_Bool
ecore_con_local_win32_server_flush(Ecore_Con_Server *svr)
{
int num;
size_t num;
BOOL res;
DWORD written;
@ -706,7 +706,7 @@ Eina_Bool
ecore_con_local_win32_client_flush(Ecore_Con_Client *cl)
{
Ecore_Con_Type type;
int num;
size_t num;
BOOL res;
DWORD written;

View File

@ -101,7 +101,7 @@ struct _Ecore_Con_Client
Ecore_Con_Server *host_server;
void *data;
Ecore_Fd_Handler *fd_handler;
unsigned int buf_offset;
size_t buf_offset;
Eina_Binbuf *buf;
const char *ip;
Eina_List *event_count;
@ -136,7 +136,7 @@ struct _Ecore_Con_Server
Eina_List *clients;
unsigned int client_count;
Eina_Binbuf *buf;
unsigned int write_buf_offset;
size_t write_buf_offset;
Eina_List *infos;
Eina_List *event_count;
int client_limit;
@ -146,7 +146,7 @@ struct _Ecore_Con_Server
Ecore_Con_Proxy_State ecs_state;
int ecs_addrlen;
unsigned char ecs_addr[16];
unsigned int ecs_buf_offset;
size_t ecs_buf_offset;
Eina_Binbuf *ecs_buf;
Eina_Binbuf *ecs_recvbuf;
const char *proxyip;

View File

@ -101,9 +101,11 @@ _ecore_evas_engine_init(void)
/* 1. libecore_evas.so/../ecore_evas/engines/ */
paths[0] = eina_module_symbol_path_get(_ecore_evas_engine_init, "/ecore_evas/engines");
/* 2. PREFIX/ecore_evas/engines/ */
#ifndef _MSC_VER
#ifndef _WIN32
/* 3. PREFIX/ecore_evas/engines/ */
paths[1] = strdup(PACKAGE_LIB_DIR "/ecore_evas/engines");
#else
paths[1] = eina_module_symbol_path_get(_ecore_evas_engine_init, "/../lib/ecore_evas/engines");
#endif
for (j = 0; j < ((sizeof (paths) / sizeof (char*)) - 1); ++j)

View File

@ -277,6 +277,11 @@ EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_MOUSE;
EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ENABLE;
EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_DISABLE;
/* Abi compat fix */
EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_ENABLE;
EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_DISABLE;
/* End of Abi compat fix */
EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_COUNTER;
EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED;

View File

@ -303,6 +303,11 @@ EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_MOUSE = 0;
EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ENABLE = 0;
EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_DISABLE = 0;
/* Abi compat fix */
EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_ENABLE = 0;
EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_DISABLE = 0;
/* End of Abi compat fix */
EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_COUNTER = 0;
EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE = 0;
EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED = 0;
@ -632,6 +637,10 @@ const Atom_Item atom_items[] =
{ "_E_ILLUME_ACCESS_ACTION_MOUSE", &ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_MOUSE },
{ "_E_ILLUME_ACCESS_ACTION_ENABLE", &ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ENABLE },
{ "_E_ILLUME_ACCESS_ACTION_DISABLE", &ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_DISABLE },
/* Abi compat fix */
{ "_E_ILLUME_ACCESS_ENABLE", &ECORE_X_ATOM_E_ILLUME_ACCESS_ENABLE },
{ "_E_ILLUME_ACCESS_DISABLE", &ECORE_X_ATOM_E_ILLUME_ACCESS_DISABLE },
/* End of Abi compat fix */
{ "_E_COMP_SYNC_COUNTER", &ECORE_X_ATOM_E_COMP_SYNC_COUNTER },
{ "_E_COMP_SYNC_DRAW_DONE", &ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE },
{ "_E_COMP_SYNC_SUPPORTED", &ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED },

View File

@ -96,6 +96,12 @@ _ecore_x_image_shm_check(void)
if (_ecore_x_image_shm_can != -1)
return;
if (!XShmQueryExtension(_ecore_x_disp))
{
_ecore_x_image_shm_can = 0;
return;
}
XSync(_ecore_x_disp, False);
_ecore_x_image_err = 0;
@ -216,6 +222,18 @@ ecore_x_image_free(Ecore_X_Image *im)
free(im);
}
static void
_ecore_x_image_finalize(Ecore_X_Image *im)
{
im->data = (unsigned char *)im->xim->data;
im->bpl = im->xim->bytes_per_line;
im->rows = im->xim->height;
if (im->xim->bits_per_pixel <= 8) im->bpp = 1;
else if (im->xim->bits_per_pixel <= 16) im->bpp = 2;
else if (im->xim->bits_per_pixel <= 24) im->bpp = 3;
else im->bpp = 4;
}
static void
_ecore_x_image_shm_create(Ecore_X_Image *im)
{
@ -230,6 +248,7 @@ _ecore_x_image_shm_create(Ecore_X_Image *im)
IPC_CREAT | 0666);
if (im->shminfo.shmid == -1)
{
ERR("shmget failed: %s", strerror(errno));
XDestroyImage(im->xim);
im->xim = NULL;
return;
@ -241,6 +260,7 @@ _ecore_x_image_shm_create(Ecore_X_Image *im)
if ((im->xim->data == (char *)-1) ||
(!im->xim->data))
{
ERR("shmat failed: %s", strerror(errno));
shmdt(im->shminfo.shmaddr);
shmctl(im->shminfo.shmid, IPC_RMID, 0);
XDestroyImage(im->xim);
@ -249,19 +269,23 @@ _ecore_x_image_shm_create(Ecore_X_Image *im)
}
XShmAttach(_ecore_x_disp, &im->shminfo);
_ecore_x_image_finalize(im);
}
im->data = (unsigned char *)im->xim->data;
im->bpl = im->xim->bytes_per_line;
im->rows = im->xim->height;
if (im->xim->bits_per_pixel <= 8)
im->bpp = 1;
else if (im->xim->bits_per_pixel <= 16)
im->bpp = 2;
else if (im->xim->bits_per_pixel <= 24)
im->bpp = 3;
else
im->bpp = 4;
static void
_ecore_x_image_create(Ecore_X_Image *im)
{
im->xim = XCreateImage(_ecore_x_disp, im->vis, im->depth,
ZPixmap, 0, NULL, im->w, im->h, 32, 0);
if (!im->xim) return;
im->xim->data = malloc(im->xim->bytes_per_line * im->h);
if (!im->xim->data)
{
XDestroyImage(im->xim);
im->xim = NULL;
return;
}
_ecore_x_image_finalize(im);
}
EAPI Eina_Bool
@ -280,11 +304,12 @@ ecore_x_image_get(Ecore_X_Image *im,
LOGFN(__FILE__, __LINE__, __FUNCTION__);
if (im->shm)
{
if (!im->xim)
_ecore_x_image_shm_create(im);
if (!im->xim)
return 0;
return EINA_FALSE;
_ecore_x_image_err = 0;
@ -345,8 +370,15 @@ ecore_x_image_get(Ecore_X_Image *im,
}
else
{
printf("currently unimplemented ecore_x_image_get without shm\n");
ret = EINA_FALSE;
if (!im->xim)
_ecore_x_image_create(im);
if (!im->xim)
return EINA_FALSE;
if (XGetSubImage(_ecore_x_disp, draw, sx, sy, w, h,
0xffffffff, ZPixmap, im->xim, x, y) != im->xim)
ret = EINA_FALSE;
}
return ret;
@ -375,10 +407,19 @@ ecore_x_image_put(Ecore_X_Image *im,
if (_ecore_xlib_sync) ecore_x_sync();
gc = tgc;
}
if (!im->xim) _ecore_x_image_shm_create(im);
if (!im->xim)
{
if (im->shm) _ecore_x_image_shm_create(im);
else _ecore_x_image_create(im);
}
if (im->xim)
{
XShmPutImage(_ecore_x_disp, draw, gc, im->xim, sx, sy, x, y, w, h, False);
if (im->shm)
XShmPutImage(_ecore_x_disp, draw, gc, im->xim,
sx, sy, x, y, w, h, False);
else
XPutImage(_ecore_x_disp, draw, gc, im->xim,
sx, sy, x, y, w, h);
if (_ecore_xlib_sync) ecore_x_sync();
}
if (tgc) ecore_x_gc_free(tgc);
@ -391,8 +432,12 @@ ecore_x_image_data_get(Ecore_X_Image *im,
int *bpp)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
if (!im->xim) _ecore_x_image_shm_create(im);
if (!im->xim) return NULL;
if (!im->xim)
{
if (im->shm) _ecore_x_image_shm_create(im);
else _ecore_x_image_create(im);
if (!im->xim) return NULL;
}
if (bpl) *bpl = im->bpl;
if (rows) *rows = im->rows;
if (bpp) *bpp = im->bpp;
@ -403,7 +448,12 @@ EAPI Eina_Bool
ecore_x_image_is_argb32_get(Ecore_X_Image *im)
{
Visual *vis = im->vis;
if (!im->xim) _ecore_x_image_shm_create(im);
if (!im->xim)
{
if (im->shm) _ecore_x_image_shm_create(im);
else _ecore_x_image_create(im);
if (!im->xim) return EINA_FALSE;
}
if (((vis->class == TrueColor) ||
(vis->class == DirectColor)) &&
(im->bpp == 4) &&
@ -711,4 +761,3 @@ ecore_x_image_to_argb_convert(void *src,
}
return EINA_TRUE;
}

View File

@ -1683,7 +1683,6 @@ _ecore_x_window_argb_internal_new(Ecore_X_Window parent,
CWWinGravity,
&attr);
if (_ecore_xlib_sync) ecore_x_sync();
XFreeColormap(_ecore_x_disp, attr.colormap);
if (parent == DefaultRootWindow(_ecore_x_disp))
ecore_x_window_defaults_set(win);

View File

@ -3904,10 +3904,14 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
{
if (pf->visible)
{
Eina_Bool vis = EINA_TRUE;
if (ep->part->type == EDJE_PART_TYPE_GROUP)
vis = evas_object_visible_get(ed->obj);
eo_do(ep->typedata.swallow->swallowed_object,
evas_obj_position_set(ed->x + pf->final.x, ed->y + pf->final.y),
evas_obj_size_set(pf->final.w, pf->final.h),
evas_obj_visibility_set(EINA_TRUE));
evas_obj_visibility_set(vis));
}
else evas_object_hide(ep->typedata.swallow->swallowed_object);
mo = ep->typedata.swallow->swallowed_object;

View File

@ -1275,12 +1275,12 @@ _edje_entry_hide_visible_password(Edje *ed, Edje_Real_Part *rp)
{
evas_textblock_node_format_remove_pair(rp->object,
(Evas_Object_Textblock_Node_Format *) node);
_edje_emit(ed, "entry,changed", rp->part->name);
break;
}
}
}
_edje_entry_real_part_configure(ed, rp);
_edje_emit(ed, "entry,changed", rp->part->name);
}
static Eina_Bool
@ -1342,37 +1342,16 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
if (en->imf_context)
{
Ecore_IMF_Event_Key_Down ecore_ev;
Eina_Bool filter_ret;
ecore_imf_evas_event_key_down_wrap(ev, &ecore_ev);
if (!en->composing)
{
filter_ret = ecore_imf_context_filter_event(en->imf_context,
ECORE_IMF_EVENT_KEY_DOWN,
(Ecore_IMF_Event *)&ecore_ev);
if (en->have_preedit)
if (ecore_imf_context_filter_event(en->imf_context,
ECORE_IMF_EVENT_KEY_DOWN,
(Ecore_IMF_Event *)&ecore_ev))
{
if (!strcmp(ev->key, "Down") ||
(!strcmp(ev->key, "KP_Down") && !ev->string) ||
!strcmp(ev->key, "Up") ||
(!strcmp(ev->key, "KP_Up") && !ev->string) ||
!strcmp(ev->key, "Left") ||
(!strcmp(ev->key, "KP_Left") && !ev->string) ||
!strcmp(ev->key, "Right") ||
(!strcmp(ev->key, "KP_Right") && !ev->string) ||
!strcmp(ev->key, "Next") ||
(!strcmp(ev->key, "KP_Next") && !ev->string) ||
!strcmp(ev->key, "Prior") ||
(!strcmp(ev->key, "KP_Prior") && !ev->string) ||
!strcmp(ev->key, "Home") ||
(!strcmp(ev->key, "KP_Home") && !ev->string) ||
!strcmp(ev->key, "End") ||
(!strcmp(ev->key, "KP_End") && !ev->string))
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return;
}
if (filter_ret)
return;
}
}
#endif

View File

@ -940,7 +940,9 @@ _edje_object_file_set_internal(Evas_Object *obj, const Eina_File *file, const ch
obj);
if (rp->part->type == EDJE_PART_TYPE_GROUP)
{
ed->groups = eina_list_append(ed->groups, _edje_fetch(child_obj));
Edje *edg = _edje_fetch(child_obj);
ed->groups = eina_list_append(ed->groups, edg);
evas_object_data_set(child_obj, "\377 edje.part_obj", rp);
_edje_real_part_swallow(ed, rp, child_obj, EINA_TRUE);
_edje_subobj_register(ed, child_obj);
source = NULL;

View File

@ -1544,9 +1544,10 @@ struct _Edje_Real_Part_Text
Evas_Coord in_w, in_h; // 8
const char *in_str; // 4
const char *out_str; // 4
const char *in_font; // 4
FLOAT_T align_x, align_y; // 16
} cache;
}; // 84
}; // 88
// FIXME make text a potiner to struct and alloc at end
// if part type is TEXT move common members textblock +
// text to front and have smaller struct for textblock

View File

@ -450,15 +450,6 @@ _edje_program_end(Edje *ed, Edje_Running_Program *runp)
runp->program->tween.v3,
runp->program->tween.v4);
if (rp->current)
{
eina_cow_free(_edje_calc_params_map_cow, (const Eina_Cow_Data **) &rp->current->map);
#ifdef HAVE_EPHYSICS
eina_cow_free(_edje_calc_params_physics_cow, (const Eina_Cow_Data **) &rp->current->physics);
#endif
free(rp->current);
rp->current = NULL;
}
rp->program = NULL;
}
}
@ -586,7 +577,6 @@ _edje_program_run(Edje *ed, Edje_Program *pr, Eina_Bool force, const char *ssig,
free(rp->current);
}
rp->current = tmp;
}
else
{

View File

@ -89,8 +89,8 @@ _edje_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
evas_object_static_clip_set(ed->base->clipper, 1);
evas_object_smart_member_add(ed->base->clipper, obj);
evas_object_color_set(ed->base->clipper, 255, 255, 255, 255);
evas_object_move(ed->base->clipper, -10000, -10000);
evas_object_resize(ed->base->clipper, 20000, 20000);
evas_object_move(ed->base->clipper, -100000, -100000);
evas_object_resize(ed->base->clipper, 200000, 200000);
evas_object_pass_events_set(ed->base->clipper, 1);
ed->is_rtl = EINA_FALSE;
ed->have_objects = EINA_TRUE;
@ -286,7 +286,8 @@ _edje_smart_resize(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
static void
_edje_smart_show(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
{
Edje *ed = _pd;
Edje *ed = _pd, *edg;
Eina_List *l;
eo_do_super(obj, MY_CLASS, evas_obj_smart_show());
if (evas_object_visible_get(obj)) return;
@ -300,13 +301,26 @@ _edje_smart_show(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
_edje_lua_script_only_show(ed);
return;
}
if (eina_list_count(ed->groups) > 1)
{
EINA_LIST_FOREACH(ed->groups, l, edg)
{
Edje_Real_Part *rp;
if (edg == ed) continue;
rp = evas_object_data_get(edg->obj, "\377 edje.part_obj");
if (rp->chosen_description->visible)
evas_object_show(edg->obj);
}
}
_edje_emit(ed, "show", NULL);
}
static void
_edje_smart_hide(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
{
Edje *ed = _pd;
Edje *ed = _pd, *edg;
Eina_List *l;
eo_do_super(obj, MY_CLASS, evas_obj_smart_hide());
if (!evas_object_visible_get(obj)) return;
@ -320,6 +334,8 @@ _edje_smart_hide(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
_edje_lua_script_only_hide(ed);
return;
}
EINA_LIST_FOREACH(ed->groups, l, edg)
if (edg != ed) evas_object_hide(edg->obj);
_edje_emit(ed, "hide", NULL);
}

View File

@ -266,7 +266,8 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
(ep->typedata.text->cache.align_y == params->type.text.align.y) &&
(ep->typedata.text->cache.elipsis == params->type.text.elipsis) &&
(ep->typedata.text->cache.fit_x == chosen_desc->text.fit_x) &&
(ep->typedata.text->cache.fit_y == chosen_desc->text.fit_y))
(ep->typedata.text->cache.fit_y == chosen_desc->text.fit_y) &&
(ep->typedata.text->cache.in_font == font))
{
text = ep->typedata.text->cache.out_str;
size = ep->typedata.text->cache.out_size;
@ -414,6 +415,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
eina_stringshare_replace(&ep->typedata.text->cache.out_str, text);
ep->typedata.text->cache.in_w = sw;
ep->typedata.text->cache.in_h = sh;
ep->typedata.text->cache.in_font = font;
ep->typedata.text->cache.out_size = size;
ep->typedata.text->cache.align_x = params->type.text.align.x;
ep->typedata.text->cache.align_y = params->type.text.align.y;

View File

@ -2775,6 +2775,7 @@ _eet_data_dump_token_get(const char *src,
char *tok = NULL;
int in_token = 0;
int in_quote = 0;
int in_escape = 0;
int tlen = 0, tsize = 0;
#define TOK_ADD(x) \
@ -2792,25 +2793,32 @@ _eet_data_dump_token_get(const char *src,
{
if (in_token)
{
if (in_quote)
if (in_escape)
{
if ((p[0] == '\"') && (p > src) && (p[-1] != '\\'))
switch (p[0]) {
case 'n':
TOK_ADD('\n');
break;
case '"':
case '\'':
case '\\':
TOK_ADD(p[0]);
break;
default:
ERR("Unknow escape character %#x (%c). Append as is",
p[0], p[0]);
TOK_ADD(p[0]);
}
in_escape = 0;
}
else if (p[0] == '\\')
{
in_escape = 1;
}
else if (in_quote)
{
if (p[0] == '\"')
in_quote = 0;
else if ((p[0] == '\\') && (*len > 1) &&
(p[1] == '\"'))
{
/* skip */
}
else if ((p[0] == '\\') && (p > src) && (p[-1] == '\\'))
{
/* skip */
}
else if ((p[0] == '\\') && (*len > 1) && (p[1] == 'n'))
{
/* skip */
}
else if ((p[0] == 'n') && (p > src) && (p[-1] == '\\'))
TOK_ADD('\n');
else
TOK_ADD(p[0]);
}

View File

@ -1554,35 +1554,47 @@ static int
efreet_menu_handle_default_merge_dirs(Efreet_Menu_Internal *parent, Efreet_Xml *xml)
{
Eina_List *dirs;
char path[PATH_MAX], *p, *pp;
char path[PATH_MAX], *p = NULL;
const char *pp;
#ifndef STRICT_SPEC
char parent_path[PATH_MAX];
#endif
if (!parent || !xml) return 0;
if (!strcmp(efreet_menu_prefix, "gnome-") &&
(!strcmp(parent->file.name, "gnome-applications.menu")))
{
p = alloca(sizeof("applications"));
memcpy(p, "applications", sizeof("applications"));
}
else if ((!strcmp(efreet_menu_prefix, "kde-") &&
(!strcmp(parent->file.name, "kde-applications.menu"))))
if ((!strcmp(parent->file.name, "gnome-applications.menu")) ||
(!strcmp(parent->file.name, "kde-applications.menu")))
{
p = alloca(sizeof("applications"));
memcpy(p, "applications", sizeof("applications"));
}
else
{
char *s;
size_t len;
len = strlen(parent->file.name) + 1;
p = alloca(len);
memcpy(p, parent->file.name, len);
s = strrchr(p, '.');
if (s) *s = '\0';
len = strlen(efreet_menu_prefix);
if (!strncmp(parent->file.name, efreet_menu_prefix, len))
{
pp = parent->file.name;
pp += len;
if (!strcmp(pp, "applications.menu"))
{
p = alloca(sizeof("applications"));
memcpy(p, "applications", sizeof("applications"));
}
}
if (!p)
{
char *s;
size_t len;
len = strlen(parent->file.name) + 1;
p = alloca(len);
memcpy(p, parent->file.name, len);
s = strrchr(p, '.');
if (s) *s = '\0';
}
}
snprintf(path, sizeof(path), "menus/%s-merged", p);

View File

@ -332,12 +332,14 @@ _eina_file_map_populate(char *map, unsigned int size, Eina_Bool hugetlb)
unsigned int i;
unsigned int s;
if (size == 0) return 0;
s = hugetlb ? EINA_HUGE_PAGE : EINA_SMALL_PAGE;
for (i = 0; i < size; i += s)
r ^= map[i];
r ^= map[size];
r ^= map[size - 1];
return r;
}

View File

@ -920,6 +920,7 @@ eina_log_domain_new(Eina_Log_Domain *d, Eina_Log_Timing *t,
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
d->level = EINA_LOG_LEVEL_UNKNOWN;
d->color = color;
d->deleted = EINA_FALSE;
if ((color) && (!_disable_color))
@ -1581,7 +1582,24 @@ EAPI void
eina_log_color_disable_set(Eina_Bool disabled)
{
#ifdef EINA_ENABLE_LOG
Eina_Log_Domain *domain;
unsigned int i;
_disable_color = disabled;
for (i = 0; i < _log_domains_count; i++)
{
domain = &_log_domains[i];
if (domain->domain_str)
free((char *)domain->domain_str);
if ((domain->color) && (!_disable_color))
domain->domain_str = eina_log_domain_str_get(domain->name, domain->color);
else
domain->domain_str = eina_log_domain_str_get(domain->name, NULL);
}
#else
(void) disabled;
#endif

View File

@ -419,6 +419,9 @@ struct _Eina_Log_Domain
/* Private */
Eina_Bool deleted : 1; /**< Flags deletion of domain, a free slot */
/* Add new members here. */
const char *color; /**< Color to use when printing in this domain */
};
/**

View File

@ -356,16 +356,14 @@ emotion_engine_instance_new(const char *name, Evas_Object *obj, Emotion_Module_O
m = _find_mod(name);
if (m) eina_module_load(m);
}
else
if (!_emotion_engine_registry)
{
if (!_emotion_engine_registry)
{
m = _find_mod("generic");
if (!m) m = _find_mod("xine");
if (!m) m = _find_mod("gstreamer");
if (!m) m = _find_mod("gstreamer1");
if (m) eina_module_load(m);
}
m = _find_mod("generic");
if (!m) m = _find_mod("xine");
if (!m) m = _find_mod("gstreamer");
if (!m) m = _find_mod("gstreamer1");
if (m) eina_module_load(m);
}
if (name)

View File

@ -36,6 +36,7 @@ EAPI extern const Eo_Event_Description _EVAS_CANVAS_EVENT_OBJECT_FOCUS_IN;
EAPI extern const Eo_Event_Description _EVAS_CANVAS_EVENT_OBJECT_FOCUS_OUT;
EAPI extern const Eo_Event_Description _EVAS_CANVAS_EVENT_RENDER_PRE;
EAPI extern const Eo_Event_Description _EVAS_CANVAS_EVENT_RENDER_POST;
EAPI extern const Eo_Event_Description _EVAS_CANVAS_EVENT_DEVICE_CHANGED;
// Callbacks events for use with Evas objects
#define EVAS_OBJECT_EVENT_MOUSE_IN (&(_EVAS_OBJECT_EVENT_MOUSE_IN))
@ -73,6 +74,7 @@ EAPI extern const Eo_Event_Description _EVAS_CANVAS_EVENT_RENDER_POST;
#define EVAS_CANVAS_EVENT_OBJECT_FOCUS_OUT (&(_EVAS_CANVAS_EVENT_OBJECT_FOCUS_OUT))
#define EVAS_CANVAS_EVENT_RENDER_PRE (&(_EVAS_CANVAS_EVENT_RENDER_PRE))
#define EVAS_CANVAS_EVENT_RENDER_POST (&(_EVAS_CANVAS_EVENT_RENDER_POST))
#define EVAS_CANVAS_EVENT_DEVICE_CHANGED (&(_EVAS_CANVAS_EVENT_DEVICE_CHANGED))
EAPI extern const Eo_Event_Description _CLICKED_EVENT;
EAPI extern const Eo_Event_Description _CLICKED_DOUBLE_EVENT;

View File

@ -5610,8 +5610,8 @@ EAPI char *evas_textblock_text_markup_to_utf8
*
* @param obj the textblock object to work with (if @c NULL, it just does the
* default behaviour, i.e with no extra object information).
* @param text The markup text (if @c NULL, return @c NULL).
* @return An allocated plain text version of the markup.
* @param text The plain text (if @c NULL, return @c NULL).
* @return An allocated markup version of the plain text.
* @since 1.2
*/
EAPI char *evas_textblock_text_utf8_to_markup(const Evas_Object *obj, const char *text) EINA_WARN_UNUSED_RESULT EINA_MALLOC;

View File

@ -75,6 +75,9 @@ EAPI const Eo_Event_Description _EVAS_CANVAS_EVENT_OBJECT_FOCUS_IN =
EAPI const Eo_Event_Description _EVAS_CANVAS_EVENT_OBJECT_FOCUS_OUT =
EO_HOT_EVENT_DESCRIPTION("Canvas Object Focus Out", "Canvas object lost focus");
EAPI const Eo_Event_Description _EVAS_CANVAS_EVENT_DEVICE_CHANGED =
EO_HOT_EVENT_DESCRIPTION("Device changed",
"Devices added, removed or changed to the canvas");
/**
* Evas events descriptions for Eo.
*/
@ -103,7 +106,6 @@ static const Eo_Event_Description *_legacy_evas_callback_table[EVAS_CALLBACK_LAS
EVAS_OBJECT_EVENT_HOLD,
EVAS_OBJECT_EVENT_CHANGED_SIZE_HINTS,
EVAS_OBJECT_EVENT_IMAGE_PRELOADED,
EVAS_OBJECT_EVENT_IMAGE_RESIZE,
EVAS_CANVAS_EVENT_FOCUS_IN,
EVAS_CANVAS_EVENT_FOCUS_OUT,
EVAS_CANVAS_EVENT_RENDER_FLUSH_PRE,
@ -112,7 +114,9 @@ static const Eo_Event_Description *_legacy_evas_callback_table[EVAS_CALLBACK_LAS
EVAS_CANVAS_EVENT_OBJECT_FOCUS_OUT,
EVAS_OBJECT_EVENT_IMAGE_UNLOADED,
EVAS_CANVAS_EVENT_RENDER_PRE,
EVAS_CANVAS_EVENT_RENDER_POST
EVAS_CANVAS_EVENT_RENDER_POST,
EVAS_OBJECT_EVENT_IMAGE_RESIZE,
EVAS_CANVAS_EVENT_DEVICE_CHANGED
};
typedef struct

View File

@ -1281,11 +1281,6 @@ _canvas_font_path_clear(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list EINA_UNUS
eina_stringshare_del(evas->font_path->data);
evas->font_path = eina_list_remove(evas->font_path, evas->font_path->data);
}
#ifdef HAVE_FONTCONFIG
if (fc_config)
FcConfigAppFontClear(fc_config);
#endif
}
EAPI void
@ -1306,10 +1301,6 @@ _canvas_font_path_append(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list)
e->font_path = eina_list_append(e->font_path, eina_stringshare_add(path));
evas_font_init();
#ifdef HAVE_FONTCONFIG
if (fc_config)
FcConfigAppFontAddDir(fc_config, (const FcChar8 *) path);
#endif
}
EAPI void
@ -1330,10 +1321,6 @@ _canvas_font_path_prepend(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list)
e->font_path = eina_list_prepend(e->font_path, eina_stringshare_add(path));
evas_font_init();
#ifdef HAVE_FONTCONFIG
if (fc_config)
FcConfigAppFontAddDir(fc_config, (const FcChar8 *) path);
#endif
}
EAPI const Eina_List *

View File

@ -3788,44 +3788,6 @@ evas_object_image_render(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, v
return;
}
if (o->pixels->pixel_updates)
{
Eina_Rectangle *r;
Evas_Public_Data *e = obj->layer->evas;
if ((o->cur->border.l == 0) &&
(o->cur->border.r == 0) &&
(o->cur->border.t == 0) &&
(o->cur->border.b == 0) &&
(o->cur->image.w > 0) &&
(o->cur->image.h > 0) &&
(!((obj->map->cur.map) && (obj->map->cur.usemap))))
{
EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write)
{
EINA_LIST_FREE(pixi_write->pixel_updates, r)
{
e->engine.func->image_dirty_region(e->engine.data.output,
o->engine_data, r->x, r->y, r->w, r->h);
eina_rectangle_free(r);
}
}
EINA_COW_PIXEL_WRITE_END(o, pixi_write);
}
else
{
EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write)
{
EINA_LIST_FREE(pixi_write->pixel_updates, r)
eina_rectangle_free(r);
}
EINA_COW_PIXEL_WRITE_END(o, pixi_write);
e->engine.func->image_dirty_region(e->engine.data.output,
o->engine_data, 0, 0, o->cur->image.w, o->cur->image.h);
}
}
obj->layer->evas->engine.func->context_color_set(output,
context,
255, 255, 255, 255);
@ -4325,14 +4287,14 @@ evas_object_image_render_pre(Evas_Object *eo_obj,
(!((obj->map->cur.map) && (obj->map->cur.usemap))))
{
Eina_Rectangle *rr;
Eina_List *l;
EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write)
{
EINA_LIST_FOREACH(pixi_write->pixel_updates, l, rr)
EINA_LIST_FREE(pixi_write->pixel_updates, rr)
{
Evas_Coord idw, idh, idx, idy;
int x, y, w, h;
e->engine.func->image_dirty_region(e->engine.data.output, o->engine_data, rr->x, rr->y, rr->w, rr->h);
idx = evas_object_image_figure_x_fill(eo_obj, obj, o->cur->fill.x, o->cur->fill.w, &idw);
idy = evas_object_image_figure_y_fill(eo_obj, obj, o->cur->fill.y, o->cur->fill.h, &idh);
@ -4377,6 +4339,16 @@ evas_object_image_render_pre(Evas_Object *eo_obj,
}
else
{
Eina_Rectangle *r;
EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write)
{
EINA_LIST_FREE(pixi_write->pixel_updates, r)
eina_rectangle_free(r);
}
EINA_COW_PIXEL_WRITE_END(o, pixi_write);
e->engine.func->image_dirty_region(e->engine.data.output, o->engine_data, 0, 0, o->cur->image.w, o->cur->image.h);
evas_object_render_pre_prev_cur_add(&e->clip_changes, eo_obj,
obj);
goto done;

View File

@ -621,7 +621,6 @@ _destructor(Eo *eo_obj, void *_pd, va_list *list EINA_UNUSED)
return;
MAGIC_CHECK_END();
Evas_Object_Protected_Data *obj = _pd;
Evas_Object_Protected_Data *tmp;
Evas_Object *proxy;
Eina_List *l, *l2;
@ -654,8 +653,14 @@ _destructor(Eo *eo_obj, void *_pd, va_list *list EINA_UNUSED)
goto end;
}
evas_object_grabs_cleanup(eo_obj, obj);
EINA_LIST_FREE(obj->clip.clipees, tmp)
evas_object_clip_unset(tmp->object);
/* "while" should be used for null check of obj->clip.clipees,
because evas_objct_clip_unset can set null to obj->clip.clipees */
while (obj->clip.clipees)
{
Evas_Object_Protected_Data *tmp;
tmp = eina_list_data_get(obj->clip.clipees);
evas_object_clip_unset(tmp->object);
}
EINA_LIST_FOREACH_SAFE(obj->proxy->proxies, l, l2, proxy)
evas_object_image_source_unset(proxy);
if (obj->cur->clipper) evas_object_clip_unset(eo_obj);

View File

@ -685,7 +685,7 @@ static Eina_Bool
_layout_text_item_trim(Evas_Object_Protected_Data *obj, Evas_Object_Text *o, Evas_Object_Text_Item *ti, int idx, Eina_Bool want_start)
{
Evas_Text_Props new_text_props;
if (idx >= (int) ti->text_props.len)
if (idx >= (int) ti->text_props.text_len)
return EINA_FALSE;
memset(&new_text_props, 0, sizeof (new_text_props));
@ -2217,7 +2217,7 @@ evas_object_text_render(Evas_Object *eo_obj EINA_UNUSED,
// Proxies
evas_filter_context_proxy_render_all(filter, eo_obj, EINA_FALSE);
// Context: FIXME it should be a sw context only
// Draw Context
filter_ctx = ENFN->context_new(ENDT);
ENFN->context_color_set(ENDT, filter_ctx, 255, 255, 255, 255);
@ -2801,6 +2801,7 @@ _filter_source_set(Eo *eo_obj, void *_pd, va_list *list)
if (!o->cur.filter.sources)
{
if (!source) return;
o->cur.filter.sources = eina_hash_string_small_new
(EINA_FREE_CB(_filter_source_hash_free_cb));
}

View File

@ -662,9 +662,10 @@ evas_object_textgrid_render(Evas_Object *eo_obj,
else c = eina_array_data_get(palette, cells->fg);
if ((c) && (c->a > 0))
{
evas_object_textgrid_row_text_append(row, eo_obj, o, xp,
cells->codepoint,
c->r, c->g, c->b, c->a);
if (cells->codepoint > 0)
evas_object_textgrid_row_text_append(row, eo_obj, o, xp,
cells->codepoint,
c->r, c->g, c->b, c->a);
// XXX: underlines and strikethroughs dont get
// merged into horizontal runs like bg rects above
if (cells->underline)

View File

@ -420,7 +420,8 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, Evas_Object *eo_obj,
Eina_Array *render_objects,
int restack,
int *redraw_all,
Eina_Bool mapped_parent
Eina_Bool mapped_parent,
Eina_Bool src_changed
#ifdef REND_DBG
, int level
#endif
@ -446,12 +447,18 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, Evas_Object *eo_obj,
/* build active object list */
evas_object_clip_recalc(obj);
is_active = evas_object_is_active(eo_obj, obj);
if (src_changed) is_active = EINA_TRUE;
else
{
is_active = evas_object_is_active(eo_obj, obj);
src_changed = is_active;
}
obj->is_active = is_active;
RDI(level);
RD(" [--- PROCESS [%p", obj);
if (obj->name)
if (obj->name)
{
RD(":%s", obj->name);
}
@ -513,7 +520,8 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, Evas_Object *eo_obj,
render_objects,
obj->restack,
redraw_all,
EINA_TRUE
EINA_TRUE,
src_changed
#ifdef REND_DBG
, level + 1
#endif
@ -551,6 +559,9 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, Evas_Object *eo_obj,
RDI(level);
RD(" changed + smart - render ok\n");
OBJ_ARRAY_PUSH(render_objects, obj);
if (!is_active && obj->proxy->proxies) src_changed = EINA_TRUE;
obj->render_pre = EINA_TRUE;
Evas_Object_Protected_Data *obj2;
EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(eo_obj),
@ -563,7 +574,8 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, Evas_Object *eo_obj,
render_objects,
obj->restack,
redraw_all,
mapped_parent
mapped_parent,
src_changed
#ifdef REND_DBG
, level + 1
#endif
@ -633,7 +645,8 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, Evas_Object *eo_obj,
render_objects,
restack,
redraw_all,
mapped_parent
mapped_parent,
src_changed
#ifdef REND_DBG
, level + 1
#endif
@ -714,7 +727,7 @@ _evas_render_phase1_process(Evas_Public_Data *e,
{
clean_them |= _evas_render_phase1_object_process
(e, obj->object, active_objects, restack_objects, delete_objects,
render_objects, 0, redraw_all, EINA_FALSE
render_objects, 0, redraw_all, EINA_FALSE, EINA_FALSE
#ifdef REND_DBG
, 1
#endif
@ -1321,7 +1334,13 @@ evas_render_mapped(Evas_Public_Data *e, Evas_Object *eo_obj,
, level + 1
#endif
, do_async);
evas_object_change_reset(obj2->object);
/* We aren't sure this object will be rendered by
normal(not proxy) drawing after, we reset this
only in case of normal drawing. For optmizing,
push this object in an array then reset them
in the end of the rendering.*/
if (!proxy_render_data)
evas_object_change_reset(obj2->object);
}
}
else
@ -1445,7 +1464,13 @@ evas_render_mapped(Evas_Public_Data *e, Evas_Object *eo_obj,
, level + 1
#endif
, do_async);
evas_object_change_reset(obj2->object);
/* We aren't sure this object will be rendered by
normal(not proxy) drawing after, we reset this
only in case of normal drawing. For optmizing,
push this object in an array then reset them
in the end of the rendering.*/
if (!proxy_render_data)
evas_object_change_reset(obj2->object);
}
}
else

View File

@ -475,7 +475,6 @@ evas_common_font_glyph_draw(RGBA_Font_Glyph *fg,
DATA32 *dst = dst_image->image.data;
DATA32 coltab[16], col;
DATA16 mtab[16], v;
DATA8 tmp;
w = fgo->bitmap.width; h = fgo->bitmap.rows;
// skip if totally clipped out
@ -520,8 +519,7 @@ evas_common_font_glyph_draw(RGBA_Font_Glyph *fg,
{
v = (i << 4) | i;
coltab[i] = MUL_SYM(v, col);
tmp = (coltab[i] >> 24);
mtab[i] = 256 - (tmp + (tmp >> 7));
mtab[i] = 256 - (coltab[i] >> 24);
}
#ifdef BUILD_MMX
if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))

View File

@ -2735,7 +2735,9 @@ _shared_image_entry_file_data_find(Image_Entry *ie)
if (fe->server_file_id)
{
if ((fdata = _shared_file_data_get_by_id(fe->server_file_id)) != NULL)
return fdata;
if (!fdata->changed)
return fdata;
fe->server_file_id = 0;
}
// Check hash
@ -2757,6 +2759,7 @@ _shared_image_entry_file_data_find(Image_Entry *ie)
fd = &(_index.files.entries.filedata[k]);
if (!fd->id) break;
if (!fd->refcount) continue;
if (fd->changed) continue;
key = _shared_string_safe_get(fd->key);
file = _shared_string_safe_get(fd->path);
@ -3106,6 +3109,7 @@ _shared_image_entry_image_data_find(Image_Entry *ie)
continue;
}
if (fd->changed || !fd->valid) continue;
key = _shared_string_safe_get(fd->key);
file = _shared_string_safe_get(fd->path);
if (!file)

View File

@ -223,10 +223,11 @@ evas_filter_context_proxy_render_all(Evas_Filter_Context *ctx, Eo *eo_obj,
obj = eo_data_scope_get(eo_obj, EVAS_OBJ_CLASS);
if (!ctx->has_proxies) return;
if (ctx->gl_engine)
{
// FIXME: We need to call glReadPixels (yeah, no other way around...)
CRI("Proxy subrender is not supported in the GL engine (yet)");
ERR("Proxy subrender is not supported in the GL engine (yet)");
return;
}
@ -680,7 +681,8 @@ evas_filter_buffer_backing_release(Evas_Filter_Context *ctx, void *stolen_buffer
if (ctx->async)
evas_unref_queue_image_put(ctx->evas, ie);
else if (ctx->gl_engine)
ENFN->image_free(ENDT, stolen_buffer);
ctx->post_run.buffers_to_free =
eina_list_append(ctx->post_run.buffers_to_free, stolen_buffer);
else
_backing_free(ctx, ie);
@ -960,12 +962,17 @@ evas_filter_command_blur_add(Evas_Filter_Context *ctx, void *drawctx,
if (copy_back)
{
int render_op;
if (!cmd) goto fail;
if (!copybuf) goto fail;
INF("Add copy %d -> %d", copybuf->id, blur_out->id);
cmd->ENFN->context_color_set(cmd->ENDT, drawctx, 0, 0, 0, 255);
render_op = cmd->ENFN->context_render_op_get(cmd->ENDT, drawctx);
cmd->ENFN->context_render_op_set(cmd->ENDT, drawctx, EVAS_RENDER_COPY);
id = evas_filter_command_blend_add(ctx, drawctx, copybuf->id, blur_out->id, ox, oy, EVAS_FILTER_FILL_MODE_NONE);
cmd->ENFN->context_color_set(cmd->ENDT, drawctx, R, G, B, A);
cmd->ENFN->context_render_op_set(cmd->ENDT, drawctx, render_op);
if (id < 0) goto fail;
ox = oy = 0;
}
@ -1419,25 +1426,20 @@ evas_filter_target_set(Evas_Filter_Context *ctx, void *draw_context,
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ctx, EINA_FALSE);
if (!ctx->gl_engine)
{
ctx->target.bufid = evas_filter_buffer_image_new(ctx, surface);
evas_filter_command_blend_add(ctx, draw_context,
EVAS_FILTER_BUFFER_OUTPUT_ID,
ctx->target.bufid,
x, y, EVAS_FILTER_FILL_MODE_NONE);
}
else
ctx->target.bufid = evas_filter_buffer_image_new(ctx, surface);
ctx->target.x = x;
ctx->target.y = y;
ctx->target.clip_use = ENFN->context_clip_get
(ENDT, draw_context, &ctx->target.cx, &ctx->target.cy,
&ctx->target.cw, &ctx->target.ch);
if (ctx->gl_engine)
{
// Since GL has sync rendering, draw_context is safe to keep around
Evas_Filter_Buffer *target, *image;
RGBA_Image *im;
ctx->target.bufid = evas_filter_buffer_image_new(ctx, surface);
ctx->target.context = draw_context;
ctx->target.x = x;
ctx->target.y = y;
target = _filter_buffer_get(ctx, ctx->target.bufid);
target->glimage = target->backing;
target->backing = NULL;
@ -1455,32 +1457,52 @@ static Eina_Bool
_filter_target_render(Evas_Filter_Context *ctx)
{
Evas_Filter_Buffer *src, *dst;
Eina_Bool ok;
void *drawctx, *image, *surface;
int cx, cy, cw, ch;
Eina_Bool use_clip = EINA_FALSE;
/* FIXME: This is some hackish hook to send the final buffer on the screen
* Only used for OpenGL now, since evas_filter_target_set() adds a blend
* command in case of pure software rendering.
*/
if (!ctx->gl_engine) return EINA_FALSE;
EINA_SAFETY_ON_FALSE_RETURN_VAL(ctx->target.bufid, EINA_FALSE);
src = _filter_buffer_get(ctx, EVAS_FILTER_BUFFER_OUTPUT_ID);
if (!src) return EINA_FALSE;
dst = _filter_buffer_get(ctx, ctx->target.bufid);
if (!dst) return EINA_FALSE;
EINA_SAFETY_ON_NULL_RETURN_VAL(src, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(dst, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(src->glimage, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(dst->glimage, EINA_FALSE);
if (!ctx->gl_engine)
{
drawctx = ENFN->context_new(ENDT);
surface = dst->backing;
image = src->backing;
}
else
{
drawctx = ctx->target.context;
surface = dst->glimage;
image = src->glimage;
}
EINA_SAFETY_ON_NULL_RETURN_VAL(image, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(surface, EINA_FALSE);
ok = ENFN->image_draw(ENDT, ctx->target.context,
dst->glimage, src->glimage,
0, 0, src->w, src->h,
ctx->target.x, ctx->target.y, src->w, src->h,
EINA_TRUE, EINA_FALSE);
if (ctx->target.clip_use)
{
use_clip = ENFN->context_clip_get(ENDT, drawctx, &cx, &cy, &cw, &ch);
ENFN->context_clip_set(ENDT, drawctx, ctx->target.cx, ctx->target.cy,
ctx->target.cw, ctx->target.ch);
}
return ok;
ENFN->image_draw(ENDT, drawctx, surface, image,
0, 0, src->w, src->h,
ctx->target.x, ctx->target.y, src->w, src->h,
EINA_TRUE, EINA_FALSE);
if (!ctx->gl_engine)
ENFN->context_free(ENDT, drawctx);
else if (use_clip)
ENFN->context_clip_set(ENDT, drawctx, cx, cy, cw, ch);
else
ENFN->context_clip_unset(ENDT, drawctx);
return EINA_TRUE;
}
@ -1537,6 +1559,7 @@ _clip_to_target(int *sx /* OUT */, int *sy /* OUT */, int sw, int sh,
{
if (ox > 0)
{
(*sx) = 0;
(*dx) = ox;
(*cols) = sw;
if (((*dx) + (*cols)) > (dw))
@ -1544,18 +1567,21 @@ _clip_to_target(int *sx /* OUT */, int *sy /* OUT */, int sw, int sh,
}
else if (ox < 0)
{
(*dx) = 0;
(*sx) = (-ox);
(*cols) = sw - (*sx);
if ((*cols) > dw) (*cols) = dw;
}
else
{
(*dx) = 0;
(*cols) = sw;
if ((*cols) > dw) (*cols) = dw;
}
if (oy > 0)
{
(*sy) = 0;
(*dy) = oy;
(*rows) = sh;
if (((*dy) + (*rows)) > (dh))
@ -1563,12 +1589,14 @@ _clip_to_target(int *sx /* OUT */, int *sy /* OUT */, int sw, int sh,
}
else if (oy < 0)
{
(*dy) = 0;
(*sy) = (-oy);
(*rows) = sh - (*sy);
if ((*rows) > dh) (*rows) = dh;
}
else
{
(*dy) = 0;
(*rows) = sh;
if ((*rows) > dh) (*rows) = dh;
}
@ -1666,7 +1694,8 @@ static Eina_Bool
_filter_chain_run(Evas_Filter_Context *ctx)
{
Evas_Filter_Command *cmd;
Eina_Bool ok = EINA_TRUE;
Eina_Bool ok = EINA_FALSE;
void *buffer;
ctx->running = EINA_TRUE;
EINA_INLIST_FOREACH(ctx->commands, cmd)
@ -1683,6 +1712,13 @@ _filter_chain_run(Evas_Filter_Context *ctx)
end:
ctx->running = EINA_FALSE;
EINA_LIST_FREE(ctx->post_run.buffers_to_free, buffer)
{
if (ctx->gl_engine)
ENFN->image_free(ENDT, buffer);
}
return ok;
}
@ -1690,7 +1726,10 @@ static void
_filter_thread_run_cb(void *data)
{
Evas_Filter_Context *ctx = data;
// TODO: Add return value check and call error cb
_filter_chain_run(ctx);
if (ctx->post_run.cb)
ctx->post_run.cb(ctx, ctx->post_run.data);
}
@ -1715,6 +1754,7 @@ evas_filter_run(Evas_Filter_Context *ctx)
}
ret = _filter_chain_run(ctx);
if (ctx->post_run.cb)
ctx->post_run.cb(ctx, ctx->post_run.data);
return ret;

View File

@ -2348,6 +2348,7 @@ evas_filter_context_program_use(Evas_Filter_Context *ctx,
fb->proxy = pb->eo_proxy;
fb->source = pb->eo_source;
fb->source_name = eina_stringshare_ref(pb->name);
fb->ctx->has_proxies = EINA_TRUE;
}
}

View File

@ -55,6 +55,7 @@ struct _Evas_Filter_Context
/** Post-processing callback. The context can be safely destroyed here. */
Evas_Filter_Cb cb;
void *data;
Eina_List *buffers_to_free; // Some buffers should be queued for deletion
} post_run;
struct
@ -62,11 +63,14 @@ struct _Evas_Filter_Context
int bufid;
void *context;
int x, y;
int cx, cy, cw, ch; // clip
Eina_Bool clip_use : 1;
} target;
Eina_Bool async : 1;
Eina_Bool gl_engine : 1;
Eina_Bool running : 1;
Eina_Bool has_proxies : 1;
};
struct _Evas_Filter_Command

View File

@ -338,36 +338,45 @@ _ecore_evas_object_cursor_del(void *data, Evas *e, Evas_Object *obj, void *event
static void
_ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
int x, y;
DBG("Cursor Set");
if (ee->prop.cursor.object) evas_object_del(ee->prop.cursor.object);
int x, y;
Evas_Object *old;
DBG("Cursor Set");
if (obj == NULL)
{
ee->prop.cursor.object = NULL;
ee->prop.cursor.layer = 0;
ee->prop.cursor.hot.x = 0;
ee->prop.cursor.hot.y = 0;
return;
}
ee->prop.cursor.object = obj;
ee->prop.cursor.layer = layer;
ee->prop.cursor.hot.x = hot_x;
ee->prop.cursor.hot.y = hot_y;
evas_pointer_output_xy_get(ee->evas, &x, &y);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
old = ee->prop.cursor.object;
if (obj == NULL)
{
ee->prop.cursor.object = NULL;
ee->prop.cursor.layer = 0;
ee->prop.cursor.hot.x = 0;
ee->prop.cursor.hot.y = 0;
goto end;
}
ee->prop.cursor.object = obj;
ee->prop.cursor.layer = layer;
ee->prop.cursor.hot.x = hot_x;
ee->prop.cursor.hot.y = hot_y;
if (obj != old)
{
evas_pointer_output_xy_get(ee->evas, &x, &y);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
_ecore_evas_object_cursor_del, ee);
}
evas_object_move(ee->prop.cursor.object,
x - ee->prop.cursor.hot.x,
y - ee->prop.cursor.hot.y);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
end:
if ((old) && (obj != old))
{
evas_object_event_callback_del_full
(old, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
evas_object_del(old);
}
}
static int

View File

@ -425,32 +425,43 @@ static void
_ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
int x, y;
if (ee->prop.cursor.object) evas_object_del(ee->prop.cursor.object);
if (!obj)
Evas_Object *old;
old = ee->prop.cursor.object;
if (obj == NULL)
{
ee->prop.cursor.object = NULL;
ee->prop.cursor.layer = 0;
ee->prop.cursor.hot.x = 0;
ee->prop.cursor.hot.y = 0;
return;
goto end;
}
ee->prop.cursor.object = obj;
ee->prop.cursor.layer = layer;
ee->prop.cursor.hot.x = hot_x;
ee->prop.cursor.hot.y = hot_y;
evas_pointer_output_xy_get(ee->evas, &x, &y);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
if (obj != old)
{
evas_pointer_output_xy_get(ee->evas, &x, &y);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
_ecore_evas_object_cursor_del, ee);
}
evas_object_move(ee->prop.cursor.object,
x - ee->prop.cursor.hot.x,
y - ee->prop.cursor.hot.y);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
end:
if ((old) && (obj != old))
{
evas_object_event_callback_del_full
(old, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
evas_object_del(old);
}
}
static void

View File

@ -317,32 +317,43 @@ static void
_ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
int x, y;
if (ee->prop.cursor.object) evas_object_del(ee->prop.cursor.object);
if (!obj)
Evas_Object *old;
old = ee->prop.cursor.object;
if (obj == NULL)
{
ee->prop.cursor.object = NULL;
ee->prop.cursor.layer = 0;
ee->prop.cursor.hot.x = 0;
ee->prop.cursor.hot.y = 0;
return;
goto end;
}
ee->prop.cursor.object = obj;
ee->prop.cursor.layer = layer;
ee->prop.cursor.hot.x = hot_x;
ee->prop.cursor.hot.y = hot_y;
evas_pointer_output_xy_get(ee->evas, &x, &y);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
if (obj != old)
{
evas_pointer_output_xy_get(ee->evas, &x, &y);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
_ecore_evas_object_cursor_del, ee);
}
evas_object_move(ee->prop.cursor.object,
x - ee->prop.cursor.hot.x,
y - ee->prop.cursor.hot.y);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
end:
if ((old) && (obj != old))
{
evas_object_event_callback_del_full
(old, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
evas_object_del(old);
}
}
static Ecore_Evas_Engine_Func _ecore_psl1ght_engine_func =

View File

@ -357,32 +357,43 @@ static void
_ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
int x, y;
if (ee->prop.cursor.object) evas_object_del(ee->prop.cursor.object);
if (!obj)
Evas_Object *old;
old = ee->prop.cursor.object;
if (obj == NULL)
{
ee->prop.cursor.object = NULL;
ee->prop.cursor.layer = 0;
ee->prop.cursor.hot.x = 0;
ee->prop.cursor.hot.y = 0;
return;
goto end;
}
ee->prop.cursor.object = obj;
ee->prop.cursor.layer = layer;
ee->prop.cursor.hot.x = hot_x;
ee->prop.cursor.hot.y = hot_y;
evas_pointer_output_xy_get(ee->evas, &x, &y);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
if (obj != old)
{
evas_pointer_output_xy_get(ee->evas, &x, &y);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
_ecore_evas_object_cursor_del, ee);
}
evas_object_move(ee->prop.cursor.object,
x - ee->prop.cursor.hot.x,
y - ee->prop.cursor.hot.y);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
end:
if ((old) && (obj != old))
{
evas_object_event_callback_del_full
(old, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
evas_object_del(old);
}
}
static Ecore_Evas_Engine_Func _ecore_sdl_engine_func =

View File

@ -1182,37 +1182,45 @@ _ecore_evas_wl_common_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int la
{
int x, y, fx, fy;
Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
if (ee->prop.cursor.object) evas_object_del(ee->prop.cursor.object);
if (!obj)
Evas_Object *old;
old = ee->prop.cursor.object;
if (obj == NULL)
{
ee->prop.cursor.object = NULL;
ee->prop.cursor.layer = 0;
ee->prop.cursor.hot.x = 0;
ee->prop.cursor.hot.y = 0;
ecore_wl_window_cursor_default_restore(wdata->win);
return;
goto end;
}
ee->prop.cursor.object = obj;
ee->prop.cursor.layer = layer;
ee->prop.cursor.hot.x = hot_x;
ee->prop.cursor.hot.y = hot_y;
ecore_wl_window_pointer_set(wdata->win, NULL, 0, 0);
evas_pointer_output_xy_get(ee->evas, &x, &y);
if (obj != old)
{
ecore_wl_window_pointer_set(wdata->win, NULL, 0, 0);
evas_pointer_output_xy_get(ee->evas, &x, &y);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
_ecore_evas_object_cursor_del, ee);
}
evas_output_framespace_get(ee->evas, &fx, &fy, NULL, NULL);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
evas_object_move(ee->prop.cursor.object,
x - fx - ee->prop.cursor.hot.x,
y - fy - ee->prop.cursor.hot.y);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
end:
if ((old) && (obj != old))
{
evas_object_event_callback_del_full
(old, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
evas_object_del(old);
}
}
void

View File

@ -1,3 +1,4 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
@ -808,40 +809,57 @@ _ecore_evas_win32_size_step_set(Ecore_Evas *ee, int width, int height)
width, height);
}
static void
_ecore_evas_object_cursor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Ecore_Evas *ee;
ee = data;
if (ee) ee->prop.cursor.object = NULL;
}
static void
_ecore_evas_win32_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
#if 0
int x, y;
if (ee->prop.cursor.object) evas_object_del(ee->prop.cursor.object);
Evas_Object *old;
old = ee->prop.cursor.object;
if (obj == NULL)
{
ee->prop.cursor.object = NULL;
ee->prop.cursor.layer = 0;
ee->prop.cursor.hot.x = 0;
ee->prop.cursor.hot.y = 0;
ecore_win32_window_cursor_show(ee->prop.window, 1);
return;
goto end;
}
ee->prop.cursor.object = obj;
ee->prop.cursor.layer = layer;
ee->prop.cursor.hot.x = hot_x;
ee->prop.cursor.hot.y = hot_y;
ecore_win32_window_cursor_show(ee->prop.window, 0);
evas_pointer_output_xy_get(ee->evas, &x, &y);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
if (obj != old)
{
// ecore_win32_window_cursor_show(ee->prop.window, 0);
evas_pointer_output_xy_get(ee->evas, &x, &y);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
_ecore_evas_object_cursor_del, ee);
}
evas_object_move(ee->prop.cursor.object,
x - ee->prop.cursor.hot.x,
y - ee->prop.cursor.hot.y);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
#endif
end:
if ((old) && (obj != old))
{
evas_object_event_callback_del_full
(old, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
evas_object_del(old);
}
}
static void

View File

@ -712,6 +712,7 @@ _ecore_evas_x_render(Ecore_Evas *ee)
ee->in_async_render = EINA_TRUE;
rend = 1;
}
else if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
return rend;
}
@ -2894,7 +2895,7 @@ static void
_ecore_evas_x_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
int x, y;
Evas_Object* old;
Evas_Object *old;
old = ee->prop.cursor.object;
if (!obj)
@ -2912,21 +2913,28 @@ _ecore_evas_x_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int
ee->prop.cursor.hot.x = hot_x;
ee->prop.cursor.hot.y = hot_y;
ecore_x_window_cursor_show(ee->prop.window, 0);
evas_pointer_output_xy_get(ee->evas, &x, &y);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
if (obj != old)
{
ecore_x_window_cursor_show(ee->prop.window, 0);
evas_pointer_output_xy_get(ee->evas, &x, &y);
evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
_ecore_evas_object_cursor_del, ee);
}
evas_object_move(ee->prop.cursor.object,
x - ee->prop.cursor.hot.x,
y - ee->prop.cursor.hot.y);
evas_object_pass_events_set(ee->prop.cursor.object, 1);
if (evas_pointer_inside_get(ee->evas))
evas_object_show(ee->prop.cursor.object);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
end:
if (old) evas_object_del(old);
if ((old) && (obj != old))
{
evas_object_event_callback_del_full
(old, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
evas_object_del(old);
}
}
/*

View File

@ -2766,29 +2766,42 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
{
case EVAS_RENDER_BLEND: /**< default op: d = d*(1-sa) + s */
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
break;
case EVAS_RENDER_BLEND_REL: /**< d = d*(1 - sa) + s*da */
glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
break;
case EVAS_RENDER_COPY: /**< d = s */
gc->pipe[i].shader.blend = 0;
glBlendFunc(GL_ONE, GL_ONE);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
// just disable blend mode. no need to set blend func
//glBlendFunc(GL_ONE, GL_ZERO);
break;
// FIXME: fix blend funcs below!
case EVAS_RENDER_BLEND_REL: /**< d = d*(1 - sa) + s*da */
case EVAS_RENDER_COPY_REL: /**< d = s*da */
glBlendFunc(GL_DST_ALPHA, GL_ZERO);
break;
case EVAS_RENDER_ADD: /**< d = d + s */
glBlendFunc(GL_ONE, GL_ONE);
break;
case EVAS_RENDER_ADD_REL: /**< d = d + s*da */
glBlendFunc(GL_DST_ALPHA, GL_ONE);
break;
case EVAS_RENDER_SUB: /**< d = d - s */
glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
break;
case EVAS_RENDER_SUB_REL: /**< d = d - s*da */
glBlendFunc(GL_ZERO, GL_ONE_MINUS_DST_ALPHA);
break;
case EVAS_RENDER_MASK: /**< d = d*sa */
glBlendFunc(GL_ZERO, GL_SRC_ALPHA);
break;
// FIXME: fix blend funcs below!
case EVAS_RENDER_TINT: /**< d = d*s + d*(1 - sa) + s*(1 - da) */
case EVAS_RENDER_TINT_REL: /**< d = d*(1 - sa + s) */
case EVAS_RENDER_MASK: /**< d = d*sa */
case EVAS_RENDER_MUL: /**< d = d*s */
default:
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
break;
}
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
}
if (gc->pipe[i].shader.blend != gc->state.current.blend)
{

View File

@ -661,8 +661,11 @@ evas_gl_common_image_update(Evas_Engine_GL_Context *gc, Evas_GL_Image *im)
{
Image_Entry *ie;
if (!im->im) return;
ie = (Image_Entry *)(im->im);
evas_gl_common_image_alloc_ensure(im);
// alloc ensure can change im->im, so only get the local variable later.
ie = (Image_Entry *)(im->im);
/*
if ((im->cs.space == EVAS_COLORSPACE_YCBCR422P601_PL) ||
(im->cs.space == EVAS_COLORSPACE_YCBCR422P709_PL))
@ -987,7 +990,7 @@ evas_gl_common_image_draw(Evas_Engine_GL_Context *gc, Evas_GL_Image *im, int sx,
evas_gl_common_image_push(gc, im,
dx, dy, dw, dh,
sx, sy, sw, sh,
sx, sy, sw, sh,
dx, dy, dw, dh,
r, g, b, a, smooth,
yuv, yuy2, nv12);
}

View File

@ -741,6 +741,10 @@ gl_extn_veto(Render_Engine *re)
)
extn_have_y_inverted = 0;
}
if (!strstr(str, "EGL_EXT_swap_buffers_with_damage"))
{
glsym_eglSwapBuffersWithDamage = NULL;
}
}
else
{
@ -936,9 +940,8 @@ eng_setup(Evas *eo_e, void *in)
if (re->win)
{
re->win->gl_context->references++;
eng_window_free(re->win);
inc = 1;
eng_window_free(re->win);
gl_wins--;
}
re->w = e->output.w;

View File

@ -934,6 +934,11 @@ eng_image_native_set(void *data EINA_UNUSED, void *image, void *native)
if (im->references > 1)
ERR("Setting native with more than one references for im=%p", im);
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get() && evas_cache2_image_cached(im))
evas_cache2_image_close(im);
else
#endif
evas_cache_image_drop(im);
return im2;

View File

@ -180,6 +180,10 @@ evas_software_xlib_outbuf_free(Outbuf *buf)
if (buf->priv.pal)
evas_software_xlib_x_color_deallocate(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.cmap,
buf->priv.x11.xlib.vis, buf->priv.pal);
/* safe because no effect on the default colormap */
XFreeColormap (buf->priv.x11.xlib.disp, buf->priv.x11.xlib.cmap);
eina_array_flush(&buf->priv.onebuf_regions);
free(buf);
_clear_xob(0);

View File

@ -328,7 +328,7 @@ evas_swapbuf_update_region_push(Outbuf *ob, RGBA_Image *update, int x, int y, in
if (ob->rotation == 0)
{
RECTS_CLIP_TO_RECT(rect.x, rect.y, rect.w, rect.h, 0, 0, ww, hh);
dst += (bpl * rect.y) + (rect.x + bpp);
dst += (bpl * rect.y) + (rect.x * bpp);
w -= rx;
}
else if (ob->rotation == 180)

View File

@ -528,7 +528,11 @@ evas_image_load_file_head_gif2(void *loader_data,
ret = EINA_TRUE;
on_error: // jump here on any errors to clean up
#if (GIFLIB_MAJOR > 5) || ((GIFLIB_MAJOR == 5) && (GIFLIB_MINOR >= 1))
if (gif) DGifCloseFile(gif, NULL);
#else
if (gif) DGifCloseFile(gif);
#endif
if (fi.map) eina_file_map_free(f, fi.map);
return ret;
}
@ -606,7 +610,11 @@ open_file:
// start as we have nothnig to build on
if ((index > 0) && (index < loader->imgnum) && (animated->animated))
{
#if (GIFLIB_MAJOR > 5) || ((GIFLIB_MAJOR == 5) && (GIFLIB_MINOR >= 1))
if (loader->gif) DGifCloseFile(loader->gif, NULL);
#else
if (loader->gif) DGifCloseFile(loader->gif);
#endif
if ((loader->fi.map) && (loader->f))
eina_file_map_free(loader->f, loader->fi.map);
loader->gif = NULL;
@ -753,9 +761,9 @@ open_file:
DGifGetCodeNext(gif, &img);
}
}
imgnum++;
// if we found the image we wanted - get out of here
if (imgnum >= index) break;
imgnum++;
}
}
while (rec != TERMINATE_RECORD_TYPE);
@ -764,7 +772,11 @@ open_file:
loader->imgnum = imgnum;
if ((animated->frame_count <= 1) || (rec == TERMINATE_RECORD_TYPE))
{
#if (GIFLIB_MAJOR > 5) || ((GIFLIB_MAJOR == 5) && (GIFLIB_MINOR >= 1))
if (loader->gif) DGifCloseFile(loader->gif, NULL);
#else
if (loader->gif) DGifCloseFile(loader->gif);
#endif
if ((loader->fi.map) && (loader->f))
eina_file_map_free(loader->f, loader->fi.map);
loader->gif = NULL;
@ -848,7 +860,11 @@ static void
evas_image_load_file_close_gif2(void *loader_data)
{
Loader_Info *loader = loader_data;
#if (GIFLIB_MAJOR > 5) || ((GIFLIB_MAJOR == 5) && (GIFLIB_MINOR >= 1))
if (loader->gif) DGifCloseFile(loader->gif, NULL);
#else
if (loader->gif) DGifCloseFile(loader->gif);
#endif
if ((loader->fi.map) && (loader->f))
eina_file_map_free(loader->f, loader->fi.map);
free(loader);

File diff suppressed because it is too large Load Diff

View File

@ -1,128 +1,306 @@
/*
LZ4 - Fast LZ compression algorithm
Header File
Copyright (C) 2011-2012, Yann Collet.
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
You can contact the author at :
- LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html
- LZ4 source repository : http://code.google.com/p/lz4/
*/
#pragma once
#if defined (__cplusplus)
extern "C" {
#endif
//**************************************
// Compiler Options
//**************************************
#ifdef _MSC_VER // Visual Studio
# define inline __inline // Visual is not C99, but supports some kind of inline
#endif
//****************************
// Simple Functions
//****************************
int LZ4_compress (const char* source, char* dest, int isize);
int LZ4_uncompress (const char* source, char* dest, int osize);
/*
LZ4_compress() :
Compresses 'isize' bytes from 'source' into 'dest'.
Destination buffer must be already allocated,
and must be sized to handle worst cases situations (input data not compressible)
Worst case size evaluation is provided by function LZ4_compressBound()
isize : is the input size. Max supported value is ~1.9GB
return : the number of bytes written in buffer dest
LZ4_uncompress() :
osize : is the output size, therefore the original size
return : the number of bytes read in the source buffer
If the source stream is malformed, the function will stop decoding and return a negative result, indicating the byte position of the faulty instruction
This function never writes outside of provided buffers, and never modifies input buffer.
note : destination buffer must be already allocated.
its size must be a minimum of 'osize' bytes.
*/
//****************************
// Advanced Functions
//****************************
static inline int LZ4_compressBound(int isize) { return ((isize) + ((isize)/255) + 16); }
#define LZ4_COMPRESSBOUND( isize) ((isize) + ((isize)/255) + 16)
/*
LZ4_compressBound() :
Provides the maximum size that LZ4 may output in a "worst case" scenario (input data not compressible)
primarily useful for memory allocation of output buffer.
inline function is recommended for the general case,
but macro is also provided when results need to be evaluated at compile time (such as table size allocation).
isize : is the input size. Max supported value is ~1.9GB
return : maximum output size in a "worst case" scenario
note : this function is limited by "int" range (2^31-1)
*/
int LZ4_compress_limitedOutput (const char* source, char* dest, int isize, int maxOutputSize);
/*
LZ4_compress_limitedOutput() :
Compress 'isize' bytes from 'source' into an output buffer 'dest' of maximum size 'maxOutputSize'.
If it cannot achieve it, compression will stop, and result of the function will be zero.
This function never writes outside of provided output buffer.
isize : is the input size. Max supported value is ~1.9GB
maxOutputSize : is the size of the destination buffer (which must be already allocated)
return : the number of bytes written in buffer 'dest'
or 0 if the compression fails
*/
int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize);
/*
LZ4_uncompress_unknownOutputSize() :
isize : is the input size, therefore the compressed size
maxOutputSize : is the size of the destination buffer (which must be already allocated)
return : the number of bytes decoded in the destination buffer (necessarily <= maxOutputSize)
If the source stream is malformed, the function will stop decoding and return a negative result, indicating the byte position of the faulty instruction
This function never writes beyond dest + maxOutputSize, and is therefore protected against malicious data packets
note : Destination buffer must be already allocated.
This version is slightly slower than LZ4_uncompress()
*/
#if defined (__cplusplus)
}
#endif
/*
LZ4 - Fast LZ compression algorithm
Header File
Copyright (C) 2011-2014, Yann Collet.
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
You can contact the author at :
- LZ4 source repository : http://code.google.com/p/lz4/
- LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c
*/
#pragma once
#if defined (__cplusplus)
extern "C" {
#endif
/**************************************
Version
**************************************/
#define LZ4_VERSION_MAJOR 1 /* for major interface/format changes */
#define LZ4_VERSION_MINOR 2 /* for minor interface/format changes */
#define LZ4_VERSION_RELEASE 0 /* for tweaks, bug-fixes, or development */
/**************************************
Tuning parameter
**************************************/
/*
* LZ4_MEMORY_USAGE :
* Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)
* Increasing memory usage improves compression ratio
* Reduced memory usage can improve speed, due to cache effect
* Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache
*/
#define LZ4_MEMORY_USAGE 14
/**************************************
Simple Functions
**************************************/
int LZ4_compress (const char* source, char* dest, int inputSize);
int LZ4_decompress_safe (const char* source, char* dest, int compressedSize, int maxOutputSize);
/*
LZ4_compress() :
Compresses 'inputSize' bytes from 'source' into 'dest'.
Destination buffer must be already allocated,
and must be sized to handle worst cases situations (input data not compressible)
Worst case size evaluation is provided by function LZ4_compressBound()
inputSize : Max supported value is LZ4_MAX_INPUT_VALUE
return : the number of bytes written in buffer dest
or 0 if the compression fails
LZ4_decompress_safe() :
compressedSize : is obviously the source size
maxOutputSize : is the size of the destination buffer, which must be already allocated.
return : the number of bytes decoded in the destination buffer (necessarily <= maxOutputSize)
If the destination buffer is not large enough, decoding will stop and output an error code (<0).
If the source stream is detected malformed, the function will stop decoding and return a negative result.
This function is protected against buffer overflow exploits :
it never writes outside of output buffer, and never reads outside of input buffer.
Therefore, it is protected against malicious data packets.
*/
/*
Note :
Should you prefer to explicitly allocate compression-table memory using your own allocation method,
use the streaming functions provided below, simply reset the memory area between each call to LZ4_compress_continue()
*/
/**************************************
Advanced Functions
**************************************/
#define LZ4_MAX_INPUT_SIZE 0x7E000000 /* 2 113 929 216 bytes */
#define LZ4_COMPRESSBOUND(isize) ((unsigned int)(isize) > (unsigned int)LZ4_MAX_INPUT_SIZE ? 0 : (isize) + ((isize)/255) + 16)
/*
LZ4_compressBound() :
Provides the maximum size that LZ4 may output in a "worst case" scenario (input data not compressible)
primarily useful for memory allocation of output buffer.
macro is also provided when result needs to be evaluated at compilation (such as stack memory allocation).
isize : is the input size. Max supported value is LZ4_MAX_INPUT_SIZE
return : maximum output size in a "worst case" scenario
or 0, if input size is too large ( > LZ4_MAX_INPUT_SIZE)
*/
int LZ4_compressBound(int isize);
/*
LZ4_compress_limitedOutput() :
Compress 'inputSize' bytes from 'source' into an output buffer 'dest' of maximum size 'maxOutputSize'.
If it cannot achieve it, compression will stop, and result of the function will be zero.
This function never writes outside of provided output buffer.
inputSize : Max supported value is LZ4_MAX_INPUT_VALUE
maxOutputSize : is the size of the destination buffer (which must be already allocated)
return : the number of bytes written in buffer 'dest'
or 0 if the compression fails
*/
int LZ4_compress_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize);
/*
LZ4_decompress_fast() :
originalSize : is the original and therefore uncompressed size
return : the number of bytes read from the source buffer (in other words, the compressed size)
If the source stream is malformed, the function will stop decoding and return a negative result.
Destination buffer must be already allocated. Its size must be a minimum of 'originalSize' bytes.
note : This function is a bit faster than LZ4_decompress_safe()
It provides fast decompression and fully respect memory boundaries for properly formed compressed data.
It does not provide full protection against intentionnally modified data stream.
Use this function in a trusted environment (data to decode comes from a trusted source).
*/
int LZ4_decompress_fast (const char* source, char* dest, int originalSize);
/*
LZ4_decompress_safe_partial() :
This function decompress a compressed block of size 'compressedSize' at position 'source'
into output buffer 'dest' of size 'maxOutputSize'.
The function tries to stop decompressing operation as soon as 'targetOutputSize' has been reached,
reducing decompression time.
return : the number of bytes decoded in the destination buffer (necessarily <= maxOutputSize)
Note : this number can be < 'targetOutputSize' should the compressed block to decode be smaller.
Always control how many bytes were decoded.
If the source stream is detected malformed, the function will stop decoding and return a negative result.
This function never writes outside of output buffer, and never reads outside of input buffer. It is therefore protected against malicious data packets
*/
int LZ4_decompress_safe_partial (const char* source, char* dest, int compressedSize, int targetOutputSize, int maxOutputSize);
/***********************************************
Experimental Streaming Compression Functions
***********************************************/
#define LZ4_STREAMSIZE_U32 ((1 << (LZ4_MEMORY_USAGE-2)) + 8)
#define LZ4_STREAMSIZE (LZ4_STREAMSIZE_U32 * sizeof(unsigned int))
/*
* LZ4_stream_t
* information structure to track an LZ4 stream.
* important : set this structure content to zero before first use !
*/
typedef struct { unsigned int table[LZ4_STREAMSIZE_U32]; } LZ4_stream_t;
/*
* If you prefer dynamic allocation methods,
* LZ4_createStream
* provides a pointer (void*) towards an initialized LZ4_stream_t structure.
* LZ4_free just frees it.
*/
void* LZ4_createStream();
int LZ4_free (void* LZ4_stream);
/*
* LZ4_loadDict
* Use this function to load a static dictionary into LZ4_stream.
* Any previous data will be forgotten, only 'dictionary' will remain in memory.
* Loading a size of 0 is allowed (same effect as init).
* Return : 1 if OK, 0 if error
*/
int LZ4_loadDict (void* LZ4_stream, const char* dictionary, int dictSize);
/*
* LZ4_compress_continue
* Compress data block 'source', using blocks compressed before as dictionary to improve compression ratio
* Previous data blocks are assumed to still be present at their previous location.
*/
int LZ4_compress_continue (void* LZ4_stream, const char* source, char* dest, int inputSize);
/*
* LZ4_compress_limitedOutput_continue
* Same as before, but also specify a maximum target compressed size (maxOutputSize)
* If objective cannot be met, compression exits, and returns a zero.
*/
int LZ4_compress_limitedOutput_continue (void* LZ4_stream, const char* source, char* dest, int inputSize, int maxOutputSize);
/*
* LZ4_saveDict
* If previously compressed data block is not guaranteed to remain at its previous memory location
* save it into a safe place (char* safeBuffer)
* Note : you don't need to call LZ4_loadDict() afterwards,
* dictionary is immediately usable, you can therefore call again LZ4_compress_continue()
* Return : 1 if OK, 0 if error
* Note : any dictSize > 64 KB will be interpreted as 64KB.
*/
int LZ4_saveDict (void* LZ4_stream, char* safeBuffer, int dictSize);
/************************************************
Experimental Streaming Decompression Functions
************************************************/
#define LZ4_STREAMDECODESIZE_U32 4
#define LZ4_STREAMDECODESIZE (LZ4_STREAMDECODESIZE_U32 * sizeof(unsigned int))
/*
* LZ4_streamDecode_t
* information structure to track an LZ4 stream.
* important : set this structure content to zero before first use !
*/
typedef struct { unsigned int table[LZ4_STREAMDECODESIZE_U32]; } LZ4_streamDecode_t;
/*
* If you prefer dynamic allocation methods,
* LZ4_createStreamDecode()
* provides a pointer (void*) towards an initialized LZ4_streamDecode_t structure.
* LZ4_free just frees it.
*/
void* LZ4_createStreamDecode();
int LZ4_free (void* LZ4_stream); /* yes, it's the same one as for compression */
/*
*_continue() :
These decoding functions allow decompression of multiple blocks in "streaming" mode.
Previously decoded blocks must still be available at the memory position where they were decoded.
If it's not possible, save the relevant part of decoded data into a safe buffer,
and indicate where it stands using LZ4_setDictDecode()
*/
int LZ4_decompress_safe_continue (void* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxOutputSize);
int LZ4_decompress_fast_continue (void* LZ4_streamDecode, const char* source, char* dest, int originalSize);
/*
* LZ4_setDictDecode
* Use this function to instruct where to find the dictionary.
* This function can be used to specify a static dictionary,
* or to instruct where to find some previously decoded data saved into a different memory space.
* Setting a size of 0 is allowed (same effect as no dictionary).
* Return : 1 if OK, 0 if error
*/
int LZ4_setDictDecode (void* LZ4_streamDecode, const char* dictionary, int dictSize);
/*
Advanced decoding functions :
*_usingDict() :
These decoding functions work the same as
a combination of LZ4_setDictDecode() followed by LZ4_decompress_x_continue()
all together into a single function call.
It doesn't use nor update an LZ4_streamDecode_t structure.
*/
int LZ4_decompress_safe_usingDict (const char* source, char* dest, int compressedSize, int maxOutputSize, const char* dictStart, int dictSize);
int LZ4_decompress_fast_usingDict (const char* source, char* dest, int originalSize, const char* dictStart, int dictSize);
/**************************************
Obsolete Functions
**************************************/
/*
Obsolete decompression functions
These function names are deprecated and should no longer be used.
They are only provided here for compatibility with older user programs.
- LZ4_uncompress is the same as LZ4_decompress_fast
- LZ4_uncompress_unknownOutputSize is the same as LZ4_decompress_safe
*/
int LZ4_uncompress (const char* source, char* dest, int outputSize);
int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize);
/* Obsolete functions for externally allocated state; use streaming interface instead */
int LZ4_sizeofState(void);
int LZ4_compress_withState (void* state, const char* source, char* dest, int inputSize);
int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize);
/* Obsolete streaming functions; use new streaming interface whenever possible */
void* LZ4_create (const char* inputBuffer);
int LZ4_sizeofStreamState(void);
int LZ4_resetStreamState(void* state, const char* inputBuffer);
char* LZ4_slideInputBuffer (void* state);
/* Obsolete streaming decoding functions */
int LZ4_decompress_safe_withPrefix64k (const char* source, char* dest, int compressedSize, int maxOutputSize);
int LZ4_decompress_fast_withPrefix64k (const char* source, char* dest, int originalSize);
#if defined (__cplusplus)
}
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,60 +1,173 @@
/*
LZ4 HC - High Compression Mode of LZ4
Header File
Copyright (C) 2011-2012, Yann Collet.
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
You can contact the author at :
- LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html
- LZ4 source repository : http://code.google.com/p/lz4/
*/
#pragma once
#if defined (__cplusplus)
extern "C" {
#endif
int LZ4_compressHC (const char* source, char* dest, int isize);
/*
LZ4_compressHC :
return : the number of bytes in compressed buffer dest
note : destination buffer must be already allocated.
To avoid any problem, size it to handle worst cases situations (input data not compressible)
Worst case size evaluation is provided by function LZ4_compressBound() (see "lz4.h")
*/
/* Note :
Decompression functions are provided within regular LZ4 source code (see "lz4.h") (BSD license)
*/
#if defined (__cplusplus)
}
#endif
/*
LZ4 HC - High Compression Mode of LZ4
Header File
Copyright (C) 2011-2014, Yann Collet.
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
You can contact the author at :
- LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html
- LZ4 source repository : http://code.google.com/p/lz4/
*/
#pragma once
#if defined (__cplusplus)
extern "C" {
#endif
int LZ4_compressHC (const char* source, char* dest, int inputSize);
/*
LZ4_compressHC :
return : the number of bytes in compressed buffer dest
or 0 if compression fails.
note : destination buffer must be already allocated.
To avoid any problem, size it to handle worst cases situations (input data not compressible)
Worst case size evaluation is provided by function LZ4_compressBound() (see "lz4.h")
*/
int LZ4_compressHC_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize);
/*
LZ4_compress_limitedOutput() :
Compress 'inputSize' bytes from 'source' into an output buffer 'dest' of maximum size 'maxOutputSize'.
If it cannot achieve it, compression will stop, and result of the function will be zero.
This function never writes outside of provided output buffer.
inputSize : Max supported value is 1 GB
maxOutputSize : is maximum allowed size into the destination buffer (which must be already allocated)
return : the number of output bytes written in buffer 'dest'
or 0 if compression fails.
*/
int LZ4_compressHC2 (const char* source, char* dest, int inputSize, int compressionLevel);
int LZ4_compressHC2_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel);
/*
Same functions as above, but with programmable 'compressionLevel'.
Recommended values are between 4 and 9, although any value between 0 and 16 will work.
'compressionLevel'==0 means use default 'compressionLevel' value.
Values above 16 behave the same as 16.
Equivalent variants exist for all other compression functions below.
*/
/* Note :
Decompression functions are provided within LZ4 source code (see "lz4.h") (BSD license)
*/
/**************************************
Using an external allocation
**************************************/
int LZ4_sizeofStateHC(void);
int LZ4_compressHC_withStateHC (void* state, const char* source, char* dest, int inputSize);
int LZ4_compressHC_limitedOutput_withStateHC (void* state, const char* source, char* dest, int inputSize, int maxOutputSize);
int LZ4_compressHC2_withStateHC (void* state, const char* source, char* dest, int inputSize, int compressionLevel);
int LZ4_compressHC2_limitedOutput_withStateHC(void* state, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel);
/*
These functions are provided should you prefer to allocate memory for compression tables with your own allocation methods.
To know how much memory must be allocated for the compression tables, use :
int LZ4_sizeofStateHC();
Note that tables must be aligned for pointer (32 or 64 bits), otherwise compression will fail (return code 0).
The allocated memory can be provided to the compressions functions using 'void* state' parameter.
LZ4_compress_withStateHC() and LZ4_compress_limitedOutput_withStateHC() are equivalent to previously described functions.
They just use the externally allocated memory area instead of allocating their own (on stack, or on heap).
*/
/**************************************
Streaming Functions
**************************************/
/* Note : these streaming functions still follows the older model */
void* LZ4_createHC (const char* inputBuffer);
int LZ4_compressHC_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize);
int LZ4_compressHC_limitedOutput_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int maxOutputSize);
char* LZ4_slideInputBufferHC (void* LZ4HC_Data);
int LZ4_freeHC (void* LZ4HC_Data);
int LZ4_compressHC2_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int compressionLevel);
int LZ4_compressHC2_limitedOutput_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel);
/*
These functions allow the compression of dependent blocks, where each block benefits from prior 64 KB within preceding blocks.
In order to achieve this, it is necessary to start creating the LZ4HC Data Structure, thanks to the function :
void* LZ4_createHC (const char* inputBuffer);
The result of the function is the (void*) pointer on the LZ4HC Data Structure.
This pointer will be needed in all other functions.
If the pointer returned is NULL, then the allocation has failed, and compression must be aborted.
The only parameter 'const char* inputBuffer' must, obviously, point at the beginning of input buffer.
The input buffer must be already allocated, and size at least 192KB.
'inputBuffer' will also be the 'const char* source' of the first block.
All blocks are expected to lay next to each other within the input buffer, starting from 'inputBuffer'.
To compress each block, use either LZ4_compressHC_continue() or LZ4_compressHC_limitedOutput_continue().
Their behavior are identical to LZ4_compressHC() or LZ4_compressHC_limitedOutput(),
but require the LZ4HC Data Structure as their first argument, and check that each block starts right after the previous one.
If next block does not begin immediately after the previous one, the compression will fail (return 0).
When it's no longer possible to lay the next block after the previous one (not enough space left into input buffer), a call to :
char* LZ4_slideInputBufferHC(void* LZ4HC_Data);
must be performed. It will typically copy the latest 64KB of input at the beginning of input buffer.
Note that, for this function to work properly, minimum size of an input buffer must be 192KB.
==> The memory position where the next input data block must start is provided as the result of the function.
Compression can then resume, using LZ4_compressHC_continue() or LZ4_compressHC_limitedOutput_continue(), as usual.
When compression is completed, a call to LZ4_freeHC() will release the memory used by the LZ4HC Data Structure.
*/
int LZ4_sizeofStreamStateHC(void);
int LZ4_resetStreamStateHC(void* state, const char* inputBuffer);
/*
These functions achieve the same result as :
void* LZ4_createHC (const char* inputBuffer);
They are provided here to allow the user program to allocate memory using its own routines.
To know how much space must be allocated, use LZ4_sizeofStreamStateHC();
Note also that space must be aligned for pointers (32 or 64 bits).
Once space is allocated, you must initialize it using : LZ4_resetStreamStateHC(void* state, const char* inputBuffer);
void* state is a pointer to the space allocated.
It must be aligned for pointers (32 or 64 bits), and be large enough.
The parameter 'const char* inputBuffer' must, obviously, point at the beginning of input buffer.
The input buffer must be already allocated, and size at least 192KB.
'inputBuffer' will also be the 'const char* source' of the first block.
The same space can be re-used multiple times, just by initializing it each time with LZ4_resetStreamState().
return value of LZ4_resetStreamStateHC() must be 0 is OK.
Any other value means there was an error (typically, state is not aligned for pointers (32 or 64 bits)).
*/
#if defined (__cplusplus)
}
#endif

View File

@ -920,6 +920,47 @@ START_TEST(eet_test_data_type_dump_undump)
eet_shutdown();
}
END_TEST
static void
append_strbuf_string(void *data, const char *string)
{
Eina_Strbuf *strbuf = data;
eina_strbuf_append(strbuf, string);
}
START_TEST(eet_test_data_type_escape_dump_undump)
{
void *blob;
int blob_len;
int ret = 0;
const char *outputstr;
Eina_Strbuf *strbuf;
const char inputstr[] = ""
"group \"\\\\My\\\"Group\\\\\" struct {\n"
" value \"\\\\My\\\\BackSlash\\\\\" string: \"\\\\\";\n"
" value \"\\\\My\\\\DoubleQuote\\\\\" string: \"\\\"\";\n"
" value \"\\\\My\\\\NewLine\\\\\" string: \"\\n\";\n"
"}\n";
eet_init();
blob = eet_data_text_undump(inputstr, strlen(inputstr), &blob_len);
fail_if(!blob);
strbuf = eina_strbuf_new();
ret = eet_data_text_dump(blob, blob_len, append_strbuf_string, strbuf);
ck_assert_int_eq(ret, 1);
outputstr = eina_strbuf_string_get(strbuf);
fail_if(!outputstr);
ck_assert_str_eq(inputstr, outputstr);
eina_strbuf_free(strbuf);
free(blob);
eet_shutdown();
}
END_TEST
START_TEST(eet_file_simple_write)
{
const char *buffer = "Here is a string of data to save !";
@ -2724,6 +2765,7 @@ eet_suite(void)
tcase_add_test(tc, eet_test_basic_data_type_encoding_decoding);
tcase_add_test(tc, eet_test_data_type_encoding_decoding);
tcase_add_test(tc, eet_test_data_type_dump_undump);
tcase_add_test(tc, eet_test_data_type_escape_dump_undump);
tcase_add_test(tc, eet_fp);
tcase_add_test(tc, eet_test_union);
tcase_add_test(tc, eet_test_variant);

View File

@ -646,7 +646,7 @@ init_video_object(const char *module_filename, const char *filename)
edje_object_part_drag_value_set(oe, "video_volume", 0.0, 0.5);
edje_object_part_text_set(oe, "video_volume_txt", "vol 0.50");
edje_object_signal_emit(o, "video_state", "play");
edje_object_signal_emit(oe, "video_state", "play");
evas_object_show(oe);
}

View File

@ -189,6 +189,9 @@ _test_ellipsis(Evas_Object *to, const char *buf, const char *font, Evas_Font_Siz
evas_object_geometry_get(to, NULL, NULL, &w, NULL);
/* If it's gotten way too small, it means we have an issue. */
fail_if(w < 100);
w = evas_object_text_horiz_advance_get(to);
fail_if(w < 100);
}
}
@ -218,6 +221,9 @@ START_TEST(evas_text_ellipsis)
_test_ellipsis(to, buf, font, size, 0.5);
_test_ellipsis(to, buf, font, size, 1.0);
/* Ligatures */
buf = "Fffffffffffffffffffffffffffffffffff";
_test_ellipsis(to, buf, font, size, 0.0);
END_TEXT_TEST();
}
END_TEST