ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/UI.pm
(Generate patch)

Comparing deliantra/Deliantra-Client/DC/UI.pm (file contents):
Revision 1.362 by root, Sat Dec 9 21:26:46 2006 UTC vs.
Revision 1.367 by root, Fri Apr 27 00:59:14 2007 UTC

22our $TOOLTIP_WATCHER = Event->idle (min => 1/60, cb => sub { 22our $TOOLTIP_WATCHER = Event->idle (min => 1/60, cb => sub {
23 if (!$GRAB) { 23 if (!$GRAB) {
24 for (my $widget = $HOVER; $widget; $widget = $widget->{parent}) { 24 for (my $widget = $HOVER; $widget; $widget = $widget->{parent}) {
25 if (length $widget->{tooltip}) { 25 if (length $widget->{tooltip}) {
26 if ($TOOLTIP->{owner} != $widget) { 26 if ($TOOLTIP->{owner} != $widget) {
27 $TOOLTIP->{owner}->emit ("tooltip_hide") if $TOOLTIP->{owner};
27 $TOOLTIP->hide; 28 $TOOLTIP->hide;
28 29
29 $TOOLTIP->{owner} = $widget; 30 $TOOLTIP->{owner} = $widget;
31 $TOOLTIP->{owner}->emit ("tooltip_show") if $TOOLTIP->{owner};
30 32
31 return if $ENV{CFPLUS_DEBUG} & 8; 33 return if $ENV{CFPLUS_DEBUG} & 8;
32 34
33 my $tip = $widget->{tooltip}; 35 my $tip = $widget->{tooltip};
34 36
42 } 44 }
43 } 45 }
44 } 46 }
45 47
46 $TOOLTIP->hide; 48 $TOOLTIP->hide;
49 $TOOLTIP->{owner}->emit ("tooltip_hide") if $TOOLTIP->{owner};
47 delete $TOOLTIP->{owner}; 50 delete $TOOLTIP->{owner};
48}); 51});
49 52
50sub get_layout { 53sub get_layout {
51 my $layout; 54 my $layout;
1967 my $sym = $ev->{sym}; 1970 my $sym = $ev->{sym};
1968 my $uni = $ev->{unicode}; 1971 my $uni = $ev->{unicode};
1969 1972
1970 my $text = $self->get_text; 1973 my $text = $self->get_text;
1971 1974
1975 $self->{cursor} = List::Util::max 0, List::Util::min $self->{cursor}, length $text;
1976
1972 if ($uni == 8) { 1977 if ($uni == 8) {
1973 substr $text, --$self->{cursor}, 1, "" if $self->{cursor}; 1978 substr $text, --$self->{cursor}, 1, "" if $self->{cursor};
1974 } elsif ($uni == 127) { 1979 } elsif ($uni == 127) {
1975 substr $text, $self->{cursor}, 1, ""; 1980 substr $text, $self->{cursor}, 1, "";
1976 } elsif ($sym == CFPlus::SDLK_LEFT) { 1981 } elsif ($sym == CFPlus::SDLK_LEFT) {
1977 --$self->{cursor} if $self->{cursor}; 1982 --$self->{cursor} if $self->{cursor};
1978 } elsif ($sym == CFPlus::SDLK_RIGHT) { 1983 } elsif ($sym == CFPlus::SDLK_RIGHT) {
1979 ++$self->{cursor} if $self->{cursor} < length $self->{text}; 1984 ++$self->{cursor} if $self->{cursor} < length $self->{text};
1980 } elsif ($sym == CFPlus::SDLK_HOME) { 1985 } elsif ($sym == CFPlus::SDLK_HOME) {
1986 # what a hack
1981 $self->{cursor} = 0; 1987 $self->{cursor} =
1988 (substr $self->{text}, 0, $self->{cursor}) =~ /^(.*\012)/
1989 ? length $1
1990 : 0;
1982 } elsif ($sym == CFPlus::SDLK_END) { 1991 } elsif ($sym == CFPlus::SDLK_END) {
1992 # uh, again
1993 $self->{cursor} =
1994 (substr $self->{text}, $self->{cursor}) =~ /^([^\012]*)\012/
1983 $self->{cursor} = length $text; 1995 ? $self->{cursor} + length $1
1996 : length $self->{text};
1984 } elsif ($uni == 21) { # ctrl-u 1997 } elsif ($uni == 21) { # ctrl-u
1985 $text = ""; 1998 $text = "";
1986 $self->{cursor} = 0; 1999 $self->{cursor} = 0;
1987 } elsif ($uni == 27) { 2000 } elsif ($uni == 27) {
1988 $self->emit ('escape'); 2001 $self->emit ('escape');
1989 } elsif ($uni >= 0x20 || $uni == 0x0d) { 2002 } elsif ($uni == 0x0d) {
2003 substr $text, $self->{cursor}++, 0, "\012";
2004 } elsif ($uni >= 0x20) {
1990 substr $text, $self->{cursor}++, 0, chr $uni; 2005 substr $text, $self->{cursor}++, 0, chr $uni;
1991 } else { 2006 } else {
1992 return 0; 2007 return 0;
1993 } 2008 }
1994 2009
2698sub invoke_mouse_wheel { 2713sub invoke_mouse_wheel {
2699 my ($self, $ev) = @_; 2714 my ($self, $ev) = @_;
2700 2715
2701 my $delta = $self->{vertical} ? $ev->{dy} : $ev->{dx}; 2716 my $delta = $self->{vertical} ? $ev->{dy} : $ev->{dx};
2702 2717
2718 my $pagepart = $ev->{mod} & CFPlus::KMOD_SHIFT ? 1 : 0.2;
2719
2703 $self->set_value ($self->{range}[0] + $delta * $self->{range}[3] * 0.2); 2720 $self->set_value ($self->{range}[0] + $delta * $self->{range}[3] * $pagepart);
2704 2721
2705 ! ! $delta 2722 ! ! $delta
2706} 2723}
2707 2724
2708sub update { 2725sub update {
2818 #font => default_font 2835 #font => default_font
2819 @_, 2836 @_,
2820 2837
2821 layout => (new CFPlus::Layout), 2838 layout => (new CFPlus::Layout),
2822 par => [], 2839 par => [],
2840 max_par => 0,
2823 height => 0, 2841 height => 0,
2824 children => [ 2842 children => [
2825 (new CFPlus::UI::Empty expand => 1), 2843 (new CFPlus::UI::Empty expand => 1),
2826 (new CFPlus::UI::Slider vertical => 1), 2844 (new CFPlus::UI::Slider vertical => 1),
2827 ], 2845 ],
2950 wrapped => 1, 2968 wrapped => 1,
2951 }; 2969 };
2952 2970
2953 $self->add (@{ $para->{widget} }) if @{ $para->{widget} }; 2971 $self->add (@{ $para->{widget} }) if @{ $para->{widget} };
2954 push @{$self->{par}}, $para; 2972 push @{$self->{par}}, $para;
2973 }
2974
2975 if (my $max = $self->{max_par}) {
2976 shift @{$self->{par}} while @{$self->{par}} > $max;
2955 } 2977 }
2956 2978
2957 $self->{need_reflow}++; 2979 $self->{need_reflow}++;
2958 $self->update; 2980 $self->update;
2959} 2981}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines