3
#include <glibmm/i18n.h>
5
#include "swatch-selector.h"
8
#include "gradient-chemistry.h"
9
#include "gradient-selector.h"
10
#include "sp-color-notebook.h"
12
#include "svg/css-ostringstream.h"
13
#include "svg/svg-color.h"
22
SwatchSelector::SwatchSelector() :
27
GtkWidget *gsel = sp_gradient_selector_new();
28
_gsel = SP_GRADIENT_SELECTOR(gsel);
29
g_object_set_data( G_OBJECT(gobj()), "base", this );
30
_gsel->setMode(SPGradientSelector::MODE_SWATCH);
32
gtk_widget_show(gsel);
34
pack_start(*Gtk::manage(Glib::wrap(gsel)));
37
GtkWidget *csel = sp_color_selector_new( SP_TYPE_COLOR_NOTEBOOK );
38
_csel = SP_COLOR_SELECTOR(csel);
39
Gtk::Widget *wrappedCSel = Glib::wrap(csel);
41
//gtk_widget_show(csel);
44
GObject *obj = G_OBJECT(csel);
46
g_signal_connect(obj, "grabbed", G_CALLBACK(_grabbedCb), this);
47
g_signal_connect(obj, "dragged", G_CALLBACK(_draggedCb), this);
48
g_signal_connect(obj, "released", G_CALLBACK(_releasedCb), this);
49
g_signal_connect(obj, "changed", G_CALLBACK(_changedCb), this);
51
pack_start(*Gtk::manage(wrappedCSel));
54
SwatchSelector::~SwatchSelector()
56
_csel = 0; // dtor should be handled by Gtk::manage()
60
SPGradientSelector *SwatchSelector::getGradientSelector()
65
void SwatchSelector::_grabbedCb(SPColorSelector * /*csel*/, void * /*data*/)
69
void SwatchSelector::_draggedCb(SPColorSelector * /*csel*/, void *data)
72
//SwatchSelector *swsel = reinterpret_cast<SwatchSelector*>(data);
74
// TODO might have to block cycles
76
// Copied from gradient-vector.cpp, but does not appear to cause visible changes:
79
SPGradient *gradient = swsel->_gsel->getVector();
80
SPGradient *ngr = sp_gradient_ensure_vector_normalized(gradient);
81
if (ngr != gradient) {
82
// Our master gradient has changed
83
// TODO replace with proper - sp_gradient_vector_widget_load_gradient(GTK_WIDGET(swsel->_gsel), ngr);
86
sp_gradient_ensure_vector(ngr);
89
SPStop* stop = ngr->getFirstStop();
91
swsel->_csel->base->getColorAlpha(stop->specified_color, &stop->opacity);
92
stop->currentColor = false;
100
void SwatchSelector::_releasedCb(SPColorSelector * /*csel*/, void * /*data*/)
104
void SwatchSelector::_changedCb(SPColorSelector */*csel*/, void *data)
107
SwatchSelector *swsel = reinterpret_cast<SwatchSelector*>(data);
109
// TODO might have to block cycles
111
if (swsel->_gsel && swsel->_gsel->getVector()) {
112
SPGradient *gradient = swsel->_gsel->getVector();
113
SPGradient *ngr = sp_gradient_ensure_vector_normalized(gradient);
114
if (ngr != gradient) {
115
/* Our master gradient has changed */
116
// TODO replace with proper - sp_gradient_vector_widget_load_gradient(GTK_WIDGET(swsel->_gsel), ngr);
122
SPStop* stop = ngr->getFirstStop();
128
swsel->_csel->base->getColorAlpha( color, alpha );
129
rgb = color.toRGBA32( 0x00 );
131
// TODO replace with generic shared code that also handles icc-color
132
Inkscape::CSSOStringStream os;
134
sp_svg_write_color(c, sizeof(c), rgb);
135
os << "stop-color:" << c << ";stop-opacity:" << static_cast<gdouble>(alpha) <<";";
136
SP_OBJECT_REPR(stop)->setAttribute("style", os.str().c_str());
138
sp_document_done(SP_OBJECT_DOCUMENT(ngr), SP_VERB_CONTEXT_GRADIENT,
139
_("Change swatch color"));
145
void SwatchSelector::connectGrabbedHandler( GCallback handler, void *data )
147
GObject* obj = G_OBJECT(_gsel);
148
g_signal_connect( obj, "grabbed", handler, data );
151
void SwatchSelector::connectDraggedHandler( GCallback handler, void *data )
153
GObject* obj = G_OBJECT(_gsel);
154
g_signal_connect( obj, "dragged", handler, data );
157
void SwatchSelector::connectReleasedHandler( GCallback handler, void *data )
159
GObject* obj = G_OBJECT(_gsel);
160
g_signal_connect( obj, "released", handler, data );
163
void SwatchSelector::connectchangedHandler( GCallback handler, void *data )
165
GObject* obj = G_OBJECT(_gsel);
166
g_signal_connect( obj, "changed", handler, data );
169
void SwatchSelector::setVector(SPDocument */*doc*/, SPGradient *vector)
171
//GtkVBox * box = gobj();
172
_gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector);
174
if ( vector && vector->isSolid() ) {
175
SPStop* stop = vector->getFirstStop();
177
guint32 const colorVal = sp_stop_get_rgba32(stop);
178
_csel->base->setAlpha(SP_RGBA32_A_F(colorVal));
179
SPColor color( SP_RGBA32_R_F(colorVal), SP_RGBA32_G_F(colorVal), SP_RGBA32_B_F(colorVal) );
180
// set its color, from the stored array
181
_csel->base->setColor( color );
182
gtk_widget_show_all( GTK_WIDGET(_csel) );
184
gtk_widget_hide( GTK_WIDGET(_csel) );
191
} // namespace Widgets
192
} // namespace Inkscape
199
c-file-style:"stroustrup"
200
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
205
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :