… | |
… | |
2357 | 1 |
2357 | 1 |
2358 | } |
2358 | } |
2359 | |
2359 | |
2360 | ############################################################################# |
2360 | ############################################################################# |
2361 | |
2361 | |
|
|
2362 | package CFPlus::UI::ButtonBin; |
|
|
2363 | |
|
|
2364 | our @ISA = CFPlus::UI::Bin::; |
|
|
2365 | |
|
|
2366 | use CFPlus::OpenGL; |
|
|
2367 | |
|
|
2368 | my @tex = |
|
|
2369 | map { new_from_file CFPlus::Texture CFPlus::find_rcfile $_, mipmap => 1 } |
|
|
2370 | qw(b1_button_inactive.png b1_button_active.png); |
|
|
2371 | |
|
|
2372 | sub new { |
|
|
2373 | my $class = shift; |
|
|
2374 | |
|
|
2375 | $class->SUPER::new ( |
|
|
2376 | can_hover => 1, |
|
|
2377 | align => 0, |
|
|
2378 | valign => 0, |
|
|
2379 | can_events => 1, |
|
|
2380 | @_ |
|
|
2381 | ) |
|
|
2382 | } |
|
|
2383 | |
|
|
2384 | sub invoke_button_up { |
|
|
2385 | my ($self, $ev, $x, $y) = @_; |
|
|
2386 | |
|
|
2387 | $self->emit ("activate") |
|
|
2388 | if $x >= 0 && $x < $self->{w} |
|
|
2389 | && $y >= 0 && $y < $self->{h}; |
|
|
2390 | |
|
|
2391 | 1 |
|
|
2392 | } |
|
|
2393 | |
|
|
2394 | sub _draw { |
|
|
2395 | my ($self) = @_; |
|
|
2396 | |
|
|
2397 | glEnable GL_TEXTURE_2D; |
|
|
2398 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE; |
|
|
2399 | glColor 0, 0, 0, 1; |
|
|
2400 | |
|
|
2401 | my $tex = $tex[$GRAB == $self]; |
|
|
2402 | $tex->draw_quad_alpha (0, 0, $self->{w}, $self->{h}); |
|
|
2403 | |
|
|
2404 | glDisable GL_TEXTURE_2D; |
|
|
2405 | |
|
|
2406 | $self->SUPER::_draw; |
|
|
2407 | } |
|
|
2408 | |
|
|
2409 | ############################################################################# |
|
|
2410 | |
2362 | package CFPlus::UI::Button; |
2411 | package CFPlus::UI::Button; |
2363 | |
2412 | |
2364 | our @ISA = CFPlus::UI::Label::; |
2413 | our @ISA = CFPlus::UI::Label::; |
2365 | |
2414 | |
2366 | use CFPlus::OpenGL; |
2415 | use CFPlus::OpenGL; |
… | |
… | |
2500 | sub new { |
2549 | sub new { |
2501 | my $class = shift; |
2550 | my $class = shift; |
2502 | |
2551 | |
2503 | my $self = $class->SUPER::new ( |
2552 | my $self = $class->SUPER::new ( |
2504 | can_events => 0, |
2553 | can_events => 0, |
|
|
2554 | scale => 1, |
2505 | @_, |
2555 | @_, |
2506 | ); |
2556 | ); |
2507 | |
2557 | |
2508 | $self->{path} || $self->{tex} |
2558 | $self->{path} || $self->{tex} |
2509 | or Carp::croak "'path' or 'tex' attributes required"; |
2559 | or Carp::croak "'path' or 'tex' attributes required"; |
… | |
… | |
2534 | } |
2584 | } |
2535 | |
2585 | |
2536 | sub size_request { |
2586 | sub size_request { |
2537 | my ($self) = @_; |
2587 | my ($self) = @_; |
2538 | |
2588 | |
2539 | ($self->{tex}{w}, $self->{tex}{h}) |
2589 | (int $self->{tex}{w} * $self->{scale}, int $self->{tex}{h} * $self->{scale}) |
2540 | } |
2590 | } |
2541 | |
2591 | |
2542 | sub _draw { |
2592 | sub _draw { |
2543 | my ($self) = @_; |
2593 | my ($self) = @_; |
2544 | |
2594 | |
… | |
… | |
2554 | } |
2604 | } |
2555 | |
2605 | |
2556 | glEnable GL_TEXTURE_2D; |
2606 | glEnable GL_TEXTURE_2D; |
2557 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE; |
2607 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE; |
2558 | |
2608 | |
2559 | $tex->draw_quad (0, 0, $w, $h); |
2609 | $tex->draw_quad_alpha (0, 0, $w, $h); |
2560 | |
2610 | |
2561 | glDisable GL_TEXTURE_2D; |
2611 | glDisable GL_TEXTURE_2D; |
2562 | } |
2612 | } |
2563 | |
2613 | |
2564 | ############################################################################# |
2614 | ############################################################################# |
… | |
… | |
3635 | children => [ |
3685 | children => [ |
3636 | (new CFPlus::UI::Label markup => $left, expand => 1), |
3686 | (new CFPlus::UI::Label markup => $left, expand => 1), |
3637 | (new CFPlus::UI::Label markup => $right, align => +1), |
3687 | (new CFPlus::UI::Label markup => $right, align => +1), |
3638 | ], |
3688 | ], |
3639 | ; |
3689 | ; |
3640 | |
3690 | |
3641 | } else { |
3691 | } else { |
3642 | $widget = new CFPlus::UI::Label |
3692 | $widget = new CFPlus::UI::Label |
3643 | can_hover => 1, |
3693 | can_hover => 1, |
3644 | can_events => 1, |
3694 | can_events => 1, |
3645 | markup => $widget, |
3695 | markup => $widget, |