Code

Merge and cleanup of GSoC C++-ification project.
[inkscape.git] / src / widgets / swatch-selector.cpp
index 50ee632cd1e5af7b5fd695397d5a86db608cb934..935282a3a606a60a5a5db38513aff05dc89ea86c 100644 (file)
@@ -108,7 +108,7 @@ void SwatchSelector::_changedCb(SPColorSelector */*csel*/, void *data)
 
         // TODO might have to block cycles
 
-        if (swsel->_gsel) {
+        if (swsel->_gsel && swsel->_gsel->getVector()) {
             SPGradient *gradient = swsel->_gsel->getVector();
             SPGradient *ngr = sp_gradient_ensure_vector_normalized(gradient);
             if (ngr != gradient) {
@@ -116,7 +116,7 @@ void SwatchSelector::_changedCb(SPColorSelector */*csel*/, void *data)
                 // TODO replace with proper - sp_gradient_vector_widget_load_gradient(GTK_WIDGET(swsel->_gsel), ngr);
             }
 
-            sp_gradient_ensure_vector(ngr);
+            ngr->ensureVector();
 
 
             SPStop* stop = ngr->getFirstStop();
@@ -125,7 +125,7 @@ void SwatchSelector::_changedCb(SPColorSelector */*csel*/, void *data)
                 float alpha = 0;
                 guint32 rgb = 0;
 
-                swsel->_csel->base->getColorAlpha( color, &alpha );
+                swsel->_csel->base->getColorAlpha( color, alpha );
                 rgb = color.toRGBA32( 0x00 );
 
                 // TODO replace with generic shared code that also handles icc-color
@@ -135,8 +135,8 @@ void SwatchSelector::_changedCb(SPColorSelector */*csel*/, void *data)
                 os << "stop-color:" << c << ";stop-opacity:" << static_cast<gdouble>(alpha) <<";";
                 SP_OBJECT_REPR(stop)->setAttribute("style", os.str().c_str());
 
-                sp_document_done(SP_OBJECT_DOCUMENT(ngr), SP_VERB_CONTEXT_GRADIENT,
-                                 _("Change swatch color"));
+                DocumentUndo::done(SP_OBJECT_DOCUMENT(ngr), SP_VERB_CONTEXT_GRADIENT,
+                                   _("Change swatch color"));
             }
         }
     }
@@ -169,10 +169,9 @@ void SwatchSelector::connectchangedHandler( GCallback handler, void *data )
 void SwatchSelector::setVector(SPDocument */*doc*/, SPGradient *vector)
 {
     //GtkVBox * box = gobj();
-
     _gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector);
 
-    if (vector) {
+    if ( vector && vector->isSolid() ) {
         SPStop* stop = vector->getFirstStop();
 
         guint32 const colorVal = sp_stop_get_rgba32(stop);
@@ -180,6 +179,9 @@ void SwatchSelector::setVector(SPDocument */*doc*/, SPGradient *vector)
         SPColor color( SP_RGBA32_R_F(colorVal), SP_RGBA32_G_F(colorVal), SP_RGBA32_B_F(colorVal) );
         // set its color, from the stored array
         _csel->base->setColor( color );
+        gtk_widget_show_all( GTK_WIDGET(_csel) );
+    } else {
+        gtk_widget_hide( GTK_WIDGET(_csel) );
     }
 
 /*
@@ -200,4 +202,4 @@ void SwatchSelector::setVector(SPDocument */*doc*/, SPGradient *vector)
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :