forked from ungerik/go-cairo
/
surface_xcb.go
26 lines (19 loc) · 1011 Bytes
/
surface_xcb.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package cairo
// #cgo LDFLAGS: -lcairo -lxcb
// #include <cairo/cairo-xcb.h>
// #include <stdlib.h>
import "C"
import "github.com/BurntSushi/xgb/xproto"
func NewSurfaceFromXCB(xcb_drawable xproto.Drawable, xcb_VI xproto.VisualInfo, width, height int) *Surface {
var xcb_visualtype C.xcb_visualtype_t
xcb_visualtype.visual_id = C.xcb_visualid_t(xcb_VI.VisualId)
xcb_visualtype._class = C.uint8_t(xcb_VI.Class)
xcb_visualtype.bits_per_rgb_value = C.uint8_t(xcb_VI.BitsPerRgbValue)
xcb_visualtype.colormap_entries = C.uint16_t(xcb_VI.ColormapEntries)
xcb_visualtype.red_mask = C.uint32_t(xcb_VI.RedMask)
xcb_visualtype.green_mask = C.uint32_t(xcb_VI.GreenMask)
xcb_visualtype.blue_mask = C.uint32_t(xcb_VI.BlueMask)
var connect_xcb (*C.xcb_connection_t) = C.xcb_connect(nil, nil);
s := C.cairo_xcb_surface_create( connect_xcb, C.xcb_drawable_t(xcb_drawable), &xcb_visualtype, C.int(width), C.int(height));
return &Surface{ surface: s, context: C.cairo_create(s) }
}