Acme-IRC-Art

 view release on metacpan or  search on metacpan

lib/Acme/IRC/Art.pm  view on Meta::CPAN

      $x[0] = $x;
      $y[0] = $y;
      $#y = 0;
  }
  $on = 0 unless defined $on;
  for (0..$#y)  {
    if ($on >= 0) {   
      $canevas[$y[$_]][$x[$_]] = "\003$color,$color \003";
    }
    else { 
      $canevas[$y[$_]][$x[$_]] = " ";
    }
  }
  $this->{canevas} = [@canevas];
}


=item text

La méthode 'text' permet d'afficher du texte à partir d'une position donnée, la syntaxe est :

 $art->text($texte,$position_x, $position_y,[$mise_en_forme],[$couleur_fond]);

plusieurs mise en forme de texte sont disponible
 
 -"b" : met le texte en gras
 -un nombre met le texte à la couleur correspondante
 -"b".un nombre met le texte en gras avec une couleur

exemple:

 $art->text("Bonjour !",2,0,"b5",2);

Celà mettra le "B" au pixel de coordonnée 2,0 , les autres lettres seront placées à la suite,
par exemple le premier "o" aura comme coordonnée 3,0. Le texte sera en rouge foncé avec du gras ("b5")
sur fond bleu.

Expérimentale :

    $art->text($text,$x,$y,\@mise_en_forme,[\@fond]);

Soyez prudent car aucun vérification n'est faite le la validité des arguments dans ce cas là


=cut


sub text  {
  my ($this, $text, $x, $y, $bolt, $fond) = @_;
  my @canevas = @{$this->{canevas}};

  $bolt = 0 unless defined $bolt;
  $fond = 0 unless defined $fond;
  #gestion d'erreur
  my $syntaxe = 'Syntaxe correcte : $deco->text($texte,$positionx,$positiony,[$mise_en_forme],[$fond])';

  croak("les arguments de \'text\' sont le texte, la position x de la première lettre,i".
	" la position x de la permière lettre, sa mise en forme, [le fond de couleur du texte]
   $syntaxe") if (@_ > 6 or @_ < 4);
  
  croak("Mise en forme : $bolt incorrecte regardez la documentation pour avoir des informations sur la mise en forme")      if (!ref $bolt and (length($bolt) > 3 or $bolt !~ /\d/ and $bolt !~ /b/) and @_ == 5);
	      
  croak("Un des arguments qui devrai être un nombre de l'est pas
   $syntaxe") if ($x !~ /\d/ or $y !~ /\d/);

  croak("la valeur de fond spécifié est trop grande")  if !ref $fond and $fond > 15;
  croak("la couleur de mise en forme est trop grande") if !ref $bolt and $bolt > 15;
  croak("Vous etes sortit du canevas définit")         if ($y > $#canevas or $x > (@{$canevas[0]}-1));

  my $a_bolt = $bolt if ref $bolt;
  my $a_fond = $fond if ref $fond;
  my @lettre = split '',$text;
  my $color;
  foreach my $position (0..$#lettre)  {
    $bolt = $a_bolt->[$position] if $a_bolt;
    $fond = $a_fond->[$position] if $a_fond;
    my $v;
    my $fond2 = $fond;
    my $pixel = \$canevas[$y][$x+$position];
    
    # on redéfinis le fond au besoin
    $this->pixel($x + $position, $y, $2) if $$pixel =~ /\003(\d|),(\d)/;
    $fond2 ||= $2;
    $v = ',' if $fond or $$pixel ne " ";
    
    # on place enfin la lettre
    $$pixel=~s/\s/\002$lettre[$position]\002/ if $bolt eq 'b';
    if (($color) = ($bolt =~ /b(\d+)/)) { #bolt with color
      ($fond2, $color, $lettre[$position]) = correction($fond2, $color, $lettre[$position]) and 
      $$pixel = "\003${color}${v}${fond2}\002$lettre[$position]\002\003";
    }
    if (($color) = ($bolt =~ /^(\d+)/)) { #only color
      ($fond2, $color, $lettre[$position]) = correction($fond2, $color, $lettre[$position]) and 
      $$pixel = "\003${color}${v}${fond2}$lettre[$position]\003";
    }
    if (!$bolt and !$fond)              { #euh
      ($fond2, $color, $lettre[$position]) = correction($fond2, $color, $lettre[$position]) and 
      $$pixel = "\003${v}${fond2}$lettre[$position]\003";
    }
    if (!$bolt and !$fond and !$fond2) { #just text
      ($fond2, $color, $lettre[$position]) = correction($fond2, $color, $lettre[$position]) and 
      $$pixel = $lettre[$position];
    }
    sub correction   {
      #sub qui corrige au besoin pour pouvoir faire aparaître les chiffres
      $_[0] = "0$_[0]" if $_[0] =~ /^\d$/ and $_[2] =~ /^\d$/;
      $_[1] = "0$_[1]" if $_[1] =~ /^\d$/ and $_[2] =~ /^\d$/;
      return @_;
    }
  }
  $this->{canevas} = [@canevas];
}


=item rectangle

La méthode rectangle permet de faire facilement des rectangles mais aussi des lignes

La syntaxe est la suivante :

 $art->rectangle($position_x1,$position_y1,$position_x2,$position_y2,$couleur,[$on]);



( run in 3.170 seconds using v1.01-cache-2.11-cpan-364913b4093 )