App-Chart
view release on metacpan or search on metacpan
lib/App/Chart/Gtk2/HAxis.pm view on Meta::CPAN
}
}
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
App::Chart::Gtk2::HAxis -- horizontal timebase axis display widget
=head1 SYNOPSIS
my $hscale = App::Chart::Gtk2::HAxis->new();
=head1 WIDGET HIERARCHY
C<App::Chart::Gtk2::HAxis> is a subclass of C<Gtk2::DrawingArea>.
Gtk2::Widget
Gtk2::DrawingArea
App::Chart::Gtk2::HAxis
=head1 DESCRIPTION
A C<App::Chart::Gtk2::HAxis> widget displays tick marks and dates on a
horizontal axis, for use below a C<App::Chart::Gtk2::Graph>.
=head1 PROPERTIES
=over 4
=item C<adjustment> (C<Gtk2::Adjustment>, default undef)
( run in 0.826 second using v1.01-cache-2.11-cpan-97f6503c9c8 )