my $h = manage_font([ $mw, $font_family, $font_size ]);
####
# Create a font 1 point smaller than $font_size
my $h = manage_font([ $mw, $font_family, $font_size ], "-1");
####
manage_font($h, "+7") # Increase font size by 7 points
####
use strict;
use warnings;
use Tk;
use Tk::Font;
use Data::Dumper;
my $font_family = "tahoma";
my $font_size = "24";
my $mw = new MainWindow();
my $h_font = manage_font([ $mw, $font_family, $font_size ]);
my $b1 = $mw->Button(-text => "Decrease Font Size (-)", -bg => 'lightgreen');
my $b2 = $mw->Button(-text => "Increase Font Size (+)", -bg => 'lightgreen');
$b1->pack($b2);
$b1->configure(-font => $h_font->{'font'});
$b2->configure(-font => $h_font->{'font'});
$b1->configure(-command => sub { manage_font($h_font, "-1") });
$b2->configure(-command => sub { manage_font($h_font, "+1") });
my $h_font1 = manage_font([ $mw, $font_family, $font_size ], "-8");
my $h_font2 = manage_font([ $mw, $font_family, $font_size ], "-4");
my $h_font3 = manage_font([ $mw, $font_family, $font_size ], "+0");
my $h_font4 = manage_font([ $mw, $font_family, $font_size ], "+4");
my $h_font5 = manage_font([ $mw, $font_family, $font_size ], "+8");
my $l1 = $mw->Label(-text => "Tiny font", -bg => 'cyan', -relief => 'ridge');
my $l2 = $mw->Label(-text => "Small font", -bg => 'cyan', -relief => 'ridge');
my $l3 = $mw->Label(-text => "Medium font", -bg => 'cyan', -relief => 'ridge');
my $l4 = $mw->Label(-text => "Large font", -bg => 'cyan', -relief => 'ridge');
my $l5 = $mw->Label(-text => "Huge font", -bg => 'cyan', -relief => 'ridge');
$l1->pack($l2, $l3, $l4, $l5);
$l1->configure(-font => $h_font1->{'font'});
$l2->configure(-font => $h_font2->{'font'});
$l3->configure(-font => $h_font3->{'font'});
$l4->configure(-font => $h_font4->{'font'});
$l5->configure(-font => $h_font5->{'font'});
$mw->bind("" => sub { exit });
$mw->bind("" => sub { $b1->invoke });
$mw->bind("" => sub { $b2->invoke });
MainLoop;
sub manage_font {
my ($details, $modify) = @_;
my $h_font = { };
if (ref $details eq "ARRAY") {
# Create a new font
my ($w, $family, $size) = @$details;
$h_font->{'family'} = $family;
$h_font->{'size'} = $size;
$h_font->{'font'} = $w->Font(-family => $family, -size => $size);
} elsif (ref $details eq "HASH") {
# Modify the existing font
$h_font = $details;
}
if (($modify || 0) and $modify =~ /^[-+]\d+$/) {
my $new_size = $h_font->{'size'} + $modify;
if ($new_size > 0 and $new_size < 100) {
$h_font->{'font'}->configure(-size => $new_size);
$h_font->{'size'} = $new_size;
}
}
return $h_font;
}