App-Chart
view release on metacpan or search on metacpan
lib/App/Chart/Gtk2/HAxis.pm view on Meta::CPAN
my $label_t_lo
= $label_timebase->convert_from_floor ($timebase, $t_lo) - 1;
my $label_t_hi
= $label_timebase->convert_from_ceil ($timebase, $t_hi) + 1;
if (DEBUG >= 2) { print " label $label_t_lo to $label_t_hi ",
$label_timebase->to_iso($label_t_lo), " to ",
$label_timebase->to_iso($label_t_hi), "\n"; }
my ($win_width, $win_height) = $win->get_size;
foreach my $label_t ($label_t_lo .. $label_t_hi) {
my $t = $timebase->convert_from_floor ($label_timebase, $label_t);
my $x = $value_to_pixel_proc->($t);
$win->draw_line ($gc, $x, 0, $x, $win_height);
my $str = $format_func->($label_timebase->to_ymd ($label_t));
$layout->set_text ($str);
$style->paint_layout ($win, # window
$state,
1, # use_text, for text gc instead of the fg one
$event->area,
$self, # widget
__PACKAGE__, # style detail string
$x + $label_x_offset,
$text_y,
$layout);
}
}
return Gtk2::EVENT_PROPAGATE;
}
sub _do_adj_value_changed {
my ($adj, $ref_weak_self) = @_;
my $self = $$ref_weak_self || return;
$self->queue_draw;
}
sub _do_adj_other_changed {
my ($adj, $ref_weak_self) = @_;
my $self = $$ref_weak_self || return;
_reset_scale ($self); # for new page_size
$self->queue_draw; # for new page_size
}
# 'button-press-event' class closure
sub _do_button_press_event {
my ($self, $event) = @_;
require App::Chart::Gtk2::Ex::BindingBits;
App::Chart::Gtk2::Ex::BindingBits::activate_button_event
('App__Chart__Gtk2__HAxis_keys', $event, $self);
return shift->signal_chain_from_overridden(@_);
}
sub _do_start_drag {
my ($self, $button) = @_;
if (DEBUG) { print "HAxis _do_start_drag\n"; }
my $adj = $self->{'adjustment'} || return; # only when an adj set
require Gtk2::Ex::Dragger;
my $dragger = ($self->{'dragger'} ||= Gtk2::Ex::Dragger->new
(widget => $self,
hadjustment => $adj,
cursor => 'sb-h-double-arrow',
confine => 1));
$dragger->start (Gtk2->get_current_event);
}
# 'size_request' class closure
sub _do_size_request {
my ($self, $req) = @_;
my $layout = $self->{'layout'};
my $line_height = Gtk2::Ex::Units::line_height($layout);
$req->width (0);
$req->height ($line_height
+ POSIX::ceil ($line_height * MEDIUM_TICK_LINE_FRAC)
+ POSIX::ceil ($line_height * MEDIUM_GAP_LINE_FRAC));
}
# 'style-set' class closure
sub _do_style_set {
my ($self, $prev_style) = @_;
# update as advised by gtk_widget_create_pango_layout()
$self->{'layout'}->context_changed;
_reset_scale ($self); # new font perhaps
$self->queue_resize;
$self->queue_draw;
return shift->signal_chain_from_overridden(@_);
}
# 'configure-event' class closure
sub _do_configure_event {
my ($self, $event) = @_;
$self->queue_draw;
return shift->signal_chain_from_overridden(@_);
}
# Return the width in pixels needed to draw the given $format_func string in
# $layout.
#
# This is only geared towards the month/year formats above. It goes through
# all the months Jan to Dec to see how they come out, but assumes year 2000
# is as wide as any year will be.
#
sub format_func_width {
my ($layout, $format_func) = @_;
return max (map { my $str = $format_func->(2000, $_);
$layout->set_text ($str);
my ($str_width, $str_height) = $layout->get_pixel_size;
$str_width;
} 1 .. 12);
}
1;
__END__
=for stopwords undef HAxis
=head1 NAME
( run in 1.099 second using v1.01-cache-2.11-cpan-39bf76dae61 )