Code

Get rid of the SP_DT_* macros which do nothing more than provide additional, confusin...
[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 {
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();
102 void
103 ColorPicker::on_changed (guint32)
107 void
108 sp_color_picker_color_mod(SPColorSelector *csel, GObject *cp)
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);
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 :