Ace::Graphics::Glyph - Base class for Ace::Graphics::Glyph objects
See the Ace::Graphics::Panel manpage.
Ace::Graphics::Glyph is the base class for all glyph objects. Each glyph is a wrapper around an Ace::Sequence::Feature object, knows how to render itself on an Ace::Graphics::Panel, and has a variety of configuration variables.
End developers will not ordinarily work directly with Ace::Graphics::Glyph, but may want to subclass it for customized displays.
This section describes the class and object methods for Ace::Graphics::Glyph.
Ace::Graphics::Glyph objects are constructed automatically by an Ace::Graphics::GlyphFactory, and are not usually created by end-developer code.
A standard set of options are recognized. See OPTIONS.
Once a glyph is created, it responds to a large number of methods. In this section, these methods are grouped into related categories.
Retrieving glyph context:
Retrieving glyph options:
option($option)
color($color)
Retrieving information about the sequence:
Retrieving formatting information:
These methods are called by Ace::Graphics::Track during the layout process:
move($dx,$dy)
These methods are intended to be overridden in subclasses:
draw($gd,$left,$top)
draw_label($gd,$left,$top)
These methods are useful utility routines:
filled_box($gd,$x1,$y1,$x2,$y2)
filled_oval($gd,$x1,$y1,$x2,$y2)
The following options are standard among all Glyphs. See individual glyph pages for more options.
Option Description Default ------ ----------- -------
-fgcolor Foreground color black
-outlinecolor black Synonym for -fgcolor
-bgcolor Background color white
-fillcolor Interior color of filled turquoise images
-linewidth Width of lines drawn by 1 glyph
-height Height of glyph 10
-font Glyph font gdSmallFont
-label Whether to draw a label false
You may pass an anonymous subroutine to -label, in which case the subroutine will be invoked with the feature as its single argument. The subroutine must return a string to render as the label.
By convention, subclasses are all lower-case. Begin each subclass with a preamble like this one:
package Ace::Graphics::Glyph::crossbox;
use strict; use vars '@ISA'; @ISA = 'Ace::Graphics::Glyph';
Then override the methods you need to. Typically, just the draw()
method will need to be overridden. However, if you need additional
room in the glyph, you may override calculate_height(),
calculate_left()
and calculate_right(). Do not directly override
height(), left()
and right(), as their purpose is to cache the values
returned by their calculating cousins in order to avoid time-consuming
recalculation.
A simple draw()
method looks like this:
sub draw { my $self = shift; $self->SUPER::draw(@_); my $gd = shift;
# and draw a cross through the box my ($x1,$y1,$x2,$y2) = $self->calculate_boundaries(@_); my $fg = $self->fgcolor; $gd->line($x1,$y1,$x2,$y2,$fg); $gd->line($x1,$y2,$x2,$y1,$fg); }
This subclass draws a simple box with two lines criss-crossed through
it. We first call our inherited draw()
method to generate the filled
box and label. We then call calculate_boundaries()
to return the
coordinates of the glyph, disregarding any extra space taken by
labels. We call fgcolor()
to return the desired foreground color, and
then call $gd->line()
twice to generate the criss-cross.
For more complex draw()
methods, see Ace::Graphics::Glyph::transcript
and Ace::Graphics::Glyph::segments.
Please report them.
the Ace::Sequence manpage, the Ace::Sequence::Feature manpage, the Ace::Graphics::Panel manpage, the Ace::Graphics::Track manpage, the Ace::Graphics::Glyph::anchored_arrow manpage, the Ace::Graphics::Glyph::arrow manpage, the Ace::Graphics::Glyph::box manpage, the Ace::Graphics::Glyph::primers manpage, the Ace::Graphics::Glyph::segments manpage, the Ace::Graphics::Glyph::toomany manpage, the Ace::Graphics::Glyph::transcript manpage,
Lincoln Stein <lstein@cshl.org>.
Copyright (c) 2001 Cold Spring Harbor Laboratory
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See DISCLAIMER.txt for disclaimers of warranty.