Damage - repairs damaged graphics
SYNOPSIS
#include <Unidraw/Graphic/damage.h>
DESCRIPTION
Damage objects store damaged areas of a graphic for subse-
quent incremental repair. Areas of a graphic are "dam-
aged" if they need to be redrawn for any reason, e.g., if
their state has been modified or if under/overlapping
graphics change their appearance. Damage objects try to
minimize the amount of redrawing needed to repair a
graphic. They are most useful when the graphic is compli-
cated enough that it would be undesirable to redraw the
entire canvas when the graphic is modified. Damage
objects do not eliminate the need for an interactor's
Redraw member function, though they could be used to
implement it.
PUBLIC OPERATIONS
Damage(Canvas* = nil, Painter* = nil, Graphic* = nil)
Create a new Damage object for a graphic on the
given canvas. The painter is used to erase damaged
areas using its ClearRect function prior to redraw-
ing them.
virtual void Incur(Graphic*)
virtual void Incur(BoxObj&)
virtual void Incur(
Coord left, Coord bottom, Coord right, Coord top
)
Notify the damage object that a rectangular area
has been damaged, either by passing the graphic
that contributed the area or the area itself.
virtual void Added(Graphic*)
Notify the damage object that the given graphic was
appended (not inserted) to the graphic but never
drawn. The damage object can thus be responsible
for drawing newly added graphics as well.
virtual void Repair()
Repair all damage incurred since the last Repair
(or since the damage object was created if this is
the first Repair).
virtual void Reset()
Reset the damage object. Any damage incurred is
lost.
virtual boolean Incurred()
Returns true if any damage has been incurred.
void SetPainter(Painter*)
void SetGraphic(Graphic*)
Canvas* GetCanvas()
Painter* GetPainter()
Graphic* GetGraphic()
Set and get attributes of the damage object.
PROTECTED OPERATIONS
int Area(BoxObj&)
A helper function that returns the area in square
pixels occupied by the given BoxObj.
virtual void DrawAreas()
virtual void DrawAdditions()
Explicitly draw the areas of incurred and added
damage, respectively.
virtual void Merge(BoxObj&)
Merge the given BoxObj into the list of incur-dam-
aged areas, coalescing it into an existing area if
the number of non-overlapping areas exceeds 2.
void FirstArea(Iterator&)
void FirstAddition(Iterator&)
void Next(Iterator&)
boolean Done(Iterator)
BoxObj* GetArea(Iterator)
Graphic* GetAddition(Iterator)
Operations for iterating over the lists of damaged
areas (represented with BoxObj objects) and added
Graphics. FirstArea and FirstAddition initialize
the iterator to point to the first item on the cor-
responding list, Next advances the iterator, and
Done returns true if the iterator points beyond the
end of the list. GetArea and GetAddition return
the BoxObj or Graphic to which the iterator points.
UList* Elem(Iterator)
A helper function for returning the UList to which
an iterator points. The _areas protected member is
a UList that stores the list of damaged areas, and
the _additions protected stores the list of added
graphics.
void DeleteArea(BoxObj*)
void DeleteAreas()
DeleteArea is a helper function for deleting the
storage associated with a damaged area, including
the area itself and the UList element. DeleteAreas
is a helper function that deletes the list of dam-
aged areas.
Canvas(3I), Graphic(3U), Iterator(3U), Painter(3I),
UList(3U), geomobjs(3U)
Man(1) output converted with
man2html