本文整理匯總了Golang中C.cairo_surface_destroy函數的典型用法代碼示例。如果您正苦於以下問題:Golang cairo_surface_destroy函數的具體用法?Golang cairo_surface_destroy怎麽用?Golang cairo_surface_destroy使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了cairo_surface_destroy函數的13個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: Destroy
func (s *CairoSurface) Destroy() error {
C.cairo_surface_destroy(s.nativePointer())
if err := s.status(); err != nil {
return err
}
*s = 0
return nil
}
示例2: Close
//Close frees the resources used by this surface.
//
//Originally cairo_surface_destroy.
func (e *XtensionSurface) Close() error {
if e.s == nil {
return nil
}
err := e.Err()
C.cairo_surface_destroy(e.s)
e.s = nil
runtime.SetFinalizer(e, nil)
return err
}
示例3: GetSnapshotCustom
// GetSnapshotCustom runs asynchronously, taking a snapshot of the WebView.
// Upon completion, resultCallback will be called with a copy of the underlying
// bitmap backing store for the frame, or with an error encountered during
// execution.
//
// See also: webkit_web_view_get_snapshot at
// http://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebView.html#webkit-web-view-get-snapshot
func (v *WebView) GetSnapshotCustom(region SnapshotRegion, options SnapshotOptions, resultCallback func(result *image.RGBA, err error)) {
var cCallback C.GAsyncReadyCallback
var userData C.gpointer
var err error
if resultCallback != nil {
callback := func(result *C.GAsyncResult) {
var snapErr *C.GError
snapResult := C.webkit_web_view_get_snapshot_finish(v.webView, result, &snapErr)
if snapResult == nil {
defer C.g_error_free(snapErr)
msg := C.GoString((*C.char)(snapErr.message))
resultCallback(nil, errors.New(msg))
return
}
defer C.cairo_surface_destroy(snapResult)
if C.cairo_surface_get_type(snapResult) != cairoSurfaceTypeImage ||
C.cairo_image_surface_get_format(snapResult) != cairoImageSurfaceFormatARGB32 {
panic("Snapshot in unexpected format")
}
w := int(C.cairo_image_surface_get_width(snapResult))
h := int(C.cairo_image_surface_get_height(snapResult))
stride := int(C.cairo_image_surface_get_stride(snapResult))
C.cairo_surface_flush(snapResult)
data := unsafe.Pointer(C.cairo_image_surface_get_data(snapResult))
//(miha) fix endianes depended byte order, and copy to go slice at the same time.
data_fixed := make([]byte, stride*h)
C.gowk2_cairo_endian_depended_ARGB32_to_RGBA((*C.uchar)(data), (*C.uchar)(&data_fixed[0]), C.uint(stride*h))
rgba := &image.RGBA{data_fixed, stride, image.Rect(0, 0, w, h)}
// slower but doesn't use Go pointers inside C. See https://github.com/golang/go/issues/8310 !!!!!!!
//C.gowk2_cairo_endian_depended_ARGB32_to_RGBA((*C.uchar)(data), C.uint(stride*h))
//rgba := &image.RGBA{C.GoBytes(data, C.int(stride*h)), stride, image.Rect(0, 0, w, h)}
resultCallback(rgba, nil)
}
cCallback, userData, err = newGAsyncReadyCallback(callback)
if err != nil {
panic(err)
}
}
C.webkit_web_view_get_snapshot(v.webView,
(C.WebKitSnapshotRegion)(region),
(C.WebKitSnapshotOptions)(options),
nil,
cCallback,
userData)
}
示例4: Append
func (i *imagelist) Append(img *image.RGBA) {
var width, height C.gint
surface := C.cairo_image_surface_create(C.CAIRO_FORMAT_ARGB32,
C.int(img.Rect.Dx()),
C.int(img.Rect.Dy()))
if status := C.cairo_surface_status(surface); status != C.CAIRO_STATUS_SUCCESS {
panic(fmt.Errorf("cairo_create_image_surface() failed in ImageList.Append(): %s\n",
C.GoString(C.cairo_status_to_string(status))))
}
C.cairo_surface_flush(surface)
toARGB(img, uintptr(unsafe.Pointer(C.cairo_image_surface_get_data(surface))),
int(C.cairo_image_surface_get_stride(surface)), false) // not NRGBA
C.cairo_surface_mark_dirty(surface)
basepixbuf := C.gdk_pixbuf_get_from_surface(surface, 0, 0, C.gint(img.Rect.Dx()), C.gint(img.Rect.Dy()))
if basepixbuf == nil {
panic(fmt.Errorf("gdk_pixbuf_get_from_surface() failed in ImageList.Append() (no reason available)"))
}
if C.gtk_icon_size_lookup(scaleTo, &width, &height) == C.FALSE {
panic(fmt.Errorf("gtk_icon_size_lookup() failed in ImageList.Append() (no reason available)"))
}
if int(width) == img.Rect.Dx() && int(height) == img.Rect.Dy() {
// just add the base pixbuf; we're good
i.list = append(i.list, basepixbuf)
C.cairo_surface_destroy(surface)
return
}
// else scale
pixbuf := C.gdk_pixbuf_scale_simple(basepixbuf, C.int(width), C.int(height), C.GDK_INTERP_NEAREST)
if pixbuf == nil {
panic(fmt.Errorf("gdk_pixbuf_scale_simple() failed in ImageList.Append() (no reason available)"))
}
i.list = append(i.list, pixbuf)
C.gdk_pixbuf_unref(basepixbuf)
C.cairo_surface_destroy(surface)
}
示例5: GetSnapshot
// GetSnapshot runs asynchronously, taking a snapshot of the WebView.
// Upon completion, resultCallback will be called with a copy of the underlying
// bitmap backing store for the frame, or with an error encountered during
// execution.
//
// See also: webkit_web_view_get_snapshot at
// http://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebView.html#webkit-web-view-get-snapshot
func (v *WebView) GetSnapshot(resultCallback func(result *image.RGBA, err error)) {
var cCallback C.GAsyncReadyCallback
var userData C.gpointer
var err error
if resultCallback != nil {
callback := func(result *C.GAsyncResult) {
var snapErr *C.GError
snapResult := C.webkit_web_view_get_snapshot_finish(v.webView, result, &snapErr)
if snapResult == nil {
defer C.g_error_free(snapErr)
msg := C.GoString((*C.char)(snapErr.message))
resultCallback(nil, errors.New(msg))
return
}
defer C.cairo_surface_destroy(snapResult)
if C.cairo_surface_get_type(snapResult) != cairoSurfaceTypeImage ||
C.cairo_image_surface_get_format(snapResult) != cairoImageSurfaceFormatARB32 {
panic("Snapshot in unexpected format")
}
w := int(C.cairo_image_surface_get_width(snapResult))
h := int(C.cairo_image_surface_get_height(snapResult))
stride := int(C.cairo_image_surface_get_stride(snapResult))
data := unsafe.Pointer(C.cairo_image_surface_get_data(snapResult))
rgba := &image.RGBA{C.GoBytes(data, C.int(stride*h)), stride, image.Rect(0, 0, w, h)}
resultCallback(rgba, nil)
}
cCallback, userData, err = newGAsyncReadyCallback(callback)
if err != nil {
panic(err)
}
}
C.webkit_web_view_get_snapshot(v.webView,
(C.WebKitSnapshotRegion)(1), // FullDocument is the only working region at this point
(C.WebKitSnapshotOptions)(0),
nil,
cCallback,
userData)
}
示例6: our_area_draw_callback
//export our_area_draw_callback
func our_area_draw_callback(widget *C.GtkWidget, cr *C.cairo_t, data C.gpointer) C.gboolean {
var x0, y0, x1, y1 C.double
var maxwid, maxht C.gint
s := (*sysData)(unsafe.Pointer(data))
// thanks to desrt in irc.gimp.net/#gtk+
// these are in user coordinates, which match what coordinates we want by default, even out of a draw event handler (thanks johncc3, mclasen, and Company in irc.gimp.net/#gtk+)
C.cairo_clip_extents(cr, &x0, &y0, &x1, &y1)
// we do not need to clear the cliprect; GtkDrawingArea did it for us beforehand
cliprect := image.Rect(int(x0), int(y0), int(x1), int(y1))
// the cliprect can actually fall outside the size of the Area; clip it by intersecting the two rectangles
C.gtk_widget_get_size_request(widget, &maxwid, &maxht)
cliprect = image.Rect(0, 0, int(maxwid), int(maxht)).Intersect(cliprect)
if cliprect.Empty() { // no intersection; nothing to paint
return C.FALSE // signals handled without stopping the event chain (thanks to desrt again)
}
i := s.handler.Paint(cliprect)
surface := C.cairo_image_surface_create(
C.CAIRO_FORMAT_ARGB32, // alpha-premultiplied; native byte order
C.int(i.Rect.Dx()),
C.int(i.Rect.Dy()))
if status := C.cairo_surface_status(surface); status != C.CAIRO_STATUS_SUCCESS {
panic(fmt.Errorf("cairo_create_image_surface() failed: %s\n",
C.GoString(C.cairo_status_to_string(status))))
}
// the flush and mark_dirty calls are required; see the cairo docs and https://git.gnome.org/browse/gtk+/tree/gdk/gdkcairo.c#n232 (thanks desrt in irc.gimp.net/#gtk+)
C.cairo_surface_flush(surface)
toARGB(i, uintptr(unsafe.Pointer(C.cairo_image_surface_get_data(surface))),
int(C.cairo_image_surface_get_stride(surface)))
C.cairo_surface_mark_dirty(surface)
C.cairo_set_source_surface(cr,
surface,
0, 0) // origin of the surface
// that just set the brush that cairo uses: we have to actually draw now
// (via https://developer.gnome.org/gtkmm-tutorial/stable/sec-draw-images.html.en)
C.cairo_rectangle(cr, x0, y0, x1, y1) // breaking the nrom here since we have the coordinates as a C double already
C.cairo_fill(cr)
C.cairo_surface_destroy(surface) // free surface
return C.FALSE // signals handled without stopping the event chain (thanks to desrt again)
}
示例7: Destroy
func (self *Surface) Destroy() {
C.cairo_destroy(self.context)
C.cairo_surface_destroy(self.surface)
}
示例8: destroy
// destroy is a wrapper around cairo_surface_destroy().
func (v *Surface) destroy() {
C.cairo_surface_destroy(v.native())
}
示例9: destroy
func (self *Surface) destroy() { C.cairo_surface_destroy(self.surface) }
示例10: Close
// completes and closes the file being written to
func (g *Graphic) Close() error {
// destroy the context
err := g.cairoStatus()
if err != nil {
return err
}
C.cairo_destroy(g.cr)
// finishing the surface writes pdf, ps, and svg files
C.cairo_surface_finish(g.surface)
err = g.cairoSurfaceStatus()
if err != nil {
return err
}
// write other formats
switch g.format {
case "eps", "pdf", "ps", "svg":
// cairo_surface_finish writes the surface to file
case "png":
img, err := g.Image()
if err != nil {
return err
}
file, err := os.Create(g.filename)
if err != nil {
return err
}
defer file.Close()
err = png.Encode(file, img)
if err != nil {
return err
}
case "jpeg":
img, err := g.Image()
if err != nil {
return err
}
file, err := os.Create(g.filename)
if err != nil {
return err
}
defer file.Close()
err = jpeg.Encode(file, img, nil)
if err != nil {
return err
}
default:
panic("unsupported format: " + g.format)
}
// destroy the surface
C.cairo_surface_destroy(g.surface)
err = g.cairoSurfaceStatus()
if err != nil {
return err
}
return nil
}
示例11: GetSnapshot
// GetSnapshot runs asynchronously, taking a snapshot of the WebView.
// Upon completion, resultCallback will be called with a copy of the underlying
// bitmap backing store for the frame, or with an error encountered during
// execution.
//
// See also: webkit_web_view_get_snapshot at
// http://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebView.html#webkit-web-view-get-snapshot
func (v *WebView) GetSnapshot(resultCallback func(result *image.RGBA, err error)) {
var cCallback C.GAsyncReadyCallback
var userData C.gpointer
var err error
if resultCallback != nil {
callback := func(result *C.GAsyncResult) {
var snapErr *C.GError
snapResult := C.webkit_web_view_get_snapshot_finish(v.webView, result, &snapErr)
if snapResult == nil {
defer C.g_error_free(snapErr)
msg := C.GoString((*C.char)(snapErr.message))
resultCallback(nil, errors.New(msg))
return
}
defer C.cairo_surface_destroy(snapResult)
if C.cairo_surface_get_type(snapResult) != cairoSurfaceTypeImage ||
C.cairo_image_surface_get_format(snapResult) != cairoImageSurfaceFormatARGB32 {
panic("Snapshot in unexpected format")
}
w := int(C.cairo_image_surface_get_width(snapResult))
h := int(C.cairo_image_surface_get_height(snapResult))
stride := int(C.cairo_image_surface_get_stride(snapResult))
data := unsafe.Pointer(C.cairo_image_surface_get_data(snapResult))
surfaceBytes := C.GoBytes(data, C.int(stride*h))
// convert from b,g,r,a or a,r,g,b(local endianness) to r,g,b,a
testint, _ := binary.ReadUvarint(bytes.NewBuffer([]byte{0x1, 0}))
if testint == 0x1 {
// Little: b,g,r,a -> r,g,b,a
for i := 0; i < w*h; i++ {
b := surfaceBytes[4*i+0]
r := surfaceBytes[4*i+2]
surfaceBytes[4*i+0] = r
surfaceBytes[4*i+2] = b
}
} else {
// Big: a,r,g,b -> r,g,b,a
for i := 0; i < w*h; i++ {
a := surfaceBytes[4*i+0]
r := surfaceBytes[4*i+1]
g := surfaceBytes[4*i+2]
b := surfaceBytes[4*i+3]
surfaceBytes[4*i+0] = r
surfaceBytes[4*i+1] = g
surfaceBytes[4*i+2] = b
surfaceBytes[4*i+3] = a
}
}
rgba := &image.RGBA{surfaceBytes, stride, image.Rect(0, 0, w, h)}
resultCallback(rgba, nil)
}
cCallback, userData, err = newGAsyncReadyCallback(callback)
if err != nil {
panic(err)
}
}
C.webkit_web_view_get_snapshot(v.webView,
(C.WebKitSnapshotRegion)(1), // FullDocument is the only working region at this point
(C.WebKitSnapshotOptions)(0),
nil,
cCallback,
userData)
}
示例12: Close
func (t *PDFStreamTextObject) Close() {
C.cairo_destroy(t.context)
C.cairo_surface_destroy(t.surface)
t.context = nil
t.surface = nil
}
示例13: go_genericGAsyncCallback
//export go_genericGAsyncCallback
func go_genericGAsyncCallback(source *C.GObject, result *C.GAsyncResult, callbackId *C.char) {
key := C.GoString(callbackId)
if obj, ok := cgoget(key); ok {
switch obj.(type) {
case *RunJavaScriptResponse:
var jserr *C.GError
response := obj.(*RunJavaScriptResponse)
if response.Autoremove {
defer cgounregister(key)
}
if jsResult := C.webkit_web_view_run_javascript_finish(response.CWebView, result, &jserr); jsResult == nil {
defer C.g_error_free(jserr)
msg := C.GoString((*C.char)(jserr.message))
response.Reply(nil, errors.New(msg))
} else {
ctxRaw := gojs.RawGlobalContext(unsafe.Pointer(C.webkit_javascript_result_get_global_context(jsResult)))
jsValRaw := gojs.RawValue(unsafe.Pointer(C.webkit_javascript_result_get_value(jsResult)))
ctx := (*gojs.Context)(gojs.NewGlobalContextFrom(ctxRaw))
jsVal := ctx.NewValueFrom(jsValRaw)
response.Reply(jsVal, nil)
}
case *GetSnapshotAsImageResponse:
var snapErr *C.GError
response := obj.(*GetSnapshotAsImageResponse)
if response.Autoremove {
defer cgounregister(key)
}
if snapResult := C.webkit_web_view_get_snapshot_finish(response.CWebView, result, &snapErr); snapResult == nil {
defer C.g_error_free(snapErr)
msg := C.GoString((*C.char)(snapErr.message))
response.Reply(nil, errors.New(msg))
} else {
defer C.cairo_surface_destroy(snapResult)
if C.cairo_surface_get_type(snapResult) != cairoSurfaceTypeImage ||
C.cairo_image_surface_get_format(snapResult) != cairoImageSurfaceFormatARGB32 {
response.Reply(nil, errors.New("Snapshot in unexpected format"))
return
}
w := int(C.cairo_image_surface_get_width(snapResult))
h := int(C.cairo_image_surface_get_height(snapResult))
stride := int(C.cairo_image_surface_get_stride(snapResult))
data := unsafe.Pointer(C.cairo_image_surface_get_data(snapResult))
surfaceBytes := C.GoBytes(data, C.int(stride*h))
// convert from b,g,r,a or a,r,g,b(local endianness) to r,g,b,a
testint, _ := binary.ReadUvarint(bytes.NewBuffer([]byte{0x1, 0}))
if testint == 0x1 {
// Little: b,g,r,a -> r,g,b,a
for i := 0; i < w*h; i++ {
b := surfaceBytes[4*i+0]
r := surfaceBytes[4*i+2]
surfaceBytes[4*i+0] = r
surfaceBytes[4*i+2] = b
}
} else {
// Big: a,r,g,b -> r,g,b,a
for i := 0; i < w*h; i++ {
a := surfaceBytes[4*i+0]
r := surfaceBytes[4*i+1]
g := surfaceBytes[4*i+2]
b := surfaceBytes[4*i+3]
surfaceBytes[4*i+0] = r
surfaceBytes[4*i+1] = g
surfaceBytes[4*i+2] = b
surfaceBytes[4*i+3] = a
}
}
rgba := &image.RGBA{
Pix: surfaceBytes,
Stride: stride,
Rect: image.Rect(0, 0, w, h),
}
response.Reply(rgba, nil)
}
case *GetSnapshotAsCairoSurfaceResponse:
var snapErr *C.GError
response := obj.(*GetSnapshotAsCairoSurfaceResponse)
snapResult := C.webkit_web_view_get_snapshot_finish(response.CWebView, result, &snapErr)
if snapResult == nil {
defer C.g_error_free(snapErr)
msg := C.GoString((*C.char)(snapErr.message))
response.Reply(nil, errors.New(msg))
//.........這裏部分代碼省略.........