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 )