~ubuntu-branches/ubuntu/natty/inkscape/natty

« back to all changes in this revision

Viewing changes to src/widgets/swatch-selector.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Alex Valavanis
  • Date: 2010-09-12 19:44:58 UTC
  • mfrom: (1.1.12 upstream) (45.1.3 maverick)
  • Revision ID: james.westby@ubuntu.com-20100912194458-4sjwmbl7dlsrk5dc
Tags: 0.48.0-1ubuntu1
* Merge with Debian unstable (LP: #628048, LP: #401567, LP: #456248, 
  LP: #463602, LP: #591986)
* debian/control: 
  - Ubuntu maintainers
  - Promote python-lxml, python-numpy, python-uniconvertor to Recommends.
  - Demote pstoedit to Suggests (universe package).
  - Suggests ttf-dejavu instead of ttf-bitstream-vera (LP: #513319)
* debian/rules:
  - Run intltool-update on build (Ubuntu-specific).
  - Add translation domain to .desktop files (Ubuntu-specific).
* debian/dirs:
  - Add usr/share/pixmaps.  Allow inkscape.xpm installation
* drop 50-poppler-API.dpatch (now upstream)
* drop 51-paste-in-unwritable-directory.dpatch (now upstream) 

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
 
 
3
#include <glibmm/i18n.h>
 
4
 
 
5
#include "swatch-selector.h"
 
6
 
 
7
#include "document.h"
 
8
#include "gradient-chemistry.h"
 
9
#include "gradient-selector.h"
 
10
#include "sp-color-notebook.h"
 
11
#include "sp-stop.h"
 
12
#include "svg/css-ostringstream.h"
 
13
#include "svg/svg-color.h"
 
14
#include "verbs.h"
 
15
#include "xml/node.h"
 
16
 
 
17
namespace Inkscape
 
18
{
 
19
namespace Widgets
 
20
{
 
21
 
 
22
SwatchSelector::SwatchSelector() :
 
23
    Gtk::VBox(),
 
24
    _gsel(0),
 
25
    _csel(0)
 
26
{
 
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);
 
31
 
 
32
    gtk_widget_show(gsel);
 
33
 
 
34
    pack_start(*Gtk::manage(Glib::wrap(gsel)));
 
35
 
 
36
 
 
37
    GtkWidget *csel = sp_color_selector_new( SP_TYPE_COLOR_NOTEBOOK );
 
38
    _csel = SP_COLOR_SELECTOR(csel);
 
39
    Gtk::Widget *wrappedCSel = Glib::wrap(csel);
 
40
    wrappedCSel->show();
 
41
    //gtk_widget_show(csel);
 
42
 
 
43
 
 
44
    GObject *obj = G_OBJECT(csel);
 
45
 
 
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);
 
50
 
 
51
    pack_start(*Gtk::manage(wrappedCSel));
 
52
}
 
53
 
 
54
SwatchSelector::~SwatchSelector()
 
55
{
 
56
    _csel = 0; // dtor should be handled by Gtk::manage()
 
57
    _gsel = 0;
 
58
}
 
59
 
 
60
SPGradientSelector *SwatchSelector::getGradientSelector()
 
61
{
 
62
    return _gsel;
 
63
}
 
64
 
 
65
void SwatchSelector::_grabbedCb(SPColorSelector * /*csel*/, void * /*data*/)
 
66
{
 
67
}
 
68
 
 
69
void SwatchSelector::_draggedCb(SPColorSelector * /*csel*/, void *data)
 
70
{
 
71
    if (data) {
 
72
        //SwatchSelector *swsel = reinterpret_cast<SwatchSelector*>(data);
 
73
 
 
74
        // TODO might have to block cycles
 
75
 
 
76
        // Copied from gradient-vector.cpp, but does not appear to cause visible changes:
 
77
        /*
 
78
        if (swsel->_gsel) {
 
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);
 
84
            }
 
85
 
 
86
            sp_gradient_ensure_vector(ngr);
 
87
 
 
88
 
 
89
            SPStop* stop = ngr->getFirstStop();
 
90
            if (stop) {
 
91
                swsel->_csel->base->getColorAlpha(stop->specified_color, &stop->opacity);
 
92
                stop->currentColor = false;
 
93
                // TODO push refresh
 
94
            }
 
95
        }
 
96
        */
 
97
    }
 
98
}
 
99
 
 
100
void SwatchSelector::_releasedCb(SPColorSelector * /*csel*/, void * /*data*/)
 
101
{
 
102
}
 
103
 
 
104
void SwatchSelector::_changedCb(SPColorSelector */*csel*/, void *data)
 
105
{
 
106
    if (data) {
 
107
        SwatchSelector *swsel = reinterpret_cast<SwatchSelector*>(data);
 
108
 
 
109
        // TODO might have to block cycles
 
110
 
 
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);
 
117
            }
 
118
 
 
119
            ngr->ensureVector();
 
120
 
 
121
 
 
122
            SPStop* stop = ngr->getFirstStop();
 
123
            if (stop) {
 
124
                SPColor color;
 
125
                float alpha = 0;
 
126
                guint32 rgb = 0;
 
127
 
 
128
                swsel->_csel->base->getColorAlpha( color, alpha );
 
129
                rgb = color.toRGBA32( 0x00 );
 
130
 
 
131
                // TODO replace with generic shared code that also handles icc-color
 
132
                Inkscape::CSSOStringStream os;
 
133
                gchar c[64];
 
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());
 
137
 
 
138
                sp_document_done(SP_OBJECT_DOCUMENT(ngr), SP_VERB_CONTEXT_GRADIENT,
 
139
                                 _("Change swatch color"));
 
140
            }
 
141
        }
 
