--- deliantra/Deliantra-Client/DC/UI.pm 2006/12/09 21:26:46 1.362 +++ deliantra/Deliantra-Client/DC/UI.pm 2007/04/12 07:53:31 1.365 @@ -1978,15 +1978,25 @@ } elsif ($sym == CFPlus::SDLK_RIGHT) { ++$self->{cursor} if $self->{cursor} < length $self->{text}; } elsif ($sym == CFPlus::SDLK_HOME) { - $self->{cursor} = 0; + # what a hack + $self->{cursor} = + (substr $self->{text}, 0, $self->{cursor}) =~ /^(.*\012)/ + ? length $1 + : 0; } elsif ($sym == CFPlus::SDLK_END) { - $self->{cursor} = length $text; + # uh, again + $self->{cursor} = + (substr $self->{text}, $self->{cursor}) =~ /^([^\012]*)\012/ + ? $self->{cursor} + length $1 + : length $self->{text}; } elsif ($uni == 21) { # ctrl-u $text = ""; $self->{cursor} = 0; } elsif ($uni == 27) { $self->emit ('escape'); - } elsif ($uni >= 0x20 || $uni == 0x0d) { + } elsif ($uni == 0x0d) { + substr $text, $self->{cursor}++, 0, "\012"; + } elsif ($uni >= 0x20) { substr $text, $self->{cursor}++, 0, chr $uni; } else { return 0; @@ -2700,7 +2710,9 @@ my $delta = $self->{vertical} ? $ev->{dy} : $ev->{dx}; - $self->set_value ($self->{range}[0] + $delta * $self->{range}[3] * 0.2); + my $pagepart = $ev->{mod} & CFPlus::KMOD_SHIFT ? 1 : 0.2; + + $self->set_value ($self->{range}[0] + $delta * $self->{range}[3] * $pagepart); ! ! $delta } @@ -2820,6 +2832,7 @@ layout => (new CFPlus::Layout), par => [], + max_par => 0, height => 0, children => [ (new CFPlus::UI::Empty expand => 1), @@ -2954,6 +2967,10 @@ push @{$self->{par}}, $para; } + if (my $max = $self->{max_par}) { + shift @{$self->{par}} while @{$self->{par}} > $max; + } + $self->{need_reflow}++; $self->update; }