… | |
… | |
1361 | my ($class, %arg) = @_; |
1361 | my ($class, %arg) = @_; |
1362 | |
1362 | |
1363 | my $self = $class->SUPER::new ( |
1363 | my $self = $class->SUPER::new ( |
1364 | bg => [1, 1, 1, 1], |
1364 | bg => [1, 1, 1, 1], |
1365 | border_bg => [1, 1, 1, 1], |
1365 | border_bg => [1, 1, 1, 1], |
1366 | border => 0.6, |
1366 | border => 1, |
1367 | can_events => 1, |
1367 | can_events => 1, |
1368 | min_w => 64, |
1368 | min_w => 64, |
1369 | min_h => 32, |
1369 | min_h => 32, |
1370 | %arg, |
1370 | %arg, |
1371 | ); |
1371 | ); |
… | |
… | |
2158 | |
2158 | |
2159 | my $text = $self->get_text; |
2159 | my $text = $self->get_text; |
2160 | |
2160 | |
2161 | $self->{cursor} = List::Util::max 0, List::Util::min $self->{cursor}, length $text; |
2161 | $self->{cursor} = List::Util::max 0, List::Util::min $self->{cursor}, length $text; |
2162 | |
2162 | |
2163 | if ($uni == 8) { |
2163 | if ($sym == DC::SDLK_BACKSPACE) { |
2164 | substr $text, --$self->{cursor}, 1, "" if $self->{cursor}; |
2164 | substr $text, --$self->{cursor}, 1, "" if $self->{cursor}; |
2165 | } elsif ($uni == 127) { |
2165 | } elsif ($sym == DC::SDLK_DELETE) { |
2166 | substr $text, $self->{cursor}, 1, ""; |
2166 | substr $text, $self->{cursor}, 1, ""; |
2167 | } elsif ($sym == DC::SDLK_LEFT) { |
2167 | } elsif ($sym == DC::SDLK_LEFT) { |
2168 | --$self->{cursor} if $self->{cursor}; |
2168 | --$self->{cursor} if $self->{cursor}; |
2169 | } elsif ($sym == DC::SDLK_RIGHT) { |
2169 | } elsif ($sym == DC::SDLK_RIGHT) { |
2170 | ++$self->{cursor} if $self->{cursor} < length $self->{text}; |
2170 | ++$self->{cursor} if $self->{cursor} < length $self->{text}; |
… | |
… | |
2291 | |
2291 | |
2292 | our @ISA = DC::UI::EntryBase::; |
2292 | our @ISA = DC::UI::EntryBase::; |
2293 | |
2293 | |
2294 | use DC::OpenGL; |
2294 | use DC::OpenGL; |
2295 | |
2295 | |
|
|
2296 | sub new { |
|
|
2297 | my $class = shift; |
|
|
2298 | |
|
|
2299 | $class->SUPER::new ( |
|
|
2300 | history_pointer => -1, |
|
|
2301 | @_ |
|
|
2302 | ) |
|
|
2303 | } |
|
|
2304 | |
|
|
2305 | |
2296 | sub invoke_key_down { |
2306 | sub invoke_key_down { |
2297 | my ($self, $ev) = @_; |
2307 | my ($self, $ev) = @_; |
2298 | |
2308 | |
2299 | my $sym = $ev->{sym}; |
2309 | my $sym = $ev->{sym}; |
2300 | |
2310 | |
… | |
… | |
2324 | $self->{history_pointer} = -1 if $self->{history_pointer} < 0; |
2334 | $self->{history_pointer} = -1 if $self->{history_pointer} < 0; |
2325 | |
2335 | |
2326 | if ($self->{history_pointer} >= 0) { |
2336 | if ($self->{history_pointer} >= 0) { |
2327 | $self->set_text ($self->{history}->[$self->{history_pointer}]); |
2337 | $self->set_text ($self->{history}->[$self->{history_pointer}]); |
2328 | } else { |
2338 | } else { |
|
|
2339 | if (defined $self->{history_saveback}) { |
2329 | $self->set_text ($self->{history_saveback}); |
2340 | $self->set_text ($self->{history_saveback}); |
|
|
2341 | $self->{history_saveback} = undef; |
|
|
2342 | } |
2330 | } |
2343 | } |
2331 | |
2344 | |
2332 | } else { |
2345 | } else { |
2333 | return $self->SUPER::invoke_key_down ($ev) |
2346 | return $self->SUPER::invoke_key_down ($ev) |
2334 | } |
2347 | } |
… | |
… | |
3057 | sub set_value { |
3070 | sub set_value { |
3058 | my ($self, $value) = @_; |
3071 | my ($self, $value) = @_; |
3059 | |
3072 | |
3060 | my ($old_value, $lo, $hi, $page, $unit) = @{$self->{range}}; |
3073 | my ($old_value, $lo, $hi, $page, $unit) = @{$self->{range}}; |
3061 | |
3074 | |
3062 | $hi = $lo + 1 if $hi <= $lo; |
3075 | $hi = $lo if $hi < $lo; |
3063 | |
3076 | |
3064 | $page = $hi - $lo if $page > $hi - $lo; |
3077 | $value = $hi - $page if $value > $hi - $page; |
3065 | |
|
|
3066 | $value = $lo if $value < $lo; |
3078 | $value = $lo if $value < $lo; |
3067 | $value = $hi - $page if $value > $hi - $page; |
|
|
3068 | |
3079 | |
3069 | $value = $lo + $unit * int +($value - $lo + $unit * 0.5) / $unit |
3080 | $value = $lo + $unit * int +($value - $lo + $unit * 0.5) / $unit |
3070 | if $unit; |
3081 | if $unit; |
3071 | |
3082 | |
3072 | @{$self->{range}} = ($value, $lo, $hi, $page, $unit); |
3083 | @{$self->{range}} = ($value, $lo, $hi, $page, $unit); |
… | |
… | |
3136 | my ($self) = @_; |
3147 | my ($self) = @_; |
3137 | |
3148 | |
3138 | unless ($self->{knob_w}) { |
3149 | unless ($self->{knob_w}) { |
3139 | $self->set_value ($self->{range}[0]); |
3150 | $self->set_value ($self->{range}[0]); |
3140 | |
3151 | |
3141 | my ($value, $lo, $hi, $page) = @{$self->{range}}; |
3152 | my ($value, $lo, $hi, $page, $unit) = @{$self->{range}}; |
3142 | my $range = ($hi - $page - $lo) || 1e-100; |
3153 | my $range = ($hi - $page - $lo) || 1e-10; |
3143 | |
3154 | |
3144 | 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}; |
3145 | |
3156 | |
3146 | $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; |
3147 | $self->{scale} = 1 - 2 * $self->{offset} || 1e-100; |
3158 | $self->{scale} = 1 - 2 * $self->{offset} || 1e-100; |
3148 | |
3159 | |
3149 | $value = ($value - $lo) / $range; |
3160 | $value = ($value - $lo) / $range; |
… | |
… | |
3845 | $widget = new DC::UI::HBox |
3856 | $widget = new DC::UI::HBox |
3846 | can_hover => 1, |
3857 | can_hover => 1, |
3847 | can_events => 1, |
3858 | can_events => 1, |
3848 | tooltip => $tooltip, |
3859 | tooltip => $tooltip, |
3849 | children => [ |
3860 | children => [ |
3850 | (new DC::UI::Label markup => $left, expand => 1), |
3861 | (new DC::UI::Label markup => $left , align => 0, expand => 1), |
3851 | (new DC::UI::Label markup => $right, align => 1), |
3862 | (new DC::UI::Label markup => $right, align => 1), |
3852 | ], |
3863 | ], |
3853 | ; |
3864 | ; |
3854 | |
3865 | |
3855 | } else { |
3866 | } else { |
… | |
… | |
4055 | } |
4066 | } |
4056 | |
4067 | |
4057 | sub pages { |
4068 | sub pages { |
4058 | my ($self) = @_; |
4069 | my ($self) = @_; |
4059 | $self->{multiplexer}->children |
4070 | $self->{multiplexer}->children |
|
|
4071 | } |
|
|
4072 | |
|
|
4073 | sub page_index { |
|
|
4074 | my ($self, $widget) = @_; |
|
|
4075 | |
|
|
4076 | my $i = 0; |
|
|
4077 | for ($self->pages) { |
|
|
4078 | if ($_ eq $widget) { return $i }; |
|
|
4079 | $i++; |
|
|
4080 | } |
|
|
4081 | |
|
|
4082 | undef |
4060 | } |
4083 | } |
4061 | |
4084 | |
4062 | sub add_tab { |
4085 | sub add_tab { |
4063 | my ($self, $title, $widget, $tooltip) = @_; |
4086 | my ($self, $title, $widget, $tooltip) = @_; |
4064 | |
4087 | |
… | |
… | |
4556 | |
4579 | |
4557 | ############################################################################# |
4580 | ############################################################################# |
4558 | |
4581 | |
4559 | package DC::UI; |
4582 | package DC::UI; |
4560 | |
4583 | |
4561 | $ROOT = new DC::UI::Root; |
4584 | $ROOT = new DC::UI::Root; |
4562 | $TOOLTIP = new DC::UI::Tooltip z => 900; |
4585 | $TOOLTIP = new DC::UI::Tooltip z => 900; |
4563 | |
4586 | |
4564 | 1 |
4587 | 1 |
4565 | |
4588 | |