AAC-Pvoice
view release on metacpan or search on metacpan
lib/AAC/Pvoice.pm view on Meta::CPAN
$Text::Wrap::columns = 25;
$message = wrap('','',$message)."\n";
my $width = 0;
$width = 25 if $style & wxOK;
$width = 30 if $style & wxYES_NO;
$width = 60 if $style & wxCANCEL;
my $p = Wx::Frame->new(undef, -1, 'tmp');
my $m = Wx::StaticText->new($p, -1, $message, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
$m->SetFont(Wx::Font->new( 10, # font size
wxDECORATIVE, # font family
wxNORMAL, # style
wxNORMAL, # weight
0,
'Comic Sans MS', # face name
wxFONTENCODING_SYSTEM));
my $h = $m->GetSize->GetHeight;
$p->Destroy;
my $d = AAC::Pvoice::Dialog->new(undef, -1, $caption, [$x,$y], [310,100+$h]);
my $messagectrl = Wx::StaticText->new($d->{panel},
-1,
$message,
wxDefaultPosition,
wxDefaultSize,
wxALIGN_CENTRE);
$messagectrl->SetBackgroundColour($d->{backgroundcolour});
$messagectrl->SetFont(Wx::Font->new(10, # font size
wxDECORATIVE, # font family
wxNORMAL, # style
wxNORMAL, # weight
0,
'Comic Sans MS', # face name
wxFONTENCODING_SYSTEM));
$d->Append($messagectrl,1);
my $ok = [Wx::NewId,AAC::Pvoice::Bitmap->new('',50,25,'OK', Wx::Colour->new(255, 230, 230)),sub{$d->SetReturnCode(wxOK); $d->Close()}];
my $yes = [Wx::NewId,AAC::Pvoice::Bitmap->new('',50,30,'Yes', Wx::Colour->new(255, 230, 230)),sub{$d->SetReturnCode(wxYES); $d->Close()}];
my $no = [Wx::NewId,AAC::Pvoice::Bitmap->new('',50,25,'No', Wx::Colour->new(255, 230, 230)),sub{$d->SetReturnCode(wxNO); $d->Close()}];
lib/AAC/Pvoice/Bitmap.pm view on Meta::CPAN
my $ibg = wxColor2hex($background) if (ref($background) eq 'Wx::Colour');
my $pbg = wxColor2hex($parent_background) if (ref($parent_background) eq 'Wx::Colour');
my $stat = stat($file);
my $mtime = $stat->mtime();
my $image = $cache->get("$file-$x-$y-$caption-$ibg-$blowup-$pbg-$mtime");
if (!$image)
{
my $capdc = Wx::MemoryDC->new();
my $cpt = 10;
my ($cfont, $cw, $ch) = (wxNullFont, 0, 0);
if ($caption)
{
do
{
$cfont = Wx::Font->new( $cpt, # font size
wxSWISS, # font family
wxNORMAL, # style
wxNORMAL, # weight
0,
'Comic Sans MS', # face name
wxFONTENCODING_SYSTEM);
($cw, $ch, undef, undef) = $capdc->GetTextExtent($caption, $cfont);
$cpt--;
} until ($cw<$x);
}
my $img = Wx::Image->new($x, $y-$ch);
$img->SetOption('quality', 100);
my $rc = $img->LoadFile($file, wxBITMAP_TYPE_ANY);
return wxNullBitmap if not $rc;
my ($w,$h) = ($img->GetWidth, $img->GetHeight);
if (($w > $x) || ($h > ($y-$ch)))
{
lib/AAC/Pvoice/Bitmap.pm view on Meta::CPAN
}
my $msk = Wx::Mask->new($bmp, Wx::Colour->new(255,255,255));
$bmp->SetMask($msk);
$tmpdc->DrawBitmap($bmp, int(($x - $bmp->GetWidth())/2), int(($y-$ch-$bmp->GetHeight())/2), 1);
if ($caption)
{
$tmpdc->SetTextBackground($bg);
$tmpdc->SetTextForeground(wxBLACK);
$tmpdc->SetFont($cfont);
$tmpdc->DrawText($caption, int(($x-$cw)/2),$y-$ch);
}
my $tmpfile = File::Temp::tmpnam();
$newbmp->SaveFile($tmpfile, wxBITMAP_TYPE_PNG);
local $/ = undef;
open(my $fh, "<$tmpfile");
binmode($fh);
my $image = <$fh>;
close($fh);
$cache->set("$file-$x-$y-$caption-$ibg-$blowup-$pbg-$mtime", $image);
lib/AAC/Pvoice/Bitmap.pm view on Meta::CPAN
my $background=Image::Magick->new(magick => 'svg');
$background->Set('background' => $pbg);
$background->blobtoimage($svg);
my ($textheight, $textwidth) = (0,0);
if ($caption)
{
my $pt = 20;
do {
(undef, undef, undef, undef, $textwidth, $textheight, undef) =
$background->QueryFontMetrics(text => $caption, font => 'Comic-Sans-MS', pointsize => $pt, gravity => 'South');
$pt--;
} until ($textwidth < $x) && ($textheight < $y/5);
$background->Annotate(text => $caption, font => 'Comic-Sans-MS', pointsize => $pt, gravity => 'South');
}
# Read the actual image
my $img = Image::Magick->new;
my $rc = $img->Read($file);
carp "Can't read $file: $rc" if $rc;
# wmf files have a white background color by default
# if we can't get the matte color for the image, we assume
# that white can be used as the transparent color...
lib/AAC/Pvoice/Bitmap.pm view on Meta::CPAN
$bg = $background;
}
my $br = Wx::Brush->new($bg, wxSOLID);
my $pen = Wx::Pen->new($bg, 1, wxSOLID);
$tmpdc->SetBrush($br);
$tmpdc->SetPen($pen);
$tmpdc->DrawRoundedRectangle(1,1,$x-1,$y-1, 10);
}
my $pt = 72;
my ($font, $w, $h);
do
{
$font = Wx::Font->new( $pt, # font size
wxSWISS, # font family
wxNORMAL, # style
wxNORMAL, # weight
0,
'Comic Sans MS'); # face name
($w, $h, undef, undef) = $tmpdc->GetTextExtent($caption, $font);
$pt= $pt > 24 ? $pt - 4 : $pt-1;
} until (($w<$x) && ($h<$y) || $pt < 5);
$tmpdc->SetTextForeground(wxBLACK);
$tmpdc->SetTextBackground($bg);
$tmpdc->SetFont($font);
$tmpdc->DrawText($caption, int(($x-$w)/2), int(($y-$h)/2));
return $newbmp;
}
1;
__END__
=pod
lib/AAC/Pvoice/Bitmap.pm view on Meta::CPAN
=item maxX, maxY
These are the maximum X and Y size of the resulting image. If the original
image is larger, it will be resized (maintaining the aspect ratio) to
match these values as closely as possible. If the 'blowup' parameter is
set to a true value, it will also enlarge images that are smaller than
maxX and maxY to get the largest possible image within these maximum values.
=item caption
This is an optional caption below the image. The caption's font is Comic Sans MS
and will have a pointsize that will make the caption fit within the maxX
of the image. The resulting height of the caption is subtracted from the
maxY
=item background
This is the background of the image, specified as either a constant
(i.e. wxWHITE) or as an arrayref of RGB colours (like [128,150,201] ).
=item blowup
lib/AAC/Pvoice/Panel.pm view on Meta::CPAN
}
$self->{realx} = $x;
$self->{realy} = $y;
$self->xsize($x);
$self->ysize($y);
unless ($self->{disabletitle})
{
# to be able to calculate the useable y-size, we need to add the
# title and get its height. Since we don't know what the title
# will be, we'll simple draw an empty title.
$self->TitleFont(Wx::Font->new( 18, # font size
wxDECORATIVE, # font family
wxNORMAL, # style
wxNORMAL, # weight
0,
'Comic Sans MS', # face name
wxFONTENCODING_SYSTEM)) unless $self->TitleFont;
$self->AddTitle('');
my $usableysize = $y - 2*$self->{title}->GetSize()->GetHeight();
# If we want to use a textrow, we have to subtract another 60
# pixels from the y size, since the textrow is always 60 pixels high.
$usableysize-=60 unless $self->{disabletextrow};
lib/AAC/Pvoice/Panel.pm view on Meta::CPAN
wxDefaultSize,
wxALIGN_CENTRE);
$self->TitleFont();
# Don't use 'Add' here...the title should be on top!!
$self->{tls}->Prepend($self->{title},0, wxALIGN_CENTRE, 0);
}
sub TitleFont
{
my $self = shift;
$self->{titlefont} = shift || $self->{titlefont};
return if not $self->{titlefont};
$self->{title}->SetFont($self->{titlefont}) if $self->{title};
return $self->{titlefont};
}
sub Append
{
my $self = shift;
my $row = shift;
my $unselectable = shift;
$self->{tls}->Add($row, # what to add
0, # unused
wxALIGN_CENTRE, # style
lib/AAC/Pvoice/Panel.pm view on Meta::CPAN
sub Finalize
{
my $self = shift;
my $dc = Wx::WindowDC->new($self);
$self->DrawBackground($dc);
unless ($self->{disabletextrow})
{
# Create the TextControl
my $font = Wx::Font->new( 24, # font size
wxSWISS, # font family
wxNORMAL, # style
wxNORMAL, # weight
0,
'Comic Sans MS',# face name
wxFONTENCODING_SYSTEM);
$font->SetUnderlined(1);
$self->{ta} = Wx::TextAttr->new( Wx::Colour->new(0,0,0), # textcol
Wx::Colour->new(255,255,255),# backgr.
$font); # font
my $rowsizer = Wx::GridSizer->new(1,0);
$self->{text} = Wx::TextCtrl->new( $self, # parent
-1, # id
'', # text
wxDefaultPosition,# position
[4*($self->{realx}/5),60], # size
wxTE_RICH|
wxTE_MULTILINE); # style
# set the text-attributes
$self->{text}->SetDefaultStyle($self->{ta});
lib/AAC/Pvoice/Panel.pm view on Meta::CPAN
takes a Wx::Colour (or a predefined colour constant) as a parameter.
=head2 BackgroundColour(Wx::Colour)
This gets or sets the normal backgroundcolour. It
takes a Wx::Colour (or a predefined colour constant) as a parameter.
=head2 AddTitle(title)
This method sets the title of the page and draws it on the AAC::Pvoice::Panel.
By default it uses the Comic Sans MS font at a size of 18pt. You can change
this using TitleFont.
=head2 TitleFont(Wx::Font)
This method gets or sets the Wx::Font used to write the Title.
=head2 Append(row, unselectable)
This method adds a row (AAC::Pvoice::Row or any subclass of Wx::Window) to
the panel. If this row shouldn't be selectable by the user, you should set
( run in 2.761 seconds using v1.01-cache-2.11-cpan-98e64b0badf )