Use the Quartz core graphics API to implement gimp_pick_button_pick when building with GDK Quartz.

Signed-off-by: Clayton Walker <clayton.m.walker@gmail.com>
This commit is contained in:
Daniel Sabo 2012-05-28 07:36:36 -07:00 committed by Clayton Walker
parent c15f9799c1
commit e6ed0a4c50
1 changed files with 24 additions and 0 deletions

View File

@ -35,6 +35,9 @@
#include "libgimp/libgimp-intl.h" #include "libgimp/libgimp-intl.h"
#ifdef GDK_WINDOWING_QUARTZ
#include <ApplicationServices/ApplicationServices.h>
#endif
/** /**
* SECTION: gimppickbutton * SECTION: gimppickbutton
@ -354,6 +357,7 @@ gimp_pick_button_pick (GdkScreen *screen,
gint y_root, gint y_root,
GimpPickButton *button) GimpPickButton *button)
{ {
#ifndef GDK_WINDOWING_QUARTZ
GdkWindow *root_window = gdk_screen_get_root_window (screen); GdkWindow *root_window = gdk_screen_get_root_window (screen);
cairo_surface_t *image; cairo_surface_t *image;
cairo_t *cr; cairo_t *cr;
@ -377,5 +381,25 @@ gimp_pick_button_pick (GdkScreen *screen,
gimp_rgba_set_uchar (&rgb, color[0], color[1], color[2], 1.0); gimp_rgba_set_uchar (&rgb, color[0], color[1], color[2], 1.0);
#else /* GDK_WINDOWING_QUARTZ */
CGImageRef root_image_ref;
CFDataRef pixel_data;
const guchar *data;
GimpRGB rgb;
CGRect rect = CGRectMake (x_root, y_root, 1, 1);
root_image_ref = CGWindowListCreateImage (rect,
kCGWindowListOptionOnScreenOnly,
kCGNullWindowID,
kCGWindowImageDefault);
pixel_data = CGDataProviderCopyData(CGImageGetDataProvider(root_image_ref));
data = CFDataGetBytePtr(pixel_data);
gimp_rgba_set_uchar (&rgb, data[2], data[1], data[0], 1.0);
CGImageRelease (root_image_ref);
CFRelease (pixel_data);
#endif /* GDK_WINDOWING_QUARTZ */
g_signal_emit (button, pick_button_signals[COLOR_PICKED], 0, &rgb); g_signal_emit (button, pick_button_signals[COLOR_PICKED], 0, &rgb);
} }