From: Bluezery <ohpowel@gmail.com>
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 21 Feb 2012 08:01:22 +0000 (08:01 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 21 Feb 2012 08:01:22 +0000 (08:01 +0000)
commit9bf7d3d8fd72a726eb8930170f9d8b6cb646a5f7
treec34b41bd14938194554badce2f33dcf797a7ec84
parent0b0f6f79093ee82c98bb4fd164842190a7bba69d
From: Bluezery <ohpowel@gmail.com>
Subject: [E-devel] [Patch][elm_map] Refactoring Elementary Map

I have done refactoring & code clean-up in elm_map.  Event if this
patch have much changes, refactoring & code clean-up jobs almost
always do.
Anyway, code is shortened and optimized I think.
 I have done following jobs in my patch.

 (1) Always change child size
 Scroller Child size is changed when integer zoom level is changed
 before. This makes bugs which mouse pointer is not correct on the map
 when map is dragging.
 Now, scroller child size is always changed when double zoom level is
changed.

(2) Evas map
Evas map is used for rotation & zooming before. But now it is used for
only rotation. evas_object_resize() can do zooming because (1) makes
child size always changed.

(3) Grid & Marker & Route, etc.
Because of (1), all coordinate calculations are all changed. So grid &
marker & route should be changed.
When I have fixed these, I have these split into small function
(create, free, update, place, etc.)
So these can be easily reused for other purpose ( I will add overlay
later.)
Also marker size is not changed and is not rotated anymore because
marker's coordinate is just rotated and evas_map is not used for
marker.

And grouping algorithm is somewhat changed. Each marker can be group
leader and if other markers (followers) are closed to leader, markers
are grouped.

Actually _marker_place() function do almost everything. (place marker,
bubble, group & make group, etc.)

Bubbles go along with parent object. (show, hide, move) and this is
created when marker & group are opened.
At now, bubble display bugs are all fixed.

As before, grid is created when elm_map_add() or tile source is
changed. And I add _grid_item_* functions for each 256x256 tile
management.  So grid_place() function can be simple now.

(4) Download idler
Before download is not a job or idler and is integrated with grid
calculation.
I have separated this into independent idler. So now, download idler
do download jobs when idler time.

(5) Zoom
I have made one zoom_do() function.  This does all zoom jobs. At now,
pinch_zoom & wheel_zoom & animated zoom do not much jobs. just call
zoom_do().

(6) Delayed jobs
As I know, evas is based on a retained mode and calculation can be do
later. So sometimes elm_map APIs can not  do the jobs correctly.
For example, elm_map_marker_list_show() or elm_map_zoom_set() can not
be used right after elm_map_add()  because window size and pan size
can be 0.   (refer map_example_02.c)
So when APIs related such calculation are called. These are deferred
and calculated later when _pan_calculate() is called.

5) Code clean-up
I have removed unused variables & functions.  and rearranged struct &
functions & declaration & static variables, etc.
Instead of "if (!wd) return; ", I changed this by macro,
"EINA_SAFETY_ON_NULL_RETURN(wd);". This is better for function
entrance check. Also ELM_NEW is used instead of calloc or malloc.

Aboves are all related each other. So it can be hard to split this
file. If these should be splitted, I'm going to freak ;D.
This patch does no harm!!!! :D.
 After this patch, I will add overlay APIs based on this patch.  I
 doubt whether I will add this before elementary 1.0 release.  :(

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@68207 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33
src/bin/test_map.c
src/examples/map_example_02.c
src/lib/elm_map.c