static CGDirectDisplayID screen(void* w) { HIRect bounds; OSStatus err = HIWindowGetBounds((WindowRef)w, kWindowGlobalPortRgn, kHICoordSpace72DPIGlobal, &bounds); if (err) { lprintf("HIWindowGetBounds failed: %d\n", err); return CGMainDisplayID(); } CGDirectDisplayID display; CGDisplayCount displayCount; CGDisplayErr e = CGGetDisplaysWithRect(bounds, 1, &display, &displayCount); return (displayCount && !e) ? display : CGMainDisplayID(); }
void QuartzWindow::get_window_region_rect(int wh, Rect* r) { HIRect bounds; OSStatus err = HIWindowGetBounds(my_window(), wh, kHICoordSpace72DPIGlobal, &bounds); if (err) { lprintf("HIWindowGetBounds failed: %d\n", err); r->left = r->top = 0; r->bottom = r->right = 1; } else { r->left = (short) CGRectGetMinX(bounds); r->top = (short) CGRectGetMinY(bounds); r->bottom = (short) CGRectGetMaxY(bounds); r->right = (short) CGRectGetMaxX(bounds); } }
oop GetWindowRegion_wrap( WindowRef w, uint16 reg, void* FH) { // // TODO: GetWindoRegion is deprecated and not avialiable in >=10.7 // For now, we emulate with HIWindowGetBounds // HIRect bounds; OSStatus err = HIWindowGetBounds((WindowRef)w, reg, kHICoordSpace72DPIGlobal, &bounds); if (err) { return (oop)reportOSError(err, "GetWindowRegion", FH); } objVectorOop r = Memory->objVectorObj->cloneSize(4); // r->obj_at_put(0, as_floatOop(CGRectGetMinX(bounds)), false); // r->obj_at_put(1, as_floatOop(CGRectGetMinY(bounds)), false); // r->obj_at_put(2, as_floatOop(CGRectGetMaxX(bounds)), false); // r->obj_at_put(3, as_floatOop(CGRectGetMaxY(bounds)), false); r->obj_at_put(0, as_smiOop((short)CGRectGetMinX(bounds)), false); r->obj_at_put(1, as_smiOop((short)CGRectGetMinY(bounds)), false); r->obj_at_put(2, as_smiOop((short)CGRectGetMaxX(bounds)), false); r->obj_at_put(3, as_smiOop((short)CGRectGetMaxY(bounds)), false); return r; }