Bio::Graphics::Glyph::pentagram - The "pentagram" glyph


Bio-Graphics documentation Contained in the Bio-Graphics distribution.

Index


Code Index:

NAME

Top

Bio::Graphics::Glyph::pentagram - The "pentagram" glyph

SYNOPSIS

Top

  See L<Bio::Graphics::Panel> and L<Bio::Graphics::Glyph>.

DESCRIPTION

Top

This glyph draws a pentagram with the sharp angle pointing right or,if the 'inverted' option is set to 1, an "inverted" pentagram (with the sharp angle pointing inwards, not outwards). There may be an optional text above the glyph.

OPTIONS

In addition to the common options, the following glyph-specific options are recognized:

  Option      Description                  Default
  ------      -----------                  -------

  -size       Width and height of the       20
              glyph

  -text       Text to show                  none

  -text_pad_x Number of pixels between        0
              the left edge of the glyph
              and the start of text

  -text_pad_x Number of pixels between        3
              the pentagram
              and the text

BUGS

Top

Please report them.

SEE ALSO

Top

Bio::Graphics::Panel, Bio::Graphics::Glyph, Bio::Graphics::Glyph::arrow, Bio::Graphics::Glyph::cds, Bio::Graphics::Glyph::crossbox, Bio::Graphics::Glyph::diamond, Bio::Graphics::Glyph::dna, Bio::Graphics::Glyph::dot, Bio::Graphics::Glyph::ellipse, Bio::Graphics::Glyph::extending_arrow, Bio::Graphics::Glyph::generic, Bio::Graphics::Glyph::graded_segments, Bio::Graphics::Glyph::heterogeneous_segments, Bio::Graphics::Glyph::line, Bio::Graphics::Glyph::pinsertion, Bio::Graphics::Glyph::primers, Bio::Graphics::Glyph::rndrect, Bio::Graphics::Glyph::segments, Bio::Graphics::Glyph::ruler_arrow, Bio::Graphics::Glyph::toomany, Bio::Graphics::Glyph::transcript, Bio::Graphics::Glyph::transcript2, Bio::Graphics::Glyph::translation, Bio::Graphics::Glyph::triangle, Bio::DB::GFF, Bio::SeqI, Bio::SeqFeatureI, Bio::Das, GD

AUTHOR

Top

Vsevolod (Simon) Ilyushchenko <simonf@cshl.edu>.

Copyright (c) 2004 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.


Bio-Graphics documentation Contained in the Bio-Graphics distribution.

package Bio::Graphics::Glyph::pentagram;

use strict;
use base qw(Bio::Graphics::Glyph::generic);

sub my_description {
    return <<END;
This
END
}

sub pad_top
{
  my ($self) = @_;
  
  my $font = $self->option('labelfont') || $self->font;
  
  my $pad = $font->height;
  
  if ($self->option('text'))
  {
    $pad *= 2;
  }
  return $pad;
}

sub default_text
{
  return '';  
}

sub default_text_pad_x
{
  return 0;  
}

sub default_text_pad_y
{
  return 3;  
}

sub default_size
{
  return 20;  
}

sub draw_component {
  my $self = shift;
  my $gd = shift;
  my ($x1,$y1,$x2,$y2) = $self->calculate_boundaries(@_);
  
  my $fg = $self->fgcolor;
  my $bg = $self->bgcolor;
  
  my $size = defined $self->option('size') ? $self->option('size') : $self->default_size();

  my $poly_pkg = $self->polygon_package;
  
  my $polygon   = $poly_pkg->new();

  if ($self->option('inverted') == 1)
  {
    $polygon->addPt($x1,$y2);
    $polygon->addPt($x1+$size/2,$y2-$size/2);
    $polygon->addPt($x1,$y2-$size);
    $polygon->addPt($x1+$size, $y2-$size);
    $polygon->addPt($x1+$size, $y2);      
  }
  else
  {
    $polygon->addPt($x1,$y2);
    $polygon->addPt($x1,$y2-$size);
    $polygon->addPt($x1+$size/2,$y2-$size);
    $polygon->addPt($x1+$size, $y2-$size/2);
    $polygon->addPt($x1+$size/2, $y2);      
  }
  
  $gd->filledPolygon($polygon, $bg);
  $gd->polygon($polygon,$fg);

  my $text = defined $self->option('text') ? $self->option('text') : $self->default_text();

  if ($text)
  {
    my $text_pad_x = defined $self->option('text_pad_x') ? $self->option('text_pad_x') : $self->default_text_pad_x();
    my $text_pad_y = defined $self->option('text_pad_y') ? $self->option('text_pad_y') : $self->default_text_pad_y();
    my $font = $self->option('labelfont') || $self->font;
    $gd->string($font, $x1+$text_pad_x, $y2-$size-$text_pad_y-$font->height, $text, $fg);
    
  }
  
}


1;

__END__