Exemplo n.º 1
0
//New creates a new tee surface.
//
//Originally cairo_tee_surface_create.
func New(masterSurface cairo.Surface, surfaces ...cairo.Surface) (Surface, error) {
	m := C.cairo_tee_surface_create(masterSurface.XtensionRaw())
	for _, s := range surfaces {
		C.cairo_tee_surface_add(m, s.XtensionRaw())
	}
	S := Surface{cairo.NewXtensionPagedVectorSurface(m)}
	return S, S.Err()
}
Exemplo n.º 2
0
func embed(s cairo.Surface, mime mime, bs []byte) error {
	raw := s.XtensionRaw()
	len := C.size_t(uintptr(len(bs)))

	//We make this copy as bs will be GC'd.
	//We could track the object lifetime and cache the []byte in this package
	//until it is destroyed, which is a fine optimization but necessitates a lot
	//of code.
	data := (*C.uchar)(C.malloc(len))
	C.memcpy(unsafe.Pointer(data), unsafe.Pointer(&bs[0]), len)

	st := C.cairo_surface_set_mime_data(raw, mime.c(), data, C.ulong(len), C.gocairo_free_get(), nil)
	if st != C.CAIRO_STATUS_SUCCESS {
		return errors.New("could not set mime data")
	}

	return nil
}
Exemplo n.º 3
0
//Proxy creates a script surface p that renders to s and records to d.
//
//Originally cairo_script_surface_create_for_target.
func (d Device) Proxy(s cairo.Surface) (p Surface, err error) {
	sr := C.cairo_script_surface_create_for_target(d.XtensionRaw(), s.XtensionRaw())
	return cNewSurf(sr)
}