File Coverage

blib/lib/App/Devel/MAT/Explorer/GTK/Resources.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             # You may distribute under the terms of either the GNU General Public License
2             # or the Artistic License (the same terms as Perl itself)
3             #
4             # (C) Paul Evans, 2016 -- leonerd@leonerd.org.uk
5              
6             package App::Devel::MAT::Explorer::GTK::Resources;
7              
8 1     1   851 use strict;
  1         4  
  1         37  
9 1     1   9 use warnings;
  1         3  
  1         65  
10              
11             our $VERSION = '0.04';
12              
13 1     1   412 use File::ShareDir qw( module_file );
  1         8352  
  1         100  
14 1     1   328 use Gtk2;
  0            
  0            
15              
16             use Exporter 'import';
17              
18             our @EXPORT_OK = qw(
19             get_icon
20             );
21             our %EXPORT_TAGS = (
22             all => [ @EXPORT_OK ],
23             );
24              
25             my %ICON_PATHS; # {$name} = $path
26              
27             BEGIN {
28             use List::Util qw( any );
29              
30             unless( any { $_->{name} eq "svg" } Gtk2::Gdk::Pixbuf->get_formats ) {
31             die <<'EOF';
32             This installation of gdk-pixbuf is unable to load SVG files, which
33             App::Devel::MAT::Explorer::GTK requires. This is most likely fixed by
34             installing librsvg2.
35              
36             EOF
37             }
38             }
39              
40             ## Tool plugin hooks
41              
42             sub Devel::MAT::UI::register_icon
43             {
44             shift;
45             my %args = @_;
46             my $name = delete $args{name};
47              
48             my $path = delete $args{svg} or die "Cannot register an icon - need an SVG path";
49              
50             -f $path or $path = module_file( "Devel::MAT::UI", $path );
51              
52             $ICON_PATHS{$name} = $path;
53             }
54              
55             my %ICONS; # {$name}{"$w*$h"} = $pixbuf
56              
57             sub get_icon
58             {
59             my ( $name, %opts ) = @_;
60              
61             my $path = $ICON_PATHS{$name} or do {
62             warn "Unregistered icon name $name";
63             undef;
64             };
65              
66             if( defined $opts{w} and defined $opts{h} ) {
67             my $w = $opts{w};
68             my $h = $opts{h};
69             return $ICONS{$name}{"$w*$h"} ||= Gtk2::Gdk::Pixbuf->new_from_file_at_size(
70             $path, $w, $h
71             );
72             }
73             else {
74             return $ICONS{$name}{default} ||= Gtk2::Gdk::Pixbuf->new_from_file(
75             $path
76             );
77             }
78             }
79              
80             foreach (qw( UNDEF SCALAR REF ARRAY HASH CODE GLOB STASH LVALUE REGEXP IO FORMAT PADLIST PADNAMES PAD INVLIST )) {
81             Devel::MAT::UI->register_icon( name => "type-$_", svg => "icons/type-$_.svg" );
82             }
83             foreach (qw( strong weak indirect inferred )) {
84             Devel::MAT::UI->register_icon( name => "strength-$_", svg => "icons/strength-$_.svg" );
85             }
86              
87             0x55AA;