|  |  | @@ -39,9 +39,9 @@ | 
		
	
		
			
			|  |  |  | Creates transparently a cairo_surface_t object. | 
		
	
		
			
			|  |  |  | 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) | 
		
	
		
			
			|  |  |  | 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) | 
		
	
		
			
			|  |  |  | return cairo_win32_surface_create((HDC) gc); | 
		
	
		
			
			|  |  |  | # 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_t *fl_cairo_context; | 
		
	
		
			
			|  |  |  | static Window real_xid; | 
		
	
		
			
			|  |  |  | static int W, H; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | cairo_t * | 
		
	
		
			
			|  |  |  | Fl::cairo_make_current(Fl_Window* wi) { | 
		
	
		
			
			|  |  |  | 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 ) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | /* 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 ); | 
		
	
		
			
			|  |  |  | //        cairo_surface_destroy( s ); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | fl_cairo_surface = wi->i->cs; | 
		
	
		
			
			|  |  |  | fl_cairo_context = wi->i->cc; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | printf( "NTK: cairo_make_current()\n" ); | 
		
	
		
			
			|  |  |  | 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 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // | 
		
	
	
		
			
				|  |  | 
 |