Mercurial > MadButterfly
annotate orgfiles/index.muse @ 1395:a768d74e5f49
Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
Ad center object when the bbox-x is not available.
author | wycc |
---|---|
date | Sat, 02 Apr 2011 05:36:36 +0800 |
parents | 6eecdd331fe7 |
children |
rev | line source |
---|---|
0
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
1 * MadButterfly |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
2 #MadButterfly |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
3 MadButterfly is a [[#SVG][SVG]] browser, HTML browser (ex, Firefox) is a HTML |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
4 respective one. MadButterfly only understand SVG, controlling from users, |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
5 and API for applications base on it. It is supposed to be a GUI framework |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
6 for applications. The host applications can interact with MadButterfly |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
7 like Javascript applications interacts with DOM objects. MadButterfly |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
8 is a GUI evnironment based on SVG technologies for desktop and mobile |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
9 device. It tries to make the work of programmers closed to client-side |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
10 Javascript ones. |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
11 |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
12 MadButterfly is a SVG browser, it can be used to implement file manager, |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
13 UI of commerical application for business, and even window manager for |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
14 X Window. We try to implement MadButterfly as a library that can be |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
15 embedded by host programs. It is alike Firefox been embedded by |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
16 host programs. |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
17 |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
18 * SVG |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
19 #SVG |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
20 SVG is "Scalable Vector Graphics". It is a standard of W3C. |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
21 MadButterfly implements [[http://www.w3.org/TR/SVGMobile12/][SVG Tiny 1.2]], a simplified version of SVG for |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
22 mobile devices. |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
23 |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
24 * Design |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
25 Most notable of SVG, except sharps, is coordination transforms. To make |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
26 MadButterfly efficiency, the execution of code should highly leverage |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
27 time locality and spartial locality. So, we should aggregate computation |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
28 of a function together. The data of container and contained elements |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
29 should also be aggregated together. |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
30 |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
31 Since the attributes of SVG objects will be chagned frequently, |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
32 unnecessarily recomputing for coordination transforms should be avoided. |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
33 A sequential number should be attached to the objects to ditinguish |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
34 dirty transformation result and recompute it when it is needed. |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
35 |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
36 ** Aggregate Computation |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
37 Every update potentially invokes a function for every graphic elements. |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
38 To be efficient, calls of a function are collected into a loop to avoid |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
39 overhead of function calls. It also avoid interleaving of calls of |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
40 functions to leverage time locality of code cache. |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
41 |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
42 ** Aggregate Relative Data |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
43 Changes of a container usually effect contained elements. So, it had |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
44 better to put container together with contained elements to increase |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
45 hit rate of cache. |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
46 |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
47 * Transform |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
48 If a coordination transformation transforms (x, y) to (x', y'), then |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
49 > x' = xa * x + xb * y + xc |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
50 > y' = ya * x + yb * y + yc |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
51 is equal to |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
52 > | xa xb xc | | x | |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
53 > | ya yb yc | * | y | |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
54 > | 0 0 1 | | 1 | |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
55 |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
56 A transform function of a element to canvas is production of all |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
57 transform functions of containers, it is called aggregated transform |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
58 function. The aggregated transform function of elements are |
5aca939dbfbe
MatButterfly is a SVG browser
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
59 computed with [[http://en.wikipedia.org/wiki/Dynamic_programming][dynamic programming]]. |
9 | 60 |
61 ** Use Absolute | |
62 Since we need to tranform positions, positions are transform to | |
63 absolute coordinations if they are specified relative. It is | |
64 fine when a relative position are rotated or resized. But, it | |
65 would be wrong when shifting. |