35
35
#include <gtk/gtk.h>
37
#ifdef GDK_WINDOWING_QUARTZ
38
#include <Carbon/Carbon.h>
39
#include <ApplicationServices/ApplicationServices.h>
40
#include <CoreServices/CoreServices.h>
37
43
#include "libgimpcolor/gimpcolor.h"
38
44
#include "libgimpconfig/gimpconfig.h"
39
45
#include "libgimpmath/gimpmath.h"
204
*name = cmsTakeProductName (profile);
205
if (! g_utf8_validate (*name, -1, NULL))
210
*name = cmsTakeProductDesc (profile);
213
*name = cmsTakeProductName (profile);
215
if (*name && ! g_utf8_validate (*name, -1, NULL))
206
216
*name = _("(invalid UTF-8 string)");
208
218
*info = cmsTakeProductInfo (profile);
209
if (! g_utf8_validate (*info, -1, NULL))
219
if (*name && ! g_utf8_validate (*info, -1, NULL))
253
263
label = gtk_label_new (NULL);
264
gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
254
265
g_object_set_data (G_OBJECT (lcms), "rgb-profile", label);
255
266
cdisplay_lcms_attach_labelled (GTK_TABLE (table), row++,
256
267
_("Image profile:"),
258
269
cdisplay_lcms_update_profile_label (lcms, "rgb-profile");
260
271
label = gtk_label_new (NULL);
272
gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
261
273
g_object_set_data (G_OBJECT (lcms), "display-profile", label);
262
274
cdisplay_lcms_attach_labelled (GTK_TABLE (table), row++,
263
275
_("Monitor profile:"),
265
277
cdisplay_lcms_update_profile_label (lcms, "display-profile");
267
279
label = gtk_label_new (NULL);
280
gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
268
281
g_object_set_data (G_OBJECT (lcms), "printer-profile", label);
269
282
cdisplay_lcms_attach_labelled (GTK_TABLE (table), row++,
270
283
_("Print simulation profile:"),
341
361
if (! dest_profile)
342
362
dest_profile = cmsCreate_sRGBProfile ();
364
flags |= cmsFLAGS_SOFTPROOFING;
366
if (config->simulation_gamut_check)
370
flags |= cmsFLAGS_GAMUTCHECK;
372
gimp_rgb_get_uchar (&config->out_of_gamut_color, &r, &g, &b);
374
cmsSetAlarmCodes (r, g, b);
344
377
lcms->transform = cmsCreateProofingTransform (src_profile, TYPE_RGB_8,
345
378
dest_profile, TYPE_RGB_8,
347
380
config->simulation_intent,
348
381
config->display_intent,
349
cmsFLAGS_SOFTPROOFING);
350
383
cmsCloseProfile (proof_profile);
352
385
else if (src_profile || dest_profile)
449
cdisplay_lcms_get_screen (CdisplayLcms *lcms,
452
GimpColorManaged *managed;
455
managed = gimp_color_display_get_managed (GIMP_COLOR_DISPLAY (lcms));
457
if (GTK_IS_WIDGET (managed))
458
screen = gtk_widget_get_screen (GTK_WIDGET (managed));
460
screen = gdk_screen_get_default ();
462
g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
464
if (GTK_IS_WIDGET (managed) && GTK_WIDGET_DRAWABLE (managed))
466
GtkWidget *widget = GTK_WIDGET (managed);
468
*monitor = gdk_screen_get_monitor_at_window (screen, widget->window);
479
#ifdef GDK_WINDOWING_QUARTZ
489
openReadSpool = 1, /* start read data process */
490
openWriteSpool = 2, /* start write data process */
491
readSpool = 3, /* read specified number of bytes */
492
writeSpool = 4, /* write specified number of bytes */
493
closeSpool = 5 /* complete data transfer process */
497
lcms_cdisplay_lcms_flatten_profile (SInt32 command,
502
ProfileTransfer *transfer = refCon;
507
g_return_val_if_fail (transfer->data == NULL && transfer->len == 0, -1);
511
transfer->data = g_realloc (transfer->data, transfer->len + *size);
512
memcpy (transfer->data + transfer->len, data, *size);
513
transfer->len += *size;
523
#endif /* GDK_WINDOWING_QUARTZ */
415
526
static cmsHPROFILE
416
527
cdisplay_lcms_get_display_profile (CdisplayLcms *lcms)
421
532
config = gimp_color_display_get_config (GIMP_COLOR_DISPLAY (lcms));
423
#if defined (GDK_WINDOWING_X11)
534
#if defined GDK_WINDOWING_X11
424
535
if (config->display_profile_from_gdk)
426
GimpColorManaged *managed;
428
GdkAtom type = GDK_NONE;
433
managed = gimp_color_display_get_managed (GIMP_COLOR_DISPLAY (lcms));
435
if (GTK_IS_WIDGET (managed))
436
screen = gtk_widget_get_screen (GTK_WIDGET (managed));
538
GdkAtom type = GDK_NONE;
545
screen = cdisplay_lcms_get_screen (lcms, &monitor);
548
atom_name = g_strdup_printf ("_ICC_PROFILE_%d", monitor);
438
screen = gdk_screen_get_default ();
440
g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
550
atom_name = g_strdup ("_ICC_PROFILE");
442
552
if (gdk_property_get (gdk_screen_get_root_window (screen),
443
gdk_atom_intern ("_ICC_PROFILE", FALSE),
553
gdk_atom_intern (atom_name, FALSE),
445
555
0, 64 * 1024 * 1024, FALSE,
446
556
&type, &format, &nitems, &data) && nitems > 0)
448
558
profile = cmsOpenProfileFromMem (data, nitems);
565
#elif defined GDK_WINDOWING_QUARTZ
566
if (config->display_profile_from_gdk)
568
CMProfileRef prof = NULL;
571
cdisplay_lcms_get_screen (lcms, &monitor);
573
CMGetProfileByAVID (monitor, &prof);
577
ProfileTransfer transfer = { NULL, 0 };
580
CMFlattenProfile (prof, 0,
581
lcms_cdisplay_lcms_flatten_profile, &transfer,
583
CMCloseProfile (prof);
587
profile = cmsOpenProfileFromMem (transfer.data, transfer.len);
588
g_free (transfer.data);
452
593
#elif defined G_OS_WIN32
453
594
if (config->display_profile_from_gdk)
510
650
gimp_label_set_attributes (GTK_LABEL (label),
511
651
PANGO_ATTR_WEIGHT, PANGO_WEIGHT_BOLD,
513
gtk_table_attach (table, label, 0, 1, row, row + 1,
514
GTK_FILL, GTK_FILL, 0, 0);
653
gtk_table_attach (table, label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
515
654
gtk_widget_show (label);
524
663
g_object_set_data (G_OBJECT (label), "tooltip-widget", ebox);
527
hbox = gtk_hbox_new (FALSE, 0);
666
if (GTK_IS_LABEL (widget))
667
gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
530
gtk_container_add (GTK_CONTAINER (ebox), hbox);
670
gtk_container_add (GTK_CONTAINER (ebox), widget);
532
gtk_table_attach (table, hbox, 1, 2, row, row + 1,
672
gtk_table_attach (table, widget, 1, 2, row, row + 1,
533
673
GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
535
gtk_widget_show (hbox);
537
gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
538
675
gtk_widget_show (widget);