Code

Group dock related prefs, add hidden prefs for dock bar and switcher appearance.
[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"
19 #include "dialogs/dialog-events.h"
21 #include "widgets/sp-color-notebook.h"
23 #include "color-picker.h"
25 static bool _in_use = false;
27 namespace Inkscape {
28 namespace UI {
29 namespace Widget {
31 void sp_color_picker_color_mod(SPColorSelector *csel, GObject *cp);
33 ColorPicker::ColorPicker (const Glib::ustring& title, const Glib::ustring& tip,
34                           guint32 rgba, bool undo)
35           : _preview(rgba), _title(title), _rgba(rgba), _undo(undo),
36            _colorSelectorDialog("dialogs.colorpickerwindow")
37 {
38     setupDialog(title);
39     set_relief (Gtk::RELIEF_NONE);
40     _preview.show();
41     add (_preview);
42     _tt.set_tip (*this, tip);
43 }
45 ColorPicker::~ColorPicker()
46 {
47     closeWindow();
48     _colorSelector = NULL;
49 }
51 void
52 ColorPicker::setupDialog(const Glib::ustring &title)
53 {
54     GtkWidget *dlg = GTK_WIDGET(_colorSelectorDialog.gobj());
55     sp_transientize(dlg);
57     _colorSelectorDialog.hide();
58     _colorSelectorDialog.set_title (title);
59     _colorSelectorDialog.set_border_width (4);
60     _colorSelector = (SPColorSelector*)sp_color_selector_new(SP_TYPE_COLOR_NOTEBOOK,
61                                   SP_COLORSPACE_TYPE_UNKNOWN);
62     _colorSelectorDialog.get_vbox()->pack_start (
63               *Glib::wrap(&_colorSelector->vbox), true, true, 0);
65     g_signal_connect(G_OBJECT(_colorSelector), "dragged",
66                          G_CALLBACK(sp_color_picker_color_mod), (void *)this);
67     g_signal_connect(G_OBJECT(_colorSelector), "released",
68                          G_CALLBACK(sp_color_picker_color_mod), (void *)this);
69     g_signal_connect(G_OBJECT(_colorSelector), "changed",
70                          G_CALLBACK(sp_color_picker_color_mod), (void *)this);
72     gtk_widget_show(GTK_WIDGET(_colorSelector));
74 }
79 void
80 ColorPicker::setRgba32 (guint32 rgba)
81 {
82     if (_in_use) return;
84     _preview.setRgba32 (rgba);
85     _rgba = rgba;
86     if (_colorSelector)
87     {
88         SPColor color;
89         sp_color_set_rgb_rgba32(&color, rgba);
90         _colorSelector->base->setColorAlpha(color, SP_RGBA32_A_F(rgba));
91     }
92 }
94 void
95 ColorPicker::closeWindow()
96 {
97     _colorSelectorDialog.hide();
98 }
100 void
101 ColorPicker::on_clicked()
103     if (_colorSelector)
104     {
105         SPColor color;
106         sp_color_set_rgb_rgba32(&color, _rgba);
107         _colorSelector->base->setColorAlpha(color, SP_RGBA32_A_F(_rgba));
108     }
109     _colorSelectorDialog.show();
112 void
113 ColorPicker::on_changed (guint32)
117 void
118 sp_color_picker_color_mod(SPColorSelector *csel, GObject *cp)
120     if (_in_use) return;
121     else _in_use = true;
122     
123     SPColor color;
124     float alpha;
125     csel->base->getColorAlpha(color, &alpha);
126     guint32 rgba = sp_color_get_rgba32_falpha(&color, alpha);
128     ColorPicker *ptr = (ColorPicker *)(cp);
130     (ptr->_preview).setRgba32 (rgba);
132     if (ptr->_undo && SP_ACTIVE_DESKTOP)
133         sp_document_done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_NONE, 
134                          /* TODO: annotate */ "color-picker.cpp:130");
136     ptr->on_changed (rgba);
137     _in_use = false;
138     ptr->_changed_signal.emit (rgba);
139     ptr->_rgba = rgba;
143 }//namespace Widget
144 }//namespace UI
145 }//namespace Inkscape
148 /*
149   Local Variables:
150   mode:c++
151   c-file-style:"stroustrup"
152   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
153   indent-tabs-mode:nil
154   fill-column:99
155   End:
156 */
157 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :