summaryrefslogtreecommitdiffstats
path: root/src/extension/paramcolor.cpp
blob: d31dc907ce886d901af85e68a636c9bb0ae6606d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
 * Copyright (C) 2005-2007 Authors:
 *   Ted Gould <ted@gould.cx>
 *   Johan Engelen <johan@shouraizou.nl>
 *   Christopher Brown <audiere@gmail.com>
 * Released under GNU GPL, read the file 'COPYING' for more information
 */

#ifdef HAVE_CONFIG_H
# include "config.h"
#endif

#include <iostream>
#include <sstream>

#include <gtkmm/adjustment.h>
#include <gtkmm/box.h>
#include <gtkmm/spinbutton.h>

#include <xml/node.h>

#include "extension.h"
#include "paramcolor.h"

#include "color.h"
#include "widgets/sp-color-selector.h"
#include "widgets/sp-color-notebook.h"


namespace Inkscape {
namespace Extension {
	
void sp_color_param_changed(SPColorSelector *csel, GObject *cp);

     
/** \brief  Free the allocated data. */
ParamColor::~ParamColor(void)
{
    
}
     
guint32 
ParamColor::set (guint32 in, SPDocument * doc, Inkscape::XML::Node * node)
{
    _value = in;

    gchar * prefname = this->pref_name();
    prefs_set_string_attribute(PREF_DIR, prefname, this->string()->c_str());
    g_free(prefname);

    return _value;
}

/** \brief  Initialize the object, to do that, copy the data. */
ParamColor::ParamColor (const gchar * name, const gchar * guitext, const gchar * desc, const Parameter::_scope_t scope, Inkscape::Extension::Extension * ext, Inkscape::XML::Node * xml) :
    Parameter(name, guitext, desc, scope, ext)
{
    const char * defaulthex = NULL;
    if (sp_repr_children(xml) != NULL)
        defaulthex = sp_repr_children(xml)->content();

    gchar * pref_name = this->pref_name();
    const gchar * paramval = prefs_get_string_attribute(PREF_DIR, pref_name);
    g_free(pref_name);

    if (paramval != NULL)
        defaulthex = paramval;
		
	_value = atoi(defaulthex);

    return;
}

/** \brief  Return the value as a string */
Glib::ustring *
ParamColor::string (void)
{
    char str[16];
	sprintf(str, "%i", _value);
	
	return new Glib::ustring(str);
}

Gtk::Widget *
ParamColor::get_widget (SPDocument * doc, Inkscape::XML::Node * node, sigc::signal<void> * changeSignal)
{
	_changeSignal = new sigc::signal<void>(*changeSignal);
	Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4));
	SPColorSelector* spColorSelector = (SPColorSelector*)sp_color_selector_new(SP_TYPE_COLOR_NOTEBOOK);
	
	ColorSelector* colorSelector = spColorSelector->base;
	if (_value < 1) {
		_value = 0xFF000000;
	}
	SPColor *color = new SPColor( _value );
	float alpha = (_value & 0xff) / 255.0F;
    colorSelector->setColorAlpha(*color, alpha);

	hbox->pack_start (*Glib::wrap(&spColorSelector->vbox), true, true, 0);
	g_signal_connect(G_OBJECT(spColorSelector), "changed",  G_CALLBACK(sp_color_param_changed), (void*)this);

	gtk_widget_show(GTK_WIDGET(spColorSelector));
	hbox->show();
    
    return dynamic_cast<Gtk::Widget *>(hbox);
}

void
sp_color_param_changed(SPColorSelector *csel, GObject *obj)
{
	const SPColor color = csel->base->getColor();
	float alpha = csel->base->getAlpha();

    ParamColor* ptr = (ParamColor*)obj;
	ptr->set(color.toRGBA32( alpha ), NULL, NULL);
	
	ptr->_changeSignal->emit();
}

};  /* namespace Extension */
};  /* namespace Inkscape */