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 {
28 void sp_color_picker_color_mod(SPColorSelector *csel, GObject *cp);
30 ColorPicker::ColorPicker (const Glib::ustring& title, const Glib::ustring& tip,
31 guint32 rgba, bool undo)
32 : _preview(rgba), _title(title), _rgba(rgba), _undo(undo),
33 _colorSelectorDialog("dialogs.colorpickerwindow")
34 {
35 setupDialog(title);
36 set_relief (Gtk::RELIEF_NONE);
37 _preview.show();
38 add (_preview);
39 _tt.set_tip (*this, tip);
40 }
42 ColorPicker::~ColorPicker()
43 {
44 closeWindow();
45 _colorSelector = NULL;
46 }
48 void
49 ColorPicker::setupDialog(const Glib::ustring &title)
50 {
51 _colorSelectorDialog.hide();
52 _colorSelectorDialog.set_title (title);
53 _colorSelectorDialog.set_border_width (4);
54 _colorSelector = (SPColorSelector*)sp_color_selector_new(SP_TYPE_COLOR_NOTEBOOK,
55 SP_COLORSPACE_TYPE_UNKNOWN);
56 _colorSelectorDialog.get_vbox()->pack_start (
57 *Glib::wrap(&_colorSelector->vbox), true, true, 0);
59 g_signal_connect(G_OBJECT(_colorSelector), "dragged",
60 G_CALLBACK(sp_color_picker_color_mod), (void *)this);
61 g_signal_connect(G_OBJECT(_colorSelector), "changed",
62 G_CALLBACK(sp_color_picker_color_mod), (void *)this);
64 gtk_widget_show(GTK_WIDGET(_colorSelector));
66 }
71 void
72 ColorPicker::setRgba32 (guint32 rgba)
73 {
74 _preview.setRgba32 (rgba);
75 _rgba = rgba;
76 if (_colorSelector)
77 {
78 SPColor color;
79 sp_color_set_rgb_rgba32(&color, rgba);
80 _colorSelector->base->setColorAlpha(color, SP_RGBA32_A_F(rgba));
81 }
82 }
84 void
85 ColorPicker::closeWindow()
86 {
87 _colorSelectorDialog.hide();
88 }
90 void
91 ColorPicker::on_clicked()
92 {
93 if (_colorSelector)
94 {
95 SPColor color;
96 sp_color_set_rgb_rgba32(&color, _rgba);
97 _colorSelector->base->setColorAlpha(color, SP_RGBA32_A_F(_rgba));
98 }
99 _colorSelectorDialog.show();
100 }
102 void
103 ColorPicker::on_changed (guint32)
104 {
105 }
107 void
108 sp_color_picker_color_mod(SPColorSelector *csel, GObject *cp)
109 {
110 SPColor color;
111 float alpha;
112 csel->base->getColorAlpha(color, &alpha);
113 guint32 rgba = sp_color_get_rgba32_falpha(&color, alpha);
115 ColorPicker *ptr = (ColorPicker *)(cp);
117 (ptr->_preview).setRgba32 (rgba);
119 if (ptr->_undo && SP_ACTIVE_DESKTOP)
120 sp_document_done(sp_desktop_document(SP_ACTIVE_DESKTOP));
122 ptr->on_changed (rgba);
123 ptr->_changed_signal.emit (rgba);
124 }
127 }//namespace Widget
128 }//namespace UI
129 }//namespace Inkscape
132 /*
133 Local Variables:
134 mode:c++
135 c-file-style:"stroustrup"
136 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
137 indent-tabs-mode:nil
138 fill-column:99
139 End:
140 */
141 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :