|  | @@ -39,9 +39,9 @@ | 
														
													
														
															
																|  |  | Creates transparently a cairo_surface_t object. |  |  | Creates transparently a cairo_surface_t object. | 
														
													
														
															
																|  |  | gc is an HDC context in  WIN32, a CGContext* in Quartz, a display on X11 |  |  | gc is an HDC context in  WIN32, a CGContext* in Quartz, a display on X11 | 
														
													
														
															
																|  |  | */ |  |  | */ | 
														
													
														
															
																|  |  | cairo_surface_t * cairo_create_surface(void * gc, int W, int H) { |  |  |  | 
														
													
														
															
																|  |  |  |  |  | cairo_surface_t * cairo_create_surface(void * gc, Window w, int W, int H) { | 
														
													
														
															
																|  |  | # if defined(USE_X11) |  |  | # if defined(USE_X11) | 
														
													
														
															
																|  |  | return cairo_xlib_surface_create(fl_display, fl_window, fl_visual->visual, W, H); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | return cairo_xlib_surface_create(fl_display, w, fl_visual->visual, W, H); | 
														
													
														
															
																|  |  | # elif   defined(WIN32) |  |  | # elif   defined(WIN32) | 
														
													
														
															
																|  |  | return cairo_win32_surface_create((HDC) gc); |  |  | return cairo_win32_surface_create((HDC) gc); | 
														
													
														
															
																|  |  | # elif defined(__APPLE_QUARTZ__) |  |  | # elif defined(__APPLE_QUARTZ__) | 
														
													
												
													
														
															
																|  | @@ -53,31 +53,49 @@ cairo_surface_t * cairo_create_surface(void * gc, int W, int H) { | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | cairo_surface_t *fl_cairo_surface; |  |  | cairo_surface_t *fl_cairo_surface; | 
														
													
														
															
																|  |  | cairo_t *fl_cairo_context; |  |  | cairo_t *fl_cairo_context; | 
														
													
														
															
																|  |  |  |  |  | static Window real_xid; | 
														
													
														
															
																|  |  |  |  |  | static int W, H; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | cairo_t * |  |  | cairo_t * | 
														
													
														
															
																|  |  | Fl::cairo_make_current(Fl_Window* wi) { |  |  | Fl::cairo_make_current(Fl_Window* wi) { | 
														
													
														
															
																|  |  | if (!wi) return NULL; // Precondition |  |  | if (!wi) return NULL; // Precondition | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | Window w = wi->i->other_xid ? wi->i->other_xid : wi->i->xid; | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | if ( ( fl_cairo_context && fl_cairo_context == wi->i->cc ) && | 
														
													
														
															
																|  |  |  |  |  | w && w == real_xid && | 
														
													
														
															
																|  |  |  |  |  | wi->w() == W && wi->h() == H ) | 
														
													
														
															
																|  |  |  |  |  | /* already current */ | 
														
													
														
															
																|  |  |  |  |  | return wi->i->cc; | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | real_xid = w; | 
														
													
														
															
																|  |  |  |  |  | W = wi->w(); | 
														
													
														
															
																|  |  |  |  |  | H = wi->h(); | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | if ( wi->i->cs ) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | cairo_xlib_surface_set_drawable( wi->i->cs, w, wi->w(), wi->h() ); | 
														
													
														
															
																|  |  |  |  |  | cairo_destroy( wi->i->cc ); | 
														
													
														
															
																|  |  |  |  |  | wi->i->cc = 0; | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | else | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | wi->i->cs = cairo_create_surface(fl_gc, w, wi->w(), wi->h()); | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  | if ( ! wi->i->cc ) |  |  | if ( ! wi->i->cc ) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | /* set this window's context to be the current one */ |  |  | /* set this window's context to be the current one */ | 
														
													
														
															
																|  |  | wi->i->cs = cairo_create_surface(fl_gc, wi->w(), wi->h()); |  |  |  | 
														
													
														
															
																|  |  | wi->i->cc = cairo_create( wi->i->cs ); |  |  | wi->i->cc = cairo_create( wi->i->cs ); | 
														
													
														
															
																|  |  | //        cairo_surface_destroy( s ); |  |  |  | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | fl_cairo_surface = wi->i->cs; |  |  | fl_cairo_surface = wi->i->cs; | 
														
													
														
															
																|  |  | fl_cairo_context = wi->i->cc; |  |  | fl_cairo_context = wi->i->cc; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | printf( "NTK: cairo_make_current()\n" ); | 
														
													
														
															
																|  |  | return wi->i->cc; |  |  | return wi->i->cc; | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | void |  |  |  | 
														
													
														
															
																|  |  | Fl::cairo_set_drawable ( Fl_Window *wi ) |  |  |  | 
														
													
														
															
																|  |  | { |  |  |  | 
														
													
														
															
																|  |  | cairo_xlib_surface_set_drawable( wi->i->cs, fl_window, wi->w(), wi->h() ); |  |  |  | 
														
													
														
															
																|  |  | } |  |  |  | 
														
													
														
															
																|  |  | 
 |  |  |  | 
														
													
														
															
																|  |  | #endif // FLTK_HAVE_CAIRO |  |  | #endif // FLTK_HAVE_CAIRO | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | // |  |  | // | 
														
													
												
													
														
															
																|  | 
 |