FIGUE
*Design *Boxes *Combinator *Formatting *Geometry *Reuse
*Selections *Paths *Concurrency *Exception *Interaction *Utility
*Resource *Drawing *Incremental *Customize *Various

Incrementality

The API cross references give an immediate access to relevant interfaces and classes.

* Value

We reify the value notion in order to manage easily chain of computations involving distances, decalages and sizes. We distinguish between immediate value who just contains an immediate value and Computed Value who knows how to update themselves. Computed value acts also as lazy evaluation and memo function as we could trust or not a previous value and differ the evaluation until we must use the result. A dependent (i.e. a computed value) can be attached to a value and be nofified when the value changes. The notification could be an eager one or not. Since, the result of the evaluation is an integer for distances/ decalages and a dimension in the case of sizes we can't provide an uniform interface to access the result.

VALUE

* Modification

To be incremental, we must minimize the refresh area and the (re)formatting cost. When updating the box structure or the selections we first compute the damaged (hear the removed/replaced elements) area while visiting the path. Next, we use the modification status to keep track of movements in the boxes after formatting. In interactive mode, before we reset the origin or the size we save the old value. As soon as the box structure is cleaned we go through the tree from the top along modified nodes. When we reach a modified node, we update the refresh zone according to the new and old values (we must draw the new location but also clear the old one).

MODIFICATION
At the time, the incremental formatting is rather simple. First, we use the format status to distinguish among dirty glyphs and new one. Next, when updating the box structure we mark touched glyph from parent to parent. Then we use particular property of combinators to avoid a whole reformat. For example, there is no need to reformat the children of an horizontal until we reach the first modified son. For a vertical we just have to reformat dirty glyph since the old ones will still have the same space. The update operations (insert glyph, remove glyph, replace glyph of the path modification visitor call the markAllBranchDirty who calls the sonModified method. Each combinator is free to implement in this method a particular behavior, i.e. mark boxes needing reformat according to its particular semantic.
REFORMAT

* Path Visiting

When updating box structure or selections in interactive mode, we use a special visitor which compute the damaged area for an optimal refresh before we lose the size or origin information. We compute the intersection of the volatile size with the visible area and consolidate the result with the current damaged area.

VISITOR INCREMENTAL

* API Cross References


*Design *Boxes *Combinator *Formatting *Geometry *Reuse
*Selections *Paths *Concurrency *Exception *Interaction *Utility
*Resource *Drawing *Incremental *Customize *Various

Comments or suggestions?
Need some help?
Copyright ©1998 INRIA
Last updated 5 October 1998 by Bruno Conductier
FIGUE