… | |
… | |
548 | return if ($draw_x + $self->{w} < 0) || ($draw_x >= $draw_w) |
548 | return if ($draw_x + $self->{w} < 0) || ($draw_x >= $draw_w) |
549 | || ($draw_y + $self->{h} < 0) || ($draw_y >= $draw_h); |
549 | || ($draw_y + $self->{h} < 0) || ($draw_y >= $draw_h); |
550 | |
550 | |
551 | glPushMatrix; |
551 | glPushMatrix; |
552 | glTranslate $self->{x}, $self->{y}, 0; |
552 | glTranslate $self->{x}, $self->{y}, 0; |
553 | $self->_draw; |
|
|
554 | glPopMatrix; |
|
|
555 | |
553 | |
556 | if ($self == $HOVER && $self->{can_hover}) { |
554 | if ($self == $HOVER && $self->{can_hover}) { |
557 | my ($x, $y) = @$self{qw(x y)}; |
|
|
558 | |
|
|
559 | glColor 1, 0.8, 0.5, 0.2; |
555 | glColor 1*0.2, 0.8*0.2, 0.5*0.2, 0.2; |
560 | glEnable GL_BLEND; |
556 | glEnable GL_BLEND; |
561 | glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; |
557 | glBlendFunc GL_ONE, GL_ONE_MINUS_SRC_ALPHA; |
562 | glBegin GL_QUADS; |
558 | glBegin GL_QUADS; |
563 | glVertex $x , $y; |
559 | glVertex 0 , 0; |
564 | glVertex $x + $self->{w}, $y; |
560 | glVertex $self->{w}, 0; |
565 | glVertex $x + $self->{w}, $y + $self->{h}; |
561 | glVertex $self->{w}, $self->{h}; |
566 | glVertex $x , $y + $self->{h}; |
562 | glVertex 0 , $self->{h}; |
567 | glEnd; |
563 | glEnd; |
568 | glDisable GL_BLEND; |
564 | glDisable GL_BLEND; |
569 | } |
565 | } |
570 | |
566 | |
571 | if ($ENV{CFPLUS_DEBUG} & 1) { |
567 | if ($ENV{CFPLUS_DEBUG} & 1) { |
572 | glPushMatrix; |
568 | glPushMatrix; |
573 | glColor 1, 1, 0, 1; |
569 | glColor 1, 1, 0, 1; |
574 | glTranslate $self->{x} + 0.375, $self->{y} + 0.375; |
570 | glTranslate 0.375, 0.375; |
575 | glBegin GL_LINE_LOOP; |
571 | glBegin GL_LINE_LOOP; |
576 | glVertex 0 , 0; |
572 | glVertex 0 , 0; |
577 | glVertex $self->{w} - 1, 0; |
573 | glVertex $self->{w} - 1, 0; |
578 | glVertex $self->{w} - 1, $self->{h} - 1; |
574 | glVertex $self->{w} - 1, $self->{h} - 1; |
579 | glVertex 0 , $self->{h} - 1; |
575 | glVertex 0 , $self->{h} - 1; |
580 | glEnd; |
576 | glEnd; |
581 | glPopMatrix; |
577 | glPopMatrix; |
582 | #CFClient::UI::Label->new (w => $self->{w}, h => $self->{h}, text => $self, fontsize => 0)->_draw; |
578 | #CFClient::UI::Label->new (w => $self->{w}, h => $self->{h}, text => $self, fontsize => 0)->_draw; |
583 | } |
579 | } |
|
|
580 | |
|
|
581 | $self->_draw; |
|
|
582 | glPopMatrix; |
584 | } |
583 | } |
585 | |
584 | |
586 | sub _draw { |
585 | sub _draw { |
587 | my ($self) = @_; |
586 | my ($self) = @_; |
588 | |
587 | |
… | |
… | |
626 | |
625 | |
627 | if ($color && (@$color < 4 || $color->[3])) { |
626 | if ($color && (@$color < 4 || $color->[3])) { |
628 | my ($w, $h) = @$self{qw(w h)}; |
627 | my ($w, $h) = @$self{qw(w h)}; |
629 | |
628 | |
630 | glEnable GL_BLEND; |
629 | glEnable GL_BLEND; |
631 | glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; |
630 | glBlendFunc GL_ONE, GL_ONE_MINUS_SRC_ALPHA; |
632 | glColor @$color; |
631 | glColor_premultiply @$color; |
633 | |
632 | |
634 | glBegin GL_QUADS; |
633 | glBegin GL_QUADS; |
635 | glVertex 0 , 0; |
634 | glVertex 0 , 0; |
636 | glVertex 0 , $h; |
635 | glVertex 0 , $h; |
637 | glVertex $w, $h; |
636 | glVertex $w, $h; |
… | |
… | |
856 | my $tex = $self->{texture} |
855 | my $tex = $self->{texture} |
857 | or return; |
856 | or return; |
858 | |
857 | |
859 | glEnable GL_TEXTURE_2D; |
858 | glEnable GL_TEXTURE_2D; |
860 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE; |
859 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE; |
|
|
860 | glEnable GL_BLEND; |
|
|
861 | glBlendFunc GL_ONE, GL_ONE_MINUS_SRC_ALPHA; |
861 | glColor 1, 1, 1, 1; |
862 | glColor 0, 0, 0, 1; |
862 | |
863 | |
863 | $tex->draw_quad_alpha_premultiplied (0, 0, $w, $h); |
864 | $tex->draw_quad (0, 0, $w, $h); |
864 | |
865 | |
|
|
866 | glDisable GL_BLEND; |
865 | glDisable GL_TEXTURE_2D; |
867 | glDisable GL_TEXTURE_2D; |
866 | } |
868 | } |
867 | |
869 | |
868 | ############################################################################# |
870 | ############################################################################# |
869 | |
871 | |
… | |
… | |
1035 | |
1037 | |
1036 | if ($self->{bg}) { |
1038 | if ($self->{bg}) { |
1037 | my ($w, $h) = @$self{qw(w h)}; |
1039 | my ($w, $h) = @$self{qw(w h)}; |
1038 | |
1040 | |
1039 | glEnable GL_BLEND; |
1041 | glEnable GL_BLEND; |
1040 | glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; |
1042 | glBlendFunc GL_ONE, GL_ONE_MINUS_SRC_ALPHA; |
1041 | glColor @{ $self->{bg} }; |
1043 | glColor_premultiply @{ $self->{bg} }; |
1042 | |
1044 | |
1043 | glBegin GL_QUADS; |
1045 | glBegin GL_QUADS; |
1044 | glVertex 0 , 0; |
1046 | glVertex 0 , 0; |
1045 | glVertex 0 , $h; |
1047 | glVertex 0 , $h; |
1046 | glVertex $w, $h; |
1048 | glVertex $w, $h; |
… | |
… | |
1160 | my $dy = $ev->{y} - $oy; |
1162 | my $dy = $ev->{y} - $oy; |
1161 | |
1163 | |
1162 | $self->{force_w} = $bw + $dx * ($mx ? -1 : 1); |
1164 | $self->{force_w} = $bw + $dx * ($mx ? -1 : 1); |
1163 | $self->{force_h} = $bh + $dy * ($my ? -1 : 1); |
1165 | $self->{force_h} = $bh + $dy * ($my ? -1 : 1); |
1164 | |
1166 | |
|
|
1167 | $self->move_abs ($wx + $dx * $mx, $wy + $dy * $my); |
1165 | $self->realloc; |
1168 | $self->realloc; |
1166 | $self->move_abs ($wx + $dx * $mx, $wy + $dy * $my); |
|
|
1167 | }; |
1169 | }; |
1168 | |
1170 | |
1169 | } elsif ($lr ^ $td) { |
1171 | } elsif ($lr ^ $td) { |
1170 | my ($ox, $oy) = ($ev->{x}, $ev->{y}); |
1172 | my ($ox, $oy) = ($ev->{x}, $ev->{y}); |
1171 | my ($bx, $by) = ($self->{x}, $self->{y}); |
1173 | my ($bx, $by) = ($self->{x}, $self->{y}); |
… | |
… | |
1174 | my ($ev, $x, $y) = @_; |
1176 | my ($ev, $x, $y) = @_; |
1175 | |
1177 | |
1176 | ($x, $y) = ($ev->{x}, $ev->{y}); |
1178 | ($x, $y) = ($ev->{x}, $ev->{y}); |
1177 | |
1179 | |
1178 | $self->move_abs ($bx + $x - $ox, $by + $y - $oy); |
1180 | $self->move_abs ($bx + $x - $ox, $by + $y - $oy); |
|
|
1181 | # HACK: the next line is required to enforce placement |
|
|
1182 | $self->{parent}->size_allocate ($self->{parent}{w}, $self->{parent}{h}); |
1179 | }; |
1183 | }; |
1180 | } else { |
1184 | } else { |
1181 | return 0; |
1185 | return 0; |
1182 | } |
1186 | } |
1183 | |
1187 | |
… | |
… | |
1782 | my ($self) = @_; |
1786 | my ($self) = @_; |
1783 | |
1787 | |
1784 | local $self->{fg} = $self->{fg}; |
1788 | local $self->{fg} = $self->{fg}; |
1785 | |
1789 | |
1786 | if ($FOCUS == $self) { |
1790 | if ($FOCUS == $self) { |
1787 | glColor @{$self->{active_bg}}; |
1791 | glColor_premultiply @{$self->{active_bg}}; |
1788 | $self->{fg} = $self->{active_fg}; |
1792 | $self->{fg} = $self->{active_fg}; |
1789 | } else { |
1793 | } else { |
1790 | glColor @{$self->{bg}}; |
1794 | glColor_premultiply @{$self->{bg}}; |
1791 | } |
1795 | } |
1792 | |
1796 | |
1793 | glEnable GL_BLEND; |
1797 | glEnable GL_BLEND; |
1794 | glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; |
1798 | glBlendFunc GL_ONE, GL_ONE_MINUS_SRC_ALPHA; |
1795 | glBegin GL_QUADS; |
1799 | glBegin GL_QUADS; |
1796 | glVertex 0 , 0; |
1800 | glVertex 0 , 0; |
1797 | glVertex 0 , $self->{h}; |
1801 | glVertex 0 , $self->{h}; |
1798 | glVertex $self->{w}, $self->{h}; |
1802 | glVertex $self->{w}, $self->{h}; |
1799 | glVertex $self->{w}, 0; |
1803 | glVertex $self->{w}, 0; |
… | |
… | |
2148 | |
2152 | |
2149 | my $h1 = $self->{h} * (1 - $ycut1); |
2153 | my $h1 = $self->{h} * (1 - $ycut1); |
2150 | my $h2 = $self->{h} * (1 - $ycut2); |
2154 | my $h2 = $self->{h} * (1 - $ycut2); |
2151 | |
2155 | |
2152 | glEnable GL_BLEND; |
2156 | glEnable GL_BLEND; |
2153 | glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; |
2157 | glBlendFuncSeparate GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, |
|
|
2158 | GL_ONE, GL_ONE_MINUS_SRC_ALPHA; |
2154 | glEnable GL_TEXTURE_2D; |
2159 | glEnable GL_TEXTURE_2D; |
2155 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE; |
2160 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE; |
2156 | |
2161 | |
2157 | glBindTexture GL_TEXTURE_2D, $t1->{name}; |
2162 | glBindTexture GL_TEXTURE_2D, $t1->{name}; |
2158 | glBegin GL_QUADS; |
2163 | glBegin GL_QUADS; |