ef8c491d0fe458a4c953c74b6cb5a61fa50336b5
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)
103 {
104 }
106 void
107 sp_color_picker_color_mod(SPColorSelector *csel, GObject *cp)
108 {
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);
123 }
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 :