20 #ifndef KJB_GR_CPP_GLUT_H
21 #define KJB_GR_CPP_GLUT_H
29 #ifdef KJB_HAVE_BST_THREAD
30 #include <boost/thread.hpp>
39 template <
class R,
class T1,
class T2>
42 template <
class R,
class T1,
class T2,
class T3>
45 template <
class R,
class T1,
class T2,
class T3,
class T4>
69 static unsigned int get_display_mode()
82 static void set_display_mode(
unsigned int display_mode);
84 static void set_init_window_size(
int w,
int h);
86 static void set_init_window_position(
int x,
int y);
90 static void init(
int argc,
char** argv);
92 static bool is_initialized();
94 static bool is_running();
103 static void push_current_window();
110 static void pop_current_window();
113 static void set_idle_callback(boost::function0<void> cb);
115 static void add_timer_callback(
size_t msec, boost::function0<void> cb);
117 static void clear_idle_callback();
128 static void enable_multithreading();
139 static void post_redisplay_t(
int wnd_handle);
149 static void push_task_t(boost::function0<void> task);
152 #ifdef KJB_HAVE_BST_THREAD
166 static boost::mutex* mutex;
174 static void task_pump_t();
179 static void task_pump();
185 static void disable_warnings();
187 static bool warnings_enabled();
194 static void test_initialized(
const std::string& obj_name);
205 static void timer(
int i);
214 static void idle_t();
217 static unsigned int display_mode_;
218 static bool initialized_;
219 static bool warnings_;
226 static boost::function0<void>* idle_callback_;
227 static std::vector<boost::function0<void> > timer_callbacks_;
228 static std::vector<size_t> timer_gaps_;
230 static bool multithreading_enabled_;
231 static std::vector<bool> redisplay_flags_;
232 static std::vector<int> redisplay_wnds_;
234 static std::vector<boost::function0<void> > tasks_;
238 static int cur_wnd_stack_;
240 #ifdef KJB_HAVE_BST_THREAD
263 Glut_window(
const std::string& title);
268 const std::string& title = DEFAULT_WINDOW_TITLE
276 const std::string& title
288 void set_size(
int width,
int height);
291 int get_width()
const;
294 int get_height()
const;
303 void set_position(
int x,
int y);
306 int get_handle()
const;
319 void set_current()
const;
333 void redisplay()
const;
343 void redisplay_t()
const;
355 bool is_thread_safe()
const;
366 void set_display_callback(boost::function0<void> cb);
368 const boost::function0<void>& get_display_callback()
const;
376 static void set_idle_callback(boost::function0<void> cb);
381 void set_reshape_callback(boost::function2<void, int, int> cb);
386 void set_keyboard_callback(boost::function3<void, unsigned char, int, int> cb);
391 void set_mouse_callback(boost::function4<void, int, int, int, int> cb);
396 void set_motion_callback(boost::function2<void, int, int> cb);
401 void set_passive_motion_callback(boost::function2<void, int, int> cb);
406 void set_special_callback(boost::function3<void, int, int, int> cb);
421 void clear_display_callback() ;
427 static void clear_idle_callback();
434 void clear_reshape_callback();
440 void clear_keyboard_callback();
447 void clear_mouse_callback();
454 void clear_motion_callback();
461 void clear_passive_motion_callback();
468 void clear_special_callback();
475 void clear_callbacks();
481 Glut_window(
const Glut_window&){}
482 Glut_window& operator=(
const Glut_window&) {
return *
this; }
507 void display_callback()
const;
513 void reshape_callback(
int w,
int h);
515 void keyboard_callback(
unsigned char k,
int x,
int y)
const;
517 void mouse_callback(
int button,
int state,
int x,
int y)
const;
519 void motion_callback(
int x,
int y)
const;
521 void passive_motion_callback(
int x,
int y)
const;
523 void special_callback(
int k,
int x,
int y)
const;
528 friend void glut_window_display_callback();
529 friend void glut_window_reshape_callback(
int,
int);
530 friend void glut_window_keyboard_callback(
unsigned char,
int,
int);
531 friend void glut_window_mouse_callback(
int,
int,
int,
int);
532 friend void glut_window_motion_callback(
int,
int);
533 friend void glut_window_passive_motion_callback(
int,
int);
534 friend void glut_window_special_callback(
int,
int,
int);
545 boost::function0<void>* display_callback_;
546 boost::function2<void, int, int>* reshape_callback_;
547 boost::function3<void, unsigned char, int, int>* keyboard_callback_;
548 boost::function4<void, int, int, int, int>* mouse_callback_;
549 boost::function2<void, int, int>* motion_callback_;
550 boost::function2<void, int, int>* passive_motion_callback_;
551 boost::function3<void, int, int, int>* special_callback_;
553 static const char* DEFAULT_WINDOW_TITLE;
for k
Definition: APPgetLargeConnectedEdges.m:61
height
Definition: APPgetLargeConnectedEdges.m:33
x
Definition: APPgetLargeConnectedEdges.m:100
end get the endpoints of the long edges and an image of the long edges for id
Definition: APPgetLargeConnectedEdges.m:96
get the indices of edges in each direction for i
Definition: APPgetLargeConnectedEdges.m:48
Support for error handling exception classes in libKJB.