142
    }
 
143
}
 
144
 
 
145
void SwatchSelector::connectGrabbedHandler( GCallback handler, void *data )
 
146
{
 
147
    GObject* obj = G_OBJECT(_gsel);
 
148
    g_signal_connect( obj, "grabbed", handler, data );
 
149
}
 
150
 
 
151
void SwatchSelector::connectDraggedHandler( GCallback handler, void *data )
 
152
{
 
153
    GObject* obj = G_OBJECT(_gsel);
 
154
    g_signal_connect( obj, "dragged", handler, data );
 
155
}
 
156
 
 
157
void SwatchSelector::connectReleasedHandler( GCallback handler, void *data )
 
158
{
 
159
    GObject* obj = G_OBJECT(_gsel);
 
160
    g_signal_connect( obj, "released", handler, data );
 
161
}
 
162
 
 
163
void SwatchSelector::connectchangedHandler( GCallback handler, void *data )
 
164
{
 
165
    GObject* obj = G_OBJECT(_gsel);
 
166
    g_signal_connect( obj, "changed", handler, data );
 
167
}
 
168
 
 
169
void SwatchSelector::setVector(SPDocument */*doc*/, SPGradient *vector)
 
170
{
 
171
    //GtkVBox * box = gobj();
 
172
    _gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector);
 
173
 
 
174
    if ( vector && vector->isSolid() ) {
 
175
        SPStop* stop = vector->getFirstStop();
 
176
 
 
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) );
 
183
    } else {
 
184
        gtk_widget_hide( GTK_WIDGET(_csel) );
 
185
    }
 
186
 
 
187
/*
 
188
*/
 
189
}
 
190
 
 
191
} // namespace Widgets
 
192
} // namespace Inkscape
 
193
 
 
194
 
 
195
 
 
196
/*
 
197
  Local Variables:
 
198
  mode:c++
 
199
  c-file-style:"stroustrup"
 
200
  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
 
201
  indent-tabs-mode:nil
 
202
  fill-column:99
 
203
  End:
 
204
*/
 
205
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :