summaryrefslogtreecommitdiffstats
path: root/src/widgets/sp-color-notebook.cpp
diff options
context:
space:
mode:
authorFelipe Corr??a da Silva Sanches <juca@members.fsf.org>2009-08-14 06:34:14 +0000
committerJucaBlues <JucaBlues@users.sourceforge.net>2009-08-14 06:34:14 +0000
commitdd9b154edc3ee479a3932ae051498389e331812e (patch)
treed2e2e34585e5ba924a2c6e3e33240aaab5a23c54 /src/widgets/sp-color-notebook.cpp
parentpreserving icc colors in all tabs of fill&stroke (diff)
downloadinkscape-dd9b154edc3ee479a3932ae051498389e331812e.tar.gz
inkscape-dd9b154edc3ee479a3932ae051498389e331812e.zip
Initial draft of the out-of-gamut check. It is not working yet. I will continue work on it tomorrow.
(bzr r8050.1.12)
Diffstat (limited to 'src/widgets/sp-color-notebook.cpp')
-rw-r--r--src/widgets/sp-color-notebook.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp
index 44de40115..5eb44c2cb 100644
--- a/src/widgets/sp-color-notebook.cpp
+++ b/src/widgets/sp-color-notebook.cpp
@@ -32,6 +32,10 @@
#include "sp-color-scales.h"
#include "sp-color-icc-selector.h"
#include "sp-color-wheel-selector.h"
+#include "svg/svg-icc-color.h"
+#include "../inkscape.h"
+#include "../document.h"
+#include "../profile-manager.h"
struct SPColorNotebookTracker {
const gchar* name;
@@ -504,6 +508,35 @@ void ColorNotebook::_updateRgbaEntry( const SPColor& color, gfloat alpha )
/* update color management icon*/
gtk_widget_set_sensitive (_box_colormanaged, color.icc != NULL);
+ /* update out-of-gamut icon */
+ gtk_widget_set_sensitive (_box_outofgamut, false);
+ if (color.icc){
+ BYTE outofgamut;
+ cmsSetAlarmCodes(255, 255, 255);
+ static cmsHPROFILE hNULL = cmsCreateNULLProfile();
+ static cmsHPROFILE hsRGB = cmsCreate_sRGBProfile();
+
+ cmsHTRANSFORM trans;
+ Inkscape::ColorProfile* target_profile = SP_ACTIVE_DOCUMENT->profileManager->find(color.icc->colorProfile.c_str());
+ if ( target_profile ) {
+ trans = cmsCreateProofingTransform(hsRGB, TYPE_RGB_DBL, hNULL, TYPE_GRAY_8, target_profile->profHandle,
+ INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, (cmsFLAGS_GAMUTCHECK|cmsFLAGS_SOFTPROOFING));
+
+ if ( trans ) {
+ guint32 val = color.toRGBA32(0);
+ guchar check_color[4] = {
+ SP_RGBA32_R_U(val),
+ SP_RGBA32_G_U(val),
+ SP_RGBA32_B_U(val),
+ 255};
+
+ cmsDoTransform(trans, &check_color, &outofgamut, 1);
+ gtk_widget_set_sensitive (_box_outofgamut, outofgamut == 255);
+ }
+ }
+ }
+
+
if ( !_updatingrgba )
{
gchar s[32];