summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/extension/prefdialog/parameter-color.cpp52
-rw-r--r--src/extension/prefdialog/parameter-color.h26
-rw-r--r--src/extension/prefdialog/parameter-int.cpp5
3 files changed, 69 insertions, 14 deletions
diff --git a/src/extension/prefdialog/parameter-color.cpp b/src/extension/prefdialog/parameter-color.cpp
index 4e80af2a8..a17ca1bbd 100644
--- a/src/extension/prefdialog/parameter-color.cpp
+++ b/src/extension/prefdialog/parameter-color.cpp
@@ -14,6 +14,8 @@
#include <sstream>
#include <gtkmm/box.h>
+#include <gtkmm/colorbutton.h>
+#include <gtkmm/label.h>
#include "color.h"
#include "preferences.h"
@@ -48,6 +50,16 @@ ParamColor::ParamColor(Inkscape::XML::Node *xml, Inkscape::Extension::Extension
_color_changed = _color.signal_changed.connect(sigc::mem_fun(this, &ParamColor::_onColorChanged));
// TODO: SelectedColor does not properly emit signal_changed after dragging, so we also need the following
_color_released = _color.signal_released.connect(sigc::mem_fun(this, &ParamColor::_onColorChanged));
+
+ // parse appearance
+ if (_appearance) {
+ if (!strcmp(_appearance, "colorbutton")) {
+ _mode = COLOR_BUTTON;
+ } else {
+ g_warning("Invalid value ('%s') for appearance of parameter '%s' in extension '%s'",
+ _appearance, _name, _extension->get_id());
+ }
+ }
}
ParamColor::~ParamColor()
@@ -74,12 +86,34 @@ Gtk::Widget *ParamColor::get_widget(sigc::signal<void> *changeSignal)
}
Gtk::HBox *hbox = Gtk::manage(new Gtk::HBox(false, GUI_PARAM_WIDGETS_SPACING));
- Gtk::Widget *selector = Gtk::manage(new Inkscape::UI::Widget::ColorNotebook(_color));
- hbox->pack_start(*selector, true, true, 0);
- selector->show();
+ if (_mode == COLOR_BUTTON) {
+ Gtk::Label *label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START));
+ label->show();
+ hbox->pack_start(*label, true, true);
+
+ Gdk::RGBA rgba;
+ rgba.set_red_u (((_color.value() >> 24) & 255) << 8);
+ rgba.set_green_u(((_color.value() >> 16) & 255) << 8);
+ rgba.set_blue_u (((_color.value() >> 8) & 255) << 8);
+ rgba.set_alpha_u(((_color.value() >> 0) & 255) << 8);
+
+ // TODO: It would be nicer to have a custom Gtk::ColorButton() implementation here,
+ // that wraps an Inkscape::UI::Widget::ColorNotebook into a new dialog
+ _color_button = Gtk::manage(new Gtk::ColorButton(rgba));
+ _color_button->set_title(_text);
+ _color_button->set_use_alpha();
+ _color_button->show();
+ hbox->pack_end(*_color_button, false, false);
+
+ _color_button->signal_color_set().connect(sigc::mem_fun(this, &ParamColor::_onColorButtonChanged));
+ } else {
+ Gtk::Widget *selector = Gtk::manage(new Inkscape::UI::Widget::ColorNotebook(_color));
+ hbox->pack_start(*selector, true, true, 0);
+ selector->show();
+ }
hbox->show();
-
return hbox;
+
}
void ParamColor::_onColorChanged()
@@ -91,6 +125,16 @@ void ParamColor::_onColorChanged()
_changeSignal->emit();
}
+void ParamColor::_onColorButtonChanged()
+{
+ Gdk::RGBA rgba = _color_button->get_rgba();
+ unsigned int value = ((rgba.get_red_u() >> 8) << 24) +
+ ((rgba.get_green_u() >> 8) << 16) +
+ ((rgba.get_blue_u() >> 8) << 8) +
+ ((rgba.get_alpha_u() >> 8) << 0);
+ set(value);
+}
+
std::string ParamColor::value_to_string() const
{
char value_string[16];
diff --git a/src/extension/prefdialog/parameter-color.h b/src/extension/prefdialog/parameter-color.h
index 6e17a1c62..4fef4b66b 100644
--- a/src/extension/prefdialog/parameter-color.h
+++ b/src/extension/prefdialog/parameter-color.h
@@ -14,6 +14,7 @@
namespace Gtk {
class Widget;
+class ColorButton;
}
namespace Inkscape {
@@ -24,14 +25,11 @@ class Node;
namespace Extension {
class ParamColor : public InxParameter {
-private:
- void _onColorChanged();
-
- Inkscape::UI::SelectedColor _color;
- sigc::connection _color_changed;
- sigc::connection _color_released;
-
public:
+ enum AppearanceMode {
+ DEFAULT, COLOR_BUTTON
+ };
+
ParamColor(Inkscape::XML::Node *xml, Inkscape::Extension::Extension *ext);
~ParamColor() override;
@@ -46,6 +44,20 @@ public:
sigc::signal<void> *_changeSignal;
+private:
+ void _onColorChanged();
+ void _onColorButtonChanged();
+
+ /** Internal value of this parameter */
+ Inkscape::UI::SelectedColor _color;
+
+ sigc::connection _color_changed;
+ sigc::connection _color_released;
+
+ Gtk::ColorButton *_color_button;
+
+ /** appearance mode **/
+ AppearanceMode _mode = DEFAULT;
}; // class ParamColor
} // namespace Extension
diff --git a/src/extension/prefdialog/parameter-int.cpp b/src/extension/prefdialog/parameter-int.cpp
index 1d768ca00..e18e1bddc 100644
--- a/src/extension/prefdialog/parameter-int.cpp
+++ b/src/extension/prefdialog/parameter-int.cpp
@@ -152,13 +152,12 @@ ParamInt::get_widget(sigc::signal<void> *changeSignal)
scale->set_size_request(400, -1);
scale->show();
hbox->pack_start(*scale, true, true);
- }
- else if (_mode == DEFAULT) {
+ } else if (_mode == DEFAULT) {
Gtk::Label *label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START));
label->show();
hbox->pack_start(*label, true, true);
- auto spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(fadjust, 1.0, 0));
+ auto spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(fadjust, 1.0, 0));
spin->show();
hbox->pack_start(*spin, false, false);
}