--- deliantra/Deliantra-Client/DC/UI.pm 2006/12/06 00:15:12 1.356 +++ deliantra/Deliantra-Client/DC/UI.pm 2006/12/08 14:59:54 1.358 @@ -1902,6 +1902,7 @@ can_focus => 1, valign => 0, can_events => 1, + ellipsise => 0, #text => ... #hidden => "*", @_ @@ -1973,7 +1974,7 @@ $self->{cursor} = 0; } elsif ($uni == 27) { $self->emit ('escape'); - } elsif ($uni) { + } elsif ($uni >= 0x20) { substr $text, $self->{cursor}++, 0, chr $uni; } else { return 0; @@ -1982,6 +1983,7 @@ $self->_set_text ($text); $self->realloc; + $self->update; 1 } @@ -2060,6 +2062,8 @@ } } +############################################################################# + package CFPlus::UI::Entry; our @ISA = CFPlus::UI::EntryBase::; @@ -2105,6 +2109,45 @@ } else { return $self->SUPER::invoke_key_down ($ev) } + + 1 +} + +############################################################################# + +package CFPlus::UI::TextEdit; + +our @ISA = CFPlus::UI::EntryBase::; + +use CFPlus::OpenGL; + +sub move_cursor_ver { + my ($self, $dy) = @_; + + my ($y, $x) = $self->{layout}->index_to_line_x ($self->{cursor}); + + do { + if (defined (my $index = $self->{layout}->line_x_to_index ($y + $dy, $x))) { + $self->{cursor} = $index; + delete $self->{cur_h}; + $self->update; + return; + } + } while --$x >= 0; +} + +sub invoke_key_down { + my ($self, $ev) = @_; + + my $sym = $ev->{sym}; + + if ($sym == CFPlus::SDLK_UP) { + $self->move_cursor_ver (-1); + } elsif ($sym == CFPlus::SDLK_DOWN) { + $self->move_cursor_ver (+1); + } else { + return $self->SUPER::invoke_key_down ($ev) + } 1 }