… | |
… | |
816 | |
816 | |
817 | my $slider = new CFClient::UI::Slider |
817 | my $slider = new CFClient::UI::Slider |
818 | vertical => 1, |
818 | vertical => 1, |
819 | range => [0, 0, 1, 0.01], # HACK fix |
819 | range => [0, 0, 1, 0.01], # HACK fix |
820 | connect_changed => sub { |
820 | connect_changed => sub { |
821 | $self->{vp}->set_offset (0, $_[1] * ($self->{vp}{child_h} - $self->{vp}{h})); |
821 | $self->{vp}->set_offset (0, $_[1]); |
822 | }, |
822 | }, |
823 | ; |
823 | ; |
824 | |
824 | |
825 | $self = $class->SUPER::new ( |
825 | $self = $class->SUPER::new ( |
826 | vp => (new CFClient::UI::ViewPort expand => 1), |
826 | vp => (new CFClient::UI::ViewPort expand => 1), |
… | |
… | |
831 | $self->{vp}->add ($self->{scrolled}); |
831 | $self->{vp}->add ($self->{scrolled}); |
832 | $self->add ($self->{vp}); |
832 | $self->add ($self->{vp}); |
833 | $self->add ($self->{slider}); |
833 | $self->add ($self->{slider}); |
834 | |
834 | |
835 | $self |
835 | $self |
|
|
836 | } |
|
|
837 | |
|
|
838 | sub size_allocate { |
|
|
839 | my ($self, $w, $h) = @_; |
|
|
840 | |
|
|
841 | $self->SUPER::size_allocate ($w, $h); |
|
|
842 | |
|
|
843 | my $child = $self->{vp}->child; |
|
|
844 | $self->{slider}->set_range ([$self->{slider}{range}[0], 0, $child->{h}, $self->{vp}{h}, 1]); |
836 | } |
845 | } |
837 | |
846 | |
838 | #TODO# update range on size_allocate depending on child |
847 | #TODO# update range on size_allocate depending on child |
839 | # update viewport offset on scroll |
848 | # update viewport offset on scroll |
840 | |
849 | |
… | |
… | |
3088 | } |
3097 | } |
3089 | |
3098 | |
3090 | sub add { |
3099 | sub add { |
3091 | my ($self, @children) = @_; |
3100 | my ($self, @children) = @_; |
3092 | |
3101 | |
|
|
3102 | for (my @widgets = @children; my $w = pop @widgets; ) { |
|
|
3103 | push @widgets, $w->children; |
|
|
3104 | $w->{root} = $self; |
|
|
3105 | $w->{visible} = 1; |
|
|
3106 | } |
|
|
3107 | |
3093 | for my $child (@children) { |
3108 | for my $child (@children) { |
3094 | $child->{toplevel} = 1; |
3109 | $child->{toplevel} = 1; |
3095 | |
3110 | |
3096 | # integerise window positions |
3111 | # integerise window positions |
3097 | $child->{x} = int $child->{x}; |
3112 | $child->{x} = int $child->{x}; |
3098 | $child->{y} = int $child->{y}; |
3113 | $child->{y} = int $child->{y}; |
3099 | } |
3114 | } |
3100 | |
3115 | |
3101 | $self->SUPER::add (@children); |
3116 | $self->SUPER::add (@children); |
3102 | |
|
|
3103 | while (@children) { |
|
|
3104 | my $w = pop @children; |
|
|
3105 | push @children, $w->children; |
|
|
3106 | $w->{visible} = 1; |
|
|
3107 | } |
|
|
3108 | } |
3117 | } |
3109 | |
3118 | |
3110 | sub remove { |
3119 | sub remove { |
3111 | my ($self, @children) = @_; |
3120 | my ($self, @children) = @_; |
3112 | |
3121 | |