Raw content of Bio::Graphics::Glyph::primers
package Bio::Graphics::Glyph::primers;
# package to use for drawing something that looks like
# primer pairs.
use strict;
use vars '@ISA';
@ISA = 'Bio::Graphics::Glyph::generic';
use Bio::Graphics::Glyph::generic;
use constant HEIGHT => 4;
# we do not need the default amount of room
#sub calculate_height {
# my $self = shift;
# return $self->option('label') ? HEIGHT + $self->labelheight + 2 : HEIGHT;
#}
# override draw method
sub draw {
my $self = shift;
my $gd = shift;
my ($x1,$y1,$x2,$y2) = $self->calculate_boundaries(@_);
my $fg = $self->fgcolor;
my $a2 = HEIGHT/2;
my $center = $y1 + $a2;
# just draw us as a solid line -- very simple
if ($x2-$x1 < HEIGHT*2) {
$gd->line($x1,$center,$x2,$center,$fg);
return;
}
# otherwise draw two pairs of arrows
# --> <--
my $trunc_left = $x1 < $self->panel->left;
my $trunc_right = $x2 > $self->panel->right;
unless ($trunc_left) {
$gd->line($x1,$center,$x1 + HEIGHT,$center,$fg);
$gd->line($x1 + HEIGHT,$center,$x1 + HEIGHT - $a2,$center-$a2,$fg);
$gd->line($x1 + HEIGHT,$center,$x1 + HEIGHT - $a2,$center+$a2,$fg);
}
unless ($trunc_right) {
$gd->line($x2,$center,$x2 - HEIGHT,$center,$fg);
$gd->line($x2 - HEIGHT,$center,$x2 - HEIGHT + $a2,$center+$a2,$fg);
$gd->line($x2 - HEIGHT,$center,$x2 - HEIGHT + $a2,$center-$a2,$fg);
}
# connect the dots if requested
if ($self->connect) {
my $c = $self->color('connect_color') || $self->bgcolor;
$gd->line($x1 + ($trunc_left ? 0 : HEIGHT + 2),$center,
$x2 - ($trunc_right ? 0 : HEIGHT + 2),$center,
$c);
}
# add a label if requested
$self->draw_label($gd,@_) if $self->option('label');
$self->draw_description($gd,@_) if $self->option('description');
}
sub connect {
my $self = shift;
return $self->option('connect') if defined $self->option('connect');
1; # default
}
1;
__END__
=head1 NAME
Bio::Graphics::Glyph::primers - The "STS primers" glyph
=head1 SYNOPSIS
See L and L.
=head1 DESCRIPTION
This glyph draws two arrows oriented towards each other and connected
by a line of a contrasting color. The length of the arrows is
immaterial, but the length of the glyph itself corresponds to the
length of the scaled feature.
=head2 OPTIONS
In addition to the common options, the following glyph-specific
options are recognized:
Option Description Default
------ ----------- -------
-connect Whether to connect the true
two arrowheads by a line.
-connect_color The color to use for the bgcolor
connecting line.
=head1 BUGS
Please report them.
=head1 SEE ALSO
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L
=head1 AUTHOR
Allen Day Eday@cshl.orgE.
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.
=cut