Mercurial > octave-nkf
comparison src/graphics/fltk_backend/fltk_backend.cc @ 7839:71eb1793f0db
fltk_backend can now handle figure.position changes
author | Shai Ayal <shaiay@sourceforge.net> |
---|---|
date | Sat, 23 Feb 2008 20:53:23 +0200 |
parents | caab78e7e377 |
children | 2c8f693c32fd |
comparison
equal
deleted
inserted
replaced
7838:0a2ba0053fbd | 7839:71eb1793f0db |
---|---|
23 #include <map> | 23 #include <map> |
24 #include <set> | 24 #include <set> |
25 #include <sstream> | 25 #include <sstream> |
26 #include <iostream> | 26 #include <iostream> |
27 | 27 |
28 #ifdef HAVE_CONFIG_H | |
29 #include <config.h> | |
30 #endif | |
31 | |
32 #include "gl-render.h" | |
33 | |
28 #include <FL/Fl.H> | 34 #include <FL/Fl.H> |
29 #include <FL/Fl_Window.H> | 35 #include <FL/Fl_Window.H> |
30 #include <FL/Fl_Output.H> | 36 #include <FL/Fl_Output.H> |
31 #include <FL/Fl_Button.H> | 37 #include <FL/Fl_Button.H> |
32 #include <FL/Fl_Gl_Window.H> | 38 #include <FL/Fl_Gl_Window.H> |
33 #include <FL/fl_ask.H> | 39 #include <FL/fl_ask.H> |
34 #include <FL/fl_draw.H> | 40 #include <FL/fl_draw.H> |
35 | 41 |
36 #include "oct.h" | 42 #include "oct.h" |
37 #include "parse.h" | 43 #include "parse.h" |
38 #include "graphics.h" | 44 #include "graphics.h" |
39 | |
40 #ifdef HAVE_CONFIG_H | |
41 #include <config.h> | |
42 #endif | |
43 | |
44 #include "gl-render.h" | |
45 | |
46 | 45 |
47 const char* help_text = "\ | 46 const char* help_text = "\ |
48 Keyboard Shortcuts\n\ | 47 Keyboard Shortcuts\n\ |
49 a - autoscale\n\ | 48 a - autoscale\n\ |
50 g - toggle grid\n\ | 49 g - toggle grid\n\ |
189 delete status; | 188 delete status; |
190 }; | 189 }; |
191 | 190 |
192 double number () { return _number;}; | 191 double number () { return _number;}; |
193 | 192 |
194 void mark_modified () { canvas->damage (FL_DAMAGE_ALL); } | 193 void mark_modified () { damage (FL_DAMAGE_ALL); } |
195 | 194 |
196 private: | 195 private: |
197 // figure number | 196 // figure number |
198 double _number; | 197 double _number; |
199 figure::properties err_props; | 198 figure::properties err_props; |
297 args(0) = number (); | 296 args(0) = number (); |
298 args(1) = "position"; | 297 args(1) = "position"; |
299 args(2) = pos; | 298 args(2) = pos; |
300 feval("set",args); | 299 feval("set",args); |
301 } | 300 } |
301 | |
302 void draw (void) | |
303 { | |
304 figure::properties& fp = get_figure_props (); | |
305 Matrix pos = fp.get_position ().matrix_value (); | |
306 Fl_Window::resize (pos(0), pos(1) , pos(2), pos(3)); | |
307 | |
308 return Fl_Window::draw (); | |
309 } | |
302 | 310 |
303 int handle (int event) { | 311 int handle (int event) { |
304 static double x0,y0; | 312 static double x0,y0; |
305 static graphics_handle h0 = graphics_handle (); | 313 static graphics_handle h0 = graphics_handle (); |
306 static bool in_drag = false; | 314 static bool in_drag = false; |
489 sz(1) = Fl::h (); | 497 sz(1) = Fl::h (); |
490 return sz; | 498 return sz; |
491 } | 499 } |
492 }; | 500 }; |
493 | 501 |
494 bool backend_registered = false; | 502 static bool backend_registered = false; |
495 // call this to init the fltk backend | 503 // call this to init the fltk backend |
496 DEFUN_DLD (__init_fltk__, args, nargout,"") | 504 DEFUN_DLD (__init_fltk__, args, nargout,"") |
497 { | 505 { |
498 graphics_backend::register_backend (new fltk_backend); | 506 graphics_backend::register_backend (new fltk_backend); |
499 backend_registered = true; | 507 backend_registered = true; |
508 figure_manager::Instance ().close_all (); | 516 figure_manager::Instance ().close_all (); |
509 graphics_backend::unregister_backend (FLTK_BACKEND_NAME); | 517 graphics_backend::unregister_backend (FLTK_BACKEND_NAME); |
510 backend_registered = false; | 518 backend_registered = false; |
511 | 519 |
512 | 520 |
513 // give FLTK no more than 0.01 sec to do it's stuff | 521 // give FLTK 10 seconds to wrap it up |
514 Fl::wait(1e-2); | 522 Fl::wait(10); |
515 octave_value retval; | 523 octave_value retval; |
516 return retval; | 524 return retval; |
517 } | 525 } |
518 | 526 |
527 // give FLTK no more than 0.01 sec to do it's stuff | |
528 static double fltk_maxtime = 1e-2; | |
529 | |
530 // call this to delete the fltk backend | |
531 DEFUN_DLD (__fltk_maxtime__, args, nargout,"") | |
532 { | |
533 octave_value retval=fltk_maxtime; | |
534 | |
535 if (args.length () == 1 ) | |
536 { | |
537 if (args(0).is_real_scalar ()) | |
538 fltk_maxtime = args(0).double_value (); | |
539 else | |
540 error("argument must be a real scalar"); | |
541 } | |
542 | |
543 return retval; | |
544 } | |
545 | |
519 // call this from the idle_callback to refresh windows | 546 // call this from the idle_callback to refresh windows |
520 DEFUN_DLD (__fltk_redraw__, args, nargout,"internal function for the fltk backend") | 547 DEFUN_DLD (__fltk_redraw__, args, nargout,\ |
548 "internal function for the fltk backend") | |
521 { | 549 { |
522 octave_value retval; | 550 octave_value retval; |
523 | 551 |
524 if (!backend_registered) | 552 if (!backend_registered) |
525 return retval; | 553 return retval; |
558 } | 586 } |
559 } | 587 } |
560 } | 588 } |
561 } | 589 } |
562 | 590 |
563 // give FLTK no more than 0.01 sec to do it's stuff | 591 Fl::wait(fltk_maxtime); |
564 Fl::wait(1e-2); | |
565 | 592 |
566 return retval; | 593 return retval; |
567 } | 594 } |
568 | 595 |
569 /* to init | 596 /* to init |
570 autoload("__init_fltk__",[pwd(),"/fltk_backend.oct"]) | 597 autoload("__init_fltk__",[pwd(),"/fltk_backend.oct"]) |
571 autoload("__remove_fltk__",[pwd(),"/fltk_backend.oct"]) | 598 autoload("__remove_fltk__",[pwd(),"/fltk_backend.oct"]) |
572 autoload("__fltk_redraw__",[pwd(),"/fltk_backend.oct"]) | 599 autoload("__fltk_redraw__",[pwd(),"/fltk_backend.oct"]) |
600 autoload("__fltk_maxtime__",[pwd(),"/fltk_backend.oct"]) | |
573 input_event_hook ("__fltk_redraw__"); | 601 input_event_hook ("__fltk_redraw__"); |
574 __init_fltk__ (); | 602 __init_fltk__ (); |
575 set(gcf(),"__backend__","fltk") | 603 set(gcf(),"__backend__","fltk") |
604 plot(randn(1e3,1)); | |
576 | 605 |
577 | 606 |
578 */ | 607 */ |