|
@@ -2702,6 +2702,7 @@ Color DisplayServerMacOS::screen_get_pixel(const Point2i &p_position) const {
|
|
position += _get_screens_origin();
|
|
position += _get_screens_origin();
|
|
position /= screen_get_max_scale();
|
|
position /= screen_get_max_scale();
|
|
|
|
|
|
|
|
+ Color color;
|
|
for (NSScreen *screen in [NSScreen screens]) {
|
|
for (NSScreen *screen in [NSScreen screens]) {
|
|
NSRect frame = [screen frame];
|
|
NSRect frame = [screen frame];
|
|
if (NSMouseInRect(NSMakePoint(position.x, position.y), frame, NO)) {
|
|
if (NSMouseInRect(NSMakePoint(position.x, position.y), frame, NO)) {
|
|
@@ -2709,18 +2710,22 @@ Color DisplayServerMacOS::screen_get_pixel(const Point2i &p_position) const {
|
|
CGDirectDisplayID display_id = [[screenDescription objectForKey:@"NSScreenNumber"] unsignedIntValue];
|
|
CGDirectDisplayID display_id = [[screenDescription objectForKey:@"NSScreenNumber"] unsignedIntValue];
|
|
CGImageRef image = CGDisplayCreateImageForRect(display_id, CGRectMake(position.x - frame.origin.x, frame.size.height - (position.y - frame.origin.y), 1, 1));
|
|
CGImageRef image = CGDisplayCreateImageForRect(display_id, CGRectMake(position.x - frame.origin.x, frame.size.height - (position.y - frame.origin.y), 1, 1));
|
|
if (image) {
|
|
if (image) {
|
|
- NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:image];
|
|
|
|
- CGImageRelease(image);
|
|
|
|
- NSColor *color = [bitmap colorAtX:0 y:0];
|
|
|
|
- if (color) {
|
|
|
|
- CGFloat components[4];
|
|
|
|
- [color getRed:&components[0] green:&components[1] blue:&components[2] alpha:&components[3]];
|
|
|
|
- return Color(components[0], components[1], components[2], components[3]);
|
|
|
|
|
|
+ CGColorSpaceRef color_space = CGColorSpaceCreateDeviceRGB();
|
|
|
|
+ if (color_space) {
|
|
|
|
+ uint8_t img_data[4];
|
|
|
|
+ CGContextRef context = CGBitmapContextCreate(img_data, 1, 1, 8, 4, color_space, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
|
|
|
|
+ if (context) {
|
|
|
|
+ CGContextDrawImage(context, CGRectMake(0, 0, 1, 1), image);
|
|
|
|
+ color = Color(img_data[0] / 255.0f, img_data[1] / 255.0f, img_data[2] / 255.0f, img_data[3] / 255.0f);
|
|
|
|
+ CGContextRelease(context);
|
|
|
|
+ }
|
|
|
|
+ CGColorSpaceRelease(color_space);
|
|
}
|
|
}
|
|
|
|
+ CGImageRelease(image);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return Color();
|
|
|
|
|
|
+ return color;
|
|
}
|
|
}
|
|
|
|
|
|
Ref<Image> DisplayServerMacOS::screen_get_image(int p_screen) const {
|
|
Ref<Image> DisplayServerMacOS::screen_get_image(int p_screen) const {
|