#! perl

=head1 NAME

example-refresh-hooks - example of how to use refresh hooks

=head1 DESCRIPTION

Displays a very simple digital clock in the upper right corner of the
window. Illustrates overwriting the refresh callbacks to create your own
overlays or changes.

=cut

sub on_init {
   my ($self) = @_;

   # force a refresh every second
   $self->{digital_clock_refresh} = urxvt::timer
                    ->new
                    ->start (1 + int urxvt::NOW)
                    ->interval (1)
                    ->cb (sub { $self->want_refresh });

   ()
}

# before refreshing: replace upper right with the clock display
sub on_refresh_begin {
   my ($self) = @_;

   my $time = sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2, 1, 0];
   my $xpos = $self->ncol - length $time;

   $xpos >= 0
      or return;

   $self->{digital_clock_rend} = $self->ROW_r (0, [(urxvt::DEFAULT_RSTYLE) x length $time], $xpos);
   $self->{digital_clock_text} = $self->ROW_t (0, $time, $xpos);

   ()
}

# after refreshing: restore previous screen contents
sub on_refresh_end {
   my ($self) = @_;

   exists $self->{digital_clock_text}
      or return;

   $self->ROW_r (0, delete $self->{digital_clock_rend});
   $self->ROW_t (0, delete $self->{digital_clock_text});

   ()
}


