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 _colorSelectorDialog.get_vbox()->pack_start (
62 *Glib::wrap(&_colorSelector->vbox), true, true, 0);
64 g_signal_connect(G_OBJECT(_colorSelector), "dragged",
65 G_CALLBACK(sp_color_picker_color_mod), (void *)this);
66 g_signal_connect(G_OBJECT(_colorSelector), "released",
67 G_CALLBACK(sp_color_picker_color_mod), (void *)this);
68 g_signal_connect(G_OBJECT(_colorSelector), "changed",
69 G_CALLBACK(sp_color_picker_color_mod), (void *)this);
71 gtk_widget_show(GTK_WIDGET(_colorSelector));
73 }
78 void
79 ColorPicker::setRgba32 (guint32 rgba)
80 {
81 if (_in_use) return;
83 _preview.setRgba32 (rgba);
84 _rgba = rgba;
85 if (_colorSelector)
86 {
87 SPColor color;
88 color.set( rgba );
89 _colorSelector->base->setColorAlpha(color, SP_RGBA32_A_F(rgba));
90 }
91 }
93 void
94 ColorPicker::closeWindow()
95 {
96 _colorSelectorDialog.hide();
97 }
99 void
100 ColorPicker::on_clicked()
101 {
102 if (_colorSelector)
103 {
104 SPColor color;
105 color.set( _rgba );
106 _colorSelector->base->setColorAlpha(color, SP_RGBA32_A_F(_rgba));
107 }
108 _colorSelectorDialog.show();
109 }
111 void
112 ColorPicker::on_changed (guint32)
113 {
114 }
116 void
117 sp_color_picker_color_mod(SPColorSelector *csel, GObject *cp)
118 {
119 if (_in_use) return;
120 else _in_use = true;
122 SPColor color;
123 float alpha;
124 csel->base->getColorAlpha(color, &alpha);
125 guint32 rgba = color.toRGBA32( alpha );
127 ColorPicker *ptr = (ColorPicker *)(cp);
129 (ptr->_preview).setRgba32 (rgba);
131 if (ptr->_undo && SP_ACTIVE_DESKTOP)
132 sp_document_done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_NONE,
133 /* TODO: annotate */ "color-picker.cpp:130");
135 ptr->on_changed (rgba);
136 _in_use = false;
137 ptr->_changed_signal.emit (rgba);
138 ptr->_rgba = rgba;
139 }
142 }//namespace Widget
143 }//namespace UI
144 }//namespace Inkscape
147 /*
148 Local Variables:
149 mode:c++
150 c-file-style:"stroustrup"
151 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
152 indent-tabs-mode:nil
153 fill-column:99
154 End:
155 */
156 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :