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 )