-- cgit v1.2.3 From 77437ad04cbb9288b6e8898e8822a16588d55b4a Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Wed, 17 Jun 2009 16:58:37 +0000 Subject: adding a list of uint32 color references and forcing LCMS debugging (bzr r8050.1.2) --- color_uint32_references.txt | 163 ++++++++++++++++++++++++++++++++++ src/widgets/sp-color-icc-selector.cpp | 52 +++++------ 2 files changed, 189 insertions(+), 26 deletions(-) create mode 100644 color_uint32_references.txt diff --git a/color_uint32_references.txt b/color_uint32_references.txt new file mode 100644 index 000000000..da54edc3c --- /dev/null +++ b/color_uint32_references.txt @@ -0,0 +1,163 @@ +src/dropper-context.cpp:143:guint32 sp_dropper_context_get_color(SPEventContext *ec) +src/dropper-context.cpp:258: guint32 bg = sp_desktop_namedview(desktop)->pagecolor; +src/sp-namedview.cpp:60:static gboolean sp_nv_read_opacity(const gchar *str, guint32 *color); +src/sp-namedview.cpp:951:static gboolean sp_nv_read_opacity(const gchar *str, guint32 *color) +src/sp-namedview.cpp:964: *color = (*color & 0xffffff00) | (guint32) floor(v * 255.9999); +src/desktop-style.cpp:61: guint32 rgba = SP_RGBA32_F_COMPOSE(color[0], color[1], color[2], color[3]); +src/desktop-style.cpp:230: guint32 r = 0; // if there's no color, return black +src/desktop-style.cpp:308: guint32 r = 0; // if there's no color, return black +src/widgets/sp-color-wheel-selector.cpp:216: guint32 start = _color.toRGBA32( 0x00 ); +src/widgets/sp-color-wheel-selector.cpp:217: guint32 mid = _color.toRGBA32( 0x7f ); +src/widgets/sp-color-wheel-selector.cpp:218: guint32 end = _color.toRGBA32( 0xff ); +src/widgets/sp-color-wheel-selector.cpp:282: guint32 start = color.toRGBA32( 0x00 ); +src/widgets/sp-color-wheel-selector.cpp:283: guint32 mid = color.toRGBA32( 0x7f ); +src/widgets/sp-color-wheel-selector.cpp:284: guint32 end = color.toRGBA32( 0xff ); +src/widgets/sp-color-icc-selector.cpp:495: guint32 val = _color.toRGBA32(0); +src/widgets/sp-color-icc-selector.cpp:786: guint32 start = _color.toRGBA32( 0x00 ); +src/widgets/sp-color-icc-selector.cpp:787: guint32 mid = _color.toRGBA32( 0x7f ); +src/widgets/sp-color-icc-selector.cpp:788: guint32 end = _color.toRGBA32( 0xff ); +src/widgets/sp-color-icc-selector.cpp:851: guint32 prior = iccSelector->_color.toRGBA32(255); +src/widgets/paint-selector.cpp:1054: guint32 rgba = color.toRGBA32( alpha ); +src/widgets/sp-color-preview.cpp:133:sp_color_preview_new (guint32 rgba) +src/widgets/sp-color-preview.cpp:145:sp_color_preview_set_rgba32 (SPColorPreview *cp, guint32 rgba) +src/widgets/sp-color-slider.h:61:void sp_color_slider_set_colors (SPColorSlider *slider, guint32 start, guint32 mid, guint32 end); +src/widgets/gradient-vector.cpp:676:sp_average_color (guint32 c1, guint32 c2, gdouble p = 0.5) +src/widgets/gradient-vector.cpp:726: guint32 cnew = sp_average_color (c1, c2); +src/widgets/sp-color-slider.cpp:370:sp_color_slider_set_colors (SPColorSlider *slider, guint32 start, guint32 mid, guint32 end) +src/widgets/sp-color-preview.h:40:GtkWidget *sp_color_preview_new(guint32 rgba); +src/widgets/sp-color-preview.h:42:void sp_color_preview_set_rgba32(SPColorPreview *cp, guint32 color); +src/eraser-context.cpp:1017: guint32 fillColor = sp_desktop_get_color_tool (desktop, "/tools/eraser", true); +src/eraser-context.cpp:1018: //guint32 strokeColor = sp_desktop_get_color_tool (desktop, "/tools/eraser", false); +src/style.cpp:3101: guint32 const rgb0 = sp_svg_read_color(str, 0xff); +src/style.cpp:3158: guint32 const rgb0 = sp_svg_read_color(str, &str, 0xff); +src/draw-context.h:44: guint32 red_color; +src/draw-context.h:45: guint32 blue_color; +src/draw-context.h:46: guint32 green_color; +src/sp-guide.h:32: guint32 color; +src/sp-guide.h:33: guint32 hicolor; +src/color.h:67:guint32 sp_color_get_rgba32_ualpha (const SPColor *color, guint32 alpha); +src/color.h:68:guint32 sp_color_get_rgba32_falpha (const SPColor *color, float alpha); +src/svg/svg-color.cpp:202:sp_svg_read_color(gchar const *str, guint32 const dfl) +src/svg/svg-color.cpp:208:internal_sp_svg_read_color(gchar const *str, gchar const **end_ptr, guint32 def) +src/svg/svg-color.cpp:338:sp_svg_read_color(gchar const *str, gchar const **end_ptr, guint32 dfl) +src/svg/svg-color.cpp:343: guint32 const ret = internal_sp_svg_read_color(str, &end, dfl); +src/svg/svg-color.cpp:352: guint32 const check = internal_sp_svg_read_color(buf, &buf_end, 1); +src/svg/svg-color.cpp:430:sp_svg_write_color(gchar *buf, unsigned const buflen, guint32 const rgba32) +src/svg/svg-color-test.h:67: guint32 result = sp_svg_read_color( val[i], &end, 0x3 ); +src/svg/svg-color.h:8:guint32 sp_svg_read_color(gchar const *str, unsigned int dfl); +src/svg/svg-color.h:9:guint32 sp_svg_read_color(gchar const *str, gchar const **end_ptr, guint32 def); +src/filters/flood.cpp:121: guint32 read_color; +src/filters/specularlighting.h:44: guint32 lighting_color; +src/filters/diffuselighting.h:41: guint32 lighting_color; +src/filters/flood.h:27: guint32 color; +src/desktop-style.h:60:guint32 sp_desktop_get_color (SPDesktop *desktop, bool is_fill); +src/desktop-style.h:63:guint32 sp_desktop_get_color_tool(SPDesktop *desktop, Glib::ustring const &tool, bool is_fill, bool* has_color = NULL); +src/gradient-context.cpp:434: guint32 c1 = average_color (c0, c2, +src/connector-context.h:58: guint32 red_color; +src/nodepath.h:332:SPCanvasItem *sp_nodepath_generate_helperpath(SPDesktop *desktop, SPCurve *curve, const Geom::Matrix & i2d, guint32 color); +src/display/sp-ctrlpoint.cpp:140:sp_ctrlpoint_set_color (SPCtrlPoint *cp, guint32 rgba) +src/display/nr-arena-image.cpp:230: guint32 rgba = prefs->getInt("/options/wireframecolors/images", 0xff0000ff); +src/display/nr-light.h:37: DistantLight(SPFeDistantLight *light, guint32 lighting_color); +src/display/nr-light.h:55: guint32 color; +src/display/nr-light.h:71: PointLight(SPFePointLight *light, guint32 lighting_color, const Geom::Matrix &trans); +src/display/nr-light.h:93: guint32 color; +src/display/nr-light.h:111: SpotLight(SPFeSpotLight *light, guint32 lighting_color, const Geom::Matrix &trans); +src/display/nr-light.h:136: guint32 color; +src/display/canvas-grid.cpp:503:static gboolean sp_nv_read_opacity(gchar const *str, guint32 *color) +src/display/canvas-grid.cpp:516: *color = (*color & 0xffffff00) | (guint32) floor(v * 255.9999); +src/display/canvas-grid.cpp:904: guint32 _empcolor; +src/display/canvas-grid.cpp:948: grid_dot (buf, ix, iy, color | (guint32)0x000000FF); // put alpha to max value +src/display/canvas-grid.cpp:954: grid_dot (buf, ix, iy, _empcolor | (guint32)0x000000FF); // put alpha to max value +src/display/nr-light.cpp:26:DistantLight::DistantLight(SPFeDistantLight *light, guint32 lighting_color) { +src/display/nr-light.cpp:46:PointLight::PointLight(SPFePointLight *light, guint32 lighting_color, const Geom::Matrix &trans) { +src/display/nr-light.cpp:69:SpotLight::SpotLight(SPFeSpotLight *light, guint32 lighting_color, const Geom::Matrix &trans) { +src/display/nr-arena-glyphs.cpp:453: guint32 rgba = item->arena->outlinecolor; +src/display/nr-filter-flood.cpp:65:void FilterFlood::set_color(guint32 c) { +src/display/sodipodi-ctrlrect.h:49: guint32 _border_color; +src/display/sodipodi-ctrlrect.h:50: guint32 _fill_color; +src/display/sodipodi-ctrlrect.h:51: guint32 _shadow_color; +src/display/sp-ctrlpoint.h:34:void sp_ctrlpoint_set_color (SPCtrlPoint *cp, guint32 rgba); +src/display/nr-arena-item.cpp:353: guint32 saved_rgba = item->arena->outlinecolor; // save current outline color +src/display/canvas-grid.h:90: guint32 color; /**< Color for normal lines */ +src/display/canvas-grid.h:91: guint32 empcolor; /**< Color for emphasis lines */ +src/display/nr-arena.h:54: guint32 outlinecolor; +src/display/sodipodi-ctrl.h:48: guint32 fill_color; +src/display/sodipodi-ctrl.h:49: guint32 stroke_color; +src/display/canvas-axonomgrid.cpp:278:static gboolean sp_nv_read_opacity(gchar const *str, guint32 *color) +src/display/canvas-axonomgrid.cpp:291: *color = (*color & 0xffffff00) | (guint32) floor(v * 255.9999); +src/display/canvas-axonomgrid.cpp:557: guint32 _empcolor; +src/display/nr-filter-diffuselighting.h:39: guint32 lighting_color; +src/display/nr-arena-shape.cpp:732: guint32 rgba = NR_ARENA_ITEM(shape)->arena->outlinecolor; +src/display/nr-filter-specularlighting.h:40: guint32 lighting_color; +src/display/canvas-bpath.cpp:41:void nr_pixblock_render_bpath_rgba (Shape* theS,uint32_t color,NRRectL &area,char* destBuf,int stride); +src/display/sp-canvas.h:63: guint32 bg_color; +src/display/nr-filter-flood.h:29: virtual void set_color(guint32 c); +src/display/nr-filter-flood.h:34: guint32 color; +src/gradient-chemistry.h:44:SPGradient *sp_document_default_gradient_vector (SPDocument *document, guint32 color = 0); +src/gradient-chemistry.h:65:guint32 average_color (guint32 c1, guint32 c2, gdouble p = 0.5); +src/ui/dialog/swatches.cpp:1418: guint32 together = color.toRGBA32(first.opacity); +src/ui/dialog/swatches.cpp:1423: guint32 together2 = color2.toRGBA32(second.opacity); +src/ui/dialog/print.cpp:54: guint32 bgcolor = 0x00000000; +src/ui/widget/style-swatch.cpp:283: guint32 color = paint->value.color.toRGBA32( SP_SCALE24_TO_FLOAT ((i == SS_FILL)? query->fill_opacity.value : query->stroke_opacity.value) ); +src/ui/widget/selected-style.cpp:538: guint32 color = sp_desktop_get_color(_desktop, true); +src/ui/widget/selected-style.cpp:550: guint32 color = sp_desktop_get_color(_desktop, false); +src/ui/widget/selected-style.cpp:584: guint32 color = _thisselected[SS_FILL]; +src/ui/widget/selected-style.cpp:604: guint32 color = _thisselected[SS_STROKE]; +src/ui/widget/selected-style.cpp:701: guint32 color = sp_svg_read_color(text.c_str(), 0x000000ff); // impossible value, as SVG color cannot have opacity +src/ui/widget/selected-style.cpp:719: guint32 color = sp_svg_read_color(text.c_str(), 0x000000ff); // impossible value, as SVG color cannot have opacity +src/ui/widget/selected-style.cpp:978: guint32 color = paint->value.color.toRGBA32( +src/ui/widget/selected-style.cpp:1176:RotateableSwatch::color_adjust(float *hsl, double by, guint32 cc, guint modifier) +src/ui/widget/color-picker.cpp:125: guint32 rgba = color.toRGBA32( alpha ); +src/ui/widget/selected-style.h:65: double color_adjust (float *hsl, double by, guint32 cc, guint state); +src/ui/widget/selected-style.h:74: guint32 startcolor; +src/ui/clipboard.cpp:1108: guint32 bgcolor = 0x00000000; +src/ui/clipboard.cpp:1351:void ClipboardManagerImpl::_setClipboardColor(guint32 color) +src/main.cpp:1361: guint32 bgcolor = 0x00000000; +src/main.cpp:1381: bgcolor &= (guint32) 0xffffff00; +src/main.cpp:1382: bgcolor |= (guint32) floor(value); +src/main.cpp:1385: bgcolor &= (guint32) 0xffffff00; +src/dialogs/clonetiler.cpp:1308: guint32 rgba = sp_svg_read_color (initial_color.data(), 0x000000ff); +src/dialogs/clonetiler.cpp:2448: guint32 rgba = 0x000000ff | sp_svg_read_color (prefs->getString(prefs_path + "initial_color").data(), 0x000000ff); +src/extension/extension.cpp:611:Extension::set_param_color (const gchar * name, guint32 color, SPDocument * doc, Inkscape::XML::Node * node) +src/extension/extension.h:187: guint32 get_param_color (const gchar * name, +src/extension/extension.h:209: guint32 set_param_color (const gchar * name, +src/extension/extension.h:210: guint32 color, +src/extension/internal/bitmap/colorize.h:21: guint32 _color; +src/extension/internal/odf.cpp:1553: guint32 fillCol = style->fill.value.color.toRGBA32( 0 ); +src/extension/internal/odf.cpp:1571: guint32 strokeCol = style->stroke.value.color.toRGBA32( 0 ); +src/extension/param/parameter.h:96: guint32 get_color (const SPDocument * doc, +src/extension/param/parameter.h:105: guint32 set_color (guint32 in, SPDocument * doc, Inkscape::XML::Node * node); +src/extension/param/parameter.cpp:258:Parameter::set_color (guint32 in, SPDocument * doc, Inkscape::XML::Node * node) +src/live_effects/parameter/point.cpp:123:PointParam::set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color) +src/live_effects/parameter/vector.h:53: void set_vector_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color); +src/live_effects/parameter/vector.h:54: void set_origin_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color); +src/live_effects/parameter/vector.h:71: guint32 vec_knot_color; +src/live_effects/parameter/vector.h:74: guint32 ori_knot_color; +src/live_effects/parameter/point.h:50: void set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color); +src/live_effects/parameter/point.h:63: guint32 knot_color; +src/live_effects/parameter/vector.cpp:126:VectorParam::set_vector_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color) +src/live_effects/parameter/vector.cpp:134:VectorParam::set_origin_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color) +src/knot-holder-entity.h:43: guint32 color = 0xffffff00); +src/nodepath.cpp:164:sp_nodepath_make_helper_item(Inkscape::NodePath::Path *np, /*SPDesktop *desktop, */const SPCurve *curve, bool show = false, guint32 color = 0xff0000ff) { +src/nodepath.cpp:5040:sp_nodepath_generate_helperpath(SPDesktop *desktop, SPCurve *curve, const Geom::Matrix & i2d, guint32 color = 0xff0000ff) { +src/nodepath.cpp:5060: guint32 color = prefs->getInt("/tools/nodes/highlight_color", 0xff0000ff); +src/knot-holder-entity.cpp:36: SPKnotShapeType shape, SPKnotModeType mode, guint32 color) +src/tweak-context.cpp:697:tweak_colorpaint (float *color, guint32 goal, double force, bool do_h, bool do_s, bool do_l) +src/tweak-context.cpp:749:tweak_color (guint mode, float *color, guint32 goal, double force, bool do_h, bool do_s, bool do_l) +src/tweak-context.cpp:1058: guint32 fill_goal = sp_desktop_get_color_tool(desktop, "/tools/tweak", true, &do_fill); +src/tweak-context.cpp:1059: guint32 stroke_goal = sp_desktop_get_color_tool(desktop, "/tools/tweak", false, &do_stroke); +src/sp-namedview.h:62: guint32 guidecolor; +src/sp-namedview.h:63: guint32 guidehicolor; +src/sp-namedview.h:64: guint32 bordercolor; +src/sp-namedview.h:65: guint32 pagecolor; +src/dropper-context.h:50:guint32 sp_dropper_context_get_color(SPEventContext *ec); +src/style.h:174: void setColor( guint32 val ) {value.color.set( val ); colorSet = true;} +src/gradient-chemistry.cpp:578:average_color (guint32 c1, guint32 c2, gdouble p) +src/gradient-chemistry.cpp:600: guint32 cnew = average_color (c1, c2, (offset - prev_stop->offset) / (next_stop->offset - prev_stop->offset)); +src/gradient-chemistry.cpp:1213:sp_document_default_gradient_vector(SPDocument *document, guint32 color) +src/dyna-draw-context.cpp:1234: guint32 fillColor = sp_desktop_get_color_tool (desktop, "/tools/calligraphic", true); +src/dyna-draw-context.cpp:1235: //guint32 strokeColor = sp_desktop_get_color_tool (desktop, "/tools/calligraphic", false); +src/sp-gradient.cpp:153: guint32 const color = sp_svg_read_color(p, 0); +src/sp-gradient.cpp:172: guint32 const color = sp_svg_read_color(p, 0); +src/sp-gradient.cpp:213: guint32 specifiedcolor = stop->specified_color.toRGBA32( 255 ); +src/sp-gradient.cpp:279: guint32 color = dfl; diff --git a/src/widgets/sp-color-icc-selector.cpp b/src/widgets/sp-color-icc-selector.cpp index b18290923..144e42aa2 100644 --- a/src/widgets/sp-color-icc-selector.cpp +++ b/src/widgets/sp-color-icc-selector.cpp @@ -23,14 +23,14 @@ #include "color-profile-fns.h" #include "color-profile.h" //#define DEBUG_LCMS -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS #include "preferences.h" #include #endif // DEBUG_LCMS #endif // ENABLE_LCMS -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS extern guint update_in_progress; #define DEBUG_MESSAGE(key, ...) \ {\ @@ -475,11 +475,11 @@ void ColorICCSelector::_switchToProfile( gchar const* name ) if ( name ) { if ( tmp.icc && tmp.icc->colorProfile == name ) { -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message("Already at name [%s]", name ); #endif // DEBUG_LCMS } else { -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message("Need to switch to profile [%s]", name ); #endif // DEBUG_LCMS if ( tmp.icc ) { @@ -498,12 +498,12 @@ void ColorICCSelector::_switchToProfile( gchar const* name ) SP_RGBA32_G_U(val), SP_RGBA32_B_U(val), 255}; -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message("Shoving in [%02x] [%02x] [%02x]", pre[0], pre[1], pre[2]); #endif // DEBUG_LCMS icUInt16Number post[4] = {0,0,0,0}; cmsDoTransform( trans, pre, post, 1 ); -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message("got on out [%04x] [%04x] [%04x] [%04x]", post[0], post[1], post[2], post[3]); #endif // DEBUG_LCMS guint count = _cmsChannelsOf( newProf->getColorSpace() ); @@ -515,7 +515,7 @@ void ColorICCSelector::_switchToProfile( gchar const* name ) for ( guint i = 0; i < count; i++ ) { gdouble val = (((gdouble)post[i])/65535.0) * (gdouble)scales[i]; -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message(" scaled %d by %d to be %f", i, scales[i], val); #endif // DEBUG_LCMS tmp.icc->colors.push_back(val); @@ -523,7 +523,7 @@ void ColorICCSelector::_switchToProfile( gchar const* name ) cmsHTRANSFORM retrans = newProf->getTransfToSRGB8(); if ( retrans ) { cmsDoTransform( retrans, post, pre, 1 ); -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message(" back out [%02x] [%02x] [%02x]", pre[0], pre[1], pre[2]); #endif // DEBUG_LCMS tmp.set(SP_RGBA32_U_COMPOSE(pre[0], pre[1], pre[2], 0xff)); @@ -533,7 +533,7 @@ void ColorICCSelector::_switchToProfile( gchar const* name ) dirty = true; } } else { -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message("NUKE THE ICC"); #endif // DEBUG_LCMS if ( tmp.icc ) { @@ -542,21 +542,21 @@ void ColorICCSelector::_switchToProfile( gchar const* name ) dirty = true; _fixupHit( 0, this ); } else { -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message("No icc to nuke"); #endif // DEBUG_LCMS } } if ( dirty ) { -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message("+----------------"); g_message("+ new color is [%s]", tmp.toString().c_str()); #endif // DEBUG_LCMS _setProfile( tmp.icc ); //_adjustmentChanged( _fooAdj[0], SP_COLOR_ICC_SELECTOR(_csel) ); setColorAlpha( tmp, _alpha, true ); -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message("+_________________"); #endif // DEBUG_LCMS } @@ -603,15 +603,15 @@ void ColorICCSelector::_profilesChanged( std::string const & name ) void ColorICCSelector::_colorChanged() { _updating = TRUE; -// sp_color_icc_set_color( SP_COLOR_ICC( _icc ), &color ); + //sp_color_icc_set_color( SP_COLOR_ICC( _icc ), &color ); -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message( "/^^^^^^^^^ %p::_colorChanged(%08x:%s)", this, _color.toRGBA32(_alpha), ( (_color.icc) ? _color.icc->colorProfile.c_str(): "" ) ); #endif // DEBUG_LCMS -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message("FLIPPIES!!!! %p '%s'", _color.icc, (_color.icc ? _color.icc->colorProfile.c_str():"")); #endif // DEBUG_LCMS @@ -642,7 +642,7 @@ void ColorICCSelector::_colorChanged() if ( other != _color.toRGBA32(255) ) { _fixupNeeded = other; gtk_widget_set_sensitive( _fixupBtn, TRUE ); -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message("Color needs to change 0x%06x to 0x%06x", _color.toRGBA32(255) >> 8, other >> 8 ); #endif // DEBUG_LCMS } @@ -654,7 +654,7 @@ void ColorICCSelector::_colorChanged() _updating = FALSE; -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message( "\\_________ %p::_colorChanged()", this ); #endif // DEBUG_LCMS } @@ -662,7 +662,7 @@ void ColorICCSelector::_colorChanged() #if ENABLE_LCMS void ColorICCSelector::_setProfile( SVGICCColor* profile ) { -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message( "/^^^^^^^^^ %p::_setProfile(%s)", this, ( (profile) ? profile->colorProfile.c_str() : "") ); @@ -730,7 +730,7 @@ void ColorICCSelector::_setProfile( SVGICCColor* profile ) } } -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message( "\\_________ %p::_setProfile()", this ); #endif // DEBUG_LCMS } @@ -800,7 +800,7 @@ void ColorICCSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorICC // gtk_adjustment_set_value( adjustment, floor ((adjustment->value) * adjustment->upper + 0.5) ); // } -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message( "/^^^^^^^^^ %p::_adjustmentChanged()", cs ); #endif // DEBUG_LCMS @@ -816,7 +816,7 @@ void ColorICCSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorICC SPColor newColor( iccSelector->_color ); gfloat scaled = ColorScales::getScaled( iccSelector->_adj ); if ( iccSelector->_adj == adjustment ) { -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message("ALPHA"); #endif // DEBUG_LCMS } else { @@ -828,7 +828,7 @@ void ColorICCSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorICC } } if ( match >= 0 ) { -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message(" channel %d", match ); #endif // DEBUG_LCMS } @@ -852,7 +852,7 @@ void ColorICCSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorICC guint32 newer = other.toRGBA32(255); if ( prior != newer ) { -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message("Transformed color from 0x%08x to 0x%08x", prior, newer ); g_message(" ~~~~ FLIP"); #endif // DEBUG_LCMS @@ -875,7 +875,7 @@ void ColorICCSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorICC iccSelector->_updateSliders( match ); iccSelector->_updating = FALSE; -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message( "\\_________ %p::_adjustmentChanged()", cs ); #endif // DEBUG_LCMS } @@ -900,13 +900,13 @@ void ColorICCSelector::_sliderReleased( SPColorSlider */*slider*/, SPColorICCSel // } } -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS void ColorICCSelector::_sliderChanged( SPColorSlider *slider, SPColorICCSelector *cs ) #else void ColorICCSelector::_sliderChanged( SPColorSlider */*slider*/, SPColorICCSelector */*cs*/ ) #endif // DEBUG_LCMS { -#ifdef DEBUG_LCMS +#if 1 //DEBUG_LCMS g_message("Changed %p and %p", slider, cs ); #endif // DEBUG_LCMS // ColorICCSelector* iccSelector = (ColorICCSelector*)(SP_COLOR_SELECTOR(cs)->base); -- cgit v1.2.3 From 521b94aa9a5ec58311750f1f014958ef5a0c53d3 Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Sat, 20 Jun 2009 06:33:55 +0000 Subject: bool sp_svg_read_icc_color( gchar const *str, SVGICCColor* dest ); (bzr r8050.1.3) --- src/svg/svg-color.cpp | 6 ++++++ src/svg/svg-color.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/svg/svg-color.cpp b/src/svg/svg-color.cpp index 9040d6e43..743d2bbc8 100644 --- a/src/svg/svg-color.cpp +++ b/src/svg/svg-color.cpp @@ -547,6 +547,12 @@ bool sp_svg_read_icc_color( gchar const *str, gchar const **end_ptr, SVGICCColor return good; } + +bool sp_svg_read_icc_color( gchar const *str, SVGICCColor* dest ) +{ + sp_svg_read_icc_color(str, NULL, dest); +} + /* Local Variables: mode:c++ diff --git a/src/svg/svg-color.h b/src/svg/svg-color.h index 692c1dd00..d1238dcab 100644 --- a/src/svg/svg-color.h +++ b/src/svg/svg-color.h @@ -10,6 +10,6 @@ guint32 sp_svg_read_color(gchar const *str, gchar const **end_ptr, guint32 def); void sp_svg_write_color(char *buf, unsigned int buflen, unsigned int rgba32); bool sp_svg_read_icc_color( gchar const *str, gchar const **end_ptr, SVGICCColor* dest ); - +bool sp_svg_read_icc_color( gchar const *str, SVGICCColor* dest ); #endif /* !SVG_SVG_COLOR_H_SEEN */ -- cgit v1.2.3 From 59c1c219f9b89e50bd9fa9acce9bed9860a281e7 Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Sat, 20 Jun 2009 11:49:01 +0000 Subject: parsing and handling of icc-color in feFlood SVG Filters TODO: implement interface to set icc-color to the flood-color parameter (bzr r8050.1.4) --- src/display/nr-filter-flood.cpp | 27 ++++++++++++++---- src/display/nr-filter-flood.h | 3 ++ src/filters/flood.cpp | 25 +++++++++++++++-- src/filters/flood.h | 2 ++ src/svg/svg-color.cpp | 47 +++++++++++++++++++++++++++++-- src/svg/svg-color.h | 1 + src/widgets/sp-color-icc-selector.cpp | 52 +++++++++++++++++------------------ 7 files changed, 122 insertions(+), 35 deletions(-) diff --git a/src/display/nr-filter-flood.cpp b/src/display/nr-filter-flood.cpp index 026cbce16..06025392b 100644 --- a/src/display/nr-filter-flood.cpp +++ b/src/display/nr-filter-flood.cpp @@ -9,8 +9,14 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + #include "display/nr-filter-flood.h" #include "display/nr-filter-utils.h" +#include "svg/svg-icc-color.h" +#include "svg/svg-color.h" namespace Inkscape { namespace Filters { @@ -26,6 +32,7 @@ FilterFlood::~FilterFlood() {} int FilterFlood::render(FilterSlot &slot, FilterUnits const &/*units*/) { +g_message("rendering feflood"); NRPixBlock *in = slot.get(_input); if (!in) { g_warning("Missing source image for feFlood (in=%d)", _input); @@ -43,12 +50,18 @@ int FilterFlood::render(FilterSlot &slot, FilterUnits const &/*units*/) { true); unsigned char *out_data = NR_PIXBLOCK_PX(out); - unsigned char r,g,b,a; - r = CLAMP_D_TO_U8((color >> 24) % 256); - g = CLAMP_D_TO_U8((color >> 16) % 256); - b = CLAMP_D_TO_U8((color >> 8) % 256); - a = CLAMP_D_TO_U8(opacity*255); + + + r = CLAMP_D_TO_U8((color >> 24) % 256); + g = CLAMP_D_TO_U8((color >> 16) % 256); + b = CLAMP_D_TO_U8((color >> 8) % 256); + a = CLAMP_D_TO_U8(opacity*255); + +#if ENABLE_LCMS + icc_color_to_sRGB(icc, &r, &g, &b); +g_message("result: r:%d g:%d b:%d", r, g, b); +#endif //ENABLE_LCMS for(i=0; i < 4*in_h*in_w; i+=4){ out_data[i]=r; @@ -70,6 +83,10 @@ void FilterFlood::set_opacity(double o) { opacity = o; } +void FilterFlood::set_icc(SVGICCColor *icc_color) { + icc = icc_color; +} + void FilterFlood::area_enlarge(NRRectL &/*area*/, Geom::Matrix const &/*trans*/) { } diff --git a/src/display/nr-filter-flood.h b/src/display/nr-filter-flood.h index 9e6a53abb..d38c0d4f5 100644 --- a/src/display/nr-filter-flood.h +++ b/src/display/nr-filter-flood.h @@ -15,6 +15,7 @@ #include "display/nr-filter-primitive.h" #include "display/nr-filter-slot.h" #include "display/nr-filter-units.h" +#include "svg/svg-color.h" namespace Inkscape { namespace Filters { @@ -27,11 +28,13 @@ public: virtual void set_opacity(double o); virtual void set_color(guint32 c); + virtual void set_icc(SVGICCColor *icc_color); virtual int render(FilterSlot &slot, FilterUnits const &units); virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); private: double opacity; guint32 color; + SVGICCColor *icc; }; } /* namespace Filters */ diff --git a/src/filters/flood.cpp b/src/filters/flood.cpp index 625e35d42..221b0daf2 100644 --- a/src/filters/flood.cpp +++ b/src/filters/flood.cpp @@ -17,12 +17,13 @@ # include "config.h" #endif +#include "strneq.h" + #include "attributes.h" #include "svg/svg.h" #include "flood.h" #include "xml/repr.h" #include "helper-fns.h" -#include "svg/svg-color.h" /* FeFlood base class */ @@ -79,6 +80,7 @@ static void sp_feFlood_init(SPFeFlood *feFlood) { feFlood->opacity = 1; + feFlood->icc = NULL; } /** @@ -120,16 +122,34 @@ sp_feFlood_set(SPObject *object, unsigned int key, gchar const *value) gchar *end_ptr = NULL; guint32 read_color; double read_num; + bool dirty = false; switch(key) { /*DEAL WITH SETTING ATTRIBUTES HERE*/ case SP_PROP_FLOOD_COLOR: cend_ptr = NULL; read_color = sp_svg_read_color(value, &cend_ptr, 0xffffffff); + if (cend_ptr && read_color != feFlood->color){ feFlood->color = read_color; - object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + dirty=true; + } + + if (cend_ptr){ + while (g_ascii_isspace(*cend_ptr)) { + ++cend_ptr; + } + if (strneq(cend_ptr, "icc-color(", 10)) { + if (!feFlood->icc) feFlood->icc = new SVGICCColor(); + if ( ! sp_svg_read_icc_color( cend_ptr, feFlood->icc ) ) { + delete feFlood->icc; + feFlood->icc = NULL; + } + dirty = true; + } } + if (dirty) + object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_PROP_FLOOD_OPACITY: if (value) { @@ -208,6 +228,7 @@ static void sp_feFlood_build_renderer(SPFilterPrimitive *primitive, Inkscape::Fi nr_flood->set_opacity(sp_flood->opacity); nr_flood->set_color(sp_flood->color); + nr_flood->set_icc(sp_flood->icc); } diff --git a/src/filters/flood.h b/src/filters/flood.h index 046c0e868..f386e2cd4 100644 --- a/src/filters/flood.h +++ b/src/filters/flood.h @@ -15,6 +15,7 @@ #include "sp-filter.h" #include "flood-fns.h" +#include "svg/svg-icc-color.h" #include "display/nr-filter.h" #include "display/nr-filter-flood.h" @@ -25,6 +26,7 @@ class SPFeFloodClass; struct SPFeFlood : public SPFilterPrimitive { /** FLOOD ATTRIBUTES HERE */ guint32 color; + SVGICCColor *icc; double opacity; }; diff --git a/src/svg/svg-color.cpp b/src/svg/svg-color.cpp index 743d2bbc8..fcfbbdbd8 100644 --- a/src/svg/svg-color.cpp +++ b/src/svg/svg-color.cpp @@ -36,6 +36,15 @@ #include "svg-color.h" #include "svg-icc-color.h" +#if ENABLE_LCMS +#include +#include "color.h" +#include "color-profile.h" +#include "document.h" +#include "inkscape.h" +#include "profile-manager.h" +#endif // ENABLE_LCMS + using std::sprintf; struct SPSVGColor { @@ -454,6 +463,39 @@ sp_svg_create_color_hash() return colors; } +//helper function borrowed from src/widgets/sp-color-icc-selector.cpp: +void getThings( DWORD space, gchar const**& namers, gchar const**& tippies, guint const*& scalies ); + +void icc_color_to_sRGB(SVGICCColor* icc, guchar* r, guchar* g, guchar* b){ + guchar color_out[4]; + guchar color_in[4]; + if (icc){ +g_message("profile name: %s", icc->colorProfile.c_str()); + Inkscape::ColorProfile* prof = SP_ACTIVE_DOCUMENT->profileManager->find(icc->colorProfile.c_str()); + if ( prof ) { + cmsHTRANSFORM trans = prof->getTransfToSRGB8(); + if ( trans ) { + gchar const** names = 0; + gchar const** tips = 0; + guint const* scales = 0; + getThings( prof->getColorSpace(), names, tips, scales ); + + guint count = _cmsChannelsOf( prof->getColorSpace() ); + if (count>4) count=4; //do we need it? Should we allow an arbitrary number of color values? Or should we limit to a maximum? (max==4?) + for (guint i=0;icolors[i])*256.0) * (gdouble)scales[i]); +g_message("input[%d]: %d",i, color_in[i]); + } + + cmsDoTransform( trans, color_in, color_out, 1 ); +g_message("transform to sRGB done"); + } + *r = color_out[0]; + *g = color_out[1]; + *b = color_out[2]; + } + } +} bool sp_svg_read_icc_color( gchar const *str, gchar const **end_ptr, SVGICCColor* dest ) { @@ -508,6 +550,7 @@ bool sp_svg_read_icc_color( gchar const *str, gchar const **end_ptr, SVGICCColor if ( !errno ) { if ( dest ) { dest->colors.push_back( dbl ); +g_message("color: %f", dbl); } str = endPtr; } else { @@ -529,7 +572,7 @@ bool sp_svg_read_icc_color( gchar const *str, gchar const **end_ptr, SVGICCColor while ( g_ascii_isspace(*str) ) { str++; } - good &= *str == ')'; + good &= (*str == ')'); } } @@ -550,7 +593,7 @@ bool sp_svg_read_icc_color( gchar const *str, gchar const **end_ptr, SVGICCColor bool sp_svg_read_icc_color( gchar const *str, SVGICCColor* dest ) { - sp_svg_read_icc_color(str, NULL, dest); + return sp_svg_read_icc_color(str, NULL, dest); } /* diff --git a/src/svg/svg-color.h b/src/svg/svg-color.h index d1238dcab..a3868c149 100644 --- a/src/svg/svg-color.h +++ b/src/svg/svg-color.h @@ -11,5 +11,6 @@ void sp_svg_write_color(char *buf, unsigned int buflen, unsigned int rgba32); bool sp_svg_read_icc_color( gchar const *str, gchar const **end_ptr, SVGICCColor* dest ); bool sp_svg_read_icc_color( gchar const *str, SVGICCColor* dest ); +void icc_color_to_sRGB(SVGICCColor* dest, guchar* r, guchar* g, guchar* b); #endif /* !SVG_SVG_COLOR_H_SEEN */ diff --git a/src/widgets/sp-color-icc-selector.cpp b/src/widgets/sp-color-icc-selector.cpp index 144e42aa2..ae837117a 100644 --- a/src/widgets/sp-color-icc-selector.cpp +++ b/src/widgets/sp-color-icc-selector.cpp @@ -22,15 +22,15 @@ #if ENABLE_LCMS #include "color-profile-fns.h" #include "color-profile.h" -//#define DEBUG_LCMS -#if 1 //DEBUG_LCMS +#define DEBUG_LCMS +#ifdef DEBUG_LCMS #include "preferences.h" #include #endif // DEBUG_LCMS #endif // ENABLE_LCMS -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS extern guint update_in_progress; #define DEBUG_MESSAGE(key, ...) \ {\ @@ -475,11 +475,11 @@ void ColorICCSelector::_switchToProfile( gchar const* name ) if ( name ) { if ( tmp.icc && tmp.icc->colorProfile == name ) { -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message("Already at name [%s]", name ); #endif // DEBUG_LCMS } else { -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message("Need to switch to profile [%s]", name ); #endif // DEBUG_LCMS if ( tmp.icc ) { @@ -498,12 +498,12 @@ void ColorICCSelector::_switchToProfile( gchar const* name ) SP_RGBA32_G_U(val), SP_RGBA32_B_U(val), 255}; -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message("Shoving in [%02x] [%02x] [%02x]", pre[0], pre[1], pre[2]); #endif // DEBUG_LCMS icUInt16Number post[4] = {0,0,0,0}; cmsDoTransform( trans, pre, post, 1 ); -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message("got on out [%04x] [%04x] [%04x] [%04x]", post[0], post[1], post[2], post[3]); #endif // DEBUG_LCMS guint count = _cmsChannelsOf( newProf->getColorSpace() ); @@ -515,7 +515,7 @@ void ColorICCSelector::_switchToProfile( gchar const* name ) for ( guint i = 0; i < count; i++ ) { gdouble val = (((gdouble)post[i])/65535.0) * (gdouble)scales[i]; -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message(" scaled %d by %d to be %f", i, scales[i], val); #endif // DEBUG_LCMS tmp.icc->colors.push_back(val); @@ -523,7 +523,7 @@ void ColorICCSelector::_switchToProfile( gchar const* name ) cmsHTRANSFORM retrans = newProf->getTransfToSRGB8(); if ( retrans ) { cmsDoTransform( retrans, post, pre, 1 ); -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message(" back out [%02x] [%02x] [%02x]", pre[0], pre[1], pre[2]); #endif // DEBUG_LCMS tmp.set(SP_RGBA32_U_COMPOSE(pre[0], pre[1], pre[2], 0xff)); @@ -533,7 +533,7 @@ void ColorICCSelector::_switchToProfile( gchar const* name ) dirty = true; } } else { -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message("NUKE THE ICC"); #endif // DEBUG_LCMS if ( tmp.icc ) { @@ -542,21 +542,21 @@ void ColorICCSelector::_switchToProfile( gchar const* name ) dirty = true; _fixupHit( 0, this ); } else { -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message("No icc to nuke"); #endif // DEBUG_LCMS } } if ( dirty ) { -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message("+----------------"); g_message("+ new color is [%s]", tmp.toString().c_str()); #endif // DEBUG_LCMS _setProfile( tmp.icc ); //_adjustmentChanged( _fooAdj[0], SP_COLOR_ICC_SELECTOR(_csel) ); setColorAlpha( tmp, _alpha, true ); -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message("+_________________"); #endif // DEBUG_LCMS } @@ -605,13 +605,13 @@ void ColorICCSelector::_colorChanged() _updating = TRUE; //sp_color_icc_set_color( SP_COLOR_ICC( _icc ), &color ); -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message( "/^^^^^^^^^ %p::_colorChanged(%08x:%s)", this, _color.toRGBA32(_alpha), ( (_color.icc) ? _color.icc->colorProfile.c_str(): "" ) ); #endif // DEBUG_LCMS -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message("FLIPPIES!!!! %p '%s'", _color.icc, (_color.icc ? _color.icc->colorProfile.c_str():"")); #endif // DEBUG_LCMS @@ -642,7 +642,7 @@ void ColorICCSelector::_colorChanged() if ( other != _color.toRGBA32(255) ) { _fixupNeeded = other; gtk_widget_set_sensitive( _fixupBtn, TRUE ); -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message("Color needs to change 0x%06x to 0x%06x", _color.toRGBA32(255) >> 8, other >> 8 ); #endif // DEBUG_LCMS } @@ -654,7 +654,7 @@ void ColorICCSelector::_colorChanged() _updating = FALSE; -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message( "\\_________ %p::_colorChanged()", this ); #endif // DEBUG_LCMS } @@ -662,7 +662,7 @@ void ColorICCSelector::_colorChanged() #if ENABLE_LCMS void ColorICCSelector::_setProfile( SVGICCColor* profile ) { -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message( "/^^^^^^^^^ %p::_setProfile(%s)", this, ( (profile) ? profile->colorProfile.c_str() : "") ); @@ -730,7 +730,7 @@ void ColorICCSelector::_setProfile( SVGICCColor* profile ) } } -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message( "\\_________ %p::_setProfile()", this ); #endif // DEBUG_LCMS } @@ -800,7 +800,7 @@ void ColorICCSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorICC // gtk_adjustment_set_value( adjustment, floor ((adjustment->value) * adjustment->upper + 0.5) ); // } -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message( "/^^^^^^^^^ %p::_adjustmentChanged()", cs ); #endif // DEBUG_LCMS @@ -816,7 +816,7 @@ void ColorICCSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorICC SPColor newColor( iccSelector->_color ); gfloat scaled = ColorScales::getScaled( iccSelector->_adj ); if ( iccSelector->_adj == adjustment ) { -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message("ALPHA"); #endif // DEBUG_LCMS } else { @@ -828,7 +828,7 @@ void ColorICCSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorICC } } if ( match >= 0 ) { -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message(" channel %d", match ); #endif // DEBUG_LCMS } @@ -852,7 +852,7 @@ void ColorICCSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorICC guint32 newer = other.toRGBA32(255); if ( prior != newer ) { -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message("Transformed color from 0x%08x to 0x%08x", prior, newer ); g_message(" ~~~~ FLIP"); #endif // DEBUG_LCMS @@ -875,7 +875,7 @@ void ColorICCSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorICC iccSelector->_updateSliders( match ); iccSelector->_updating = FALSE; -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message( "\\_________ %p::_adjustmentChanged()", cs ); #endif // DEBUG_LCMS } @@ -900,13 +900,13 @@ void ColorICCSelector::_sliderReleased( SPColorSlider */*slider*/, SPColorICCSel // } } -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS void ColorICCSelector::_sliderChanged( SPColorSlider *slider, SPColorICCSelector *cs ) #else void ColorICCSelector::_sliderChanged( SPColorSlider */*slider*/, SPColorICCSelector */*cs*/ ) #endif // DEBUG_LCMS { -#if 1 //DEBUG_LCMS +#ifdef DEBUG_LCMS g_message("Changed %p and %p", slider, cs ); #endif // DEBUG_LCMS // ColorICCSelector* iccSelector = (ColorICCSelector*)(SP_COLOR_SELECTOR(cs)->base); -- cgit v1.2.3 From 8ef2626fa8bbdf13da2c9fccd9d7b45e4bb0247a Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Sat, 1 Aug 2009 04:01:00 +0000 Subject: enabling all icc-color related debug messages (bzr r8050.1.5) --- src/color-profile.cpp | 11 +++++++++-- src/dropper-context.cpp | 8 ++++++++ src/sp-image.cpp | 11 +++++++++-- src/widgets/sp-color-icc-selector.cpp | 4 ++-- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/color-profile.cpp b/src/color-profile.cpp index 20e870242..de9dc6959 100644 --- a/src/color-profile.cpp +++ b/src/color-profile.cpp @@ -1,6 +1,6 @@ -//#define DEBUG_LCMS +#define DEBUG_LCMS #include #include @@ -36,7 +36,7 @@ static cmsHPROFILE colorprofile_get_proof_profile_handle(); #ifdef DEBUG_LCMS extern guint update_in_progress; -#define DEBUG_MESSAGE(key, ...) \ +#define DEBUG_MESSAGE_SCISLAC(key, ...) \ {\ Inkscape::Preferences *prefs = Inkscape::Preferences::get();\ bool dump = prefs->getBool(Glib::ustring("/options/scislac/") + #key);\ @@ -62,6 +62,13 @@ extern guint update_in_progress; gtk_widget_show_all( dialog );\ }\ } + + +#define DEBUG_MESSAGE(key, ...)\ +{\ + g_message( __VA_ARGS__ );\ +} + #endif // DEBUG_LCMS static SPObjectClass *cprof_parent_class; diff --git a/src/dropper-context.cpp b/src/dropper-context.cpp index 985e3ac51..5c66eca46 100644 --- a/src/dropper-context.cpp +++ b/src/dropper-context.cpp @@ -137,6 +137,14 @@ static void sp_dropper_context_finish(SPEventContext *ec) } +/** + * Returns the current dropper context icc-color. + */ +SPColor* sp_dropper_context_get_icc_color(SPEventContext *ec) +{ + //TODO: implement-me! +} + /** * Returns the current dropper context color. */ diff --git a/src/sp-image.cpp b/src/sp-image.cpp index 65aad1e2d..f4ab3d9ef 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -51,8 +51,15 @@ #if ENABLE_LCMS #include "color-profile-fns.h" #include "color-profile.h" -//#define DEBUG_LCMS +#define DEBUG_LCMS #ifdef DEBUG_LCMS + + +#define DEBUG_MESSAGE(key, ...)\ +{\ + g_message( __VA_ARGS__ );\ +} + #include "preferences.h" #include #endif // DEBUG_LCMS @@ -105,7 +112,7 @@ extern "C" #ifdef DEBUG_LCMS extern guint update_in_progress; -#define DEBUG_MESSAGE(key, ...) \ +#define DEBUG_MESSAGE_SCISLAC(key, ...) \ {\ Inkscape::Preferences *prefs = Inkscape::Preferences::get();\ bool dump = prefs->getBool("/options/scislac/" #key);\ diff --git a/src/widgets/sp-color-icc-selector.cpp b/src/widgets/sp-color-icc-selector.cpp index ae837117a..2872dace0 100644 --- a/src/widgets/sp-color-icc-selector.cpp +++ b/src/widgets/sp-color-icc-selector.cpp @@ -17,12 +17,12 @@ #include "inkscape.h" #include "profile-manager.h" -#define noDEBUG_LCMS +#define DEBUG_LCMS #if ENABLE_LCMS #include "color-profile-fns.h" #include "color-profile.h" -#define DEBUG_LCMS + #ifdef DEBUG_LCMS #include "preferences.h" #include -- cgit v1.2.3 From 21636a2ac8416297222ccb2d11005d4571582d41 Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Tue, 11 Aug 2009 04:22:47 +0000 Subject: adding color management icons to fill&stroke dialog (bzr r8050.1.6) --- share/icons/Makefile.am | 3 +++ share/icons/color-management-icon.png | Bin 0 -> 2720 bytes share/icons/out-of-gamut-icon.png | Bin 0 -> 1016 bytes share/icons/out-of-gamut-icon.svg | 22 ++++++++++++++++++++++ src/widgets/sp-color-notebook.cpp | 18 +++++++++++++++++- 5 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 share/icons/color-management-icon.png create mode 100644 share/icons/out-of-gamut-icon.png create mode 100644 share/icons/out-of-gamut-icon.svg diff --git a/share/icons/Makefile.am b/share/icons/Makefile.am index e39174833..4356365b8 100644 --- a/share/icons/Makefile.am +++ b/share/icons/Makefile.am @@ -1,6 +1,9 @@ iconsdir = $(datadir)/inkscape/icons pixmaps = \ + out-of-gamut-icon.png \ + out-of-gamut-icon.svg \ + color-management-icon.png \ remove-color.png \ remove-color.svg \ ticotico.jpg \ diff --git a/share/icons/color-management-icon.png b/share/icons/color-management-icon.png new file mode 100644 index 000000000..469ccd72a Binary files /dev/null and b/share/icons/color-management-icon.png differ diff --git a/share/icons/out-of-gamut-icon.png b/share/icons/out-of-gamut-icon.png new file mode 100644 index 000000000..1e96a9563 Binary files /dev/null and b/share/icons/out-of-gamut-icon.png differ diff --git a/share/icons/out-of-gamut-icon.svg b/share/icons/out-of-gamut-icon.svg new file mode 100644 index 000000000..4fb171139 --- /dev/null +++ b/share/icons/out-of-gamut-icon.svg @@ -0,0 +1,22 @@ + + + + + + + + + diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 779895de4..58974131e 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -324,9 +324,25 @@ void ColorNotebook::init() row++; - /* Create RGBA entry and color preview */ GtkWidget *rgbabox = gtk_hbox_new (FALSE, 0); + /* Create color management icons */ + GtkWidget *box_colormanaged = gtk_event_box_new (); + GtkWidget *colormanaged = gtk_image_new_from_icon_name ("color-management-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add (GTK_CONTAINER (box_colormanaged), colormanaged); + GtkTooltips *tooltips_colormanaged = gtk_tooltips_new (); + gtk_tooltips_set_tip (tooltips_colormanaged, box_colormanaged, _("Color Managed"), ""); + //gtk_widget_hide (GTK_WIDGET (box_colormanaged)); + gtk_box_pack_start(GTK_BOX(rgbabox), box_colormanaged, TRUE, FALSE, 2); + + GtkWidget *box_outofgamut = gtk_event_box_new (); + GtkWidget *outofgamut = gtk_image_new_from_icon_name ("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add (GTK_CONTAINER (box_outofgamut), outofgamut); + GtkTooltips *tooltips_outofgamut = gtk_tooltips_new (); + gtk_tooltips_set_tip (tooltips_outofgamut, box_outofgamut, _("Out of gamut!"), ""); + //gtk_widget_hide (GTK_WIDGET (box_outofgamut)); + gtk_box_pack_start(GTK_BOX(rgbabox), box_outofgamut, TRUE, FALSE, 2); + /* Create RGBA entry and color preview */ _rgbal = gtk_label_new_with_mnemonic (_("RGBA_:")); gtk_misc_set_alignment (GTK_MISC (_rgbal), 1.0, 0.5); gtk_box_pack_start(GTK_BOX(rgbabox), _rgbal, TRUE, TRUE, 2); -- cgit v1.2.3 From 6391c5291f744ab260ad3d2f661eab6d101f6b23 Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Tue, 11 Aug 2009 04:58:32 +0000 Subject: setting sensibility of "color management icon" depending on icc-color usage (bzr r8050.1.7) --- src/widgets/sp-color-notebook.cpp | 23 +++++++++++++---------- src/widgets/sp-color-notebook.h | 1 + 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 58974131e..44de40115 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -326,21 +326,21 @@ void ColorNotebook::init() GtkWidget *rgbabox = gtk_hbox_new (FALSE, 0); /* Create color management icons */ - GtkWidget *box_colormanaged = gtk_event_box_new (); + _box_colormanaged = gtk_event_box_new (); GtkWidget *colormanaged = gtk_image_new_from_icon_name ("color-management-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); - gtk_container_add (GTK_CONTAINER (box_colormanaged), colormanaged); + gtk_container_add (GTK_CONTAINER (_box_colormanaged), colormanaged); GtkTooltips *tooltips_colormanaged = gtk_tooltips_new (); - gtk_tooltips_set_tip (tooltips_colormanaged, box_colormanaged, _("Color Managed"), ""); - //gtk_widget_hide (GTK_WIDGET (box_colormanaged)); - gtk_box_pack_start(GTK_BOX(rgbabox), box_colormanaged, TRUE, FALSE, 2); + gtk_tooltips_set_tip (tooltips_colormanaged, _box_colormanaged, _("Color Managed"), ""); + gtk_widget_set_sensitive (_box_colormanaged, false); + gtk_box_pack_start(GTK_BOX(rgbabox), _box_colormanaged, TRUE, FALSE, 2); - GtkWidget *box_outofgamut = gtk_event_box_new (); + _box_outofgamut = gtk_event_box_new (); GtkWidget *outofgamut = gtk_image_new_from_icon_name ("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); - gtk_container_add (GTK_CONTAINER (box_outofgamut), outofgamut); + gtk_container_add (GTK_CONTAINER (_box_outofgamut), outofgamut); GtkTooltips *tooltips_outofgamut = gtk_tooltips_new (); - gtk_tooltips_set_tip (tooltips_outofgamut, box_outofgamut, _("Out of gamut!"), ""); - //gtk_widget_hide (GTK_WIDGET (box_outofgamut)); - gtk_box_pack_start(GTK_BOX(rgbabox), box_outofgamut, TRUE, FALSE, 2); + gtk_tooltips_set_tip (tooltips_outofgamut, _box_outofgamut, _("Out of gamut!"), ""); + gtk_widget_set_sensitive (_box_outofgamut, false); + gtk_box_pack_start(GTK_BOX(rgbabox), _box_outofgamut, TRUE, FALSE, 2); /* Create RGBA entry and color preview */ _rgbal = gtk_label_new_with_mnemonic (_("RGBA_:")); @@ -500,6 +500,9 @@ void ColorNotebook::_rgbaEntryChanged(GtkEntry* entry) void ColorNotebook::_updateRgbaEntry( const SPColor& color, gfloat alpha ) { g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) ); + + /* update color management icon*/ + gtk_widget_set_sensitive (_box_colormanaged, color.icc != NULL); if ( !_updatingrgba ) { diff --git a/src/widgets/sp-color-notebook.h b/src/widgets/sp-color-notebook.h index bf6fb1002..c9ab29798 100644 --- a/src/widgets/sp-color-notebook.h +++ b/src/widgets/sp-color-notebook.h @@ -61,6 +61,7 @@ protected: gulong _entryId; GtkWidget *_book; GtkWidget *_rgbal, *_rgbae; /* RGBA entry */ + GtkWidget *_box_outofgamut, *_box_colormanaged; GtkWidget *_p; /* Color preview */ GtkWidget *_btn; GtkWidget *_popup; -- cgit v1.2.3 From b7477cae10caca6d9a7ee8156f5e194a1458d3a2 Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Thu, 13 Aug 2009 04:03:19 +0000 Subject: preserve icc on color wheel selector (bzr r8050.1.8) --- src/widgets/sp-color-wheel-selector.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/widgets/sp-color-wheel-selector.cpp b/src/widgets/sp-color-wheel-selector.cpp index 174b071f9..bc8c4763b 100644 --- a/src/widgets/sp-color-wheel-selector.cpp +++ b/src/widgets/sp-color-wheel-selector.cpp @@ -10,7 +10,8 @@ #include "../dialogs/dialog-events.h" #include "sp-color-wheel-selector.h" #include "sp-color-scales.h" - +#include "sp-color-icc-selector.h" +#include "../svg/svg-icc-color.h" G_BEGIN_DECLS @@ -237,6 +238,10 @@ void ColorWheelSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorW wheelSelector->_updating = TRUE; + /* Preserve ICC color */ + ColorSelector* selector = (ColorSelector*)(SP_COLOR_SELECTOR(cs)->base); + wheelSelector->_color.icc = selector->getColor().icc ? new SVGICCColor(*selector->getColor().icc) : 0; + wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging ); wheelSelector->_updating = FALSE; @@ -249,6 +254,11 @@ void ColorWheelSelector::_sliderGrabbed( SPColorSlider *slider, SPColorWheelSele if (!wheelSelector->_dragging) { wheelSelector->_dragging = TRUE; wheelSelector->_grabbed(); + + /* Preserve ICC color */ + ColorSelector* selector = (ColorSelector*)(SP_COLOR_SELECTOR(cs)->base); + wheelSelector->_color.icc = selector->getColor().icc ? new SVGICCColor(*selector->getColor().icc) : 0; + wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging ); } } @@ -260,6 +270,11 @@ void ColorWheelSelector::_sliderReleased( SPColorSlider *slider, SPColorWheelSel if (wheelSelector->_dragging) { wheelSelector->_dragging = FALSE; wheelSelector->_released(); + + /* Preserve ICC color */ + ColorSelector* selector = (ColorSelector*)(SP_COLOR_SELECTOR(cs)->base); + wheelSelector->_color.icc = selector->getColor().icc ? new SVGICCColor(*selector->getColor().icc) : 0; + wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging ); } } @@ -269,6 +284,10 @@ void ColorWheelSelector::_sliderChanged( SPColorSlider *slider, SPColorWheelSele (void)slider; ColorWheelSelector* wheelSelector = (ColorWheelSelector*)(SP_COLOR_SELECTOR(cs)->base); + /* Preserve ICC color */ + ColorSelector* selector = (ColorSelector*)(SP_COLOR_SELECTOR(cs)->base); + wheelSelector->_color.icc = selector->getColor().icc ? new SVGICCColor(*selector->getColor().icc) : 0; + wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging ); } @@ -285,6 +304,10 @@ void ColorWheelSelector::_wheelChanged( SPColorWheel *wheel, SPColorWheelSelecto sp_color_slider_set_colors (SP_COLOR_SLIDER(wheelSelector->_slider), start, mid, end); + /* Preserve ICC color */ + ColorSelector* selector = (ColorSelector*)(SP_COLOR_SELECTOR(cs)->base); + color.icc = selector->getColor().icc ? new SVGICCColor(*selector->getColor().icc) : 0; + wheelSelector->_updateInternals( color, wheelSelector->_alpha, sp_color_wheel_is_adjusting( wheel ) ); } -- cgit v1.2.3 From c8840f1663769367b52c25af12df2cd7032a69d9 Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Fri, 14 Aug 2009 03:33:33 +0000 Subject: use a function instead of copy-pasting code (bzr r8050.1.9) --- src/widgets/sp-color-wheel-selector.cpp | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/src/widgets/sp-color-wheel-selector.cpp b/src/widgets/sp-color-wheel-selector.cpp index bc8c4763b..6012f4e20 100644 --- a/src/widgets/sp-color-wheel-selector.cpp +++ b/src/widgets/sp-color-wheel-selector.cpp @@ -206,6 +206,11 @@ sp_color_wheel_selector_new (void) /* Helpers for setting color value */ +static void preserve_icc(SPColor *color, SPColorWheelSelector *cs){ + ColorSelector* selector = (ColorSelector*)(SP_COLOR_SELECTOR(cs)->base); + color->icc = selector->getColor().icc ? new SVGICCColor(*selector->getColor().icc) : 0; +} + void ColorWheelSelector::_colorChanged() { #ifdef DUMP_CHANGE_INFO @@ -238,10 +243,7 @@ void ColorWheelSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorW wheelSelector->_updating = TRUE; - /* Preserve ICC color */ - ColorSelector* selector = (ColorSelector*)(SP_COLOR_SELECTOR(cs)->base); - wheelSelector->_color.icc = selector->getColor().icc ? new SVGICCColor(*selector->getColor().icc) : 0; - + preserve_icc(&wheelSelector->_color, cs); wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging ); wheelSelector->_updating = FALSE; @@ -255,10 +257,7 @@ void ColorWheelSelector::_sliderGrabbed( SPColorSlider *slider, SPColorWheelSele wheelSelector->_dragging = TRUE; wheelSelector->_grabbed(); - /* Preserve ICC color */ - ColorSelector* selector = (ColorSelector*)(SP_COLOR_SELECTOR(cs)->base); - wheelSelector->_color.icc = selector->getColor().icc ? new SVGICCColor(*selector->getColor().icc) : 0; - + preserve_icc(&wheelSelector->_color, cs); wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging ); } } @@ -271,10 +270,7 @@ void ColorWheelSelector::_sliderReleased( SPColorSlider *slider, SPColorWheelSel wheelSelector->_dragging = FALSE; wheelSelector->_released(); - /* Preserve ICC color */ - ColorSelector* selector = (ColorSelector*)(SP_COLOR_SELECTOR(cs)->base); - wheelSelector->_color.icc = selector->getColor().icc ? new SVGICCColor(*selector->getColor().icc) : 0; - + preserve_icc(&wheelSelector->_color, cs); wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging ); } } @@ -284,10 +280,7 @@ void ColorWheelSelector::_sliderChanged( SPColorSlider *slider, SPColorWheelSele (void)slider; ColorWheelSelector* wheelSelector = (ColorWheelSelector*)(SP_COLOR_SELECTOR(cs)->base); - /* Preserve ICC color */ - ColorSelector* selector = (ColorSelector*)(SP_COLOR_SELECTOR(cs)->base); - wheelSelector->_color.icc = selector->getColor().icc ? new SVGICCColor(*selector->getColor().icc) : 0; - + preserve_icc(&wheelSelector->_color, cs); wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging ); } @@ -304,10 +297,7 @@ void ColorWheelSelector::_wheelChanged( SPColorWheel *wheel, SPColorWheelSelecto sp_color_slider_set_colors (SP_COLOR_SLIDER(wheelSelector->_slider), start, mid, end); - /* Preserve ICC color */ - ColorSelector* selector = (ColorSelector*)(SP_COLOR_SELECTOR(cs)->base); - color.icc = selector->getColor().icc ? new SVGICCColor(*selector->getColor().icc) : 0; - + preserve_icc(&color, cs); wheelSelector->_updateInternals( color, wheelSelector->_alpha, sp_color_wheel_is_adjusting( wheel ) ); } -- cgit v1.2.3 From 048b095b6031adf91a6dc2fb300270f78ca44cbf Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Fri, 14 Aug 2009 03:52:51 +0000 Subject: a quick workaround in order to avoid some invalid names for icc profiles. A complete sanitizer should be implemented later. (bzr r8050.1.10) --- src/ui/dialog/document-properties.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp index bb9ab4d02..c21f64629 100644 --- a/src/ui/dialog/document-properties.cpp +++ b/src/ui/dialog/document-properties.cpp @@ -381,6 +381,17 @@ DocumentProperties::populate_available_profiles(){ _menu.show_all(); } +//this is a quick workaround: +static gchar* sanitize_name(gchar* name){ + gchar* c=name; + while (*c != '\0'){ + if (*c == ' ') *c = '-'; + if (*c == '_') *c = '-'; + c++; + } + return name; +} + void DocumentProperties::linkSelectedProfile() { @@ -396,7 +407,8 @@ DocumentProperties::linkSelectedProfile() } Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc()); Inkscape::XML::Node *cprofRepr = xml_doc->createElement("svg:color-profile"); - cprofRepr->setAttribute("name", (gchar*) _menu.get_active()->get_data("name")); +// cprofRepr->setAttribute("inkscape:name", (gchar*) _menu.get_active()->get_data("name")); + cprofRepr->setAttribute("name", sanitize_name((gchar*) _menu.get_active()->get_data("name"))); cprofRepr->setAttribute("xlink:href", (gchar*) _menu.get_active()->get_data("filepath")); // Checks whether there is a defs element. Creates it when needed -- cgit v1.2.3 From 61ed908098ec4a07eae3308920111522a555c60a Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Fri, 14 Aug 2009 04:21:17 +0000 Subject: preserving icc colors in all tabs of fill&stroke (bzr r8050.1.11) --- src/widgets/sp-color-scales.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/widgets/sp-color-scales.cpp b/src/widgets/sp-color-scales.cpp index cf06247e7..a09a3a2ed 100644 --- a/src/widgets/sp-color-scales.cpp +++ b/src/widgets/sp-color-scales.cpp @@ -10,6 +10,7 @@ #include #include "../dialogs/dialog-events.h" #include "sp-color-scales.h" +#include "svg/svg-icc-color.h" #define CSC_CHANNEL_R (1 << 0) #define CSC_CHANNEL_G (1 << 1) @@ -241,6 +242,10 @@ void ColorScales::_recalcColor( gboolean changing ) g_warning ("file %s: line %d: Illegal color selector mode %d", __FILE__, __LINE__, _mode); break; } + + /* Preserve ICC */ + color.icc = _color.icc ? new SVGICCColor(*_color.icc) : 0; + _updateInternals( color, alpha, _dragging ); } else -- cgit v1.2.3 From dd9b154edc3ee479a3932ae051498389e331812e Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Fri, 14 Aug 2009 06:34:14 +0000 Subject: Initial draft of the out-of-gamut check. It is not working yet. I will continue work on it tomorrow. (bzr r8050.1.12) --- src/widgets/sp-color-notebook.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) 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]; -- cgit v1.2.3 From ffbf2cca9e54383050bf9bdfbef82ec4b8ccd0ad Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Sat, 15 Aug 2009 05:25:49 +0000 Subject: refactoring ICC out-of-gamut check (bzr r8050.1.13) --- src/widgets/sp-color-notebook.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 5eb44c2cb..52c78ba42 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -511,15 +511,13 @@ void ColorNotebook::_updateRgbaEntry( const SPColor& color, gfloat alpha ) /* update out-of-gamut icon */ gtk_widget_set_sensitive (_box_outofgamut, false); if (color.icc){ - BYTE outofgamut; - cmsSetAlarmCodes(255, 255, 255); + BYTE outofgamut = 0; 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, + cmsHTRANSFORM trans = cmsCreateProofingTransform(hsRGB, TYPE_RGBA_8, hNULL, TYPE_GRAY_8, target_profile->profHandle, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, (cmsFLAGS_GAMUTCHECK|cmsFLAGS_SOFTPROOFING)); if ( trans ) { @@ -530,7 +528,11 @@ void ColorNotebook::_updateRgbaEntry( const SPColor& color, gfloat alpha ) SP_RGBA32_B_U(val), 255}; + int alarm_r, alarm_g, alarm_b; + cmsGetAlarmCodes(&alarm_r, &alarm_g, &alarm_b); + cmsSetAlarmCodes(255, 255, 255); cmsDoTransform(trans, &check_color, &outofgamut, 1); + cmsSetAlarmCodes(alarm_r, alarm_g, alarm_b); gtk_widget_set_sensitive (_box_outofgamut, outofgamut == 255); } } -- cgit v1.2.3 From db87667df0c9068024267a4de6137487904048f2 Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Sat, 15 Aug 2009 05:59:15 +0000 Subject: now gamut check works! (bzr r8050.1.14) --- src/color-profile.cpp | 41 +++++++++++++++++++++++++++++++++++++++ src/color-profile.h | 6 ++++++ src/widgets/sp-color-notebook.cpp | 26 ++----------------------- 3 files changed, 49 insertions(+), 24 deletions(-) diff --git a/src/color-profile.cpp b/src/color-profile.cpp index de9dc6959..5f2364449 100644 --- a/src/color-profile.cpp +++ b/src/color-profile.cpp @@ -13,6 +13,7 @@ #include #include #include "xml/repr.h" +#include "color.h" #include "color-profile.h" #include "color-profile-fns.h" #include "attributes.h" @@ -84,6 +85,15 @@ cmsHPROFILE ColorProfile::getSRGBProfile() { return _sRGBProf; } +cmsHPROFILE ColorProfile::_NullProf = 0; + +cmsHPROFILE ColorProfile::getNULLProfile() { + if ( !_NullProf ) { + _NullProf = cmsCreateNULLProfile(); + } + return _NullProf; +} + #endif // ENABLE_LCMS /** @@ -144,6 +154,7 @@ void ColorProfile::init( ColorProfile *cprof ) cprof->_profileSpace = icSigRgbData; cprof->_transf = 0; cprof->_revTransf = 0; + cprof->_gamutTransf = 0; #endif // ENABLE_LCMS } @@ -197,6 +208,10 @@ void ColorProfile::_clearProfile() cmsDeleteTransform( _revTransf ); _revTransf = 0; } + if ( _gamutTransf ) { + cmsDeleteTransform( _gamutTransf ); + _gamutTransf = 0; + } if ( profHandle ) { cmsCloseProfile( profHandle ); profHandle = 0; @@ -496,6 +511,32 @@ cmsHTRANSFORM ColorProfile::getTransfFromSRGB8() return _revTransf; } +cmsHTRANSFORM ColorProfile::getTransfGamutCheck() +{ + if ( !_gamutTransf ) { + _gamutTransf = cmsCreateProofingTransform(getSRGBProfile(), TYPE_RGBA_8, getNULLProfile(), TYPE_GRAY_8, profHandle, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, (cmsFLAGS_GAMUTCHECK|cmsFLAGS_SOFTPROOFING)); + } + return _gamutTransf; +} + +bool ColorProfile::GamutCheck(SPColor color){ + BYTE outofgamut = 0; + + 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}; + + int alarm_r, alarm_g, alarm_b; + cmsGetAlarmCodes(&alarm_r, &alarm_g, &alarm_b); + cmsSetAlarmCodes(255, 255, 255); + cmsDoTransform(ColorProfile::getTransfGamutCheck(), &check_color, &outofgamut, 1); + cmsSetAlarmCodes(alarm_r, alarm_g, alarm_b); + return (outofgamut == 255); +} + #include diff --git a/src/color-profile.h b/src/color-profile.h index 2e57e7ef0..40d0d7698 100644 --- a/src/color-profile.h +++ b/src/color-profile.h @@ -36,11 +36,15 @@ struct ColorProfile : public SPObject { static std::list getProfileDirs(); #if ENABLE_LCMS static cmsHPROFILE getSRGBProfile(); + static cmsHPROFILE getNULLProfile(); icColorSpaceSignature getColorSpace() const {return _profileSpace;} icProfileClassSignature getProfileClass() const {return _profileClass;} cmsHTRANSFORM getTransfToSRGB8(); cmsHTRANSFORM getTransfFromSRGB8(); + cmsHTRANSFORM getTransfGamutCheck(); + bool GamutCheck(SPColor color); + #endif // ENABLE_LCMS gchar* href; @@ -64,11 +68,13 @@ private: void _clearProfile(); static cmsHPROFILE _sRGBProf; + static cmsHPROFILE _NullProf; icProfileClassSignature _profileClass; icColorSpaceSignature _profileSpace; cmsHTRANSFORM _transf; cmsHTRANSFORM _revTransf; + cmsHTRANSFORM _gamutTransf; #endif // ENABLE_LCMS }; diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 52c78ba42..04a35e4ad 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -511,31 +511,9 @@ void ColorNotebook::_updateRgbaEntry( const SPColor& color, gfloat alpha ) /* update out-of-gamut icon */ gtk_widget_set_sensitive (_box_outofgamut, false); if (color.icc){ - BYTE outofgamut = 0; - static cmsHPROFILE hNULL = cmsCreateNULLProfile(); - static cmsHPROFILE hsRGB = cmsCreate_sRGBProfile(); - Inkscape::ColorProfile* target_profile = SP_ACTIVE_DOCUMENT->profileManager->find(color.icc->colorProfile.c_str()); - if ( target_profile ) { - cmsHTRANSFORM trans = cmsCreateProofingTransform(hsRGB, TYPE_RGBA_8, 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}; - - int alarm_r, alarm_g, alarm_b; - cmsGetAlarmCodes(&alarm_r, &alarm_g, &alarm_b); - cmsSetAlarmCodes(255, 255, 255); - cmsDoTransform(trans, &check_color, &outofgamut, 1); - cmsSetAlarmCodes(alarm_r, alarm_g, alarm_b); - gtk_widget_set_sensitive (_box_outofgamut, outofgamut == 255); - } - } + if ( target_profile ) + gtk_widget_set_sensitive (_box_outofgamut, target_profile->GamutCheck(color)); } -- cgit v1.2.3 From d27412532cd40717abd78e0b14e9cfc45dd0a4be Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Mon, 17 Aug 2009 20:56:03 +0000 Subject: adding iffdefs for LCMS and fixing layout of CMS icons (bzr r8050.1.15) --- src/widgets/sp-color-notebook.cpp | 15 ++++++++++----- src/widgets/sp-color-notebook.h | 2 ++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 04a35e4ad..be41f5f0f 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -329,6 +329,8 @@ void ColorNotebook::init() row++; GtkWidget *rgbabox = gtk_hbox_new (FALSE, 0); + +#if ENABLE_LCMS /* Create color management icons */ _box_colormanaged = gtk_event_box_new (); GtkWidget *colormanaged = gtk_image_new_from_icon_name ("color-management-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); @@ -336,7 +338,7 @@ void ColorNotebook::init() GtkTooltips *tooltips_colormanaged = gtk_tooltips_new (); gtk_tooltips_set_tip (tooltips_colormanaged, _box_colormanaged, _("Color Managed"), ""); gtk_widget_set_sensitive (_box_colormanaged, false); - gtk_box_pack_start(GTK_BOX(rgbabox), _box_colormanaged, TRUE, FALSE, 2); + gtk_box_pack_start(GTK_BOX(rgbabox), _box_colormanaged, FALSE, FALSE, 2); _box_outofgamut = gtk_event_box_new (); GtkWidget *outofgamut = gtk_image_new_from_icon_name ("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); @@ -344,7 +346,9 @@ void ColorNotebook::init() GtkTooltips *tooltips_outofgamut = gtk_tooltips_new (); gtk_tooltips_set_tip (tooltips_outofgamut, _box_outofgamut, _("Out of gamut!"), ""); gtk_widget_set_sensitive (_box_outofgamut, false); - gtk_box_pack_start(GTK_BOX(rgbabox), _box_outofgamut, TRUE, FALSE, 2); + gtk_box_pack_start(GTK_BOX(rgbabox), _box_outofgamut, FALSE, FALSE, 2); + +#endif //ENABLE_LCMS /* Create RGBA entry and color preview */ _rgbal = gtk_label_new_with_mnemonic (_("RGBA_:")); @@ -361,7 +365,7 @@ void ColorNotebook::init() sp_set_font_size_smaller (rgbabox); gtk_widget_show_all (rgbabox); - gtk_table_attach (GTK_TABLE (table), rgbabox, 1, 2, row, row + 1, GTK_FILL, GTK_SHRINK, XPAD, YPAD); + gtk_table_attach (GTK_TABLE (table), rgbabox, 0, 2, row, row + 1, GTK_FILL, GTK_SHRINK, XPAD, YPAD); #ifdef SPCS_PREVIEW _p = sp_color_preview_new (0xffffffff); @@ -504,7 +508,8 @@ void ColorNotebook::_rgbaEntryChanged(GtkEntry* entry) void ColorNotebook::_updateRgbaEntry( const SPColor& color, gfloat alpha ) { g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) ); - + +#if ENABLE_LCMS /* update color management icon*/ gtk_widget_set_sensitive (_box_colormanaged, color.icc != NULL); @@ -515,7 +520,7 @@ void ColorNotebook::_updateRgbaEntry( const SPColor& color, gfloat alpha ) if ( target_profile ) gtk_widget_set_sensitive (_box_outofgamut, target_profile->GamutCheck(color)); } - +#endif //ENABLE_LCMS if ( !_updatingrgba ) { diff --git a/src/widgets/sp-color-notebook.h b/src/widgets/sp-color-notebook.h index c9ab29798..b7cd8295f 100644 --- a/src/widgets/sp-color-notebook.h +++ b/src/widgets/sp-color-notebook.h @@ -61,7 +61,9 @@ protected: gulong _entryId; GtkWidget *_book; GtkWidget *_rgbal, *_rgbae; /* RGBA entry */ +#if ENABLE_LCMS GtkWidget *_box_outofgamut, *_box_colormanaged; +#endif //ENABLE_LCMS GtkWidget *_p; /* Color preview */ GtkWidget *_btn; GtkWidget *_popup; -- cgit v1.2.3