Progress Bar enabled \!

master
Karchnu 2012-07-25 19:43:19 +02:00
parent 242837e1ff
commit 7ef776a887
1 changed files with 60 additions and 25 deletions

View File

@ -2,7 +2,7 @@ package MyWrapper;
use GD; use GD;
use strict; use strict;
use warnings; use warnings;
use 5.14.2; use v5.14;
use Moo; use Moo;
use MooX::Options; use MooX::Options;
@ -13,6 +13,22 @@ option distance_entre_mots => ( is => 'rw',
short => 'dem', short => 'dem',
format => 'i', default => sub { 5 } format => 'i', default => sub { 5 }
); );
option extends => ( is => 'rw',
doc => 'si la taille du message est importante, on peut agrandir le cadre à volonté',
short => 'ext'
);
option progress_bar => ( is => 'rw',
doc => 'si vous souhaitez utiliser le script pour gérer une barre de progression, il faut indiquer un pourcentage',
format => 'i', short => 'pb'
);
option debug => ( is => 'rw',
doc => 'si vous souhaitez utiliser le script pour gérer une barre de progression',
short => 'd'
);
option couleurs_dispo => ( is => 'rw',
doc => 'affiche les couleurs disponibles',
short => 'cd'
);
option output => ( is => 'rw', option output => ( is => 'rw',
doc => 'fichier généré : fichier image (ex: image.png)', doc => 'fichier généré : fichier image (ex: image.png)',
short => 'o', short => 'o',
@ -36,7 +52,7 @@ option couleur_contour => ( is => 'rw',
option couleur_interne => ( is => 'rw', option couleur_interne => ( is => 'rw',
doc => 'couleur interne', doc => 'couleur interne',
short => 'ci', short => 'ci',
format => 's', default => sub { 'blanc' } format => 's', default => sub { 'rouge' }
); );
option couleur_background => ( is => 'rw' , option couleur_background => ( is => 'rw' ,
doc => 'couleur du fond (écriture)', doc => 'couleur du fond (écriture)',
@ -51,7 +67,7 @@ option taille_x => ( is => 'rw',
option taille_y => ( is => 'rw', option taille_y => ( is => 'rw',
doc => 'taille Y', format => 'i', doc => 'taille Y', format => 'i',
short => 'y', short => 'y',
default => sub { 50 } default => sub { 30 }
); );
sub _build_colors { sub _build_colors {
{ {
@ -75,31 +91,47 @@ sub afficher_couleurs {
sub afficher_valeurs_actuelles { sub afficher_valeurs_actuelles {
my ($self) = @_; my ($self) = @_;
say "Message : " . $self->message; say "Message : " . $self->message;
say "Peut être étendu" if $self->extends;
say "Output file : " . $self->output;
say "Distance entre mots : " . $self->distance_entre_mots; say "Distance entre mots : " . $self->distance_entre_mots;
say "couleur_interne : " . $self->couleur_interne; say "couleur_interne : " . $self->couleur_interne;
say "couleur_externe : " . $self->couleur_externe; say "couleur_externe : " . $self->couleur_externe;
say "couleur_background : " . $self->couleur_background; say "couleur_background : " . $self->couleur_background;
say "taille_x : " . $self->taille_x; say "taille_x : " . $self->taille_x;
say "taille_y : " . $self->taille_y; say "taille_y : " . $self->taille_y;
say "taille_x calculée: " . $self->calcul_taille_x;
} }
sub tests { sub calcul_taille_x {
my ($self) = @_; my ($self) = @_;
my %couleurs = %{$self->couleurs}; my $taille_x = $self->taille_x;
my @mots = split / /, $self->message;
say "couleur_externe : " . $self->couleur_externe; if( $self->extends ) {
say "Cette couleur n'existe pas !" unless exists $couleurs{$self->couleur_externe}; $taille_x += length $_ for( @mots ) ;
}
return $taille_x;
} }
sub run { sub calcul_taille_y {
my $self = shift; my ($self) = @_;
#$self->afficher_couleurs ; return $self->taille_y;
#$self->afficher_valeurs_actuelles; }
sub enregistrement_image {
my ($self, $im) = @_;
# We record the image file
open (DISPLAY,"> " . $self->output ) || die;
binmode DISPLAY;
print DISPLAY $im->png;
close DISPLAY;
}
sub do_img {
my ($self) = @_;
my %couleurs = %{$self->couleurs}; my %couleurs = %{$self->couleurs};
my %couleurs_allouee; my %couleurs_allouee;
my @mots = split / /, $self->message; my @mots = split / /, $self->message;
my $x = $self->taille_x; my $x = $self->calcul_taille_x;
my $y = $self->taille_y; my $y = $self->calcul_taille_y;
my $intersection = $x - 30; my $intersection = $x -30;
my $taille_progress_bar = $self->progress_bar * ($x - 1) / 100;
# create a new image # create a new image
my $im = new GD::Image($x,$y); my $im = new GD::Image($x,$y);
@ -113,20 +145,23 @@ sub run {
# make the background transparent and interlaced # make the background transparent and interlaced
#$im->transparent($couleurs_allouee{'blanc'}); #$im->transparent($couleurs_allouee{'blanc'});
$im->interlaced('true'); $im->interlaced('true');
# Put a frame around the picture
$im->rectangle(0, 0, $x -1, $y -1, $couleurs_allouee{$self->couleur_contour}); $im->rectangle(0, 0, $x -1, $y -1, $couleurs_allouee{$self->couleur_contour});
# Put the background color
$im->filledRectangle(1, 1, $x -2, $y -2, $couleurs_allouee{$self->couleur_background}); $im->filledRectangle(1, 1, $x -2, $y -2, $couleurs_allouee{$self->couleur_background});
# We add the word cases $im->filledRectangle(2, 2, $taille_progress_bar, $y -3, $couleurs_allouee{$self->couleur_interne});
$im->filledRectangle(2, 2, $intersection - $self->distance_entre_mots, $y -3, $couleurs_allouee{$self->couleur_interne});
# make sure we are writing to a binary stream $self->enregistrement_image( $im );
binmode STDOUT; }
sub mode_debug {
# Convert the image to PNG and print it on standard output my ($self) = @_;
print $im->png; say "ENTER DEBUG MODE";
$self->afficher_valeurs_actuelles unless $self->couleurs_dispo;
$self->afficher_couleurs if $self->couleurs_dispo;
}
sub run {
my ($self) = @_;
$self->mode_debug if $self->debug;
$self->do_img unless $self->debug;
} }
1; 1;