1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#!/usr/bin/perl
use strict;
use warnings;
use Tickit;
use Tickit::Widget::ScrollBox;
use Tickit::Widget::Border;
my $border = Tickit::Widget::Border->new(
h_border => 6,
v_border => 2,
style => { bg => "green" },
)->set_child(
Tickit::Widget::ScrollBox->new(
style => { bg => "black" },
)->set_child(
ScrollableWidget->new
)
);
Tickit->new( root => $border )->run;
use Object::Pad 0.17;
class ScrollableWidget extends Tickit::Widget;
use constant CAN_SCROLL => 1;
method lines () { 1 }
method cols () { 1 }
has $_vextent; method vextent () { $_vextent }
has $_hextent; method hextent () { $_hextent }
method set_scrolling_extents
{
( $_vextent, $_hextent ) = @_;
$_vextent->set_total( 100 ) if $_vextent;
$_hextent->set_total( 50 ) if $_hextent;
}
method scrolled ( $downward, $rightward, $id )
{
$self->redraw;
}
method render_to_rb ( $rb, $rect )
{
$rb->clear;
my $vstart = $self->vextent ? $self->vextent->start : 0;
my $hstart = $self->hextent ? $self->hextent->start : 0;
$rb->text_at( 1, 1, "Render with vstart=$vstart hstart=$hstart" );
}
|