… | |
… | |
514 | ); |
514 | ); |
515 | |
515 | |
516 | sub emit { |
516 | sub emit { |
517 | my ($self, $signal, @args) = @_; |
517 | my ($self, $signal, @args) = @_; |
518 | |
518 | |
519 | # I do not really like this solution, but I dislike duplication |
519 | # I do not really like this solution, but I do not like duplication |
520 | # and needlessly verbose code, too. |
520 | # and needlessly verbose code, either. |
521 | my @append |
521 | my @append |
522 | = $has_coords{$signal} |
522 | = $has_coords{$signal} |
523 | ? $args[0]->xy ($self) |
523 | ? $args[0]->xy ($self) |
524 | : (); |
524 | : (); |
525 | |
525 | |
526 | #warn +(caller(1))[3] . "emit $signal on $self (parent $self->{parent})\n";#d# |
526 | #warn +(caller(1))[3] . "emit $signal on $self (parent $self->{parent})\n";#d# |
527 | |
527 | |
|
|
528 | if ($self->{tooltip} =~ /Apply.*audio/) { |
|
|
529 | warn "2 ", join ":", @{ $self->{signal_cb}{$signal} || []}, "\n";#d# |
|
|
530 | warn "3 $self->{parent}\n";#d# |
|
|
531 | } |
|
|
532 | |
528 | #d##TODO# stop propagating at first true, do not use sum |
533 | #d##TODO# stop propagating at first true, do not use sum |
|
|
534 | my $res = |
529 | (List::Util::sum map $_->($self, @args, @append), @{$self->{signal_cb}{$signal} || []}) # before |
535 | (List::Util::sum map $_->($self, @args, @append), @{$self->{signal_cb}{$signal} || []}) # before |
530 | || ($self->can ("invoke_$signal") || sub { 1 })->($self, @args, @append) # closure |
536 | || ($self->can ("invoke_$signal") || sub { 1 })->($self, @args, @append) # closure |
531 | || ($self->{parent} && $self->{parent}->emit ($signal, @args)) # parent |
537 | || ($self->{parent} && $self->{parent}->emit ($signal, @args)) # parent |
|
|
538 | ; |
|
|
539 | if ($self->{tooltip} =~ /Apply.*audio/) { |
|
|
540 | warn "4 ", join ":", @{ $self->{signal_cb}{$signal} || []}, "\n";#d# |
|
|
541 | warn "5 $self->{parent}\n";#d# |
|
|
542 | } |
|
|
543 | |
|
|
544 | $res |
532 | } |
545 | } |
533 | |
546 | |
534 | sub find_widget { |
547 | sub find_widget { |
535 | my ($self, $x, $y) = @_; |
548 | my ($self, $x, $y) = @_; |
536 | |
549 | |
… | |
… | |
898 | glClear GL_COLOR_BUFFER_BIT; |
911 | glClear GL_COLOR_BUFFER_BIT; |
899 | |
912 | |
900 | { |
913 | { |
901 | package CFPlus::UI::Base; |
914 | package CFPlus::UI::Base; |
902 | |
915 | |
903 | ($draw_x, $draw_y, $draw_w, $draw_h) = |
916 | local ($draw_x, $draw_y, $draw_w, $draw_h) = |
904 | (0, 0, $self->{w}, $self->{h}); |
917 | (0, 0, $self->{w}, $self->{h}); |
|
|
918 | |
|
|
919 | $self->_render; |
905 | } |
920 | } |
906 | |
|
|
907 | $self->_render; |
|
|
908 | }; |
921 | }; |
909 | } |
922 | } |
910 | |
923 | |
911 | sub _draw { |
924 | sub _draw { |
912 | my ($self) = @_; |
925 | my ($self) = @_; |
… | |
… | |
2959 | |
2972 | |
2960 | $self->{texture} ||= new_from_opengl CFPlus::Texture $W, $H, sub { |
2973 | $self->{texture} ||= new_from_opengl CFPlus::Texture $W, $H, sub { |
2961 | glClearColor 0, 0, 0, 0; |
2974 | glClearColor 0, 0, 0, 0; |
2962 | glClear GL_COLOR_BUFFER_BIT; |
2975 | glClear GL_COLOR_BUFFER_BIT; |
2963 | |
2976 | |
|
|
2977 | package CFPlus::UI::Base; |
|
|
2978 | local ($draw_x, $draw_y, $draw_w, $draw_h) = |
|
|
2979 | (0, 0, $self->{w}, $self->{h}); |
|
|
2980 | |
2964 | my $top = int $self->{children}[1]{range}[0]; |
2981 | my $top = int $self->{children}[1]{range}[0]; |
2965 | |
2982 | |
2966 | my $paridx = 0; |
2983 | my $paridx = 0; |
2967 | my $top_paragraph; |
2984 | my $top_paragraph; |
2968 | my $top = int $self->{children}[1]{range}[0]; |
2985 | my $top = int $self->{children}[1]{range}[0]; |
… | |
… | |
3284 | |
3301 | |
3285 | package CFPlus::UI::Buttonbar; |
3302 | package CFPlus::UI::Buttonbar; |
3286 | |
3303 | |
3287 | our @ISA = CFPlus::UI::HBox::; |
3304 | our @ISA = CFPlus::UI::HBox::; |
3288 | |
3305 | |
3289 | # TODO: should actualyl wrap buttons and other goodies. |
3306 | # TODO: should actually wrap buttons and other goodies. |
3290 | |
3307 | |
3291 | ############################################################################# |
3308 | ############################################################################# |
3292 | |
3309 | |
3293 | package CFPlus::UI::Menu; |
3310 | package CFPlus::UI::Menu; |
3294 | |
3311 | |
… | |
… | |
4124 | glLoadIdentity; |
4141 | glLoadIdentity; |
4125 | |
4142 | |
4126 | { |
4143 | { |
4127 | package CFPlus::UI::Base; |
4144 | package CFPlus::UI::Base; |
4128 | |
4145 | |
4129 | ($draw_x, $draw_y, $draw_w, $draw_h) = |
4146 | local ($draw_x, $draw_y, $draw_w, $draw_h) = |
4130 | (0, 0, $self->{w}, $self->{h}); |
4147 | (0, 0, $self->{w}, $self->{h}); |
4131 | } |
|
|
4132 | |
4148 | |
4133 | $self->_draw; |
4149 | $self->_draw; |
|
|
4150 | } |
4134 | } |
4151 | } |
4135 | |
4152 | |
4136 | ############################################################################# |
4153 | ############################################################################# |
4137 | |
4154 | |
4138 | package CFPlus::UI; |
4155 | package CFPlus::UI; |