43 |
// Button implementation |
// Button implementation |
44 |
//---------------------------------------- |
//---------------------------------------- |
45 |
void |
void |
46 |
Button::draw(px::GC &gc) |
Button::draw(px::GC &gc, const px::Rect &r) |
47 |
{ |
{ |
48 |
char bordername[50]; |
char bordername[50]; |
49 |
sprintf(bordername, "b%dx%d%s", get_w(), get_h(), |
sprintf(bordername, "b%dx%d%s", get_w(), get_h(), |
53 |
} |
} |
54 |
|
|
55 |
|
|
56 |
void Image::draw (px::GC &gc) |
void Image::draw (px::GC &gc, const px::Rect &r) |
57 |
{ |
{ |
58 |
if (px::Surface *s = enigma::GetImage(imgname.c_str())) |
if (px::Surface *s = enigma::GetImage(imgname.c_str())) |
59 |
blit(gc, get_x(), get_y(), s); |
blit(gc, get_x(), get_y(), s); |
81 |
|
|
82 |
|
|
83 |
void |
void |
84 |
Container::draw (px::GC& gc) |
Container::draw (px::GC& gc, const px::Rect &r) |
85 |
{ |
{ |
86 |
for (iterator i=begin(); i!=end(); ++i) { |
for (iterator i=begin(); i!=end(); ++i) { |
87 |
Widget *w = *i; |
Widget *w = *i; |
88 |
w->draw(gc); |
Rect rr = intersect(r, w->get_area()); |
89 |
|
clip(gc, rr); |
90 |
|
w->draw(gc,rr); |
91 |
} |
} |
92 |
} |
} |
93 |
|
|
143 |
: text(t), pressed(false), listener(al) |
: text(t), pressed(false), listener(al) |
144 |
{ |
{ |
145 |
if (menufont == 0) { |
if (menufont == 0) { |
146 |
menufont = enigma::GetFont("menufont"); |
menufont = enigma::GetFont("labelfont"); //menufont"); |
147 |
menufont_pressed = enigma::GetFont("menufontsel"); |
menufont_pressed = enigma::GetFont("menufontsel"); |
148 |
} |
} |
149 |
} |
} |
155 |
redraw(); |
redraw(); |
156 |
} |
} |
157 |
|
|
158 |
void |
bool |
159 |
TextButton::on_event(const SDL_Event &e) |
TextButton::on_event(const SDL_Event &e) |
160 |
{ |
{ |
161 |
switch (e.type) { |
switch (e.type) { |
162 |
case SDL_MOUSEBUTTONDOWN: |
case SDL_MOUSEBUTTONDOWN: |
163 |
pressed=true; |
pressed=true; |
164 |
redraw(); |
redraw(); |
165 |
break; |
return true; |
166 |
case SDL_MOUSEBUTTONUP: |
case SDL_MOUSEBUTTONUP: |
167 |
if (pressed) |
if (pressed) |
168 |
{ |
{ |
172 |
if (listener) |
if (listener) |
173 |
listener->on_action(this); |
listener->on_action(this); |
174 |
} |
} |
175 |
break; |
return true; |
176 |
default: |
default: |
177 |
break; |
return false; |
178 |
} |
} |
179 |
} |
} |
180 |
|
|
181 |
void |
void |
182 |
TextButton::draw(px::GC &gc) |
TextButton::draw(px::GC &gc, const px::Rect &r) |
183 |
{ |
{ |
184 |
Button::draw(gc); |
Button::draw(gc,r); |
185 |
Font *f = pressed ? menufont_pressed : menufont; |
Font *f = pressed ? menufont_pressed : menufont; |
186 |
int h = f->get_height(); |
int h = f->get_height(); |
187 |
int w = f->get_width(text.c_str()); |
int w = f->get_width(text.c_str()); |
210 |
} |
} |
211 |
|
|
212 |
|
|
213 |
void |
bool |
214 |
Menu::manage(px::Screen *scr) |
Menu::manage(px::Screen *scr) |
215 |
{ |
{ |
216 |
screen=scr; |
screen=scr; |
217 |
draw_all(scr); |
draw_all(scr); |
218 |
quit_menu=false; |
quitp=abortp=false; |
219 |
while (!quit_menu) { |
while (!(quitp || abortp)) { |
220 |
screen->flush_updates(); |
screen->flush_updates(); |
221 |
SDL_Event e; |
SDL_Event e; |
222 |
while (SDL_PollEvent(&e)) { |
while (SDL_PollEvent(&e)) { |
231 |
} |
} |
232 |
SDL_Delay(10); |
SDL_Delay(10); |
233 |
} |
} |
234 |
|
return !abortp; |
235 |
} |
} |
236 |
|
|
237 |
void |
void |
238 |
Menu::handle_event(const SDL_Event &e) |
Menu::handle_event(const SDL_Event &e) |
239 |
{ |
{ |
240 |
on_event(e); |
if (on_event(e)) |
241 |
|
return; |
242 |
|
|
243 |
switch (e.type) { |
switch (e.type) { |
244 |
case SDL_QUIT: |
case SDL_QUIT: |
245 |
quit_menu=true; |
abort(); |
246 |
break; |
break; |
247 |
case SDL_MOUSEMOTION: |
case SDL_MOUSEMOTION: |
248 |
track_active_widget( e.motion.x, e.motion.y ); |
track_active_widget( e.motion.x, e.motion.y ); |
249 |
break; |
break; |
250 |
case SDL_KEYDOWN: |
case SDL_KEYDOWN: |
251 |
if (e.key.keysym.sym == SDLK_ESCAPE) { |
if (e.key.keysym.sym == SDLK_ESCAPE) { |
252 |
quit_menu=true; |
abort(); |
253 |
} |
} |
254 |
else if (active_widget) { |
else if (active_widget) { |
255 |
active_widget->on_event(e); |
active_widget->on_event(e); |
257 |
break; |
break; |
258 |
case SDL_MOUSEBUTTONDOWN: |
case SDL_MOUSEBUTTONDOWN: |
259 |
case SDL_MOUSEBUTTONUP: |
case SDL_MOUSEBUTTONUP: |
|
default: |
|
260 |
track_active_widget( e.button.x, e.button.y ); |
track_active_widget( e.button.x, e.button.y ); |
261 |
if (active_widget) active_widget->on_event(e); |
if (active_widget) active_widget->on_event(e); |
262 |
break; |
break; |
263 |
|
default: |
264 |
|
if (active_widget) active_widget->on_event(e); |
265 |
} |
} |
266 |
} |
} |
267 |
|
|
316 |
clip(gc, r); |
clip(gc, r); |
317 |
draw_background(gc); |
draw_background(gc); |
318 |
|
|
319 |
Container::draw(gc); |
Container::draw(gc,r); |
320 |
|
|
321 |
screen->update_rect(r); |
screen->update_rect(r); |
322 |
video::ShowMouse(); |
video::ShowMouse(); |