package Bio::Graphics::Glyph::primers;
# package to use for drawing something that looks like
# primer pairs.
use strict;
use base qw(Bio::Graphics::Glyph::generic);
use constant HEIGHT => 8;
# override draw method
sub draw_component {
my $self = shift;
my $gd = shift;
my ($x1,$y1,$x2,$y2) = $self->calculate_boundaries(@_);
my $height = $self->option('height') || $self->option('size') || HEIGHT;
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->setThickness(2) if $height > 6;
$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);
$gd->setThickness(1);
}
unless ($trunc_right) {
$gd->setThickness(2) if $height > 6;
$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);
$gd->setThickness(1);
}
# 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<Bio::Graphics::Panel> and L<Bio::Graphics::Glyph>.
=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<Bio::Graphics::Panel>,
L<Bio::Graphics::Glyph>,
L<Bio::Graphics::Glyph::arrow>,
L<Bio::Graphics::Glyph::cds>,
L<Bio::Graphics::Glyph::crossbox>,
L<Bio::Graphics::Glyph::diamond>,
L<Bio::Graphics::Glyph::dna>,
L<Bio::Graphics::Glyph::dot>,
L<Bio::Graphics::Glyph::ellipse>,
L<Bio::Graphics::Glyph::extending_arrow>,
L<Bio::Graphics::Glyph::generic>,
L<Bio::Graphics::Glyph::graded_segments>,
L<Bio::Graphics::Glyph::heterogeneous_segments>,
L<Bio::Graphics::Glyph::line>,
L<Bio::Graphics::Glyph::pinsertion>,
L<Bio::Graphics::Glyph::primers>,
L<Bio::Graphics::Glyph::rndrect>,
L<Bio::Graphics::Glyph::segments>,
L<Bio::Graphics::Glyph::ruler_arrow>,
L<Bio::Graphics::Glyph::toomany>,
L<Bio::Graphics::Glyph::transcript>,
L<Bio::Graphics::Glyph::transcript2>,
L<Bio::Graphics::Glyph::translation>,
L<Bio::Graphics::Glyph::triangle>,
L<Bio::DB::GFF>,
L<Bio::SeqI>,
L<Bio::SeqFeatureI>,
L<Bio::Das>,
L<GD>
=head1 AUTHOR
Allen Day E<lt>day@cshl.orgE<gt>.
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