GraphicBlock - interactor that displays a graphic
SYNOPSIS
#include <Unidraw/Graphic/grblock.h>
DESCRIPTION
A GraphicBlock is an interactor that displays a graphic.
GraphicBlocks are useful for interactors whose appearance
is most conveniently defined with structured graphics.
The GraphicBlock will draw its graphic in response to Draw
and Redraw calls.
The graphic can be aligned with respect to the Graph-
icBlock's canvas. The GraphicBlock positions its graphic
so that its bounding box is aligned with the canvas when
the canvas is allocated. On subsequent resizes, the por-
tion of the graphic within the canvas is aligned. With
the default alignment, for example, a graphic will be cen-
tered in the canvas initially. If the canvas is resized,
then the part of the graphic in the center of the canvas
prior to resizing will appear in the center of the canvas
after resizing.
The graphic can be scrolled and zoomed as well. Changing
either the curwidth/curheight or the width/height members
of the GraphicBlock's perspective effectively zooms the
graphic. For example, calling the Adjust member function
with a perspective whose curwidth and curheight are half
that of the GraphicBlock's canvas will enlarge the graphic
by a factor of two. Zooming can be limited to magnifica-
tions that are powers of two by specifying Binary for the
Zooming parameter.
A GraphicBlock's natural size depends on the size of the
graphic it displays and on any padding (white space sur-
rounding the graphic) specified. GraphicBlocks are
infinitely stretchable horizontally and vertically by
default.
PUBLIC OPERATIONS
GraphicBlock(
Graphic*, Coord pad = 0,
Alignment = Center, Zooming = Continuous
)
GraphicBlock(
const char*, Graphic*, Coord pad = 0,
Alignment = Center, Zooming = Continuous
)
Create a new GraphicBlock with the specified
graphic, padding, alignment, and zooming behavior.
You can also specify the GraphicBlock's instance
Update updates the GraphicBlock's perspective to
reflect any change in the values returned by Get-
GraphicBox (described below), which defines the
extremities of the scrolling area. Update should
be called after the graphic is changed.
virtual void Highlight(boolean)
When highlighted, GraphicBlock draws itself with
the foreground and background colors of its graphic
and its painter reversed. GraphicBlock uses its
output painter to fill its canvas with background
color, thus providing a background for the graphic.
Graphic* GetGraphic()
Return the graphic in the GraphicBlock, stored in
the _graphic protected member variable.
float GetMagnification()
void SetMagnification(float)
Get and set the magnification applied to the
graphic, relative to its magnification when the
GraphicBlock was created (1x).
PROTECTED OPERATIONS
void Init()
Initialize the GraphicBlock, positioning its
graphic according to the alignment specified in the
constructor. The constructor calls this operation.
Subclasses should call Init if they should replace
the displayed graphic with another.
void UpdatePerspective()
Change the GraphicBlock's perspective to reflect
the bounding box of the graphic. UpdatePerspective
encapsulates this functionality to facilitate
redefinition of the Update function in derived
classes.
void GrabScroll(Event&)
void RateScroll(Event&)
Initiate grab scrolling or rate scrolling. Once
called, GrabScroll (RateScroll) polls the current
mouse position as long as the middle (right) button
is pressed. As GrabScroll polls, it scrolls the
GraphicBlock to follow the mouse position, making
it appear as though the user is dragging the Graph-
icBlock's graphic itself. Each time RateScroll
polls the mouse, it scrolls the GraphicBlock by an
amount corresponding to the differential between
the current and initial mouse positions. This cre-
ates the illusion of a joystick interface: the fur-
ther away the mouse is from its initial position,
down, stops, and reverses direction as the user
drags the mouse back towards and past the initial
position.
virtual void GetGraphicBox(Coord&, Coord&, Coord&, Coord&)
Return the lower-left and upper-right coordinates
of the total area in which to scroll. By default,
this area is corresponds to the graphic's bounding
box.
virtual void Zoom(Perspective&)
virtual void Scroll(Perspective&)
These functions define how zooming and scrolling
are inferred from the perspective supplied to
Adjust. The default behaviors implement standard
scrolling semantics and zooming as described above.
virtual float LimitMagnification(float)
Limit the amount of magnification that can be
applied to the graphic. This function is used as a
filter to convert desired magnifications into legal
ones. By default, the argument is returned; no
limits are imposed.
SEE ALSO
Graphic(3U), Interactor(3I), Perspective(3I)
Man(1) output converted with
man2html