Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/Graphics/Glyph/transcript.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/Graphics/Glyph/transcript.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,190 @@ +package Bio::Graphics::Glyph::transcript; +# $Id: transcript.pm,v 1.12.2.1 2003/07/05 00:32:04 lstein Exp $ + +use strict; +use Bio::Graphics::Glyph::segments; +use vars '@ISA'; +@ISA = qw( Bio::Graphics::Glyph::segments); + +sub pad_left { + my $self = shift; + my $pad = $self->SUPER::pad_left; + return $pad if $self->{level} > 0; + my $strand = $self->feature->strand; + return $pad unless defined $strand && $strand < 0; + return $self->arrow_length > $pad ? $self->arrow_length : $pad; +} + +sub pad_right { + my $self = shift; + my $pad = $self->SUPER::pad_right; + return $pad if $self->{level} > 0; + my $strand = $self->feature->strand; + return $pad unless defined($strand) && $strand > 0; + return $self->arrow_length > $pad ? $self->arrow_length : $pad; +} + +sub draw_component { + my $self = shift; + return unless $self->level > 0; + $self->SUPER::draw_component(@_); +} + +sub draw_connectors { + my $self = shift; + my $gd = shift; + my ($left,$top) = @_; + $self->SUPER::draw_connectors($gd,$left,$top); + my @parts = $self->parts; + + # H'mmm. No parts. Must be in an intron, so draw intron + # spanning entire range + if (!@parts) { + my($x1,$y1,$x2,$y2) = $self->bounds(0,0); + $self->_connector($gd,$left,$top,$x1,$y1,$x1,$y2,$x2,$y1,$x2,$y2); + @parts = $self; + } + + # flip argument makes this confusing + # certainly there's a simpler way to express this idea + my $strand = $self->feature->strand; + my ($first,$last) = ($parts[0],$parts[-1]); + ($first,$last) = ($last,$first) if exists $self->{flip}; + + if ($strand >= 0) { + my($x1,$y1,$x2,$y2) = $last->bounds(@_); + my $center = ($y2+$y1)/2; + $self->{flip} ? + $self->arrow($gd,$x1,$x1-$self->arrow_length,$center) + : + $self->arrow($gd,$x2,$x2+$self->arrow_length,$center); + } else { + my($x1,$y1,$x2,$y2) = $first->bounds(@_); + my $center = ($y2+$y1)/2; + $self->{flip } ? + $self->arrow($gd,$x2,$x2+$self->arrow_length,$center) + : + $self->arrow($gd,$x1,$x1 - $self->arrow_length,$center); + } +} + +sub arrow_length { + my $self = shift; + return $self->option('arrow_length') || 8; +} + +# override option() for force the "hat" type of connector +sub connector { + my $self = shift; + return $self->SUPER::connector(@_) if $self->all_callbacks; + return ($self->option('connector') || 'hat'); +} + + +1; + +__END__ + +=head1 NAME + +Bio::Graphics::Glyph::transcript - The "transcript" glyph + +=head1 SYNOPSIS + + See L<Bio::Graphics::Panel> and L<Bio::Graphics::Glyph>. + +=head1 DESCRIPTION + +This glyph is used for drawing transcripts. It is essentially a +"segments" glyph in which the connecting segments are hats. The +direction of the transcript is indicated by an arrow attached to the +end of the glyph. + +=head2 OPTIONS + +The following options are standard among all Glyphs. See +L<Bio::Graphics::Glyph> for a full explanation. + + Option Description Default + ------ ----------- ------- + + -fgcolor Foreground color black + + -outlinecolor Synonym for -fgcolor + + -bgcolor Background color turquoise + + -fillcolor Synonym for -bgcolor + + -linewidth Line width 1 + + -height Height of glyph 10 + + -font Glyph font gdSmallFont + + -connector Connector type 0 (false) + + -connector_color + Connector color black + + -label Whether to draw a label 0 (false) + + -description Whether to draw a description 0 (false) + +In addition, the alignment glyph recognizes the following +glyph-specific options: + + Option Description Default + ------ ----------- ------- + + -arrow_length Length of the directional 8 + arrow. + +=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 + +Lincoln Stein E<lt>lstein@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