Mercurial > MadButterfly
changeset 0:5aca939dbfbe
MatButterfly is a SVG browser
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Tue, 22 Jul 2008 20:45:30 +0800 |
parents | |
children | b5c0162ccf69 |
files | orgfiles/index.muse |
diffstat | 1 files changed, 59 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orgfiles/index.muse Tue Jul 22 20:45:30 2008 +0800 @@ -0,0 +1,59 @@ +* MadButterfly +#MadButterfly +MadButterfly is a [[#SVG][SVG]] browser, HTML browser (ex, Firefox) is a HTML +respective one. MadButterfly only understand SVG, controlling from users, +and API for applications base on it. It is supposed to be a GUI framework +for applications. The host applications can interact with MadButterfly +like Javascript applications interacts with DOM objects. MadButterfly +is a GUI evnironment based on SVG technologies for desktop and mobile +device. It tries to make the work of programmers closed to client-side +Javascript ones. + +MadButterfly is a SVG browser, it can be used to implement file manager, +UI of commerical application for business, and even window manager for +X Window. We try to implement MadButterfly as a library that can be +embedded by host programs. It is alike Firefox been embedded by +host programs. + +* SVG +#SVG +SVG is "Scalable Vector Graphics". It is a standard of W3C. +MadButterfly implements [[http://www.w3.org/TR/SVGMobile12/][SVG Tiny 1.2]], a simplified version of SVG for +mobile devices. + +* Design +Most notable of SVG, except sharps, is coordination transforms. To make +MadButterfly efficiency, the execution of code should highly leverage +time locality and spartial locality. So, we should aggregate computation +of a function together. The data of container and contained elements +should also be aggregated together. + +Since the attributes of SVG objects will be chagned frequently, +unnecessarily recomputing for coordination transforms should be avoided. +A sequential number should be attached to the objects to ditinguish +dirty transformation result and recompute it when it is needed. + +** Aggregate Computation +Every update potentially invokes a function for every graphic elements. +To be efficient, calls of a function are collected into a loop to avoid +overhead of function calls. It also avoid interleaving of calls of +functions to leverage time locality of code cache. + +** Aggregate Relative Data +Changes of a container usually effect contained elements. So, it had +better to put container together with contained elements to increase +hit rate of cache. + +* Transform +If a coordination transformation transforms (x, y) to (x', y'), then +> x' = xa * x + xb * y + xc +> y' = ya * x + yb * y + yc +is equal to +> | xa xb xc | | x | +> | ya yb yc | * | y | +> | 0 0 1 | | 1 | + +A transform function of a element to canvas is production of all +transform functions of containers, it is called aggregated transform +function. The aggregated transform function of elements are +computed with [[http://en.wikipedia.org/wiki/Dynamic_programming][dynamic programming]].