Code

ef8c491d0fe458a4c953c74b6cb5a61fa50336b5
[inkscape.git] / src / ui / widget / color-picker.cpp
1 #define __COLOR_PICKER_C__
3 /** \file
4  * \brief  Color picker button & window
5  *
6  * Authors:
7  *   Lauris Kaplinski <lauris@kaplinski.com>
8  *   bulia byak <buliabyak@users.sf.net>
9  *   Ralf Stephan <ralf@ark.in-berlin.de>
10  *
11  * Copyright (C) Authors 2000-2005
12  *
13  * Released under GNU GPL, read the file 'COPYING' for more information
14  */
16 #include "inkscape.h"
17 #include "desktop-handles.h"
18 #include "document.h"
20 #include "widgets/sp-color-notebook.h"
22 #include "color-picker.h"
24 namespace Inkscape {
25 namespace UI {
26 namespace Widget {
29 ColorPicker::ColorPicker (const Glib::ustring& title, const Glib::ustring& tip,
30                           guint32 rgba, bool undo)
31           : _preview(rgba), _title(title), _rgba(rgba), _undo(undo),
32            _colorSelectorDialog("dialogs.colorpickerwindow")
33 {
34     setupDialog(title);
35     set_relief (Gtk::RELIEF_NONE);
36     _preview.show();
37     add (_preview);
38     _tt.set_tip (*this, tip);
39 }
41 ColorPicker::~ColorPicker()
42 {
43     closeWindow();
44     _colorSelector = NULL;
45 }
47 void
48 ColorPicker::setupDialog(const Glib::ustring &title)
49 {
50     _colorSelectorDialog.hide();
51     _colorSelectorDialog.set_title (title);
52     _colorSelectorDialog.set_border_width (4);
53     _colorSelector = (SPColorSelector*)sp_color_selector_new(SP_TYPE_COLOR_NOTEBOOK,
54                                   SP_COLORSPACE_TYPE_UNKNOWN);
55     _colorSelectorDialog.get_vbox()->pack_start (
56               *Glib::wrap(&_colorSelector->vbox), true, true, 0);
58     g_signal_connect(G_OBJECT(_colorSelector), "dragged",
59                          G_CALLBACK(sp_color_picker_color_mod), (void *)this);
60     g_signal_connect(G_OBJECT(_colorSelector), "changed",
61                          G_CALLBACK(sp_color_picker_color_mod), (void *)this);
63     gtk_widget_show(GTK_WIDGET(_colorSelector));
65 }
70 void
71 ColorPicker::setRgba32 (guint32 rgba)
72 {
73     _preview.setRgba32 (rgba);
74     _rgba = rgba;
75     if (_colorSelector)
76     {
77         SPColor color;
78         sp_color_set_rgb_rgba32(&color, rgba);
79         _colorSelector->base->setColorAlpha(color, SP_RGBA32_A_F(rgba));
80     }
81 }
83 void
84 ColorPicker::closeWindow()
85 {
86     _colorSelectorDialog.hide();
87 }
89 void
90 ColorPicker::on_clicked()
91 {
92     if (_colorSelector)
93     {
94         SPColor color;
95         sp_color_set_rgb_rgba32(&color, _rgba);
96         _colorSelector->base->setColorAlpha(color, SP_RGBA32_A_F(_rgba));
97     }
98     _colorSelectorDialog.show();
99 }
101 void
102 ColorPicker::on_changed (guint32)
106 void
107 sp_color_picker_color_mod(SPColorSelector *csel, GObject *cp)
109     SPColor color;
110     float alpha;
111     csel->base->getColorAlpha(color, &alpha);
112     guint32 rgba = sp_color_get_rgba32_falpha(&color, alpha);
114     ColorPicker *ptr = (ColorPicker *)(cp);
116     (ptr->_preview).setRgba32 (rgba);
118     if (ptr->_undo && SP_ACTIVE_DESKTOP)
119         sp_document_done(SP_DT_DOCUMENT(SP_ACTIVE_DESKTOP));
121     ptr->on_changed (rgba);
122     ptr->_changed_signal.emit (rgba);
126 }//namespace Widget
127 }//namespace UI
128 }//namespace Inkscape
131 /*
132   Local Variables:
133   mode:c++
134   c-file-style:"stroustrup"
135   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
136   indent-tabs-mode:nil
137   fill-column:99
138   End:
139 */
140 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :