File Coverage

blib/lib/Khonsu/Page.pm
Criterion Covered Total %
statement 34 40 85.0
branch 14 18 77.7
condition 1 5 20.0
subroutine 9 11 81.8
pod 0 7 0.0
total 58 81 71.6


line stmt bran cond sub pod time code
1             package Khonsu::Page;
2              
3 5     5   37 use parent 'Khonsu::Ra';
  5         14  
  5         37  
4              
5             sub attributes {
6 90     90 0 185 my $a = shift;
7             return (
8             page_size => {$a->RW, $a->REQ, $a->STR},
9             background => {$a->RW, $a->STR},
10             num => {$a->RW, $a->REQ, $a->NUM},
11             current => {$a->RW, $a->OBJ},
12 0     0   0 columns => {$a->RW, $a->NUM, default => sub { 1 }},
13 90     90   315 column => {$a->RW, $a->NUM, default => sub { 1 }},
14 90     90   290 column_y => {$a->RW, $a->NUM, default => sub {1 }},
15 90         4659 is_rotated => {$a->RW, $a->NUM},
16             header => {$a->RW, $a->OBJ},
17             footer => {$a->RW, $a->OBJ},
18             toc => {$a->RW, $a->BOOL},
19             padding => {$a->RW, $a->NUM},
20             $a->POINTS,
21             $a->BOX,
22             );
23             }
24              
25             sub add {
26 90     90 0 241 my ($self, $file, %args) = @_;
27            
28 90 50 0     495 my $page = $args{open} ? $file->pdf->openpage($args{num} || $self->num) : $file->pdf->page($args{num} || $self->num || 0);
      50        
29 90         80506 $page->mediabox($self->page_size);
30 90         15363 $self->set_points($page->get_mediabox);
31              
32 90         490 $self->current($page);
33 90 50       346 $self->rotate if $args{rotate};
34 90 50       409 if ($self->background) {
35 90         427 $self->box->add(
36             $file,
37             fill_colour => $self->background,
38             $self->get_points
39             );
40             }
41              
42 90 100       591 if ($self->header) {
43 85         514 $self->column_y($self->y($self->header->h));
44             }
45              
46 90 100       520 if ($self->padding) {
47 14         86 $self->x($self->padding);
48             }
49 90         320 return $self;
50             }
51              
52             sub rotate {
53 0     0 0 0 my ($self) = shift;
54 0         0 my ($blx, $bly, $trx, $try) = $self->current->get_mediabox;
55 0         0 $self->current->mediabox(
56             $self->x(0),
57             $self->y(0),
58             $self->w($try),
59             $self->h($trx),
60             );
61 0         0 $self->is_rotated(!$self->is_rotated);
62 0         0 return $self;
63             }
64              
65             sub render {
66 90     90 0 288 my ($self, $file) = @_;
67 90 100       459 $self->header->render($file) if $self->header;
68 90 100       700 $self->footer->render($file) if $self->footer;
69              
70             }
71              
72             sub remaining_height {
73 36     36 0 148 my ($self) = @_;
74 36 50       163 return $self->h - ($self->y + ($self->footer ? $self->footer->h : 0))
75             }
76              
77             sub width {
78 41     41 0 146 my ($self) = @_;
79 41         192 return ($self->w - ($self->padding * (2 + ($self->columns - 1)))) / $self->columns;
80             }
81              
82             sub next {
83 17     17 0 57 my ($self, $file) = @_;
84 17 100       96 if ($self->column < $self->columns) {
85 5         29 $self->column($self->column + 1);
86 5         31 $self->x($self->x + $self->width + $self->padding);
87 5         61 $self->y($self->column_y);
88             } else {
89 12         73 $self->column(1);
90 12         131 $file->add_page();
91             }
92             }
93              
94             1;