… | |
… | |
539 | return unless $self->{h} && $self->{w}; |
539 | return unless $self->{h} && $self->{w}; |
540 | |
540 | |
541 | # update screen rectangle |
541 | # update screen rectangle |
542 | local $draw_x = $draw_x + $self->{x}; |
542 | local $draw_x = $draw_x + $self->{x}; |
543 | local $draw_y = $draw_y + $self->{y}; |
543 | local $draw_y = $draw_y + $self->{y}; |
544 | local $draw_w = $draw_x + $self->{w}; |
|
|
545 | local $draw_h = $draw_y + $self->{h}; |
|
|
546 | |
544 | |
547 | # skip widgets that are entirely outside the drawing area |
545 | # skip widgets that are entirely outside the drawing area |
548 | return if ($draw_x + $self->{w} < 0) || ($draw_x >= $draw_w) |
546 | return if ($draw_x + $self->{w} < 0) || ($draw_x >= $draw_w) |
549 | || ($draw_y + $self->{h} < 0) || ($draw_y >= $draw_h); |
547 | || ($draw_y + $self->{h} < 0) || ($draw_y >= $draw_h); |
550 | |
548 | |
… | |
… | |
2575 | |
2573 | |
2576 | $self->{fontsize} = $fontsize; |
2574 | $self->{fontsize} = $fontsize; |
2577 | $self->reflow; |
2575 | $self->reflow; |
2578 | } |
2576 | } |
2579 | |
2577 | |
2580 | sub visible_children { |
2578 | sub size_request { |
2581 | my ($self) = @_; |
2579 | my ($self) = @_; |
2582 | |
2580 | |
2583 | @{$self->{children}}[0,1] |
2581 | my ($empty, $slider) = @{ $self->{children} }; |
|
|
2582 | |
|
|
2583 | local $self->{children} = [$empty, $slider]; |
|
|
2584 | $self->SUPER::size_request |
2584 | } |
2585 | } |
2585 | |
2586 | |
2586 | sub invoke_size_allocate { |
2587 | sub invoke_size_allocate { |
2587 | my ($self, $w, $h) = @_; |
2588 | my ($self, $w, $h) = @_; |
2588 | |
2589 | |
… | |
… | |
2594 | $self->{layout}->set_width ($empty->{w}); |
2595 | $self->{layout}->set_width ($empty->{w}); |
2595 | $self->{layout}->set_indent ($self->{fontsize} * $::FONTSIZE * $self->{indent}); |
2596 | $self->{layout}->set_indent ($self->{fontsize} * $::FONTSIZE * $self->{indent}); |
2596 | |
2597 | |
2597 | $self->reflow; |
2598 | $self->reflow; |
2598 | |
2599 | |
|
|
2600 | local $self->{children} = [$empty, $slider]; |
2599 | $self->SUPER::invoke_size_allocate ($w, $h) |
2601 | $self->SUPER::invoke_size_allocate ($w, $h) |
2600 | } |
2602 | } |
2601 | |
2603 | |
2602 | sub get_layout { |
2604 | sub get_layout { |
2603 | my ($self, $para) = @_; |
2605 | my ($self, $para) = @_; |
… | |
… | |
2740 | glDrawPixels $w, $h, $format, GL_UNSIGNED_BYTE, $data; |
2742 | glDrawPixels $w, $h, $format, GL_UNSIGNED_BYTE, $data; |
2741 | |
2743 | |
2742 | if (my @w = @{ $para->{widget} }) { |
2744 | if (my @w = @{ $para->{widget} }) { |
2743 | my @s = $layout->get_shapes; |
2745 | my @s = $layout->get_shapes; |
2744 | |
2746 | |
|
|
2747 | glDisable GL_BLEND; |
2745 | for (@w) { |
2748 | for (@w) { |
2746 | my ($dx, $dy) = splice @s, 0, 2, (); |
2749 | my ($dx, $dy) = splice @s, 0, 2, (); |
2747 | |
2750 | |
2748 | $_->{x} = $dx + $para->{indent}; |
2751 | $_->{x} = $dx + $para->{indent}; |
2749 | $_->{y} = $dy + $y - $y0; |
2752 | $_->{y} = $dy + $y - $y0; |
2750 | |
2753 | |
2751 | $_->draw; |
2754 | $_->draw; |
2752 | } |
2755 | } |
|
|
2756 | glEnable GL_BLEND; |
|
|
2757 | glBlendFunc GL_ONE, GL_ONE_MINUS_SRC_ALPHA; |
2753 | } |
2758 | } |
2754 | } |
2759 | } |
2755 | |
2760 | |
2756 | $y += $h; |
2761 | $y += $h; |
2757 | } |
2762 | } |