… | |
… | |
39 | $self->{x} = $x; |
39 | $self->{x} = $x; |
40 | $self->{y} = $y; |
40 | $self->{y} = $y; |
41 | $self->{z} = $z if defined $z; |
41 | $self->{z} = $z if defined $z; |
42 | } |
42 | } |
43 | |
43 | |
|
|
44 | sub needs_redraw { |
|
|
45 | 0 |
|
|
46 | } |
|
|
47 | |
44 | sub size_request { |
48 | sub size_request { |
45 | die "size_request is abtract"; |
49 | die "size_request is abtract"; |
46 | } |
50 | } |
47 | |
51 | |
48 | sub focus_in { |
52 | sub focus_in { |
… | |
… | |
109 | sub get { $_[0]->{child} } |
113 | sub get { $_[0]->{child} } |
110 | |
114 | |
111 | sub size_request { $_[0]->{child}->size_request if $_[0]->{child} } |
115 | sub size_request { $_[0]->{child}->size_request if $_[0]->{child} } |
112 | |
116 | |
113 | sub _draw { die "Containers can't be drawn!" } |
117 | sub _draw { die "Containers can't be drawn!" } |
|
|
118 | |
|
|
119 | package Crossfire::Client::Widget::Window; |
|
|
120 | |
|
|
121 | our @ISA = Crossfire::Client::Widget::Container::; |
|
|
122 | |
|
|
123 | use SDL::OpenGL; |
|
|
124 | |
|
|
125 | sub add { |
|
|
126 | my ($self, $chld) = @_; |
|
|
127 | $self->SUPER::add ($chld); |
|
|
128 | $self->render_chld; |
|
|
129 | } |
|
|
130 | |
|
|
131 | sub render_chld { |
|
|
132 | my ($self) = @_; |
|
|
133 | my $chld = $self->get; |
|
|
134 | my ($w, $h) = $self->size_request; |
|
|
135 | |
|
|
136 | $self->{texture} = |
|
|
137 | Crossfire::Client::Texture->new_from_opengl ( |
|
|
138 | $w, $h, sub { |
|
|
139 | my ($txt, $w, $h) = @_; |
|
|
140 | $chld->_draw; |
|
|
141 | } |
|
|
142 | ); |
|
|
143 | $self->{texture}->upload; |
|
|
144 | } |
|
|
145 | |
|
|
146 | sub size_request { |
|
|
147 | my ($self) = @_; |
|
|
148 | my $chld = $self->get |
|
|
149 | or return (0, 0); |
|
|
150 | $chld->size_request |
|
|
151 | } |
|
|
152 | |
|
|
153 | sub _draw { |
|
|
154 | my ($self) = @_; |
|
|
155 | |
|
|
156 | my $tex = $self->{texture} |
|
|
157 | or return; |
|
|
158 | |
|
|
159 | warn "DRAW TEX: $tex->{width} $tex->{height}\n"; |
|
|
160 | glEnable GL_BLEND; |
|
|
161 | glEnable GL_TEXTURE_2D; |
|
|
162 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE; |
|
|
163 | glBindTexture GL_TEXTURE_2D, $tex->{name}; |
|
|
164 | |
|
|
165 | glColor 1, 1, 1; |
|
|
166 | |
|
|
167 | glBegin GL_QUADS; |
|
|
168 | glTexCoord 0, 0; glVertex 0 , 0; |
|
|
169 | glTexCoord 0, 1; glVertex 0 , $tex->{height}; |
|
|
170 | glTexCoord 1, 1; glVertex $tex->{width}, $tex->{height}; |
|
|
171 | glTexCoord 1, 0; glVertex $tex->{width}, 0; |
|
|
172 | glEnd; |
|
|
173 | |
|
|
174 | glDisable GL_BLEND; |
|
|
175 | glDisable GL_TEXTURE_2D; |
|
|
176 | } |
114 | |
177 | |
115 | package Crossfire::Client::Widget::Frame; |
178 | package Crossfire::Client::Widget::Frame; |
116 | |
179 | |
117 | our @ISA = Crossfire::Client::Widget::Container::; |
180 | our @ISA = Crossfire::Client::Widget::Container::; |
118 | |
181 | |