1 | package DC::UI; |
1 | package DC::UI; |
2 | |
2 | |
3 | use utf8; |
3 | use common::sense; |
4 | use strict; |
|
|
5 | |
4 | |
6 | use List::Util (); |
5 | use List::Util (); |
7 | |
6 | |
|
|
7 | use AnyEvent (); |
8 | use Guard (); |
8 | use Guard (); |
9 | |
9 | |
10 | use DC; |
10 | use DC; |
11 | use DC::Pod; |
11 | use DC::Pod; |
12 | use DC::Texture; |
12 | use DC::Texture; |
… | |
… | |
223 | |
223 | |
224 | ############################################################################# |
224 | ############################################################################# |
225 | |
225 | |
226 | package DC::UI::Base; |
226 | package DC::UI::Base; |
227 | |
227 | |
228 | use strict; |
228 | use common::sense; |
229 | |
229 | |
230 | use DC::OpenGL; |
230 | use DC::OpenGL; |
231 | |
231 | |
232 | sub new { |
232 | sub new { |
233 | my $class = shift; |
233 | my $class = shift; |
… | |
… | |
643 | |
643 | |
644 | package DC::UI::DrawBG; |
644 | package DC::UI::DrawBG; |
645 | |
645 | |
646 | our @ISA = DC::UI::Base::; |
646 | our @ISA = DC::UI::Base::; |
647 | |
647 | |
648 | use strict; |
648 | use common::sense; |
|
|
649 | |
649 | use DC::OpenGL; |
650 | use DC::OpenGL; |
650 | |
651 | |
651 | sub new { |
652 | sub new { |
652 | my $class = shift; |
653 | my $class = shift; |
653 | |
654 | |
… | |
… | |
3054 | |
3055 | |
3055 | ############################################################################# |
3056 | ############################################################################# |
3056 | |
3057 | |
3057 | package DC::UI::Slider; |
3058 | package DC::UI::Slider; |
3058 | |
3059 | |
3059 | use strict; |
3060 | use common::sense; |
3060 | |
3061 | |
3061 | use DC::OpenGL; |
3062 | use DC::OpenGL; |
3062 | |
3063 | |
3063 | our @ISA = DC::UI::DrawBG::; |
3064 | our @ISA = DC::UI::DrawBG::; |
3064 | |
3065 | |
… | |
… | |
3150 | if ($GRAB == $self) { |
3151 | if ($GRAB == $self) { |
3151 | my ($x, $w) = $self->{vertical} ? ($y, $self->{h}) : ($x, $self->{w}); |
3152 | my ($x, $w) = $self->{vertical} ? ($y, $self->{h}) : ($x, $self->{w}); |
3152 | |
3153 | |
3153 | my (undef, $lo, $hi, $page) = @{$self->{range}}; |
3154 | my (undef, $lo, $hi, $page) = @{$self->{range}}; |
3154 | |
3155 | |
3155 | $x = ($x - $self->{click}[1]) / ($w * $self->{scale}); |
3156 | $x = ($x - $self->{click}[1]) / ($w * $self->{scale} || 1e999); |
3156 | |
3157 | |
3157 | $self->set_value ($self->{click}[0] + $x * ($hi - $page - $lo)); |
3158 | $self->set_value ($self->{click}[0] + $x * ($hi - $page - $lo)); |
3158 | } else { |
3159 | } else { |
3159 | return 0; |
3160 | return 0; |
3160 | } |
3161 | } |
… | |
… | |
3286 | indent => 0, |
3287 | indent => 0, |
3287 | #font => default_font |
3288 | #font => default_font |
3288 | @_, |
3289 | @_, |
3289 | |
3290 | |
3290 | layout => (new DC::Layout), |
3291 | layout => (new DC::Layout), |
3291 | par => [], |
|
|
3292 | max_par => 0, |
3292 | max_par => 0, |
3293 | height => 0, |
3293 | height => 0, |
3294 | children => [ |
3294 | children => [ |
3295 | (new DC::UI::Empty expand => 1), |
3295 | (new DC::UI::Empty expand => 1), |
3296 | (new DC::UI::Slider vertical => 1), |
3296 | (new DC::UI::Slider vertical => 1), |
3297 | ], |
3297 | ], |
3298 | ); |
3298 | ); |
3299 | |
3299 | |
3300 | $self->{children}[1]->connect (changed => sub { $self->update }); |
3300 | $self->{children}[1]->connect (changed => sub { $self->update }); |
|
|
3301 | |
|
|
3302 | $self->add_paragraph (@{ delete $self->{par} }) if @{ $self->{par} }; |
3301 | |
3303 | |
3302 | $self |
3304 | $self |
3303 | } |
3305 | } |
3304 | |
3306 | |
3305 | sub set_fontsize { |
3307 | sub set_fontsize { |
… | |
… | |
4292 | $self |
4294 | $self |
4293 | } |
4295 | } |
4294 | |
4296 | |
4295 | sub reorder { |
4297 | sub reorder { |
4296 | my ($self) = @_; |
4298 | my ($self) = @_; |
4297 | my $NOW = EV::time; |
4299 | my $NOW = AE::time; |
4298 | |
4300 | |
4299 | # freeze display when hovering over any label |
4301 | # freeze display when hovering over any label |
4300 | return if $DC::UI::TOOLTIP->{owner} |
4302 | return if $DC::UI::TOOLTIP->{owner} |
4301 | && grep $DC::UI::TOOLTIP->{owner} == $_->{label}, |
4303 | && grep $DC::UI::TOOLTIP->{owner} == $_->{label}, |
4302 | values %{ $self->{item} }; |
4304 | values %{ $self->{item} }; |
… | |
… | |
4401 | $ROOT->on_refresh (reorder => sub { |
4403 | $ROOT->on_refresh (reorder => sub { |
4402 | $self->reorder; |
4404 | $self->reorder; |
4403 | }); |
4405 | }); |
4404 | } |
4406 | } |
4405 | |
4407 | |
|
|
4408 | sub clr_group { |
|
|
4409 | my ($self, $group) = @_; |
|
|
4410 | |
|
|
4411 | if (delete $self->{item}{$group}) { |
|
|
4412 | $ROOT->on_refresh (reorder => sub { |
|
|
4413 | $self->reorder; |
|
|
4414 | }); |
|
|
4415 | } |
|
|
4416 | } |
|
|
4417 | |
4406 | sub reconfigure { |
4418 | sub reconfigure { |
4407 | my ($self) = @_; |
4419 | my ($self) = @_; |
4408 | |
4420 | |
4409 | delete $_->{label} |
4421 | delete $_->{label} |
4410 | for values %{ $self->{item} || {} }; |
4422 | for values %{ $self->{item} || {} }; |