//export areaView_drawRect func areaView_drawRect(self C.id, rect C.struct_xrect) { s := getSysData(self) // no need to clear the clip rect; the NSScrollView does that for us (see the setDrawsBackground: call in objc_darwin.m) // rectangles in Cocoa are origin/size, not point0/point1; if we don't watch for this, weird things will happen when scrolling cliprect := image.Rect(int(rect.x), int(rect.y), int(rect.x+rect.width), int(rect.y+rect.height)) max := C.frame(self) cliprect = image.Rect(0, 0, int(max.width), int(max.height)).Intersect(cliprect) if cliprect.Empty() { // no intersection; nothing to paint return } i := s.handler.Paint(cliprect) C.drawImage( unsafe.Pointer(pixelData(i)), C.intptr_t(i.Rect.Dx()), C.intptr_t(i.Rect.Dy()), C.intptr_t(i.Stride), C.intptr_t(cliprect.Min.X), C.intptr_t(cliprect.Min.Y)) }
//export areaView_drawRect func areaView_drawRect(self C.id, rect C.struct_xrect, data unsafe.Pointer) { a := (*area)(data) // no need to clear the clip rect; the NSScrollView does that for us (see the setDrawsBackground: call in objc_darwin.m) // rectangles in Cocoa are origin/size, not point0/point1; if we don't watch for this, weird things will happen when scrolling cliprect := image.Rect(int(rect.x), int(rect.y), int(rect.x+rect.width), int(rect.y+rect.height)) cliprect = image.Rect(0, 0, int(a.width), int(a.height)).Intersect(cliprect) if cliprect.Empty() { // no intersection; nothing to paint return } i := a.handler.Paint(cliprect) success := C.drawImage( unsafe.Pointer(pixelData(i)), C.intptr_t(i.Rect.Dx()), C.intptr_t(i.Rect.Dy()), C.intptr_t(i.Stride), C.intptr_t(cliprect.Min.X), C.intptr_t(cliprect.Min.Y)) if success == C.NO { panic("error drawing into Area (exactly what is unknown)") } }