package Bio::Graphics::Glyph::anchored_arrow; # package to use for drawing an arrow use strict; use vars '@ISA'; use Bio::Graphics::Glyph::arrow; @ISA = 'Bio::Graphics::Glyph::arrow'; sub draw_label { my $self = shift; my ($gd,$left,$top,$partno,$total_parts) = @_; my $label = $self->label or return; my $label_align = $self->option('label_align'); if ($label_align && ($label_align eq 'center' || $label_align eq 'right')) { my $x = $self->left + $left; my $font = $self->option('labelfont') || $self->font; my $middle = $self->left + $left + ($self->right - $self->left) / 2; my $label_width = $font->width * length($label); if ($label_align eq 'center') { my $new_x = $middle - $label_width / 2; $x = $new_x if ($new_x > $x);; } else { my $new_x = $left + $self->right - $label_width; $x = $new_x if ($new_x > $x); } $x = $self->panel->left + 1 if $x <= $self->panel->left; #detect collision (most likely no bump when want centering label) #lay down all features on one line e.g. cyto bands return if (!$self->option('bump') && ($label_width + $x) > $self->right); $gd->string($font, $x, $self->top + $top, $label, $self->fontcolor); } else { $self->SUPER::draw_label(@_); } } sub arrowheads { my $self = shift; my ($ne,$sw,$base_e,$base_w); my ($x1,$y1,$x2,$y2) = $self->calculate_boundaries(@_); my $gstart = $x1; my $gend = $x2; my $pstart = $self->panel->left; my $pend = $self->panel->right-1; if ($gstart <= $pstart) { # off left end $sw = 1; } if ($gend >= $pend) { # off right end $ne = 1; } return ($sw,$ne,!$sw,!$ne); } sub no_trunc { !shift->option('no_arrows'); } 1; __END__ =head1 NAME Bio::Graphics::Glyph::anchored_arrow - The "anchored_arrow" glyph =head1 SYNOPSIS See L and L. =head1 DESCRIPTION This glyph draws an arrowhead which is anchored at one or both ends (has a vertical base) or has one or more arrowheads. The arrowheads indicate that the feature does not end at the edge of the picture, but continues. For example: |-----------------------------| both ends in picture <----------------------| left end off picture |----------------------------> right end off picture <------------------------------------> both ends off picture You can also set the glyph so that the end is just truncated at the end of the picture. |----------------------------- =head2 OPTIONS The following options are standard among all Glyphs. See L 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 to the standard options, this glyph recognizes the following: Option Description Default -tick draw a scale 0 (false) -rel_coords use relative coordinates 0 (false) for scale -no_arrows don't draw an arrow when 0 (false) glyph is partly offscreen The argument for B<-tick> is an integer between 0 and 2 and has the same interpretation as the B<-tick> option in Bio::Graphics::Glyph::arrow. If B<-rel_coords> is set to a true value, then the scale drawn on the glyph will be in relative (1-based) coordinates relative to the beginning of the glyph. =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