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 */