… | |
… | |
3070 | sub set_value { |
3070 | sub set_value { |
3071 | my ($self, $value) = @_; |
3071 | my ($self, $value) = @_; |
3072 | |
3072 | |
3073 | my ($old_value, $lo, $hi, $page, $unit) = @{$self->{range}}; |
3073 | my ($old_value, $lo, $hi, $page, $unit) = @{$self->{range}}; |
3074 | |
3074 | |
3075 | $hi = $lo + 1 if $hi <= $lo; |
3075 | $hi = $lo if $hi < $lo; |
3076 | |
3076 | |
3077 | $page = $hi - $lo if $page > $hi - $lo; |
3077 | $value = $hi - $page if $value > $hi - $page; |
3078 | |
|
|
3079 | $value = $lo if $value < $lo; |
3078 | $value = $lo if $value < $lo; |
3080 | $value = $hi - $page if $value > $hi - $page; |
|
|
3081 | |
3079 | |
3082 | $value = $lo + $unit * int +($value - $lo + $unit * 0.5) / $unit |
3080 | $value = $lo + $unit * int +($value - $lo + $unit * 0.5) / $unit |
3083 | if $unit; |
3081 | if $unit; |
3084 | |
3082 | |
3085 | @{$self->{range}} = ($value, $lo, $hi, $page, $unit); |
3083 | @{$self->{range}} = ($value, $lo, $hi, $page, $unit); |
… | |
… | |
3149 | my ($self) = @_; |
3147 | my ($self) = @_; |
3150 | |
3148 | |
3151 | unless ($self->{knob_w}) { |
3149 | unless ($self->{knob_w}) { |
3152 | $self->set_value ($self->{range}[0]); |
3150 | $self->set_value ($self->{range}[0]); |
3153 | |
3151 | |
3154 | my ($value, $lo, $hi, $page) = @{$self->{range}}; |
3152 | my ($value, $lo, $hi, $page, $unit) = @{$self->{range}}; |
3155 | my $range = ($hi - $page - $lo) || 1e-100; |
3153 | my $range = ($hi - $page - $lo) || 1e-10; |
3156 | |
3154 | |
3157 | my $knob_w = List::Util::min 1, $page / ($hi - $lo) || 0.1; |
3155 | my $knob_w = List::Util::min 1, $page / (($hi - $lo) || 1e-10) || 24 / $self->{w}; |
3158 | |
3156 | |
3159 | $self->{offset} = List::Util::max $self->{inner_pad}, $knob_w * 0.5; |
3157 | $self->{offset} = List::Util::max $self->{inner_pad}, $knob_w * 0.5; |
3160 | $self->{scale} = 1 - 2 * $self->{offset} || 1e-100; |
3158 | $self->{scale} = 1 - 2 * $self->{offset} || 1e-100; |
3161 | |
3159 | |
3162 | $value = ($value - $lo) / $range; |
3160 | $value = ($value - $lo) / $range; |
… | |
… | |
3858 | $widget = new DC::UI::HBox |
3856 | $widget = new DC::UI::HBox |
3859 | can_hover => 1, |
3857 | can_hover => 1, |
3860 | can_events => 1, |
3858 | can_events => 1, |
3861 | tooltip => $tooltip, |
3859 | tooltip => $tooltip, |
3862 | children => [ |
3860 | children => [ |
3863 | (new DC::UI::Label markup => $left, expand => 1), |
3861 | (new DC::UI::Label markup => $left , align => 0, expand => 1), |
3864 | (new DC::UI::Label markup => $right, align => 1), |
3862 | (new DC::UI::Label markup => $right, align => 1), |
3865 | ], |
3863 | ], |
3866 | ; |
3864 | ; |
3867 | |
3865 | |
3868 | } else { |
3866 | } else { |