summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorKrzysztof Kosi??ski <tweenk.pl@gmail.com>2015-05-22 07:02:44 +0000
committerKrzysztof KosiƄski <tweenk.pl@gmail.com>2015-05-22 07:02:44 +0000
commit35d94a8e1c01cd60e4fcf4c15f46fee38c765fca (patch)
treed8366acd729a6a9d4bdc1001f050a43f30d8b7ad /src/widgets
parentUndo changes to CMakeLists.txt in 2geom directory after syncs (diff)
parentminor tweaks to libUEMF and related code (diff)
downloadinkscape-35d94a8e1c01cd60e4fcf4c15f46fee38c765fca.tar.gz
inkscape-35d94a8e1c01cd60e4fcf4c15f46fee38c765fca.zip
Merge from trunk
(bzr r14059.2.15)
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/CMakeLists.txt10
-rw-r--r--src/widgets/Makefile_insert10
-rw-r--r--src/widgets/fill-style.cpp10
-rw-r--r--src/widgets/gradient-selector.cpp4
-rw-r--r--src/widgets/gradient-vector.cpp82
-rw-r--r--src/widgets/paint-selector.cpp128
-rw-r--r--src/widgets/paint-selector.h19
-rw-r--r--src/widgets/sp-color-icc-selector.cpp1113
-rw-r--r--src/widgets/sp-color-icc-selector.h72
-rw-r--r--src/widgets/sp-color-notebook.cpp826
-rw-r--r--src/widgets/sp-color-notebook.h120
-rw-r--r--src/widgets/sp-color-scales.cpp760
-rw-r--r--src/widgets/sp-color-scales.h102
-rw-r--r--src/widgets/sp-color-selector.cpp7
-rw-r--r--src/widgets/sp-color-selector.h8
-rw-r--r--src/widgets/sp-color-slider.cpp749
-rw-r--r--src/widgets/sp-color-slider.h60
-rw-r--r--src/widgets/sp-color-wheel-selector.cpp348
-rw-r--r--src/widgets/sp-color-wheel-selector.h82
-rw-r--r--src/widgets/swatch-selector.cpp106
-rw-r--r--src/widgets/swatch-selector.h12
21 files changed, 216 insertions, 4412 deletions
diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt
index 072b905a2..a3e9e14d0 100644
--- a/src/widgets/CMakeLists.txt
+++ b/src/widgets/CMakeLists.txt
@@ -41,12 +41,7 @@ set(widgets_SRC
select-toolbar.cpp
shrink-wrap-button.cpp
sp-attribute-widget.cpp
- sp-color-icc-selector.cpp
- sp-color-notebook.cpp
- sp-color-scales.cpp
sp-color-selector.cpp
- sp-color-slider.cpp
- sp-color-wheel-selector.cpp
sp-widget.cpp
sp-xmlview-attr-list.cpp
sp-xmlview-content.cpp
@@ -103,12 +98,7 @@ set(widgets_SRC
select-toolbar.h
shrink-wrap-button.h
sp-attribute-widget.h
- sp-color-icc-selector.h
- sp-color-notebook.h
- sp-color-scales.h
sp-color-selector.h
- sp-color-slider.h
- sp-color-wheel-selector.h
sp-widget.h
sp-xmlview-attr-list.h
sp-xmlview-content.h
diff --git a/src/widgets/Makefile_insert b/src/widgets/Makefile_insert
index dc4c12967..f66be66ed 100644
--- a/src/widgets/Makefile_insert
+++ b/src/widgets/Makefile_insert
@@ -76,18 +76,8 @@ ink_common_sources += \
widgets/spiral-toolbar.h \
widgets/sp-attribute-widget.cpp \
widgets/sp-attribute-widget.h \
- widgets/sp-color-icc-selector.cpp \
- widgets/sp-color-icc-selector.h \
- widgets/sp-color-notebook.cpp \
- widgets/sp-color-notebook.h \
- widgets/sp-color-scales.cpp \
- widgets/sp-color-scales.h \
widgets/sp-color-selector.cpp \
widgets/sp-color-selector.h \
- widgets/sp-color-slider.cpp \
- widgets/sp-color-slider.h \
- widgets/sp-color-wheel-selector.cpp \
- widgets/sp-color-wheel-selector.h \
widgets/spinbutton-events.cpp \
widgets/spinbutton-events.h \
widgets/sp-widget.cpp \
diff --git a/src/widgets/fill-style.cpp b/src/widgets/fill-style.cpp
index b1f812338..fa5eabab4 100644
--- a/src/widgets/fill-style.cpp
+++ b/src/widgets/fill-style.cpp
@@ -300,7 +300,7 @@ void FillNStroke::performUpdate()
psel->setGradientProperties( rg->getUnits(),
rg->getSpread() );
} else if (SP_IS_PATTERN(server)) {
- SPPattern *pat = pattern_getroot(SP_PATTERN(server));
+ SPPattern *pat = SP_PATTERN(server)->rootPattern();
psel->updatePatternList( pat );
}
}
@@ -431,8 +431,7 @@ void FillNStroke::dragFromPaint()
update = true;
switch (psel->mode) {
- case SPPaintSelector::MODE_COLOR_RGB:
- case SPPaintSelector::MODE_COLOR_CMYK:
+ case SPPaintSelector::MODE_SOLID_COLOR:
{
// local change, do not update from selection
dragId = g_timeout_add_full(G_PRIORITY_DEFAULT, 100, dragDelayCB, this, 0);
@@ -505,8 +504,7 @@ void FillNStroke::updateFromPaint()
break;
}
- case SPPaintSelector::MODE_COLOR_RGB:
- case SPPaintSelector::MODE_COLOR_CMYK:
+ case SPPaintSelector::MODE_SOLID_COLOR:
{
if (kind == FILL) {
// FIXME: fix for GTK breakage, see comment in SelectedStyle::on_opacity_changed; here it results in losing release events
@@ -656,7 +654,7 @@ void FillNStroke::updateFromPaint()
SPPaintServer *server = (kind == FILL) ?
selobj->style->getFillPaintServer() :
selobj->style->getStrokePaintServer();
- if (SP_IS_PATTERN(server) && pattern_getroot(SP_PATTERN(server)) == pattern)
+ if (SP_IS_PATTERN(server) && SP_PATTERN(server)->rootPattern() == pattern)
// only if this object's pattern is not rooted in our selected pattern, apply
continue;
}
diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp
index 42e59cbfe..402f30846 100644
--- a/src/widgets/gradient-selector.cpp
+++ b/src/widgets/gradient-selector.cpp
@@ -17,6 +17,10 @@
# include "config.h"
#endif
+#if GLIBMM_DISABLE_DEPRECATED && HAVE_GLIBMM_THREADS_H
+#include <glibmm/threads.h>
+#endif
+
#include <gtkmm/treeview.h>
#include "gradient-vector.h"
diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp
index 10d1cc107..259d4c9af 100644
--- a/src/widgets/gradient-vector.cpp
+++ b/src/widgets/gradient-vector.cpp
@@ -31,17 +31,16 @@
#include "macros.h"
#include <glibmm/i18n.h>
#include <set>
-#include "widgets/gradient-image.h"
-#include "inkscape.h"
-#include "document-private.h"
-#include "gradient-chemistry.h"
-#include "helper/window.h"
+#include "../widgets/gradient-image.h"
+#include "../inkscape.h"
+#include "../document-private.h"
+#include "../gradient-chemistry.h"
+#include "../helper/window.h"
#include "io/resource.h"
#include "xml/repr.h"
-#include "ui/dialog-events.h"
-#include "preferences.h"
+#include "../preferences.h"
#include "svg/css-ostringstream.h"
#include "sp-stop.h"
#include "selection-chemistry.h"
@@ -51,10 +50,16 @@
#include "desktop.h"
#include "layer-manager.h"
-#include <sigc++/sigc++.h>
+#include <sigc++/functors/ptr_fun.h>
+#include <sigc++/adaptors/bind.h>
#include "document-undo.h"
+#include "ui/dialog-events.h"
+#include "ui/selected-color.h"
+#include "ui/widget/color-notebook.h"
+
using Inkscape::DocumentUndo;
+using Inkscape::UI::SelectedColor;
enum {
VECTOR_SET,
@@ -468,11 +473,10 @@ void SPGradientVectorSelector::setSwatched()
### Vector Editing Widget
##################################################################*/
-#include "widgets/sp-color-notebook.h"
#include "widgets/widget-sizes.h"
#include "xml/node-event-vector.h"
#include "svg/svg-color.h"
-
+#include "ui/widget/color-notebook.h"
#define PAD 4
@@ -491,8 +495,8 @@ static void sp_gradient_vector_widget_destroy(GtkObject *object, gpointer data);
static void sp_gradient_vector_gradient_release(SPObject *obj, GtkWidget *widget);
static void sp_gradient_vector_gradient_modified(SPObject *obj, guint flags, GtkWidget *widget);
-static void sp_gradient_vector_color_dragged(SPColorSelector *csel, GObject *object);
-static void sp_gradient_vector_color_changed(SPColorSelector *csel, GObject *object);
+static void sp_gradient_vector_color_dragged(Inkscape::UI::SelectedColor *selected_color, GObject *object);
+static void sp_gradient_vector_color_changed(Inkscape::UI::SelectedColor *selected_color, GObject *object);
static void update_stop_list( GtkWidget *vb, SPGradient *gradient, SPStop *new_stop);
static gboolean blocked = FALSE;
@@ -649,9 +653,11 @@ static void sp_grad_edit_combo_box_changed (GtkComboBox * /*widget*/, GtkWidget
blocked = TRUE;
- SPColorSelector *csel = static_cast<SPColorSelector*>(g_object_get_data(G_OBJECT(tbl), "cselector"));
+ SelectedColor *csel = static_cast<SelectedColor*>(g_object_get_data(G_OBJECT(tbl), "cselector"));
// set its color, from the stored array
- csel->base->setColorAlpha( stop->getEffectiveColor(), stop->opacity );
+ g_object_set_data(G_OBJECT(tbl), "updating_color", reinterpret_cast<void*>(1));
+ csel->setColorAlpha(stop->getEffectiveColor(), stop->opacity);
+ g_object_set_data(G_OBJECT(tbl), "updating_color", reinterpret_cast<void*>(0));
GtkWidget *offspin = GTK_WIDGET(g_object_get_data(G_OBJECT(tbl), "offspn"));
GtkWidget *offslide =GTK_WIDGET(g_object_get_data(G_OBJECT(tbl), "offslide"));
@@ -832,7 +838,9 @@ static void sp_grd_ed_del_stop(GtkWidget */*widget*/, GtkWidget *vb)
static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *select_stop)
{
- GtkWidget *vb, *w, *f, *csel;
+ using Inkscape::UI::Widget::ColorNotebook;
+
+ GtkWidget *vb, *w, *f;
g_return_val_if_fail(!gradient || SP_IS_GRADIENT(gradient), NULL);
@@ -960,12 +968,23 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s
f = gtk_frame_new(_("Stop Color"));
gtk_widget_show(f);
gtk_box_pack_start(GTK_BOX(vb), f, TRUE, TRUE, PAD);
- csel = static_cast<GtkWidget*>(sp_color_selector_new(SP_TYPE_COLOR_NOTEBOOK));
- g_object_set_data(G_OBJECT(vb), "cselector", csel);
+
+ Inkscape::UI::SelectedColor *selected_color = new Inkscape::UI::SelectedColor;
+ g_object_set_data(G_OBJECT(vb), "cselector", selected_color);
+ g_object_set_data(G_OBJECT(vb), "updating_color", reinterpret_cast<void*>(0));
+ selected_color->signal_dragged.connect(sigc::bind(sigc::ptr_fun(&sp_gradient_vector_color_dragged), selected_color, G_OBJECT(vb)));
+ selected_color->signal_dragged.connect(sigc::bind(sigc::ptr_fun(&sp_gradient_vector_color_changed), selected_color, G_OBJECT(vb)));
+
+ Gtk::Widget *color_selector = Gtk::manage(new ColorNotebook(*selected_color));
+ color_selector->show();
+ gtk_container_add(GTK_CONTAINER(f), color_selector->gobj());
+
+ /*
gtk_widget_show(csel);
gtk_container_add(GTK_CONTAINER(f), csel);
g_signal_connect(G_OBJECT(csel), "dragged", G_CALLBACK(sp_gradient_vector_color_dragged), vb);
g_signal_connect(G_OBJECT(csel), "changed", G_CALLBACK(sp_gradient_vector_color_changed), vb);
+ */
gtk_widget_show(vb);
@@ -1126,9 +1145,11 @@ static void sp_gradient_vector_widget_load_gradient(GtkWidget *widget, SPGradien
}
// get the color selector
- SPColorSelector *csel = SP_COLOR_SELECTOR(g_object_get_data(G_OBJECT(widget), "cselector"));
+ SelectedColor *csel = static_cast<SelectedColor*>(g_object_get_data(G_OBJECT(widget), "cselector"));
- csel->base->setColorAlpha( stop->getEffectiveColor(), stop->opacity );
+ g_object_set_data(G_OBJECT(widget), "updating_color", reinterpret_cast<void*>(1));
+ csel->setColorAlpha(stop->getEffectiveColor(), stop->opacity);
+ g_object_set_data(G_OBJECT(widget), "updating_color", reinterpret_cast<void*>(0));
/* Fill preview */
GtkWidget *w = static_cast<GtkWidget *>(g_object_get_data(G_OBJECT(widget), "preview"));
@@ -1228,6 +1249,12 @@ static void sp_gradient_vector_widget_destroy(GtkObject *object, gpointer /*data
sp_repr_remove_listener_by_data(gradient->getRepr(), object);
}
}
+
+ SelectedColor *selected_color = static_cast<SelectedColor *>(g_object_get_data(G_OBJECT(object), "cselector"));
+ if (selected_color) {
+ delete selected_color;
+ g_object_set_data(G_OBJECT(object), "cselector", NULL);
+ }
}
static void sp_gradient_vector_gradient_release(SPObject */*object*/, GtkWidget *widget)
@@ -1245,7 +1272,7 @@ static void sp_gradient_vector_gradient_modified(SPObject *object, guint /*flags
}
}
-static void sp_gradient_vector_color_dragged(SPColorSelector *csel, GObject *object)
+static void sp_gradient_vector_color_dragged(Inkscape::UI::SelectedColor *selected_color, GObject *object)
{
SPGradient *gradient, *ngr;
@@ -1273,14 +1300,21 @@ static void sp_gradient_vector_color_dragged(SPColorSelector *csel, GObject *obj
return;
}
- csel->base->getColorAlpha(stop->specified_color, stop->opacity);
+ selected_color->colorAlpha(stop->specified_color, stop->opacity);
stop->currentColor = false;
blocked = FALSE;
}
-static void sp_gradient_vector_color_changed(SPColorSelector *csel, GObject *object)
+static void sp_gradient_vector_color_changed(Inkscape::UI::SelectedColor *selected_color, GObject *object)
{
+ (void)selected_color;
+
+ void* updating_color = g_object_get_data(G_OBJECT(object), "updating_color");
+ if (updating_color) {
+ return;
+ }
+
if (blocked) {
return;
}
@@ -1309,10 +1343,10 @@ static void sp_gradient_vector_color_changed(SPColorSelector *csel, GObject *obj
return;
}
- csel = static_cast<SPColorSelector*>(g_object_get_data(G_OBJECT(object), "cselector"));
+ SelectedColor *csel = static_cast<SelectedColor *>(g_object_get_data(G_OBJECT(object), "cselector"));
SPColor color;
float alpha = 0;
- csel->base->getColorAlpha( color, alpha );
+ csel->colorAlpha(color, alpha);
sp_repr_set_css_double(stop->getRepr(), "offset", stop->offset);
Inkscape::CSSOStringStream os;
diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp
index 221344296..846ded511 100644
--- a/src/widgets/paint-selector.cpp
+++ b/src/widgets/paint-selector.cpp
@@ -31,7 +31,6 @@
#include "widgets/widget-sizes.h"
#include "xml/repr.h"
-#include "sp-color-notebook.h"
#include "sp-linear-gradient.h"
#include "sp-radial-gradient.h"
#include "sp-mesh.h"
@@ -48,6 +47,7 @@
#include "io/sys.h"
#include "helper/stock-items.h"
#include "ui/icon-names.h"
+#include "ui/widget/color-notebook.h"
#include "paint-selector.h"
@@ -58,6 +58,7 @@
#include <gtk/gtk.h>
using Inkscape::Widgets::SwatchSelector;
+using Inkscape::UI::SelectedColor;
enum {
MODE_CHANGED,
@@ -94,8 +95,7 @@ static gchar const* modeStrings[] = {
"MODE_EMPTY",
"MODE_MULTIPLE",
"MODE_NONE",
- "MODE_COLOR_RGB",
- "MODE_COLOR_CMYK",
+ "MODE_SOLID_COLOR",
"MODE_GRADIENT_LINEAR",
"MODE_GRADIENT_RADIAL",
"MODE_PATTERN",
@@ -218,7 +218,7 @@ sp_paint_selector_init(SPPaintSelector *psel)
psel->none = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON("paint-none"),
SPPaintSelector::MODE_NONE, _("No paint"));
psel->solid = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON("paint-solid"),
- SPPaintSelector::MODE_COLOR_RGB, _("Flat color"));
+ SPPaintSelector::MODE_SOLID_COLOR, _("Flat color"));
psel->gradient = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON("paint-gradient-linear"),
SPPaintSelector::MODE_GRADIENT_LINEAR, _("Linear gradient"));
psel->radial = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON("paint-gradient-radial"),
@@ -292,8 +292,13 @@ sp_paint_selector_init(SPPaintSelector *psel)
/* Last used color */
- psel->color.set( 0.0, 0.0, 0.0 );
- psel->alpha = 1.0;
+ psel->selected_color = new SelectedColor;
+ psel->updating_color = false;
+
+ psel->selected_color->signal_grabbed.connect(sigc::mem_fun(psel, &SPPaintSelector::onSelectedColorGrabbed));
+ psel->selected_color->signal_dragged.connect(sigc::mem_fun(psel, &SPPaintSelector::onSelectedColorDragged));
+ psel->selected_color->signal_released.connect(sigc::mem_fun(psel, &SPPaintSelector::onSelectedColorReleased));
+ psel->selected_color->signal_changed.connect(sigc::mem_fun(psel, &SPPaintSelector::onSelectedColorChanged));
}
static void sp_paint_selector_dispose(GObject *object)
@@ -303,6 +308,11 @@ static void sp_paint_selector_dispose(GObject *object)
// clean up our long-living pattern menu
g_object_set_data(G_OBJECT(psel),"patternmenu",NULL);
+ if (psel->selected_color) {
+ delete psel->selected_color;
+ psel->selected_color = NULL;
+ }
+
if ((G_OBJECT_CLASS(sp_paint_selector_parent_class))->dispose)
(G_OBJECT_CLASS(sp_paint_selector_parent_class))->dispose(object);
}
@@ -396,8 +406,7 @@ void SPPaintSelector::setMode(Mode mode)
case MODE_NONE:
sp_paint_selector_set_mode_none(this);
break;
- case MODE_COLOR_RGB:
- case MODE_COLOR_CMYK:
+ case MODE_SOLID_COLOR:
sp_paint_selector_set_mode_color(this, mode);
break;
case MODE_GRADIENT_LINEAR:
@@ -438,7 +447,6 @@ void SPPaintSelector::setFillrule(FillRule fillrule)
void SPPaintSelector::setColorAlpha(SPColor const &color, float alpha)
{
g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) );
- SPColorSelector *csel = 0;
/*
guint32 rgba = 0;
@@ -455,12 +463,13 @@ void SPPaintSelector::setColorAlpha(SPColor const &color, float alpha)
#ifdef SP_PS_VERBOSE
g_print("PaintSelector set RGBA\n");
#endif
- setMode(MODE_COLOR_RGB);
+ setMode(MODE_SOLID_COLOR);
}
- csel = reinterpret_cast<SPColorSelector*>(g_object_get_data(G_OBJECT(selector), "color-selector"));
+ updating_color = true;
+ selected_color->setColorAlpha(color, alpha);
+ updating_color = false;
//rgba = color.toRGBA32( alpha );
- csel->base->setColorAlpha( color, alpha );
}
void SPPaintSelector::setSwatch(SPGradient *vector )
@@ -541,11 +550,7 @@ void SPPaintSelector::getGradientProperties( SPGradientUnits &units, SPGradientS
*/
void SPPaintSelector::getColorAlpha(SPColor &color, gfloat &alpha) const
{
- SPColorSelector *csel;
-
- csel = reinterpret_cast<SPColorSelector*>(g_object_get_data(G_OBJECT(selector), "color-selector"));
-
- csel->base->getColorAlpha( color, alpha );
+ selected_color->colorAlpha(color, alpha);
g_assert( ( 0.0 <= alpha )
&& ( alpha <= 1.0 ) );
@@ -581,6 +586,9 @@ sp_paint_selector_clear_frame(SPPaintSelector *psel)
if (psel->selector) {
+ //This is a hack to work around GtkNotebook bug in ColorSelector. Is sends signal switch-page on destroy
+ //The widget is hidden firts so it can recognize that it should not process signals from notebook child
+ gtk_widget_set_visible(psel->selector, false);
gtk_widget_destroy(psel->selector);
psel->selector = NULL;
}
@@ -633,82 +641,82 @@ sp_paint_selector_set_mode_none(SPPaintSelector *psel)
/* Color paint */
-static void sp_paint_selector_color_grabbed(SPColorSelector * /*csel*/, SPPaintSelector *psel)
-{
- g_signal_emit(G_OBJECT(psel), psel_signals[GRABBED], 0);
+void SPPaintSelector::onSelectedColorGrabbed() {
+ g_signal_emit(G_OBJECT(this), psel_signals[GRABBED], 0);
}
-static void sp_paint_selector_color_dragged(SPColorSelector * /*csel*/, SPPaintSelector *psel)
-{
- g_signal_emit(G_OBJECT(psel), psel_signals[DRAGGED], 0);
+void SPPaintSelector::onSelectedColorDragged() {
+ if (updating_color) {
+ return;
+ }
+ g_signal_emit(G_OBJECT(this), psel_signals[DRAGGED], 0);
}
-static void sp_paint_selector_color_released(SPColorSelector * /*csel*/, SPPaintSelector *psel)
-{
- g_signal_emit(G_OBJECT(psel), psel_signals[RELEASED], 0);
+void SPPaintSelector::onSelectedColorReleased() {
+ g_signal_emit(G_OBJECT(this), psel_signals[RELEASED], 0);
}
-static void
-sp_paint_selector_color_changed(SPColorSelector *csel, SPPaintSelector *psel)
-{
- csel->base->getColorAlpha( psel->color, psel->alpha );
+void SPPaintSelector::onSelectedColorChanged() {
+ if (updating_color) {
+ return;
+ }
- g_signal_emit(G_OBJECT(psel), psel_signals[CHANGED], 0);
+ if (mode == MODE_SOLID_COLOR) {
+ g_signal_emit(G_OBJECT(this), psel_signals[CHANGED], 0);
+ } else {
+ g_warning("SPPaintSelector::onSelectedColorChanged(): selected color changed while not in color selection mode");
+ }
}
static void sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelector::Mode /*mode*/)
{
- GtkWidget *csel;
-
- SPColor newcolor = psel->color;
- float newalpha = psel->alpha;
-
+ using Inkscape::UI::Widget::ColorNotebook;
+
if ((psel->mode == SPPaintSelector::MODE_SWATCH)
|| (psel->mode == SPPaintSelector::MODE_GRADIENT_LINEAR)
|| (psel->mode == SPPaintSelector::MODE_GRADIENT_RADIAL) ) {
SPGradientSelector *gsel = getGradientFromData(psel);
if (gsel) {
SPGradient *gradient = gsel->getVector();
- newcolor = gradient->getFirstStop()->specified_color;
- newalpha = gradient->getFirstStop()->opacity;
+
+ // Gradient can be null if object paint is changed externally (ie. with a color picker tool)
+ if (gradient)
+ {
+ SPColor color = gradient->getFirstStop()->specified_color;
+ float alpha = gradient->getFirstStop()->opacity;
+ psel->selected_color->setColorAlpha(color, alpha, false);
+ }
}
}
sp_paint_selector_set_style_buttons(psel, psel->solid);
gtk_widget_set_sensitive(psel->style, TRUE);
- if ((psel->mode == SPPaintSelector::MODE_COLOR_RGB) || (psel->mode == SPPaintSelector::MODE_COLOR_CMYK)) {
+ if ((psel->mode == SPPaintSelector::MODE_SOLID_COLOR)) {
/* Already have color selector */
- csel = GTK_WIDGET(g_object_get_data(G_OBJECT(psel->selector), "color-selector"));
+ // Do nothing
} else {
sp_paint_selector_clear_frame(psel);
/* Create new color selector */
/* Create vbox */
#if GTK_CHECK_VERSION(3,0,0)
- GtkWidget *vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4);
- gtk_box_set_homogeneous(GTK_BOX(vb), FALSE);
+ GtkWidget *vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4);
+ gtk_box_set_homogeneous(GTK_BOX(vb), FALSE);
#else
GtkWidget *vb = gtk_vbox_new(FALSE, 4);
#endif
gtk_widget_show(vb);
/* Color selector */
- csel = sp_color_selector_new( SP_TYPE_COLOR_NOTEBOOK );
- gtk_widget_show(csel);
- g_object_set_data(G_OBJECT(vb), "color-selector", csel);
- gtk_box_pack_start(GTK_BOX(vb), csel, TRUE, TRUE, 0);
- g_signal_connect(G_OBJECT(csel), "grabbed", G_CALLBACK(sp_paint_selector_color_grabbed), psel);
- g_signal_connect(G_OBJECT(csel), "dragged", G_CALLBACK(sp_paint_selector_color_dragged), psel);
- g_signal_connect(G_OBJECT(csel), "released", G_CALLBACK(sp_paint_selector_color_released), psel);
- g_signal_connect(G_OBJECT(csel), "changed", G_CALLBACK(sp_paint_selector_color_changed), psel);
+ Gtk::Widget *color_selector = Gtk::manage(new ColorNotebook(*(psel->selected_color)));
+ color_selector->show();
+ gtk_box_pack_start(GTK_BOX(vb), color_selector->gobj(), TRUE, TRUE, 0);
+
/* Pack everything to frame */
gtk_container_add(GTK_CONTAINER(psel->frame), vb);
psel->selector = vb;
-
- /* Set color */
- SP_COLOR_SELECTOR( csel )->base->setColorAlpha( newcolor, newalpha );
}
gtk_label_set_markup(GTK_LABEL(psel->label), _("<b>Flat color</b>"));
@@ -720,22 +728,22 @@ static void sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelec
/* Gradient */
-static void sp_paint_selector_gradient_grabbed(SPColorSelector * /*csel*/, SPPaintSelector *psel)
+static void sp_paint_selector_gradient_grabbed(SPGradientSelector * /*csel*/, SPPaintSelector *psel)
{
g_signal_emit(G_OBJECT(psel), psel_signals[GRABBED], 0);
}
-static void sp_paint_selector_gradient_dragged(SPColorSelector * /*csel*/, SPPaintSelector *psel)
+static void sp_paint_selector_gradient_dragged(SPGradientSelector * /*csel*/, SPPaintSelector *psel)
{
g_signal_emit(G_OBJECT(psel), psel_signals[DRAGGED], 0);
}
-static void sp_paint_selector_gradient_released(SPColorSelector * /*csel*/, SPPaintSelector *psel)
+static void sp_paint_selector_gradient_released(SPGradientSelector * /*csel*/, SPPaintSelector *psel)
{
g_signal_emit(G_OBJECT(psel), psel_signals[RELEASED], 0);
}
-static void sp_paint_selector_gradient_changed(SPColorSelector * /*csel*/, SPPaintSelector *psel)
+static void sp_paint_selector_gradient_changed(SPGradientSelector * /*csel*/, SPPaintSelector *psel)
{
g_signal_emit(G_OBJECT(psel), psel_signals[CHANGED], 0);
}
@@ -838,7 +846,7 @@ ink_pattern_list_get (SPDocument *source)
GSList *pl = NULL;
GSList const *patterns = source->getResourceList("pattern");
for (GSList *l = const_cast<GSList *>(patterns); l != NULL; l = l->next) {
- if (SP_PATTERN(l->data) == pattern_getroot(SP_PATTERN(l->data))) { // only if this is a root pattern
+ if (SP_PATTERN(l->data) == SP_PATTERN(l->data)->rootPattern()) { // only if this is a root pattern
pl = g_slist_prepend(pl, l->data);
}
}
@@ -1158,7 +1166,7 @@ SPPattern *SPPaintSelector::getPattern()
}
g_free(paturn);
} else {
- pat = pattern_getroot(SP_PATTERN(patid));
+ pat = SP_PATTERN(patid)->rootPattern();
}
if (pat && !SP_IS_PATTERN(pat)) {
@@ -1265,7 +1273,7 @@ SPPaintSelector::Mode SPPaintSelector::getModeForStyle(SPStyle const & style, Fi
}
} else if ( target.isColor() ) {
// TODO this is no longer a valid assertion:
- mode = MODE_COLOR_RGB; // so far only rgb can be read from svg
+ mode = MODE_SOLID_COLOR; // so far only rgb can be read from svg
} else if ( target.isNone() ) {
mode = MODE_NONE;
} else {
diff --git a/src/widgets/paint-selector.h b/src/widgets/paint-selector.h
index 788aa673e..23c2dd456 100644
--- a/src/widgets/paint-selector.h
+++ b/src/widgets/paint-selector.h
@@ -12,12 +12,18 @@
*
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <glib.h>
#include <gtk/gtk.h>
#include "color.h"
#include "fill-or-stroke.h"
#include "sp-gradient-spread.h"
#include "sp-gradient-units.h"
+#include "ui/selected-color.h"
class SPGradient;
class SPDesktop;
@@ -44,8 +50,7 @@ struct SPPaintSelector {
MODE_EMPTY,
MODE_MULTIPLE,
MODE_NONE,
- MODE_COLOR_RGB,
- MODE_COLOR_CMYK,
+ MODE_SOLID_COLOR,
MODE_GRADIENT_LINEAR,
MODE_GRADIENT_RADIAL,
#ifdef WITH_MESH
@@ -83,9 +88,8 @@ struct SPPaintSelector {
GtkWidget *frame, *selector;
GtkWidget *label;
- SPColor color;
- float alpha;
-
+ Inkscape::UI::SelectedColor *selected_color;
+ bool updating_color;
static Mode getModeForStyle(SPStyle const & style, FillOrStroke kind);
@@ -114,6 +118,11 @@ struct SPPaintSelector {
// TODO move this elsewhere:
void setFlatColor( SPDesktop *desktop, const gchar *color_property, const gchar *opacity_property );
+
+ void onSelectedColorGrabbed();
+ void onSelectedColorDragged();
+ void onSelectedColorReleased();
+ void onSelectedColorChanged();
};
enum {COMBO_COL_LABEL=0, COMBO_COL_STOCK=1, COMBO_COL_PATTERN=2, COMBO_COL_SEP=3, COMBO_N_COLS=4};
diff --git a/src/widgets/sp-color-icc-selector.cpp b/src/widgets/sp-color-icc-selector.cpp
deleted file mode 100644
index 6e910c582..000000000
--- a/src/widgets/sp-color-icc-selector.cpp
+++ /dev/null
@@ -1,1113 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "gradient-vector.h"
-#include <math.h>
-#include <gtk/gtk.h>
-#include <glibmm/i18n.h>
-#include <map>
-#include <set>
-#include <vector>
-
-#include "ui/dialog-events.h"
-#include "sp-color-icc-selector.h"
-#include "sp-color-scales.h"
-#include "sp-color-slider.h"
-#include "svg/svg-icc-color.h"
-#include "colorspace.h"
-#include "document.h"
-#include "inkscape.h"
-#include "profile-manager.h"
-
-#define noDEBUG_LCMS
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-#include "color-profile.h"
-#include "cms-system.h"
-#include "color-profile-cms-fns.h"
-
-#ifdef DEBUG_LCMS
-#include "preferences.h"
-#endif // DEBUG_LCMS
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
-
-#ifdef DEBUG_LCMS
-extern guint update_in_progress;
-#define DEBUG_MESSAGE(key, ...) \
-{\
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();\
- bool dump = prefs->getBool("/options/scislac/" #key);\
- bool dumpD = prefs->getBool("/options/scislac/" #key "D");\
- bool dumpD2 = prefs->getBool("/options/scislac/" #key "D2");\
- dumpD &&= ( (update_in_progress == 0) || dumpD2 );\
- if ( dump )\
- {\
- g_message( __VA_ARGS__ );\
-\
- }\
- if ( dumpD )\
- {\
- GtkWidget *dialog = gtk_message_dialog_new(NULL,\
- GTK_DIALOG_DESTROY_WITH_PARENT, \
- GTK_MESSAGE_INFO, \
- GTK_BUTTONS_OK, \
- __VA_ARGS__ \
- );\
- g_signal_connect_swapped(dialog, "response",\
- G_CALLBACK(gtk_widget_destroy), \
- dialog); \
- gtk_widget_show_all( dialog );\
- }\
-}
-#endif // DEBUG_LCMS
-
-
-
-G_BEGIN_DECLS
-
-static void sp_color_icc_selector_dispose(GObject *object);
-static void sp_color_icc_selector_show_all (GtkWidget *widget);
-static void sp_color_icc_selector_hide(GtkWidget *widget);
-
-G_END_DECLS
-
-/**
- * Class containing the parts for a single color component's UI presence.
- */
-class ComponentUI
-{
-public:
- ComponentUI() :
- _component(),
- _adj(0),
- _slider(0),
- _btn(0),
- _label(0),
- _map(0)
- {
- }
-
- ComponentUI(colorspace::Component const &component) :
- _component(component),
- _adj(0),
- _slider(0),
- _btn(0),
- _label(0),
- _map(0)
- {
- }
-
- colorspace::Component _component;
- GtkAdjustment *_adj; // Component adjustment
- GtkWidget *_slider;
- GtkWidget *_btn; // spinbutton
- GtkWidget *_label; // Label
- guchar *_map;
-};
-
-/**
- * Class that implements the internals of the selector.
- */
-class ColorICCSelectorImpl
-{
-public:
-
- ColorICCSelectorImpl( ColorICCSelector *owner);
-
- ~ColorICCSelectorImpl();
-
- static void _adjustmentChanged ( GtkAdjustment *adjustment, SPColorICCSelector *cs );
-
- static void _sliderGrabbed( SPColorSlider *slider, SPColorICCSelector *cs );
- static void _sliderReleased( SPColorSlider *slider, SPColorICCSelector *cs );
- static void _sliderChanged( SPColorSlider *slider, SPColorICCSelector *cs );
-
- static void _profileSelected( GtkWidget* src, gpointer data );
- static void _fixupHit( GtkWidget* src, gpointer data );
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- void _setProfile( SVGICCColor* profile );
- void _switchToProfile( gchar const* name );
-#endif
- void _updateSliders( gint ignore );
- void _profilesChanged( std::string const & name );
-
- ColorICCSelector *_owner;
-
- gboolean _updating : 1;
- gboolean _dragging : 1;
-
- guint32 _fixupNeeded;
- GtkWidget* _fixupBtn;
- GtkWidget* _profileSel;
-
- std::vector<ComponentUI> _compUI;
-
- GtkAdjustment* _adj; // Channel adjustment
- GtkWidget* _slider;
- GtkWidget* _sbtn; // Spinbutton
- GtkWidget* _label; // Label
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- std::string _profileName;
- Inkscape::ColorProfile* _prof;
- guint _profChannelCount;
- gulong _profChangedID;
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-};
-
-#define XPAD 4
-#define YPAD 1
-
-namespace
-{
-
-size_t maxColorspaceComponentCount = 0;
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
-/**
- * Internal variable to track all known colorspaces.
- */
-std::set<cmsUInt32Number> knownColorspaces;
-
-#endif
-
-
-/**
- * Simple helper to allow bitwise or on GtkAttachOptions.
- */
-GtkAttachOptions operator|(GtkAttachOptions lhs, GtkAttachOptions rhs)
-{
- return static_cast<GtkAttachOptions>(static_cast<int>(lhs) | static_cast<int>(rhs));
-}
-
-/**
- * Helper function to handle GTK2/GTK3 attachment #ifdef code.
- */
-void attachToGridOrTable(GtkWidget *parent,
- GtkWidget *child,
- guint left,
- guint top,
- guint width,
- guint height,
- bool hexpand = false,
- bool centered = false,
- guint xpadding = XPAD,
- guint ypadding = YPAD)
-{
-#if GTK_CHECK_VERSION(3,0,0)
- #if GTK_CHECK_VERSION(3,12,0)
- gtk_widget_set_margin_start( child, xpadding );
- gtk_widget_set_margin_end( child, xpadding );
- #else
- gtk_widget_set_margin_left( child, xpadding );
- gtk_widget_set_margin_right( child, xpadding );
- #endif
-
- gtk_widget_set_margin_top( child, ypadding );
- gtk_widget_set_margin_bottom( child, ypadding );
- if (hexpand) {
- gtk_widget_set_hexpand(child, TRUE);
- }
- if (centered) {
- gtk_widget_set_halign( child, GTK_ALIGN_CENTER );
- gtk_widget_set_valign( child, GTK_ALIGN_CENTER );
- }
- gtk_grid_attach( GTK_GRID(parent), child, left, top, width, height );
-#else
- GtkAttachOptions xoptions = centered ? static_cast<GtkAttachOptions>(0) : hexpand ? (GTK_EXPAND | GTK_FILL) : GTK_FILL;
- GtkAttachOptions yoptions = centered ? static_cast<GtkAttachOptions>(0) : GTK_FILL;
-
- gtk_table_attach( GTK_TABLE(parent), child, left, left + width, top, top + height, xoptions, yoptions, xpadding, ypadding );
-#endif
-}
-
-} // namespace
-
-G_DEFINE_TYPE(SPColorICCSelector, sp_color_icc_selector, SP_TYPE_COLOR_SELECTOR);
-
-static void sp_color_icc_selector_class_init(SPColorICCSelectorClass *klass)
-{
- static const gchar* nameset[] = {N_("CMS"), 0};
- GObjectClass *object_class = G_OBJECT_CLASS(klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
- SPColorSelectorClass *selector_class = SP_COLOR_SELECTOR_CLASS (klass);
-
- selector_class->name = nameset;
- selector_class->submode_count = 1;
-
- object_class->dispose = sp_color_icc_selector_dispose;
-
- widget_class->show_all = sp_color_icc_selector_show_all;
- widget_class->hide = sp_color_icc_selector_hide;
-}
-
-
-ColorICCSelector::ColorICCSelector( SPColorSelector* csel )
- : ColorSelector( csel ),
- _impl(NULL)
-{
-}
-
-ColorICCSelector::~ColorICCSelector()
-{
- if (_impl)
- {
- delete _impl;
- _impl = 0;
- }
-}
-
-void sp_color_icc_selector_init(SPColorICCSelector *cs)
-{
- SP_COLOR_SELECTOR(cs)->base = new ColorICCSelector( SP_COLOR_SELECTOR(cs) );
-
- if ( SP_COLOR_SELECTOR(cs)->base )
- {
- SP_COLOR_SELECTOR(cs)->base->init();
- }
-}
-
-
-/*
-icSigRgbData
-icSigCmykData
-icSigCmyData
-*/
-#define SPACE_ID_RGB 0
-#define SPACE_ID_CMY 1
-#define SPACE_ID_CMYK 2
-
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-static cmsUInt16Number* getScratch() {
- // bytes per pixel * input channels * width
- static cmsUInt16Number* scritch = static_cast<cmsUInt16Number*>(g_new(cmsUInt16Number, 4 * 1024));
-
- return scritch;
-}
-
-colorspace::Component::Component() :
- name(),
- tip(),
- scale(1)
-{
-}
-
-colorspace::Component::Component(std::string const &name, std::string const &tip, guint scale) :
- name(name),
- tip(tip),
- scale(scale)
-{
-}
-
-std::vector<colorspace::Component> colorspace::getColorSpaceInfo( uint32_t space )
-{
- static std::map<cmsUInt32Number, std::vector<Component> > sets;
- if (sets.empty())
- {
- sets[cmsSigXYZData].push_back(Component("_X", "X", 2)); // TYPE_XYZ_16
- sets[cmsSigXYZData].push_back(Component("_Y", "Y", 1));
- sets[cmsSigXYZData].push_back(Component("_Z", "Z", 2));
-
- sets[cmsSigLabData].push_back(Component("_L", "L", 100)); // TYPE_Lab_16
- sets[cmsSigLabData].push_back(Component("_a", "a", 256));
- sets[cmsSigLabData].push_back(Component("_b", "b", 256));
-
- //cmsSigLuvData
-
- sets[cmsSigYCbCrData].push_back(Component("_Y", "Y", 1)); // TYPE_YCbCr_16
- sets[cmsSigYCbCrData].push_back(Component("C_b", "Cb", 1));
- sets[cmsSigYCbCrData].push_back(Component("C_r", "Cr", 1));
-
- sets[cmsSigYxyData].push_back(Component("_Y", "Y", 1)); // TYPE_Yxy_16
- sets[cmsSigYxyData].push_back(Component("_x", "x", 1));
- sets[cmsSigYxyData].push_back(Component("y", "y", 1));
-
- sets[cmsSigRgbData].push_back(Component(_("_R:"), _("Red"), 1)); // TYPE_RGB_16
- sets[cmsSigRgbData].push_back(Component(_("_G:"), _("Green"), 1));
- sets[cmsSigRgbData].push_back(Component(_("_B:"), _("Blue"), 1));
-
- sets[cmsSigGrayData].push_back(Component(_("G:"), _("Gray"), 1)); // TYPE_GRAY_16
-
- sets[cmsSigHsvData].push_back(Component(_("_H:"), _("Hue"), 360)); // TYPE_HSV_16
- sets[cmsSigHsvData].push_back(Component(_("_S:"), _("Saturation"), 1));
- sets[cmsSigHsvData].push_back(Component("_V:", "Value", 1));
-
- sets[cmsSigHlsData].push_back(Component(_("_H:"), _("Hue"), 360)); // TYPE_HLS_16
- sets[cmsSigHlsData].push_back(Component(_("_L:"), _("Lightness"), 1));
- sets[cmsSigHlsData].push_back(Component(_("_S:"), _("Saturation"), 1));
-
- sets[cmsSigCmykData].push_back(Component(_("_C:"), _("Cyan"), 1)); // TYPE_CMYK_16
- sets[cmsSigCmykData].push_back(Component(_("_M:"), _("Magenta"), 1));
- sets[cmsSigCmykData].push_back(Component(_("_Y:"), _("Yellow"), 1));
- sets[cmsSigCmykData].push_back(Component(_("_K:"), _("Black"), 1));
-
- sets[cmsSigCmyData].push_back(Component(_("_C:"), _("Cyan"), 1)); // TYPE_CMY_16
- sets[cmsSigCmyData].push_back(Component(_("_M:"), _("Magenta"), 1));
- sets[cmsSigCmyData].push_back(Component(_("_Y:"), _("Yellow"), 1));
-
- for (std::map<cmsUInt32Number, std::vector<Component> >::iterator it = sets.begin(); it != sets.end(); ++it)
- {
- knownColorspaces.insert(it->first);
- maxColorspaceComponentCount = std::max(maxColorspaceComponentCount, it->second.size());
- }
- }
-
- std::vector<Component> target;
-
- if (sets.find(space) != sets.end())
- {
- target = sets[space];
- }
- return target;
-}
-
-
-std::vector<colorspace::Component> colorspace::getColorSpaceInfo( Inkscape::ColorProfile *prof )
-{
- return getColorSpaceInfo( asICColorSpaceSig(prof->getColorSpace()) );
-}
-
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
-ColorICCSelectorImpl::ColorICCSelectorImpl(ColorICCSelector *owner) :
- _owner(owner),
- _updating( FALSE ),
- _dragging( FALSE ),
- _fixupNeeded(0),
- _fixupBtn(0),
- _profileSel(0),
- _compUI(),
- _adj(0),
- _slider(0),
- _sbtn(0),
- _label(0)
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- ,
- _profileName(),
- _prof(0),
- _profChannelCount(0),
- _profChangedID(0)
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-{
-}
-
-ColorICCSelectorImpl::~ColorICCSelectorImpl()
-{
- _adj = 0;
- _sbtn = 0;
- _label = 0;
-}
-
-void ColorICCSelector::init()
-{
- if (_impl) delete(_impl);
- _impl = new ColorICCSelectorImpl(this);
- gint row = 0;
-
- _impl->_updating = FALSE;
- _impl->_dragging = FALSE;
-
-#if GTK_CHECK_VERSION(3,0,0)
- GtkWidget *t = gtk_grid_new();
-#else
- GtkWidget *t = gtk_table_new(5, 3, FALSE);
-#endif
-
- gtk_widget_show (t);
- gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 4);
-
- _impl->_compUI.clear();
-
- // Create components
- row = 0;
-
-
- _impl->_fixupBtn = gtk_button_new_with_label(_("Fix"));
- g_signal_connect( G_OBJECT(_impl->_fixupBtn), "clicked", G_CALLBACK(ColorICCSelectorImpl::_fixupHit), (gpointer)_impl );
- gtk_widget_set_sensitive( _impl->_fixupBtn, FALSE );
- gtk_widget_set_tooltip_text( _impl->_fixupBtn, _("Fix RGB fallback to match icc-color() value.") );
- //gtk_misc_set_alignment( GTK_MISC (_impl->_fixupBtn), 1.0, 0.5 );
- gtk_widget_show( _impl->_fixupBtn );
-
- attachToGridOrTable(t, _impl->_fixupBtn, 0, row, 1, 1);
-
- // Combobox and store with 2 columns : label (0) and full name (1)
- GtkListStore *store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
- _impl->_profileSel = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
-
- GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(_impl->_profileSel), renderer, TRUE);
- gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(_impl->_profileSel), renderer, "text", 0, NULL);
-
- GtkTreeIter iter;
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter, 0, _("<none>"), 1, _("<none>"), -1);
-
- gtk_widget_show( _impl->_profileSel );
- gtk_combo_box_set_active( GTK_COMBO_BOX(_impl->_profileSel), 0 );
-
- attachToGridOrTable(t, _impl->_profileSel, 1, row, 1, 1);
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- _impl->_profChangedID = g_signal_connect( G_OBJECT(_impl->_profileSel), "changed", G_CALLBACK(ColorICCSelectorImpl::_profileSelected), (gpointer)_impl );
-#else
- gtk_widget_set_sensitive( _impl->_profileSel, false );
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
-
- row++;
-
- // populate the data for colorspaces and channels:
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- std::vector<colorspace::Component> things = colorspace::getColorSpaceInfo( cmsSigRgbData );
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
- for ( size_t i = 0; i < maxColorspaceComponentCount; i++ ) {
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- if (i < things.size()) {
- _impl->_compUI.push_back(ComponentUI(things[i]));
- } else {
- _impl->_compUI.push_back(ComponentUI());
- }
-
- std::string labelStr = (i < things.size()) ? things[i].name.c_str() : "";
-#else
- _impl->_compUI.push_back(ComponentUI());
-
- std::string labelStr = ".";
-#endif
-
- _impl->_compUI[i]._label = gtk_label_new_with_mnemonic( labelStr.c_str() );
- gtk_misc_set_alignment( GTK_MISC (_impl->_compUI[i]._label), 1.0, 0.5 );
- gtk_widget_show( _impl->_compUI[i]._label );
-
- attachToGridOrTable(t, _impl->_compUI[i]._label, 0, row, 1, 1);
-
- // Adjustment
- guint scaleValue = _impl->_compUI[i]._component.scale;
- gdouble step = static_cast<gdouble>(scaleValue) / 100.0;
- gdouble page = static_cast<gdouble>(scaleValue) / 10.0;
- gint digits = (step > 0.9) ? 0 : 2;
- _impl->_compUI[i]._adj = GTK_ADJUSTMENT( gtk_adjustment_new( 0.0, 0.0, scaleValue, step, page, page ) );
-
- // Slider
- _impl->_compUI[i]._slider = sp_color_slider_new( _impl->_compUI[i]._adj );
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- gtk_widget_set_tooltip_text( _impl->_compUI[i]._slider, (i < things.size()) ? things[i].tip.c_str() : "" );
-#else
- gtk_widget_set_tooltip_text( _impl->_compUI[i]._slider, "." );
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- gtk_widget_show( _impl->_compUI[i]._slider );
-
- attachToGridOrTable(t, _impl->_compUI[i]._slider, 1, row, 1, 1, true);
-
- _impl->_compUI[i]._btn = gtk_spin_button_new( _impl->_compUI[i]._adj, step, digits );
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- gtk_widget_set_tooltip_text( _impl->_compUI[i]._btn, (i < things.size()) ? things[i].tip.c_str() : "" );
-#else
- gtk_widget_set_tooltip_text( _impl->_compUI[i]._btn, "." );
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- sp_dialog_defocus_on_enter( _impl->_compUI[i]._btn );
- gtk_label_set_mnemonic_widget( GTK_LABEL(_impl->_compUI[i]._label), _impl->_compUI[i]._btn );
- gtk_widget_show( _impl->_compUI[i]._btn );
-
- attachToGridOrTable(t, _impl->_compUI[i]._btn, 2, row, 1, 1, false, true);
-
- _impl->_compUI[i]._map = g_new( guchar, 4 * 1024 );
- memset( _impl->_compUI[i]._map, 0x0ff, 1024 * 4 );
-
-
- // Signals
- g_signal_connect( G_OBJECT( _impl->_compUI[i]._adj ), "value_changed", G_CALLBACK( ColorICCSelectorImpl::_adjustmentChanged ), _csel );
-
- g_signal_connect( G_OBJECT( _impl->_compUI[i]._slider ), "grabbed", G_CALLBACK( ColorICCSelectorImpl::_sliderGrabbed ), _csel );
- g_signal_connect( G_OBJECT( _impl->_compUI[i]._slider ), "released", G_CALLBACK( ColorICCSelectorImpl::_sliderReleased ), _csel );
- g_signal_connect( G_OBJECT( _impl->_compUI[i]._slider ), "changed", G_CALLBACK( ColorICCSelectorImpl::_sliderChanged ), _csel );
-
- row++;
- }
-
- // Label
- _impl->_label = gtk_label_new_with_mnemonic(_("_A:"));
- gtk_misc_set_alignment(GTK_MISC(_impl->_label), 1.0, 0.5);
- gtk_widget_show(_impl->_label);
-
- attachToGridOrTable(t, _impl->_label, 0, row, 1, 1);
-
- // Adjustment
- _impl->_adj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 255.0, 1.0, 10.0, 10.0));
-
- // Slider
- _impl->_slider = sp_color_slider_new(_impl->_adj);
- gtk_widget_set_tooltip_text(_impl->_slider, _("Alpha (opacity)"));
- gtk_widget_show(_impl->_slider);
-
- attachToGridOrTable(t, _impl->_slider, 1, row, 1, 1, true);
-
- sp_color_slider_set_colors( SP_COLOR_SLIDER( _impl->_slider ),
- SP_RGBA32_F_COMPOSE( 1.0, 1.0, 1.0, 0.0 ),
- SP_RGBA32_F_COMPOSE( 1.0, 1.0, 1.0, 0.5 ),
- SP_RGBA32_F_COMPOSE( 1.0, 1.0, 1.0, 1.0 ) );
-
-
- // Spinbutton
- _impl->_sbtn = gtk_spin_button_new(GTK_ADJUSTMENT(_impl->_adj), 1.0, 0);
- gtk_widget_set_tooltip_text(_impl->_sbtn, _("Alpha (opacity)"));
- sp_dialog_defocus_on_enter(_impl->_sbtn);
- gtk_label_set_mnemonic_widget(GTK_LABEL(_impl->_label), _impl->_sbtn);
- gtk_widget_show(_impl->_sbtn);
-
- attachToGridOrTable(t, _impl->_sbtn, 2, row, 1, 1, false, true);
-
- // Signals
- g_signal_connect(G_OBJECT(_impl->_adj), "value_changed", G_CALLBACK(ColorICCSelectorImpl::_adjustmentChanged), _csel);
-
- g_signal_connect(G_OBJECT(_impl->_slider), "grabbed", G_CALLBACK(ColorICCSelectorImpl::_sliderGrabbed), _csel);
- g_signal_connect(G_OBJECT(_impl->_slider), "released", G_CALLBACK(ColorICCSelectorImpl::_sliderReleased), _csel);
- g_signal_connect(G_OBJECT(_impl->_slider), "changed", G_CALLBACK(ColorICCSelectorImpl::_sliderChanged), _csel);
-}
-
-static void sp_color_icc_selector_dispose(GObject *object)
-{
- if (G_OBJECT_CLASS(sp_color_icc_selector_parent_class)->dispose) {
- G_OBJECT_CLASS(sp_color_icc_selector_parent_class)->dispose(object);
- }
-}
-
-static void
-sp_color_icc_selector_show_all (GtkWidget *widget)
-{
- gtk_widget_show (widget);
-}
-
-static void sp_color_icc_selector_hide(GtkWidget *widget)
-{
- gtk_widget_hide(widget);
-}
-
-GtkWidget *
-sp_color_icc_selector_new (void)
-{
- SPColorICCSelector *csel;
-
- csel = static_cast<SPColorICCSelector*>(g_object_new (SP_TYPE_COLOR_ICC_SELECTOR, NULL));
-
- return GTK_WIDGET (csel);
-}
-
-
-void ColorICCSelectorImpl::_fixupHit( GtkWidget* /*src*/, gpointer data )
-{
- ColorICCSelectorImpl* self = reinterpret_cast<ColorICCSelectorImpl*>(data);
- gtk_widget_set_sensitive( self->_fixupBtn, FALSE );
- self->_adjustmentChanged( self->_compUI[0]._adj, SP_COLOR_ICC_SELECTOR(self->_owner->_csel) );
-}
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-void ColorICCSelectorImpl::_profileSelected( GtkWidget* /*src*/, gpointer data )
-{
- ColorICCSelectorImpl* self = reinterpret_cast<ColorICCSelectorImpl*>(data);
-
- GtkTreeIter iter;
- if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(self->_profileSel), &iter)) {
- GtkTreeModel *store = gtk_combo_box_get_model(GTK_COMBO_BOX(self->_profileSel));
- gchar* name = 0;
-
- gtk_tree_model_get(store, &iter, 1, &name, -1);
- self->_switchToProfile( name );
- gtk_widget_set_tooltip_text(self->_profileSel, name );
-
- if ( name ) {
- g_free( name );
- }
- }
-}
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-void ColorICCSelectorImpl::_switchToProfile( gchar const* name )
-{
- bool dirty = false;
- SPColor tmp( _owner->_color );
-
- if ( name ) {
- if ( tmp.icc && tmp.icc->colorProfile == name ) {
-#ifdef DEBUG_LCMS
- g_message("Already at name [%s]", name );
-#endif // DEBUG_LCMS
- } else {
-#ifdef DEBUG_LCMS
- g_message("Need to switch to profile [%s]", name );
-#endif // DEBUG_LCMS
- if ( tmp.icc ) {
- tmp.icc->colors.clear();
- } else {
- tmp.icc = new SVGICCColor();
- }
- tmp.icc->colorProfile = name;
- Inkscape::ColorProfile* newProf = SP_ACTIVE_DOCUMENT->profileManager->find(name);
- if ( newProf ) {
- cmsHTRANSFORM trans = newProf->getTransfFromSRGB8();
- if ( trans ) {
- guint32 val = _owner->_color.toRGBA32(0);
- guchar pre[4] = {
- static_cast<guchar>(SP_RGBA32_R_U(val)),
- static_cast<guchar>(SP_RGBA32_G_U(val)),
- static_cast<guchar>(SP_RGBA32_B_U(val)),
- 255};
-#ifdef DEBUG_LCMS
- g_message("Shoving in [%02x] [%02x] [%02x]", pre[0], pre[1], pre[2]);
-#endif // DEBUG_LCMS
- cmsUInt16Number post[4] = {0,0,0,0};
- cmsDoTransform( trans, pre, post, 1 );
-#ifdef DEBUG_LCMS
- g_message("got on out [%04x] [%04x] [%04x] [%04x]", post[0], post[1], post[2], post[3]);
-#endif // DEBUG_LCMS
-#if HAVE_LIBLCMS1
- guint count = _cmsChannelsOf( asICColorSpaceSig(newProf->getColorSpace()) );
-#elif HAVE_LIBLCMS2
- guint count = cmsChannelsOf( asICColorSpaceSig(newProf->getColorSpace()) );
-#endif
-
- std::vector<colorspace::Component> things = colorspace::getColorSpaceInfo(asICColorSpaceSig(newProf->getColorSpace()));
-
- for ( guint i = 0; i < count; i++ ) {
- gdouble val = (((gdouble)post[i])/65535.0) * (gdouble)((i < things.size()) ? things[i].scale : 1);
-#ifdef DEBUG_LCMS
- g_message(" scaled %d by %d to be %f", i, ((i < things.size()) ? things[i].scale : 1), val);
-#endif // DEBUG_LCMS
- tmp.icc->colors.push_back(val);
- }
- cmsHTRANSFORM retrans = newProf->getTransfToSRGB8();
- if ( retrans ) {
- cmsDoTransform( retrans, post, pre, 1 );
-#ifdef DEBUG_LCMS
- g_message(" back out [%02x] [%02x] [%02x]", pre[0], pre[1], pre[2]);
-#endif // DEBUG_LCMS
- tmp.set(SP_RGBA32_U_COMPOSE(pre[0], pre[1], pre[2], 0xff));
- }
- }
- }
- dirty = true;
- }
- } else {
-#ifdef DEBUG_LCMS
- g_message("NUKE THE ICC");
-#endif // DEBUG_LCMS
- if ( tmp.icc ) {
- delete tmp.icc;
- tmp.icc = 0;
- dirty = true;
- _fixupHit( 0, this );
- } else {
-#ifdef DEBUG_LCMS
- g_message("No icc to nuke");
-#endif // DEBUG_LCMS
- }
- }
-
- if ( dirty ) {
-#ifdef DEBUG_LCMS
- g_message("+----------------");
- g_message("+ new color is [%s]", tmp.toString().c_str());
-#endif // DEBUG_LCMS
- _setProfile( tmp.icc );
- //_adjustmentChanged( _compUI[0]._adj, SP_COLOR_ICC_SELECTOR(_csel) );
- _owner->setColorAlpha( tmp, _owner->_alpha, true );
-#ifdef DEBUG_LCMS
- g_message("+_________________");
-#endif // DEBUG_LCMS
- }
-}
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-void ColorICCSelectorImpl::_profilesChanged( std::string const & name )
-{
- GtkComboBox* combo = GTK_COMBO_BOX(_profileSel);
-
- g_signal_handler_block( G_OBJECT(_profileSel), _profChangedID );
-
- GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model(combo));
- gtk_list_store_clear(store);
-
- GtkTreeIter iter;
- gtk_list_store_append (store, &iter);
- gtk_list_store_set(store, &iter, 0, _("<none>"), 1, _("<none>"), -1);
-
- gtk_combo_box_set_active( combo, 0 );
-
- int index = 1;
- const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "iccprofile" );
- while ( current ) {
- SPObject* obj = SP_OBJECT(current->data);
- Inkscape::ColorProfile* prof = reinterpret_cast<Inkscape::ColorProfile*>(obj);
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set(store, &iter, 0, gr_ellipsize_text(prof->name, 25).c_str(), 1, prof->name, -1);
-
- if ( name == prof->name ) {
- gtk_combo_box_set_active( combo, index );
- gtk_widget_set_tooltip_text(_profileSel, prof->name );
- }
-
- index++;
- current = g_slist_next(current);
- }
-
- g_signal_handler_unblock( G_OBJECT(_profileSel), _profChangedID );
-}
-#else
-void ColorICCSelectorImpl::_profilesChanged( std::string const & /*name*/ )
-{
-}
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
-// Helpers for setting color value
-
-void ColorICCSelector::_colorChanged()
-{
- _impl->_updating = TRUE;
- //sp_color_icc_set_color( SP_COLOR_ICC( _icc ), &color );
-
-#ifdef DEBUG_LCMS
- g_message( "/^^^^^^^^^ %p::_colorChanged(%08x:%s)", this,
- _color.toRGBA32(_alpha), ( (_color.icc) ? _color.icc->colorProfile.c_str(): "<null>" )
- );
-#endif // DEBUG_LCMS
-
-#ifdef DEBUG_LCMS
- g_message("FLIPPIES!!!! %p '%s'", _color.icc, (_color.icc ? _color.icc->colorProfile.c_str():"<null>"));
-#endif // DEBUG_LCMS
-
- _impl->_profilesChanged( (_color.icc) ? _color.icc->colorProfile : std::string("") );
- ColorScales::setScaled( _impl->_adj, _alpha );
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- _impl->_setProfile( _color.icc );
- _impl->_fixupNeeded = 0;
- gtk_widget_set_sensitive( _impl->_fixupBtn, FALSE );
-
- if (_impl->_prof) {
- if (_impl->_prof->getTransfToSRGB8() ) {
- cmsUInt16Number tmp[4];
- for ( guint i = 0; i < _impl->_profChannelCount; i++ ) {
- gdouble val = 0.0;
- if ( _color.icc->colors.size() > i ) {
- if ( _impl->_compUI[i]._component.scale == 256 ) {
- val = (_color.icc->colors[i] + 128.0) / static_cast<gdouble>(_impl->_compUI[i]._component.scale);
- } else {
- val = _color.icc->colors[i] / static_cast<gdouble>(_impl->_compUI[i]._component.scale);
- }
- }
- tmp[i] = val * 0x0ffff;
- }
- guchar post[4] = {0,0,0,0};
- cmsHTRANSFORM trans = _impl->_prof->getTransfToSRGB8();
- if ( trans ) {
- cmsDoTransform( trans, tmp, post, 1 );
- guint32 other = SP_RGBA32_U_COMPOSE(post[0], post[1], post[2], 255 );
- if ( other != _color.toRGBA32(255) ) {
- _impl->_fixupNeeded = other;
- gtk_widget_set_sensitive( _impl->_fixupBtn, TRUE );
-#ifdef DEBUG_LCMS
- g_message("Color needs to change 0x%06x to 0x%06x", _color.toRGBA32(255) >> 8, other >> 8 );
-#endif // DEBUG_LCMS
- }
- }
- }
- }
-#else
- //(void)color;
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- _impl->_updateSliders( -1 );
-
-
- _impl->_updating = FALSE;
-#ifdef DEBUG_LCMS
- g_message( "\\_________ %p::_colorChanged()", this );
-#endif // DEBUG_LCMS
-}
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-void ColorICCSelectorImpl::_setProfile( SVGICCColor* profile )
-{
-#ifdef DEBUG_LCMS
- g_message( "/^^^^^^^^^ %p::_setProfile(%s)", this,
- ( (profile) ? profile->colorProfile.c_str() : "<null>")
- );
-#endif // DEBUG_LCMS
- bool profChanged = false;
- if ( _prof && (!profile || (_profileName != profile->colorProfile) ) ) {
- // Need to clear out the prior one
- profChanged = true;
- _profileName.clear();
- _prof = 0;
- _profChannelCount = 0;
- } else if ( profile && !_prof ) {
- profChanged = true;
- }
-
- for ( size_t i = 0; i < _compUI.size(); i++ ) {
- gtk_widget_hide( _compUI[i]._label );
- gtk_widget_hide( _compUI[i]._slider );
- gtk_widget_hide( _compUI[i]._btn );
- }
-
- if ( profile ) {
- _prof = SP_ACTIVE_DOCUMENT->profileManager->find(profile->colorProfile.c_str());
- if ( _prof && (asICColorProfileClassSig(_prof->getProfileClass()) != cmsSigNamedColorClass) ) {
-#if HAVE_LIBLCMS1
- _profChannelCount = _cmsChannelsOf( asICColorSpaceSig(_prof->getColorSpace()) );
-#elif HAVE_LIBLCMS2
- _profChannelCount = cmsChannelsOf( asICColorSpaceSig(_prof->getColorSpace()) );
-#endif
-
- if ( profChanged ) {
- std::vector<colorspace::Component> things = colorspace::getColorSpaceInfo(asICColorSpaceSig(_prof->getColorSpace()));
- for (size_t i = 0; (i < things.size()) && (i < _profChannelCount); ++i)
- {
- _compUI[i]._component = things[i];
- }
-
- for ( guint i = 0; i < _profChannelCount; i++ ) {
- gtk_label_set_text_with_mnemonic( GTK_LABEL(_compUI[i]._label), (i < things.size()) ? things[i].name.c_str() : "");
-
- gtk_widget_set_tooltip_text( _compUI[i]._slider, (i < things.size()) ? things[i].tip.c_str() : "" );
- gtk_widget_set_tooltip_text( _compUI[i]._btn, (i < things.size()) ? things[i].tip.c_str() : "" );
-
- sp_color_slider_set_colors( SP_COLOR_SLIDER(_compUI[i]._slider),
- SPColor(0.0, 0.0, 0.0).toRGBA32(0xff),
- SPColor(0.5, 0.5, 0.5).toRGBA32(0xff),
- SPColor(1.0, 1.0, 1.0).toRGBA32(0xff) );
-/*
- _compUI[i]._adj = GTK_ADJUSTMENT( gtk_adjustment_new( val, 0.0, _fooScales[i], step, page, page ) );
- g_signal_connect( G_OBJECT( _compUI[i]._adj ), "value_changed", G_CALLBACK( _adjustmentChanged ), _csel );
-
- sp_color_slider_set_adjustment( SP_COLOR_SLIDER(_compUI[i]._slider), _compUI[i]._adj );
- gtk_spin_button_set_adjustment( GTK_SPIN_BUTTON(_compUI[i]._btn), _compUI[i]._adj );
- gtk_spin_button_set_digits( GTK_SPIN_BUTTON(_compUI[i]._btn), digits );
-*/
- gtk_widget_show( _compUI[i]._label );
- gtk_widget_show( _compUI[i]._slider );
- gtk_widget_show( _compUI[i]._btn );
- //gtk_adjustment_set_value( _compUI[i]._adj, 0.0 );
- //gtk_adjustment_set_value( _compUI[i]._adj, val );
- }
- for ( size_t i = _profChannelCount; i < _compUI.size(); i++ ) {
- gtk_widget_hide( _compUI[i]._label );
- gtk_widget_hide( _compUI[i]._slider );
- gtk_widget_hide( _compUI[i]._btn );
- }
- }
- } else {
- // Give up for now on named colors
- _prof = 0;
- }
- }
-
-#ifdef DEBUG_LCMS
- g_message( "\\_________ %p::_setProfile()", this );
-#endif // DEBUG_LCMS
-}
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
-void ColorICCSelectorImpl::_updateSliders( gint ignore )
-{
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- if ( _owner->_color.icc )
- {
- for ( guint i = 0; i < _profChannelCount; i++ ) {
- gdouble val = 0.0;
- if ( _owner->_color.icc->colors.size() > i ) {
- if ( _compUI[i]._component.scale == 256 ) {
- val = (_owner->_color.icc->colors[i] + 128.0) / static_cast<gdouble>(_compUI[i]._component.scale);
- } else {
- val = _owner->_color.icc->colors[i] / static_cast<gdouble>(_compUI[i]._component.scale);
- }
- }
- gtk_adjustment_set_value( _compUI[i]._adj, val );
- }
-
- if ( _prof ) {
- if ( _prof->getTransfToSRGB8() ) {
- for ( guint i = 0; i < _profChannelCount; i++ ) {
- if ( static_cast<gint>(i) != ignore ) {
- cmsUInt16Number* scratch = getScratch();
- cmsUInt16Number filler[4] = {0, 0, 0, 0};
- for ( guint j = 0; j < _profChannelCount; j++ ) {
- filler[j] = 0x0ffff * ColorScales::getScaled( _compUI[j]._adj );
- }
-
- cmsUInt16Number* p = scratch;
- for ( guint x = 0; x < 1024; x++ ) {
- for ( guint j = 0; j < _profChannelCount; j++ ) {
- if ( j == i ) {
- *p++ = x * 0x0ffff / 1024;
- } else {
- *p++ = filler[j];
- }
- }
- }
-
- cmsHTRANSFORM trans = _prof->getTransfToSRGB8();
- if ( trans ) {
- cmsDoTransform( trans, scratch, _compUI[i]._map, 1024 );
- sp_color_slider_set_map( SP_COLOR_SLIDER(_compUI[i]._slider), _compUI[i]._map );
- }
- }
- }
- }
- }
- }
-#else
- (void)ignore;
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
- guint32 start = _owner->_color.toRGBA32( 0x00 );
- guint32 mid = _owner->_color.toRGBA32( 0x7f );
- guint32 end = _owner->_color.toRGBA32( 0xff );
-
- sp_color_slider_set_colors( SP_COLOR_SLIDER(_slider), start, mid, end );
-}
-
-
-void ColorICCSelectorImpl::_adjustmentChanged( GtkAdjustment *adjustment, SPColorICCSelector *cs )
-{
-// // TODO check this. It looks questionable:
-// // if a value is entered between 0 and 1 exclusive, normalize it to (int) 0..255 or 0..100
-// if (adjustment->value > 0.0 && adjustment->value < 1.0) {
-// gtk_adjustment_set_value( adjustment, floor ((adjustment->value) * adjustment->upper + 0.5) );
-// }
-
-#ifdef DEBUG_LCMS
- g_message( "/^^^^^^^^^ %p::_adjustmentChanged()", cs );
-#endif // DEBUG_LCMS
-
- ColorICCSelector* iccSelector = static_cast<ColorICCSelector*>(SP_COLOR_SELECTOR(cs)->base);
- if (iccSelector->_impl->_updating) {
- return;
- }
-
- iccSelector->_impl->_updating = TRUE;
-
- gint match = -1;
-
- SPColor newColor( iccSelector->_color );
- gfloat scaled = ColorScales::getScaled( iccSelector->_impl->_adj );
- if ( iccSelector->_impl->_adj == adjustment ) {
-#ifdef DEBUG_LCMS
- g_message("ALPHA");
-#endif // DEBUG_LCMS
- } else {
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- for ( size_t i = 0; i < iccSelector->_impl->_compUI.size(); i++ ) {
- if ( iccSelector->_impl->_compUI[i]._adj == adjustment ) {
- match = i;
- break;
- }
- }
- if ( match >= 0 ) {
-#ifdef DEBUG_LCMS
- g_message(" channel %d", match );
-#endif // DEBUG_LCMS
- }
-
-
- cmsUInt16Number tmp[4];
- for ( guint i = 0; i < 4; i++ ) {
- tmp[i] = ColorScales::getScaled( iccSelector->_impl->_compUI[i]._adj ) * 0x0ffff;
- }
- guchar post[4] = {0,0,0,0};
-
- cmsHTRANSFORM trans = iccSelector->_impl->_prof->getTransfToSRGB8();
- if ( trans ) {
- cmsDoTransform( trans, tmp, post, 1 );
- }
-
- SPColor other( SP_RGBA32_U_COMPOSE(post[0], post[1], post[2], 255) );
- other.icc = new SVGICCColor();
- if ( iccSelector->_color.icc ) {
- other.icc->colorProfile = iccSelector->_color.icc->colorProfile;
- }
-
- guint32 prior = iccSelector->_color.toRGBA32(255);
- guint32 newer = other.toRGBA32(255);
-
- if ( prior != newer ) {
-#ifdef DEBUG_LCMS
- g_message("Transformed color from 0x%08x to 0x%08x", prior, newer );
- g_message(" ~~~~ FLIP");
-#endif // DEBUG_LCMS
- newColor = other;
- newColor.icc->colors.clear();
- for ( guint i = 0; i < iccSelector->_impl->_profChannelCount; i++ ) {
- gdouble val = ColorScales::getScaled( iccSelector->_impl->_compUI[i]._adj );
- val *= iccSelector->_impl->_compUI[i]._component.scale;
- if ( iccSelector->_impl->_compUI[i]._component.scale == 256 ) {
- val -= 128;
- }
- newColor.icc->colors.push_back( val );
- }
- }
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- }
- iccSelector->_updateInternals( newColor, scaled, iccSelector->_impl->_dragging );
- iccSelector->_impl->_updateSliders( match );
-
- iccSelector->_impl->_updating = FALSE;
-#ifdef DEBUG_LCMS
- g_message( "\\_________ %p::_adjustmentChanged()", cs );
-#endif // DEBUG_LCMS
-}
-
-void ColorICCSelectorImpl::_sliderGrabbed( SPColorSlider * /*slider*/, SPColorICCSelector * /*cs*/ )
-{
-// ColorICCSelector* iccSelector = dynamic_cast<ColorICCSelector*>(SP_COLOR_SELECTOR(cs)->base);
-// if (!iccSelector->_dragging) {
-// iccSelector->_dragging = TRUE;
-// iccSelector->_grabbed();
-// iccSelector->_updateInternals( iccSelector->_color, ColorScales::getScaled( iccSelector->_impl->_adj ), iccSelector->_dragging );
-// }
-}
-
-void ColorICCSelectorImpl::_sliderReleased( SPColorSlider * /*slider*/, SPColorICCSelector * /*cs*/ )
-{
-// ColorICCSelector* iccSelector = dynamic_cast<ColorICCSelector*>(SP_COLOR_SELECTOR(cs)->base);
-// if (iccSelector->_dragging) {
-// iccSelector->_dragging = FALSE;
-// iccSelector->_released();
-// iccSelector->_updateInternals( iccSelector->_color, ColorScales::getScaled( iccSelector->_adj ), iccSelector->_dragging );
-// }
-}
-
-#ifdef DEBUG_LCMS
-void ColorICCSelectorImpl::_sliderChanged( SPColorSlider *slider, SPColorICCSelector *cs )
-#else
-void ColorICCSelectorImpl::_sliderChanged( SPColorSlider * /*slider*/, SPColorICCSelector * /*cs*/ )
-#endif // DEBUG_LCMS
-{
-#ifdef DEBUG_LCMS
- g_message("Changed %p and %p", slider, cs );
-#endif // DEBUG_LCMS
-// ColorICCSelector* iccSelector = dynamic_cast<ColorICCSelector*>(SP_COLOR_SELECTOR(cs)->base);
-
-// iccSelector->_updateInternals( iccSelector->_color, ColorScales::getScaled( iccSelector->_adj ), iccSelector->_dragging );
-}
-
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
diff --git a/src/widgets/sp-color-icc-selector.h b/src/widgets/sp-color-icc-selector.h
deleted file mode 100644
index 6cdaff639..000000000
--- a/src/widgets/sp-color-icc-selector.h
+++ /dev/null
@@ -1,72 +0,0 @@
-#ifndef SEEN_SP_COLOR_ICC_SELECTOR_H
-#define SEEN_SP_COLOR_ICC_SELECTOR_H
-
-#include <glib.h>
-#include "sp-color-selector.h"
-
-namespace Inkscape {
-class ColorProfile;
-}
-
-struct SPColorICCSelector;
-struct SPColorICCSelectorClass;
-
-class ColorICCSelectorImpl;
-
-class ColorICCSelector: public ColorSelector
-{
-public:
- ColorICCSelector( SPColorSelector* csel );
- virtual ~ColorICCSelector();
-
- virtual void init();
-
-protected:
- virtual void _colorChanged();
-
- void _recalcColor( gboolean changing );
-
-private:
- friend class ColorICCSelectorImpl;
-
- // By default, disallow copy constructor and assignment operator
- ColorICCSelector( const ColorICCSelector& obj );
- ColorICCSelector& operator=( const ColorICCSelector& obj );
-
- ColorICCSelectorImpl *_impl;
-};
-
-
-
-#define SP_TYPE_COLOR_ICC_SELECTOR (sp_color_icc_selector_get_type())
-#define SP_COLOR_ICC_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_COLOR_ICC_SELECTOR, SPColorICCSelector))
-#define SP_COLOR_ICC_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_COLOR_ICC_SELECTOR, SPColorICCSelectorClass))
-#define SP_IS_COLOR_ICC_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_COLOR_ICC_SELECTOR))
-#define SP_IS_COLOR_ICC_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_COLOR_ICC_SELECTOR))
-
-struct SPColorICCSelector {
- SPColorSelector parent;
-};
-
-struct SPColorICCSelectorClass {
- SPColorSelectorClass parent_class;
-};
-
-GType sp_color_icc_selector_get_type(void);
-
-GtkWidget *sp_color_icc_selector_new(void);
-
-
-
-#endif // SEEN_SP_COLOR_ICC_SELECTOR_H
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp
deleted file mode 100644
index c7fa96efd..000000000
--- a/src/widgets/sp-color-notebook.cpp
+++ /dev/null
@@ -1,826 +0,0 @@
-/*
- * A notebook with RGB, CMYK, CMS, HSL, and Wheel pages
- *
- * Author:
- * Lauris Kaplinski <lauris@kaplinski.com>
- * bulia byak <buliabyak@users.sf.net>
- *
- * Copyright (C) 2001-2002 Lauris Kaplinski
- *
- * This code is in public domain
- */
-
-#undef SPCS_PREVIEW
-#define noDUMP_CHANGE_INFO
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "widgets/icon.h"
-#include <cstring>
-#include <string>
-#include <cstdlib>
-#include <cstddef>
-#include <gtk/gtk.h>
-#include <glibmm/i18n.h>
-
-#include "ui/dialog-events.h"
-#include "../preferences.h"
-#include "sp-color-notebook.h"
-#include "spw-utilities.h"
-#include "sp-color-scales.h"
-#include "sp-color-icc-selector.h"
-#include "sp-color-wheel-selector.h"
-#include "svg/svg-icc-color.h"
-#include "../inkscape.h"
-#include "../document.h"
-#include "../profile-manager.h"
-#include "color-profile.h"
-#include "cms-system.h"
-#include "ui/tools-switch.h"
-#include "ui/tools/tool-base.h"
-
-using Inkscape::CMSSystem;
-
-struct SPColorNotebookTracker {
- const gchar* name;
- const gchar* className;
- GType type;
- guint submode;
- gboolean enabledFull;
- gboolean enabledBrief;
- SPColorNotebook *backPointer;
-};
-
-static void sp_color_notebook_dispose(GObject *object);
-
-static void sp_color_notebook_show_all (GtkWidget *widget);
-static void sp_color_notebook_hide(GtkWidget *widget);
-
-#define XPAD 4
-#define YPAD 1
-
-G_DEFINE_TYPE(SPColorNotebook, sp_color_notebook, SP_TYPE_COLOR_SELECTOR);
-
-static void sp_color_notebook_class_init(SPColorNotebookClass *klass)
-{
- GObjectClass *object_class = reinterpret_cast<GObjectClass *>(klass);
- GtkWidgetClass *widget_class = reinterpret_cast<GtkWidgetClass *>(klass);
-
- object_class->dispose = sp_color_notebook_dispose;
-
- widget_class->show_all = sp_color_notebook_show_all;
- widget_class->hide = sp_color_notebook_hide;
-}
-
-static void
-sp_color_notebook_switch_page(GtkNotebook *notebook,
- GtkWidget *page,
- guint page_num,
- SPColorNotebook *colorbook)
-{
- if ( colorbook )
- {
- ColorNotebook* nb = dynamic_cast<ColorNotebook*>(SP_COLOR_SELECTOR(colorbook)->base);
- nb->switchPage( notebook, page, page_num );
-
- // remember the page we switched to
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setInt("/colorselector/page", page_num);
- }
-}
-
-void ColorNotebook::switchPage(GtkNotebook*,
- GtkWidget*,
- guint page_num)
-{
- SPColorSelector* csel;
- GtkWidget* widget;
-
- if ( gtk_notebook_get_current_page (GTK_NOTEBOOK (_book)) >= 0 )
- {
- csel = getCurrentSelector();
- csel->base->getColorAlpha(_color, _alpha);
- }
- widget = gtk_notebook_get_nth_page (GTK_NOTEBOOK (_book), page_num);
- if ( widget && SP_IS_COLOR_SELECTOR(widget) )
- {
- csel = SP_COLOR_SELECTOR (widget);
- csel->base->setColorAlpha( _color, _alpha );
-
- // Temporary workaround to undo a spurious GRABBED
- _released();
- }
-}
-
-static gint sp_color_notebook_menu_handler( GtkWidget *widget, GdkEvent *event )
-{
- if (event->type == GDK_BUTTON_PRESS)
- {
- SPColorSelector* csel = SP_COLOR_SELECTOR(widget);
- (dynamic_cast<ColorNotebook*>(csel->base))->menuHandler( event );
-
- /* Tell calling code that we have handled this event; the buck
- * stops here. */
- return TRUE;
- }
-
- /* Tell calling code that we have not handled this event; pass it on. */
- return FALSE;
-}
-
-gint ColorNotebook::menuHandler( GdkEvent* event )
-{
- GdkEventButton *bevent = (GdkEventButton *) event;
- gtk_menu_popup (GTK_MENU( _popup ), NULL, NULL, NULL, NULL,
- bevent->button, bevent->time);
- return TRUE;
-}
-
-static void sp_color_notebook_menuitem_response (GtkMenuItem *menuitem, gpointer user_data)
-{
- gboolean active = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem));
- SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (user_data);
- if ( entry )
- {
- if ( active )
- {
- (dynamic_cast<ColorNotebook*>(SP_COLOR_SELECTOR(entry->backPointer)->base))->addPage(entry->type, entry->submode);
- }
- else
- {
- (dynamic_cast<ColorNotebook*>(SP_COLOR_SELECTOR(entry->backPointer)->base))->removePage(entry->type, entry->submode);
- }
- }
-}
-
-static void
-sp_color_notebook_init (SPColorNotebook *colorbook)
-{
- SP_COLOR_SELECTOR(colorbook)->base = new ColorNotebook( SP_COLOR_SELECTOR(colorbook) );
-
- if ( SP_COLOR_SELECTOR(colorbook)->base )
- {
- SP_COLOR_SELECTOR(colorbook)->base->init();
- }
-}
-
-void ColorNotebook::init()
-{
- guint row = 0;
- guint i = 0;
- guint j = 0;
- GType *selector_types = 0;
- guint selector_type_count = 0;
-
- /* tempory hardcoding to get types loaded */
- SP_TYPE_COLOR_SCALES;
- SP_TYPE_COLOR_WHEEL_SELECTOR;
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- SP_TYPE_COLOR_ICC_SELECTOR;
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
- /* REJON: Comment out the next line to not use the normal GTK Color
- wheel. */
-
-// SP_TYPE_COLOR_GTKSELECTOR;
-
- _updating = FALSE;
- _updatingrgba = FALSE;
- _btn = 0;
- _popup = 0;
- _trackerList = g_ptr_array_new ();
-
- _book = gtk_notebook_new ();
- gtk_widget_show (_book);
-
- // Dont show the notebook tabs, use radiobuttons instead
- gtk_notebook_set_show_border (GTK_NOTEBOOK (_book), false);
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (_book), false);
-
- selector_types = g_type_children (SP_TYPE_COLOR_SELECTOR, &selector_type_count);
-
- for ( i = 0; i < selector_type_count; i++ )
- {
- if (!g_type_is_a (selector_types[i], SP_TYPE_COLOR_NOTEBOOK))
- {
- guint howmany = 1;
- gpointer klass = g_type_class_ref (selector_types[i]);
- if ( klass && SP_IS_COLOR_SELECTOR_CLASS(klass) )
- {
- SPColorSelectorClass *ck = SP_COLOR_SELECTOR_CLASS (klass);
- howmany = MAX (1, ck->submode_count);
- for ( j = 0; j < howmany; j++ )
- {
- SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (malloc(sizeof(SPColorNotebookTracker)));
- if ( entry )
- {
- memset( entry, 0, sizeof(SPColorNotebookTracker) );
- entry->name = ck->name[j];
- entry->type = selector_types[i];
- entry->submode = j;
- entry->enabledFull = TRUE;
- entry->enabledBrief = TRUE;
- entry->backPointer = SP_COLOR_NOTEBOOK(_csel);
-
- g_ptr_array_add (_trackerList, entry);
- }
- }
- }
- }
- }
-
-#if GTK_CHECK_VERSION(3,0,0)
- _buttonbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2);
- gtk_box_set_homogeneous(GTK_BOX(_buttonbox), TRUE);
-#else
- _buttonbox = gtk_hbox_new (TRUE, 2);
-#endif
-
- gtk_widget_show (_buttonbox);
- _buttons = new GtkWidget *[_trackerList->len];
-
- for ( i = 0; i < _trackerList->len; i++ )
- {
- SPColorNotebookTracker *entry =
- reinterpret_cast< SPColorNotebookTracker* > (g_ptr_array_index (_trackerList, i));
- if ( entry )
- {
- addPage(entry->type, entry->submode);
- }
- }
-
-#if GTK_CHECK_VERSION(3,0,0)
- GtkWidget* table = gtk_grid_new();
-#else
- GtkWidget* table = gtk_table_new(2, 3, FALSE);
-#endif
-
- gtk_widget_show (table);
-
- gtk_box_pack_start (GTK_BOX (_csel), table, TRUE, TRUE, 0);
-
- sp_set_font_size_smaller (_buttonbox);
-
-#if GTK_CHECK_VERSION(3,0,0)
- #if GTK_CHECK_VERSION(3,12,0)
- gtk_widget_set_margin_start(_buttonbox, XPAD);
- gtk_widget_set_margin_end(_buttonbox, XPAD);
- #else
- gtk_widget_set_margin_left(_buttonbox, XPAD);
- gtk_widget_set_margin_right(_buttonbox, XPAD);
- #endif
- gtk_widget_set_margin_top(_buttonbox, YPAD);
- gtk_widget_set_margin_bottom(_buttonbox, YPAD);
- gtk_widget_set_hexpand(_buttonbox, TRUE);
- gtk_widget_set_valign(_buttonbox, GTK_ALIGN_CENTER);
- gtk_grid_attach(GTK_GRID(table), _buttonbox, 0, row, 2, 1);
-#else
- gtk_table_attach (GTK_TABLE (table), _buttonbox, 0, 2, row, row + 1,
- static_cast<GtkAttachOptions>(GTK_EXPAND|GTK_FILL),
- static_cast<GtkAttachOptions>(0),
- XPAD, YPAD);
-#endif
-
- row++;
-
-#if GTK_CHECK_VERSION(3,0,0)
- #if GTK_CHECK_VERSION(3,12,0)
- gtk_widget_set_margin_start(_book, XPAD*2);
- gtk_widget_set_margin_end(_book, XPAD*2);
- #else
- gtk_widget_set_margin_left(_book, XPAD*2);
- gtk_widget_set_margin_right(_book, XPAD*2);
- #endif
- gtk_widget_set_margin_top(_book, YPAD);
- gtk_widget_set_margin_bottom(_book, YPAD);
- gtk_widget_set_hexpand(_book, TRUE);
- gtk_widget_set_vexpand(_book, TRUE);
- gtk_grid_attach(GTK_GRID(table), _book, 0, row, 2, 1);
-#else
- gtk_table_attach (GTK_TABLE (table), _book, 0, 2, row, row + 1,
- static_cast<GtkAttachOptions>(GTK_EXPAND|GTK_FILL),
- static_cast<GtkAttachOptions>(GTK_EXPAND|GTK_FILL),
- XPAD*2, YPAD);
-#endif
-
- // restore the last active page
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- _setCurrentPage(prefs->getInt("/colorselector/page", 0));
-
- {
- gboolean found = FALSE;
-
- _popup = gtk_menu_new();
- GtkMenu *menu = GTK_MENU (_popup);
-
- for ( i = 0; i < _trackerList->len; i++ )
- {
- SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (g_ptr_array_index (_trackerList, i));
- if ( entry )
- {
- GtkWidget *item = gtk_check_menu_item_new_with_label (_(entry->name));
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), entry->enabledFull);
- gtk_widget_show (item);
- gtk_menu_shell_append (GTK_MENU_SHELL(menu), item);
-
- g_signal_connect (G_OBJECT (item), "activate",
- G_CALLBACK (sp_color_notebook_menuitem_response),
- reinterpret_cast< gpointer > (entry) );
- found = TRUE;
- }
- }
-
- GtkWidget *arrow = gtk_arrow_new(GTK_ARROW_RIGHT, GTK_SHADOW_NONE);
- gtk_widget_show (arrow);
-
- _btn = gtk_button_new ();
- gtk_widget_show (_btn);
- gtk_container_add (GTK_CONTAINER (_btn), arrow);
-
- GtkWidget *align = gtk_alignment_new (1.0, 0.0, 0.0, 0.0);
- gtk_widget_show (align);
- gtk_container_add (GTK_CONTAINER (align), _btn);
-
- // uncomment to reenable the "show/hide modes" menu,
- // but first fix it so it remembers its settings in prefs and does not take that much space (entire vertical column!)
- //gtk_table_attach (GTK_TABLE (table), align, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD);
-
- g_signal_connect_swapped(G_OBJECT(_btn), "event", G_CALLBACK (sp_color_notebook_menu_handler), G_OBJECT(_csel));
- if ( !found )
- {
- gtk_widget_set_sensitive (_btn, FALSE);
- }
- }
-
- row++;
-
-#if GTK_CHECK_VERSION(3,0,0)
- GtkWidget *rgbabox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-#else
- GtkWidget *rgbabox = gtk_hbox_new (FALSE, 0);
-#endif
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- /* Create color management icons */
- _box_colormanaged = gtk_event_box_new ();
- GtkWidget *colormanaged = gtk_image_new_from_icon_name ("color-management-icon", GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_container_add (GTK_CONTAINER (_box_colormanaged), colormanaged);
- gtk_widget_set_tooltip_text (_box_colormanaged, _("Color Managed"));
- gtk_widget_set_sensitive (_box_colormanaged, false);
- gtk_box_pack_start(GTK_BOX(rgbabox), _box_colormanaged, FALSE, FALSE, 2);
-
- _box_outofgamut = gtk_event_box_new ();
- GtkWidget *outofgamut = gtk_image_new_from_icon_name ("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_container_add (GTK_CONTAINER (_box_outofgamut), outofgamut);
- gtk_widget_set_tooltip_text (_box_outofgamut, _("Out of gamut!"));
- gtk_widget_set_sensitive (_box_outofgamut, false);
- gtk_box_pack_start(GTK_BOX(rgbabox), _box_outofgamut, FALSE, FALSE, 2);
-
- _box_toomuchink = gtk_event_box_new ();
- GtkWidget *toomuchink = gtk_image_new_from_icon_name ("too-much-ink-icon", GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_container_add (GTK_CONTAINER (_box_toomuchink), toomuchink);
- gtk_widget_set_tooltip_text (_box_toomuchink, _("Too much ink!"));
- gtk_widget_set_sensitive (_box_toomuchink, false);
- gtk_box_pack_start(GTK_BOX(rgbabox), _box_toomuchink, FALSE, FALSE, 2);
-#endif //defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
-
- /* Color picker */
- GtkWidget *picker = gtk_image_new_from_icon_name ("color-picker", GTK_ICON_SIZE_SMALL_TOOLBAR);
- _btn_picker = gtk_button_new ();
- gtk_button_set_relief(GTK_BUTTON(_btn_picker), GTK_RELIEF_NONE);
- gtk_widget_show (_btn);
- gtk_container_add (GTK_CONTAINER (_btn_picker), picker);
- gtk_widget_set_tooltip_text (_btn_picker, _("Pick colors from image"));
- gtk_box_pack_start(GTK_BOX(rgbabox), _btn_picker, FALSE, FALSE, 2);
- g_signal_connect(G_OBJECT(_btn_picker), "clicked", G_CALLBACK(ColorNotebook::_picker_clicked), _csel);
-
- /* Create RGBA entry and color preview */
- _rgbal = gtk_label_new_with_mnemonic (_("RGBA_:"));
- gtk_misc_set_alignment (GTK_MISC (_rgbal), 1.0, 0.5);
- gtk_box_pack_start(GTK_BOX(rgbabox), _rgbal, TRUE, TRUE, 2);
-
- _rgbae = gtk_entry_new ();
- sp_dialog_defocus_on_enter (_rgbae);
- gtk_entry_set_max_length (GTK_ENTRY (_rgbae), 8);
- gtk_entry_set_width_chars (GTK_ENTRY (_rgbae), 8);
- gtk_widget_set_tooltip_text (_rgbae, _("Hexadecimal RGBA value of the color"));
- gtk_box_pack_start(GTK_BOX(rgbabox), _rgbae, FALSE, FALSE, 0);
- gtk_label_set_mnemonic_widget (GTK_LABEL(_rgbal), _rgbae);
-
- sp_set_font_size_smaller (rgbabox);
- gtk_widget_show_all (rgbabox);
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- //the "too much ink" icon is initially hidden
- gtk_widget_hide(GTK_WIDGET(_box_toomuchink));
-#endif //defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
-#if GTK_CHECK_VERSION(3,0,0)
- #if GTK_CHECK_VERSION(3,12,0)
- gtk_widget_set_margin_start(rgbabox, XPAD);
- gtk_widget_set_margin_end(rgbabox, XPAD);
- #else
- gtk_widget_set_margin_left(rgbabox, XPAD);
- gtk_widget_set_margin_right(rgbabox, XPAD);
- #endif
- gtk_widget_set_margin_top(rgbabox, YPAD);
- gtk_widget_set_margin_bottom(rgbabox, YPAD);
- gtk_grid_attach(GTK_GRID(table), rgbabox, 0, row, 2, 1);
-#else
- gtk_table_attach (GTK_TABLE (table), rgbabox, 0, 2, row, row + 1, GTK_FILL, GTK_SHRINK, XPAD, YPAD);
-#endif
-
-#ifdef SPCS_PREVIEW
- _p = sp_color_preview_new (0xffffffff);
- gtk_widget_show (_p);
- gtk_table_attach (GTK_TABLE (table), _p, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD);
-#endif
-
- _switchId = g_signal_connect(G_OBJECT (_book), "switch-page",
- G_CALLBACK (sp_color_notebook_switch_page), SP_COLOR_NOTEBOOK(_csel));
-
- _entryId = g_signal_connect (G_OBJECT (_rgbae), "changed", G_CALLBACK (ColorNotebook::_rgbaEntryChangedHook), _csel);
-}
-
-static void sp_color_notebook_dispose(GObject *object)
-{
- if (G_OBJECT_CLASS(sp_color_notebook_parent_class)->dispose)
- G_OBJECT_CLASS(sp_color_notebook_parent_class)->dispose(object);
-}
-
-ColorNotebook::~ColorNotebook()
-{
- if ( _trackerList )
- {
- g_ptr_array_free (_trackerList, TRUE);
- _trackerList = 0;
- }
-
- if ( _switchId )
- {
- if ( _book )
- {
- g_signal_handler_disconnect (_book, _switchId);
- _switchId = 0;
- }
- }
-
- if ( _buttons )
- {
- delete [] _buttons;
- _buttons = 0;
- }
-
-}
-
-static void
-sp_color_notebook_show_all (GtkWidget *widget)
-{
- gtk_widget_show (widget);
-}
-
-static void sp_color_notebook_hide(GtkWidget *widget)
-{
- gtk_widget_hide(widget);
-}
-
-GtkWidget *sp_color_notebook_new()
-{
- SPColorNotebook *colorbook = SP_COLOR_NOTEBOOK(g_object_new (SP_TYPE_COLOR_NOTEBOOK, NULL));
-
- return GTK_WIDGET(colorbook);
-}
-
-ColorNotebook::ColorNotebook( SPColorSelector* csel )
- : ColorSelector( csel )
-{
-}
-
-SPColorSelector* ColorNotebook::getCurrentSelector()
-{
- SPColorSelector* csel = NULL;
- gint current_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (_book));
-
- if ( current_page >= 0 )
- {
- GtkWidget* widget = gtk_notebook_get_nth_page (GTK_NOTEBOOK (_book), current_page);
- if ( SP_IS_COLOR_SELECTOR (widget) )
- {
- csel = SP_COLOR_SELECTOR (widget);
- }
- }
-
- return csel;
-}
-
-void ColorNotebook::_colorChanged()
-{
- SPColorSelector* cselPage = getCurrentSelector();
- if ( cselPage )
- {
- cselPage->base->setColorAlpha( _color, _alpha );
- }
-
- _updateRgbaEntry( _color, _alpha );
-}
-
-void ColorNotebook::_picker_clicked(GtkWidget * /*widget*/, SPColorNotebook * /*colorbook*/)
-{
- // Set the dropper into a "one click" mode, so it reverts to the previous tool after a click
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("/tools/dropper/onetimepick", true);
- Inkscape::UI::Tools::sp_toggle_dropper(SP_ACTIVE_DESKTOP);
-}
-
-void ColorNotebook::_rgbaEntryChangedHook(GtkEntry *entry, SPColorNotebook *colorbook)
-{
- (dynamic_cast<ColorNotebook*>(SP_COLOR_SELECTOR(colorbook)->base))->_rgbaEntryChanged( entry );
-}
-
-void ColorNotebook::_rgbaEntryChanged(GtkEntry* entry)
-{
- if (_updating) return;
- if (_updatingrgba) return;
-
- const gchar *t = gtk_entry_get_text( entry );
-
- if (t) {
- Glib::ustring text = t;
- bool changed = false;
- if (!text.empty() && text[0] == '#') {
- changed = true;
- text.erase(0,1);
- if (text.size() == 6) {
- // it was a standard RGB hex
- unsigned int alph = SP_COLOR_F_TO_U(_alpha);
- gchar* tmp = g_strdup_printf("%02x", alph);
- text += tmp;
- g_free(tmp);
- }
- }
- gchar* str = g_strdup(text.c_str());
- gchar* end = 0;
- guint64 rgba = g_ascii_strtoull( str, &end, 16 );
- if ( end != str ) {
- ptrdiff_t len = end - str;
- if ( len < 8 ) {
- rgba = rgba << ( 4 * ( 8 - len ) );
- }
- _updatingrgba = TRUE;
- if ( changed ) {
- gtk_entry_set_text( entry, str );
- }
- SPColor color( rgba );
- setColorAlpha( color, SP_RGBA32_A_F(rgba), true );
- _updatingrgba = FALSE;
- }
- g_free(str);
- }
-}
-
-// TODO pass in param so as to avoid the need for SP_ACTIVE_DOCUMENT
-void ColorNotebook::_updateRgbaEntry( const SPColor& color, gfloat alpha )
-{
- g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) );
-
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- /* update color management icon*/
- gtk_widget_set_sensitive (_box_colormanaged, color.icc != NULL);
-
- /* update out-of-gamut icon */
- gtk_widget_set_sensitive (_box_outofgamut, false);
- if (color.icc){
- Inkscape::ColorProfile* target_profile = SP_ACTIVE_DOCUMENT->profileManager->find(color.icc->colorProfile.c_str());
- if ( target_profile )
- gtk_widget_set_sensitive(_box_outofgamut, target_profile->GamutCheck(color));
- }
-
- /* update too-much-ink icon */
- gtk_widget_set_sensitive (_box_toomuchink, false);
- if (color.icc){
- Inkscape::ColorProfile* prof = SP_ACTIVE_DOCUMENT->profileManager->find(color.icc->colorProfile.c_str());
- if ( prof && CMSSystem::isPrintColorSpace(prof) ) {
- gtk_widget_show(GTK_WIDGET(_box_toomuchink));
- double ink_sum = 0;
- for (unsigned int i=0; i<color.icc->colors.size(); i++){
- ink_sum += color.icc->colors[i];
- }
-
- /* Some literature states that when the sum of paint values exceed 320%, it is considered to be a satured color,
- which means the paper can get too wet due to an excessive ammount of ink. This may lead to several issues
- such as misalignment and poor quality of printing in general.*/
- if ( ink_sum > 3.2 )
- gtk_widget_set_sensitive (_box_toomuchink, true);
- } else {
- gtk_widget_hide(GTK_WIDGET(_box_toomuchink));
- }
- }
-#endif //defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
- if ( !_updatingrgba )
- {
- gchar s[32];
- guint32 rgba;
-
- /* Update RGBA entry */
- rgba = color.toRGBA32( alpha );
-
- g_snprintf (s, 32, "%08x", rgba);
- const gchar* oldText = gtk_entry_get_text( GTK_ENTRY( _rgbae ) );
- if ( strcmp( oldText, s ) != 0 )
- {
- g_signal_handler_block( _rgbae, _entryId );
- gtk_entry_set_text( GTK_ENTRY(_rgbae), s );
- g_signal_handler_unblock( _rgbae, _entryId );
- }
- }
-}
-
-void ColorNotebook::_setCurrentPage(int i)
-{
- gtk_notebook_set_current_page(GTK_NOTEBOOK(_book), i);
-
- if (_buttons && _trackerList && (static_cast<size_t>(i) < _trackerList->len) ) {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(_buttons[i]), TRUE);
- }
-}
-
-void ColorNotebook::_buttonClicked(GtkWidget *widget, SPColorNotebook *colorbook)
-{
- ColorNotebook* nb = dynamic_cast<ColorNotebook*>(SP_COLOR_SELECTOR(colorbook)->base);
-
- if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget))) {
- return;
- }
-
- for(gint i = 0; i < gtk_notebook_get_n_pages (GTK_NOTEBOOK (nb->_book)); i++) {
- if (nb->_buttons[i] == widget) {
- gtk_notebook_set_current_page (GTK_NOTEBOOK (nb->_book), i);
- }
- }
-}
-
-void ColorNotebook::_entryGrabbed (SPColorSelector *, SPColorNotebook *colorbook)
-{
- ColorNotebook* nb = dynamic_cast<ColorNotebook*>(SP_COLOR_SELECTOR(colorbook)->base);
- nb->_grabbed();
-}
-
-void ColorNotebook::_entryDragged (SPColorSelector *csel, SPColorNotebook *colorbook)
-{
- gboolean oldState;
- ColorNotebook* nb = dynamic_cast<ColorNotebook*>(SP_COLOR_SELECTOR(colorbook)->base);
-
- oldState = nb->_dragging;
-
- nb->_dragging = TRUE;
- nb->_entryModified( csel, colorbook );
-
- nb->_dragging = oldState;
-}
-
-void ColorNotebook::_entryReleased (SPColorSelector *, SPColorNotebook *colorbook)
-{
- ColorNotebook* nb = dynamic_cast<ColorNotebook*>(SP_COLOR_SELECTOR(colorbook)->base);
- nb->_released();
-}
-
-void ColorNotebook::_entryChanged (SPColorSelector *csel, SPColorNotebook *colorbook)
-{
- gboolean oldState;
- ColorNotebook* nb = dynamic_cast<ColorNotebook*>(SP_COLOR_SELECTOR(colorbook)->base);
-
- oldState = nb->_dragging;
-
- nb->_dragging = FALSE;
- nb->_entryModified( csel, colorbook );
-
- nb->_dragging = oldState;
-}
-
-void ColorNotebook::_entryModified (SPColorSelector *csel, SPColorNotebook *colorbook)
-{
- g_return_if_fail (colorbook != NULL);
- g_return_if_fail (SP_IS_COLOR_NOTEBOOK (colorbook));
- g_return_if_fail (csel != NULL);
- g_return_if_fail (SP_IS_COLOR_SELECTOR (csel));
-
- ColorNotebook* nb = dynamic_cast<ColorNotebook*>(SP_COLOR_SELECTOR(colorbook)->base);
- SPColor color;
- gfloat alpha = 1.0;
-
- csel->base->getColorAlpha( color, alpha );
- nb->_updateRgbaEntry( color, alpha );
- nb->_updateInternals( color, alpha, nb->_dragging );
-}
-
-GtkWidget* ColorNotebook::addPage(GType page_type, guint submode)
-{
- GtkWidget *page;
-
- page = sp_color_selector_new( page_type );
- if ( page )
- {
- GtkWidget* tab_label = 0;
- SPColorSelector* csel;
-
- csel = SP_COLOR_SELECTOR (page);
- if ( submode > 0 )
- {
- csel->base->setSubmode( submode );
- }
- gtk_widget_show (page);
- int index = csel->base ? csel->base->getSubmode() : 0;
- const gchar* str = _(SP_COLOR_SELECTOR_GET_CLASS (csel)->name[index]);
-// g_message( "Hitting up for tab for '%s'", str );
- tab_label = gtk_label_new(_(str));
- gint pageNum = gtk_notebook_append_page( GTK_NOTEBOOK (_book), page, tab_label );
-
- // Add a button for each page
- _buttons[pageNum] = gtk_radio_button_new_with_label(NULL, _(str));
- gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(_buttons[pageNum]), FALSE);
- if (pageNum > 0) {
- GSList *group = gtk_radio_button_get_group (GTK_RADIO_BUTTON(_buttons[0]));
- gtk_radio_button_set_group (GTK_RADIO_BUTTON(_buttons[pageNum]), group);
- }
- gtk_widget_show (_buttons[pageNum]);
- gtk_box_pack_start (GTK_BOX (_buttonbox), _buttons[pageNum], TRUE, TRUE, 0);
-
- g_signal_connect (G_OBJECT (_buttons[pageNum]), "clicked", G_CALLBACK (_buttonClicked), _csel);
- g_signal_connect (G_OBJECT (page), "grabbed", G_CALLBACK (_entryGrabbed), _csel);
- g_signal_connect (G_OBJECT (page), "dragged", G_CALLBACK (_entryDragged), _csel);
- g_signal_connect (G_OBJECT (page), "released", G_CALLBACK (_entryReleased), _csel);
- g_signal_connect (G_OBJECT (page), "changed", G_CALLBACK (_entryChanged), _csel);
- }
-
- return page;
-}
-
-GtkWidget* ColorNotebook::getPage(GType page_type, guint submode)
-{
- gint count = 0;
- gint i = 0;
- GtkWidget* page = 0;
-
-// count = gtk_notebook_get_n_pages (_book);
- count = 200;
- for ( i = 0; i < count && !page; i++ )
- {
- page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (_book), i);
- if ( page )
- {
- SPColorSelector* csel;
- guint pagemode;
- csel = SP_COLOR_SELECTOR (page);
- pagemode = csel->base->getSubmode();
- if ( G_TYPE_FROM_INSTANCE (page) == page_type
- && pagemode == submode )
- {
- // found it.
- break;
- }
- else
- {
- page = 0;
- }
- }
- else
- {
- break;
- }
- }
- return page;
-}
-
-void ColorNotebook::removePage( GType page_type, guint submode )
-{
- GtkWidget *page = 0;
-
- page = getPage(page_type, submode);
- if ( page )
- {
- gint where = gtk_notebook_page_num (GTK_NOTEBOOK (_book), page);
- if ( where >= 0 )
- {
- if ( gtk_notebook_get_current_page (GTK_NOTEBOOK (_book)) == where )
- {
-// getColorAlpha(_color, &_alpha);
- }
- gtk_notebook_remove_page (GTK_NOTEBOOK (_book), where);
- }
- }
-}
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
diff --git a/src/widgets/sp-color-notebook.h b/src/widgets/sp-color-notebook.h
deleted file mode 100644
index 469bb56e8..000000000
--- a/src/widgets/sp-color-notebook.h
+++ /dev/null
@@ -1,120 +0,0 @@
-#ifndef SEEN_SP_COLOR_NOTEBOOK_H
-#define SEEN_SP_COLOR_NOTEBOOK_H
-
-/*
- * A notebook with RGB, CMYK, CMS, HSL, and Wheel pages
- *
- * Author:
- * Lauris Kaplinski <lauris@kaplinski.com>
- *
- * Copyright (C) 2001-2002 Lauris Kaplinski
- *
- * This code is in public domain
- */
-
-#include "sp-color-selector.h"
-
-#include <glib.h>
-
-struct SPColorNotebook;
-
-class ColorNotebook: public ColorSelector
-{
-public:
- ColorNotebook( SPColorSelector* csel );
- virtual ~ColorNotebook();
-
- virtual void init();
-
- SPColorSelector* getCurrentSelector();
- void switchPage( GtkNotebook *notebook, GtkWidget *page, guint page_num );
-
- GtkWidget* addPage( GType page_type, guint submode );
- void removePage( GType page_type, guint submode );
- GtkWidget* getPage( GType page_type, guint submode );
-
- gint menuHandler( GdkEvent* event );
-
-protected:
- static void _rgbaEntryChangedHook( GtkEntry* entry, SPColorNotebook *colorbook );
- static void _entryGrabbed( SPColorSelector *csel, SPColorNotebook *colorbook );
- static void _entryDragged( SPColorSelector *csel, SPColorNotebook *colorbook );
- static void _entryReleased( SPColorSelector *csel, SPColorNotebook *colorbook );
- static void _entryChanged( SPColorSelector *csel, SPColorNotebook *colorbook );
- static void _entryModified( SPColorSelector *csel, SPColorNotebook *colorbook );
- static void _buttonClicked(GtkWidget *widget, SPColorNotebook *colorbook);
- static void _picker_clicked(GtkWidget *widget, SPColorNotebook *colorbook);
-
- virtual void _colorChanged();
-
- void _rgbaEntryChanged( GtkEntry* entry );
- void _updateRgbaEntry( const SPColor& color, gfloat alpha );
- void _setCurrentPage(int i);
-
- gboolean _updating : 1;
- gboolean _updatingrgba : 1;
- gboolean _dragging : 1;
- gulong _switchId;
- gulong _entryId;
- GtkWidget *_book;
- GtkWidget *_buttonbox;
- GtkWidget **_buttons;
- GtkWidget *_rgbal, *_rgbae; /* RGBA entry */
-#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- GtkWidget *_box_outofgamut, *_box_colormanaged, *_box_toomuchink;
-#endif //defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- GtkWidget *_btn_picker;
- GtkWidget *_p; /* Color preview */
- GtkWidget *_btn;
- GtkWidget *_popup;
- GPtrArray *_trackerList;
-
-private:
- // By default, disallow copy constructor and assignment operator
- ColorNotebook( const ColorNotebook& obj );
- ColorNotebook& operator=( const ColorNotebook& obj );
-};
-
-
-
-#define SP_TYPE_COLOR_NOTEBOOK (sp_color_notebook_get_type ())
-#define SP_COLOR_NOTEBOOK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_COLOR_NOTEBOOK, SPColorNotebook))
-#define SP_COLOR_NOTEBOOK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_NOTEBOOK, SPColorNotebookClass))
-#define SP_IS_COLOR_NOTEBOOK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_COLOR_NOTEBOOK))
-#define SP_IS_COLOR_NOTEBOOK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_NOTEBOOK))
-
-struct SPColorNotebook {
- SPColorSelector parent; /* Parent */
-};
-
-struct SPColorNotebookClass {
- SPColorSelectorClass parent_class;
-
- void (* grabbed) (SPColorNotebook *rgbsel);
- void (* dragged) (SPColorNotebook *rgbsel);
- void (* released) (SPColorNotebook *rgbsel);
- void (* changed) (SPColorNotebook *rgbsel);
-};
-
-GType sp_color_notebook_get_type(void);
-
-GtkWidget *sp_color_notebook_new (void);
-
-/* void sp_color_notebook_set_mode (SPColorNotebook *csel, SPColorNotebookMode mode); */
-/* SPColorNotebookMode sp_color_notebook_get_mode (SPColorNotebook *csel); */
-
-
-
-#endif // SEEN_SP_COLOR_NOTEBOOK_H
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
-
diff --git a/src/widgets/sp-color-scales.cpp b/src/widgets/sp-color-scales.cpp
deleted file mode 100644
index 60ba62ec5..000000000
--- a/src/widgets/sp-color-scales.cpp
+++ /dev/null
@@ -1,760 +0,0 @@
-/*
- * bulia byak <buliabyak@users.sf.net>
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-#include <math.h>
-#include <gtk/gtk.h>
-#include <glibmm/i18n.h>
-#include "ui/dialog-events.h"
-#include "sp-color-scales.h"
-#include "sp-color-slider.h"
-#include "svg/svg-icc-color.h"
-
-#define CSC_CHANNEL_R (1 << 0)
-#define CSC_CHANNEL_G (1 << 1)
-#define CSC_CHANNEL_B (1 << 2)
-#define CSC_CHANNEL_A (1 << 3)
-#define CSC_CHANNEL_H (1 << 0)
-#define CSC_CHANNEL_S (1 << 1)
-#define CSC_CHANNEL_V (1 << 2)
-#define CSC_CHANNEL_C (1 << 0)
-#define CSC_CHANNEL_M (1 << 1)
-#define CSC_CHANNEL_Y (1 << 2)
-#define CSC_CHANNEL_K (1 << 3)
-#define CSC_CHANNEL_CMYKA (1 << 4)
-
-#define CSC_CHANNELS_ALL 0
-
-
-G_BEGIN_DECLS
-
-static void sp_color_scales_dispose(GObject *object);
-
-static void sp_color_scales_show_all (GtkWidget *widget);
-static void sp_color_scales_hide(GtkWidget *widget);
-
-static const gchar *sp_color_scales_hue_map (void);
-
-G_END_DECLS
-
-#define XPAD 4
-#define YPAD 1
-
-#define noDUMP_CHANGE_INFO 1
-
-G_DEFINE_TYPE(SPColorScales, sp_color_scales, SP_TYPE_COLOR_SELECTOR);
-
-static void
-sp_color_scales_class_init (SPColorScalesClass *klass)
-{
- static const gchar* nameset[] = {N_("RGB"), N_("HSL"), N_("CMYK"), 0};
- GObjectClass *object_class = G_OBJECT_CLASS(klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
- SPColorSelectorClass *selector_class = SP_COLOR_SELECTOR_CLASS (klass);
-
- selector_class->name = nameset;
- selector_class->submode_count = 3;
-
- object_class->dispose = sp_color_scales_dispose;
-
- widget_class->show_all = sp_color_scales_show_all;
- widget_class->hide = sp_color_scales_hide;
-}
-
-ColorScales::ColorScales( SPColorSelector* csel )
- : ColorSelector( csel ),
- _mode( SP_COLOR_SCALES_MODE_NONE ),
- _rangeLimit( 255.0 ),
- _updating( FALSE ),
- _dragging( FALSE )
-{
- for (gint i = 0; i < 5; i++) {
- _l[i] = 0;
- _a[i] = 0;
- _s[i] = 0;
- _b[i] = 0;
- }
-}
-
-ColorScales::~ColorScales()
-{
- for (gint i = 0; i < 5; i++) {
- _l[i] = 0;
- _a[i] = 0;
- _s[i] = 0;
- _b[i] = 0;
- }
-}
-
-void sp_color_scales_init (SPColorScales *cs)
-{
- SP_COLOR_SELECTOR(cs)->base = new ColorScales( SP_COLOR_SELECTOR(cs) );
-
- if ( SP_COLOR_SELECTOR(cs)->base )
- {
- SP_COLOR_SELECTOR(cs)->base->init();
- }
-}
-
-void ColorScales::init()
-{
- gint i;
-
- _updating = FALSE;
- _dragging = FALSE;
-
-#if GTK_CHECK_VERSION(3,0,0)
- GtkWidget *t = gtk_grid_new();
-#else
- GtkWidget *t = gtk_table_new (5, 3, FALSE);
-#endif
- gtk_widget_show (t);
- gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 4);
-
- /* Create components */
- for (i = 0; i < static_cast< gint > (G_N_ELEMENTS(_a)) ; i++) {
- /* Label */
- _l[i] = gtk_label_new("");
- gtk_misc_set_alignment (GTK_MISC (_l[i]), 1.0, 0.5);
- gtk_widget_show (_l[i]);
-
-#if GTK_CHECK_VERSION(3,0,0)
- #if GTK_CHECK_VERSION(3,12,0)
- gtk_widget_set_margin_start(_l[i], XPAD);
- gtk_widget_set_margin_end(_l[i], XPAD);
- #else
- gtk_widget_set_margin_left(_l[i], XPAD);
- gtk_widget_set_margin_right(_l[i], XPAD);
- #endif
- gtk_widget_set_margin_top(_l[i], YPAD);
- gtk_widget_set_margin_bottom(_l[i], YPAD);
- gtk_grid_attach(GTK_GRID(t), _l[i], 0, i, 1, 1);
-#else
- gtk_table_attach (GTK_TABLE (t), _l[i], 0, 1, i, i + 1, GTK_FILL, GTK_FILL, XPAD, YPAD);
-#endif
-
- /* Adjustment */
- _a[i] = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, _rangeLimit, 1.0, 10.0, 10.0));
- /* Slider */
- _s[i] = sp_color_slider_new (_a[i]);
- gtk_widget_show (_s[i]);
-
-#if GTK_CHECK_VERSION(3,0,0)
- #if GTK_CHECK_VERSION(3,12,0)
- gtk_widget_set_margin_start(_s[i], XPAD);
- gtk_widget_set_margin_end(_s[i], XPAD);
- #else
- gtk_widget_set_margin_left(_s[i], XPAD);
- gtk_widget_set_margin_right(_s[i], XPAD);
- #endif
- gtk_widget_set_margin_top(_s[i], YPAD);
- gtk_widget_set_margin_bottom(_s[i], YPAD);
- gtk_widget_set_hexpand(_s[i], TRUE);
- gtk_grid_attach(GTK_GRID(t), _s[i], 1, i, 1, 1);
-#else
- gtk_table_attach (GTK_TABLE (t), _s[i], 1, 2, i, i + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, XPAD, YPAD);
-#endif
-
- /* Spinbutton */
- _b[i] = gtk_spin_button_new (GTK_ADJUSTMENT (_a[i]), 1.0, 0);
- sp_dialog_defocus_on_enter (_b[i]);
- gtk_label_set_mnemonic_widget (GTK_LABEL(_l[i]), _b[i]);
- gtk_widget_show (_b[i]);
-
-#if GTK_CHECK_VERSION(3,0,0)
- #if GTK_CHECK_VERSION(3,12,0)
- gtk_widget_set_margin_start(_b[i], XPAD);
- gtk_widget_set_margin_end(_b[i], XPAD);
- #else
- gtk_widget_set_margin_left(_b[i], XPAD);
- gtk_widget_set_margin_right(_b[i], XPAD);
- #endif
- gtk_widget_set_margin_top(_b[i], YPAD);
- gtk_widget_set_margin_bottom(_b[i], YPAD);
- gtk_widget_set_halign(_b[i], GTK_ALIGN_CENTER);
- gtk_widget_set_valign(_b[i], GTK_ALIGN_CENTER);
- gtk_grid_attach(GTK_GRID(t), _b[i], 2, i, 1, 1);
-#else
- gtk_table_attach (GTK_TABLE (t), _b[i], 2, 3, i, i + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD);
-#endif
-
- /* Attach channel value to adjustment */
- g_object_set_data (G_OBJECT (_a[i]), "channel", GINT_TO_POINTER (i));
- /* Signals */
- g_signal_connect (G_OBJECT (_a[i]), "value_changed",
- G_CALLBACK (_adjustmentAnyChanged), _csel);
- g_signal_connect (G_OBJECT (_s[i]), "grabbed",
- G_CALLBACK (_sliderAnyGrabbed), _csel);
- g_signal_connect (G_OBJECT (_s[i]), "released",
- G_CALLBACK (_sliderAnyReleased), _csel);
- g_signal_connect (G_OBJECT (_s[i]), "changed",
- G_CALLBACK (_sliderAnyChanged), _csel);
- }
-
- /* Initial mode is none, so it works */
- setMode(SP_COLOR_SCALES_MODE_RGB);
-}
-
-static void sp_color_scales_dispose(GObject *object)
-{
- if (G_OBJECT_CLASS(sp_color_scales_parent_class)->dispose)
- G_OBJECT_CLASS(sp_color_scales_parent_class)->dispose(object);
-}
-
-static void
-sp_color_scales_show_all (GtkWidget *widget)
-{
- gtk_widget_show (widget);
-}
-
-static void sp_color_scales_hide(GtkWidget *widget)
-{
- gtk_widget_hide(widget);
-}
-
-GtkWidget *sp_color_scales_new()
-{
- SPColorScales *csel = SP_COLOR_SCALES(g_object_new (SP_TYPE_COLOR_SCALES, NULL));
-
- return GTK_WIDGET (csel);
-}
-
-void ColorScales::_recalcColor( gboolean changing )
-{
- if ( changing )
- {
- SPColor color;
- gfloat alpha = 1.0;
- gfloat c[5];
-
- switch (_mode) {
- case SP_COLOR_SCALES_MODE_RGB:
- case SP_COLOR_SCALES_MODE_HSV:
- _getRgbaFloatv(c);
- color.set( c[0], c[1], c[2] );
- alpha = c[3];
- break;
- case SP_COLOR_SCALES_MODE_CMYK:
- {
- _getCmykaFloatv( c );
-
- float rgb[3];
- sp_color_cmyk_to_rgb_floatv( rgb, c[0], c[1], c[2], c[3] );
- color.set( rgb[0], rgb[1], rgb[2] );
- alpha = c[4];
- break;
- }
- default:
- g_warning ("file %s: line %d: Illegal color selector mode %d", __FILE__, __LINE__, _mode);
- break;
- }
-
- /* Preserve ICC */
- color.icc = _color.icc ? new SVGICCColor(*_color.icc) : 0;
-
- _updateInternals( color, alpha, _dragging );
- }
- else
- {
- _updateInternals( _color, _alpha, _dragging );
- }
-}
-
-/* Helpers for setting color value */
-gfloat ColorScales::getScaled( const GtkAdjustment *a )
-{
- gfloat val = gtk_adjustment_get_value (const_cast<GtkAdjustment*>(a))
- / gtk_adjustment_get_upper (const_cast<GtkAdjustment*>(a));
- return val;
-}
-
-void ColorScales::setScaled( GtkAdjustment *a, gfloat v )
-{
- gfloat val = v * gtk_adjustment_get_upper (a);
- gtk_adjustment_set_value( a, val );
-}
-
-void ColorScales::_setRangeLimit( gdouble upper )
-{
- _rangeLimit = upper;
- for ( gint i = 0; i < static_cast<gint>(G_N_ELEMENTS(_a)); i++ ) {
- gtk_adjustment_set_upper (_a[i], upper);
- gtk_adjustment_changed( _a[i] );
- }
-}
-
-void ColorScales::_colorChanged()
-{
-#ifdef DUMP_CHANGE_INFO
- g_message("ColorScales::_colorChanged( this=%p, %f, %f, %f, %f)", this, _color.v.c[0], _color.v.c[1], _color.v.c[2], _alpha );
-#endif
- gfloat tmp[3];
- gfloat c[5] = {0.0, 0.0, 0.0, 0.0};
-
- switch (_mode) {
- case SP_COLOR_SCALES_MODE_RGB:
- sp_color_get_rgb_floatv( &_color, c );
- c[3] = _alpha;
- c[4] = 0.0;
- break;
- case SP_COLOR_SCALES_MODE_HSV:
- sp_color_get_rgb_floatv( &_color, tmp );
- sp_color_rgb_to_hsl_floatv (c, tmp[0], tmp[1], tmp[2]);
- c[3] = _alpha;
- c[4] = 0.0;
- break;
- case SP_COLOR_SCALES_MODE_CMYK:
- sp_color_get_cmyk_floatv( &_color, c );
- c[4] = _alpha;
- break;
- default:
- g_warning ("file %s: line %d: Illegal color selector mode %d", __FILE__, __LINE__, _mode);
- break;
- }
-
- _updating = TRUE;
- setScaled( _a[0], c[0] );
- setScaled( _a[1], c[1] );
- setScaled( _a[2], c[2] );
- setScaled( _a[3], c[3] );
- setScaled( _a[4], c[4] );
- _updateSliders( CSC_CHANNELS_ALL );
- _updating = FALSE;
-}
-
-void ColorScales::_getRgbaFloatv( gfloat *rgba )
-{
- g_return_if_fail (rgba != NULL);
-
- switch (_mode) {
- case SP_COLOR_SCALES_MODE_RGB:
- rgba[0] = getScaled(_a[0]);
- rgba[1] = getScaled(_a[1]);
- rgba[2] = getScaled(_a[2]);
- rgba[3] = getScaled(_a[3]);
- break;
- case SP_COLOR_SCALES_MODE_HSV:
- sp_color_hsl_to_rgb_floatv (rgba, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]));
- rgba[3] = getScaled(_a[3]);
- break;
- case SP_COLOR_SCALES_MODE_CMYK:
- sp_color_cmyk_to_rgb_floatv (rgba, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), getScaled(_a[3]));
- rgba[3] = getScaled(_a[4]);
- break;
- default:
- g_warning ("file %s: line %d: Illegal color selector mode", __FILE__, __LINE__);
- break;
- }
-}
-
-void ColorScales::_getCmykaFloatv( gfloat *cmyka )
-{
- gfloat rgb[3];
-
- g_return_if_fail (cmyka != NULL);
-
- switch (_mode) {
- case SP_COLOR_SCALES_MODE_RGB:
- sp_color_rgb_to_cmyk_floatv (cmyka, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]));
- cmyka[4] = getScaled(_a[3]);
- break;
- case SP_COLOR_SCALES_MODE_HSV:
- sp_color_hsl_to_rgb_floatv (rgb, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]));
- sp_color_rgb_to_cmyk_floatv (cmyka, rgb[0], rgb[1], rgb[2]);
- cmyka[4] = getScaled(_a[3]);
- break;
- case SP_COLOR_SCALES_MODE_CMYK:
- cmyka[0] = getScaled(_a[0]);
- cmyka[1] = getScaled(_a[1]);
- cmyka[2] = getScaled(_a[2]);
- cmyka[3] = getScaled(_a[3]);
- cmyka[4] = getScaled(_a[4]);
- break;
- default:
- g_warning ("file %s: line %d: Illegal color selector mode", __FILE__, __LINE__);
- break;
- }
-}
-
-guint32 ColorScales::_getRgba32()
-{
- gfloat c[4];
- guint32 rgba;
-
- _getRgbaFloatv(c);
-
- rgba = SP_RGBA32_F_COMPOSE (c[0], c[1], c[2], c[3]);
-
- return rgba;
-}
-
-void ColorScales::setMode(SPColorScalesMode mode)
-{
- gfloat rgba[4];
- gfloat c[4];
-
- if (_mode == mode) return;
-
- if ((_mode == SP_COLOR_SCALES_MODE_RGB) ||
- (_mode == SP_COLOR_SCALES_MODE_HSV) ||
- (_mode == SP_COLOR_SCALES_MODE_CMYK)) {
- _getRgbaFloatv(rgba);
- } else {
- rgba[0] = rgba[1] = rgba[2] = rgba[3] = 1.0;
- }
-
- _mode = mode;
-
- switch (mode) {
- case SP_COLOR_SCALES_MODE_RGB:
- _setRangeLimit(255.0);
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[0]), _("_R:"));
- gtk_widget_set_tooltip_text (_s[0], _("Red"));
- gtk_widget_set_tooltip_text (_b[0], _("Red"));
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[1]), _("_G:"));
- gtk_widget_set_tooltip_text (_s[1], _("Green"));
- gtk_widget_set_tooltip_text (_b[1], _("Green"));
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[2]), _("_B:"));
- gtk_widget_set_tooltip_text (_s[2], _("Blue"));
- gtk_widget_set_tooltip_text (_b[2], _("Blue"));
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[3]), _("_A:"));
- gtk_widget_set_tooltip_text (_s[3], _("Alpha (opacity)"));
- gtk_widget_set_tooltip_text (_b[3], _("Alpha (opacity)"));
- sp_color_slider_set_map (SP_COLOR_SLIDER (_s[0]), NULL);
- gtk_widget_hide (_l[4]);
- gtk_widget_hide (_s[4]);
- gtk_widget_hide (_b[4]);
- _updating = TRUE;
- setScaled( _a[0], rgba[0] );
- setScaled( _a[1], rgba[1] );
- setScaled( _a[2], rgba[2] );
- setScaled( _a[3], rgba[3] );
- _updating = FALSE;
- _updateSliders( CSC_CHANNELS_ALL );
- break;
- case SP_COLOR_SCALES_MODE_HSV:
- _setRangeLimit(255.0);
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[0]), _("_H:"));
- gtk_widget_set_tooltip_text (_s[0], _("Hue"));
- gtk_widget_set_tooltip_text (_b[0], _("Hue"));
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[1]), _("_S:"));
- gtk_widget_set_tooltip_text (_s[1], _("Saturation"));
- gtk_widget_set_tooltip_text (_b[1], _("Saturation"));
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[2]), _("_L:"));
- gtk_widget_set_tooltip_text (_s[2], _("Lightness"));
- gtk_widget_set_tooltip_text (_b[2], _("Lightness"));
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[3]), _("_A:"));
- gtk_widget_set_tooltip_text (_s[3], _("Alpha (opacity)"));
- gtk_widget_set_tooltip_text (_b[3], _("Alpha (opacity)"));
- sp_color_slider_set_map (SP_COLOR_SLIDER (_s[0]), (guchar *)(sp_color_scales_hue_map()));
- gtk_widget_hide (_l[4]);
- gtk_widget_hide (_s[4]);
- gtk_widget_hide (_b[4]);
- _updating = TRUE;
- c[0] = 0.0;
- sp_color_rgb_to_hsl_floatv (c, rgba[0], rgba[1], rgba[2]);
- setScaled( _a[0], c[0] );
- setScaled( _a[1], c[1] );
- setScaled( _a[2], c[2] );
- setScaled( _a[3], rgba[3] );
- _updating = FALSE;
- _updateSliders( CSC_CHANNELS_ALL );
- break;
- case SP_COLOR_SCALES_MODE_CMYK:
- _setRangeLimit(100.0);
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[0]), _("_C:"));
- gtk_widget_set_tooltip_text (_s[0], _("Cyan"));
- gtk_widget_set_tooltip_text (_b[0], _("Cyan"));
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[1]), _("_M:"));
- gtk_widget_set_tooltip_text (_s[1], _("Magenta"));
- gtk_widget_set_tooltip_text (_b[1], _("Magenta"));
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[2]), _("_Y:"));
- gtk_widget_set_tooltip_text (_s[2], _("Yellow"));
- gtk_widget_set_tooltip_text (_b[2], _("Yellow"));
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[3]), _("_K:"));
- gtk_widget_set_tooltip_text (_s[3], _("Black"));
- gtk_widget_set_tooltip_text (_b[3], _("Black"));
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[4]), _("_A:"));
- gtk_widget_set_tooltip_text (_s[4], _("Alpha (opacity)"));
- gtk_widget_set_tooltip_text (_b[4], _("Alpha (opacity)"));
- sp_color_slider_set_map (SP_COLOR_SLIDER (_s[0]), NULL);
- gtk_widget_show (_l[4]);
- gtk_widget_show (_s[4]);
- gtk_widget_show (_b[4]);
- _updating = TRUE;
-
- sp_color_rgb_to_cmyk_floatv (c, rgba[0], rgba[1], rgba[2]);
- setScaled( _a[0], c[0] );
- setScaled( _a[1], c[1] );
- setScaled( _a[2], c[2] );
- setScaled( _a[3], c[3] );
-
- setScaled( _a[4], rgba[3] );
- _updating = FALSE;
- _updateSliders( CSC_CHANNELS_ALL );
- break;
- default:
- g_warning ("file %s: line %d: Illegal color selector mode", __FILE__, __LINE__);
- break;
- }
-}
-
-SPColorScalesMode ColorScales::getMode() const
-{
- return _mode;
-}
-
-void ColorScales::setSubmode( guint submode )
-{
- g_return_if_fail (_csel != NULL);
- g_return_if_fail (SP_IS_COLOR_SCALES (_csel));
- g_return_if_fail (submode < 3);
-
- switch ( submode )
- {
- default:
- case 0:
- setMode(SP_COLOR_SCALES_MODE_RGB);
- break;
- case 1:
- setMode(SP_COLOR_SCALES_MODE_HSV);
- break;
- case 2:
- setMode(SP_COLOR_SCALES_MODE_CMYK);
- break;
- }
-}
-
-guint ColorScales::getSubmode() const
-{
- guint submode = 0;
-
- switch ( _mode )
- {
- case SP_COLOR_SCALES_MODE_HSV:
- submode = 1;
- break;
- case SP_COLOR_SCALES_MODE_CMYK:
- submode = 2;
- break;
- case SP_COLOR_SCALES_MODE_RGB:
- default:
- submode = 0;
- }
-
- return submode;
-}
-
-void ColorScales::_adjustmentAnyChanged( GtkAdjustment *adjustment, SPColorScales *cs )
-{
- gint channel = GPOINTER_TO_INT (g_object_get_data(G_OBJECT (adjustment), "channel"));
-
- _adjustmentChanged(cs, channel);
-}
-
-void ColorScales::_sliderAnyGrabbed( SPColorSlider *slider, SPColorScales *cs )
-{
- (void)slider;
- ColorScales* scales = static_cast<ColorScales*>(SP_COLOR_SELECTOR(cs)->base);
- if (!scales->_dragging) {
- scales->_dragging = TRUE;
- scales->_grabbed();
- scales->_recalcColor( FALSE );
- }
-}
-
-void ColorScales::_sliderAnyReleased( SPColorSlider *slider, SPColorScales *cs )
-{
- (void)slider;
- ColorScales* scales = static_cast<ColorScales*>(SP_COLOR_SELECTOR(cs)->base);
- if (scales->_dragging) {
- scales->_dragging = FALSE;
- scales->_released();
- scales->_recalcColor( FALSE );
- }
-}
-
-void ColorScales::_sliderAnyChanged( SPColorSlider *slider, SPColorScales *cs )
-{
- (void)slider;
- ColorScales* scales = static_cast<ColorScales*>(SP_COLOR_SELECTOR(cs)->base);
-
- scales->_recalcColor( TRUE );
-}
-
-void ColorScales::_adjustmentChanged( SPColorScales *cs, guint channel )
-{
- ColorScales* scales = static_cast<ColorScales*>(SP_COLOR_SELECTOR(cs)->base);
- if (scales->_updating) return;
-
- scales->_updating = TRUE;
-
- scales->_updateSliders( (1 << channel) );
-
- scales->_recalcColor (TRUE);
-
- scales->_updating = FALSE;
-}
-
-void ColorScales::_updateSliders( guint channels )
-{
- gfloat rgb0[3], rgbm[3], rgb1[3];
-#ifdef SPCS_PREVIEW
- guint32 rgba;
-#endif
- switch (_mode) {
- case SP_COLOR_SCALES_MODE_RGB:
- if ((channels != CSC_CHANNEL_R) && (channels != CSC_CHANNEL_A)) {
- /* Update red */
- sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[0]),
- SP_RGBA32_F_COMPOSE (0.0, getScaled(_a[1]), getScaled(_a[2]), 1.0),
- SP_RGBA32_F_COMPOSE (0.5, getScaled(_a[1]), getScaled(_a[2]), 1.0),
- SP_RGBA32_F_COMPOSE (1.0, getScaled(_a[1]), getScaled(_a[2]), 1.0));
- }
- if ((channels != CSC_CHANNEL_G) && (channels != CSC_CHANNEL_A)) {
- /* Update green */
- sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[1]),
- SP_RGBA32_F_COMPOSE (getScaled(_a[0]), 0.0, getScaled(_a[2]), 1.0),
- SP_RGBA32_F_COMPOSE (getScaled(_a[0]), 0.5, getScaled(_a[2]), 1.0),
- SP_RGBA32_F_COMPOSE (getScaled(_a[0]), 1.0, getScaled(_a[2]), 1.0));
- }
- if ((channels != CSC_CHANNEL_B) && (channels != CSC_CHANNEL_A)) {
- /* Update blue */
- sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[2]),
- SP_RGBA32_F_COMPOSE (getScaled(_a[0]), getScaled(_a[1]), 0.0, 1.0),
- SP_RGBA32_F_COMPOSE (getScaled(_a[0]), getScaled(_a[1]), 0.5, 1.0),
- SP_RGBA32_F_COMPOSE (getScaled(_a[0]), getScaled(_a[1]), 1.0, 1.0));
- }
- if (channels != CSC_CHANNEL_A) {
- /* Update alpha */
- sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[3]),
- SP_RGBA32_F_COMPOSE (getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), 0.0),
- SP_RGBA32_F_COMPOSE (getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), 0.5),
- SP_RGBA32_F_COMPOSE (getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), 1.0));
- }
- break;
- case SP_COLOR_SCALES_MODE_HSV:
- /* Hue is never updated */
- if ((channels != CSC_CHANNEL_S) && (channels != CSC_CHANNEL_A)) {
- /* Update saturation */
- sp_color_hsl_to_rgb_floatv (rgb0, getScaled(_a[0]), 0.0, getScaled(_a[2]));
- sp_color_hsl_to_rgb_floatv (rgbm, getScaled(_a[0]), 0.5, getScaled(_a[2]));
- sp_color_hsl_to_rgb_floatv (rgb1, getScaled(_a[0]), 1.0, getScaled(_a[2]));
- sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[1]),
- SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0),
- SP_RGBA32_F_COMPOSE (rgbm[0], rgbm[1], rgbm[2], 1.0),
- SP_RGBA32_F_COMPOSE (rgb1[0], rgb1[1], rgb1[2], 1.0));
- }
- if ((channels != CSC_CHANNEL_V) && (channels != CSC_CHANNEL_A)) {
- /* Update value */
- sp_color_hsl_to_rgb_floatv (rgb0, getScaled(_a[0]), getScaled(_a[1]), 0.0);
- sp_color_hsl_to_rgb_floatv (rgbm, getScaled(_a[0]), getScaled(_a[1]), 0.5);
- sp_color_hsl_to_rgb_floatv (rgb1, getScaled(_a[0]), getScaled(_a[1]), 1.0);
- sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[2]),
- SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0),
- SP_RGBA32_F_COMPOSE (rgbm[0], rgbm[1], rgbm[2], 1.0),
- SP_RGBA32_F_COMPOSE (rgb1[0], rgb1[1], rgb1[2], 1.0));
- }
- if (channels != CSC_CHANNEL_A) {
- /* Update alpha */
- sp_color_hsl_to_rgb_floatv (rgb0, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]));
- sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[3]),
- SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 0.0),
- SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 0.5),
- SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0));
- }
- break;
- case SP_COLOR_SCALES_MODE_CMYK:
- if ((channels != CSC_CHANNEL_C) && (channels != CSC_CHANNEL_CMYKA)) {
- /* Update C */
- sp_color_cmyk_to_rgb_floatv (rgb0, 0.0, getScaled(_a[1]), getScaled(_a[2]), getScaled(_a[3]));
- sp_color_cmyk_to_rgb_floatv (rgbm, 0.5, getScaled(_a[1]), getScaled(_a[2]), getScaled(_a[3]));
- sp_color_cmyk_to_rgb_floatv (rgb1, 1.0, getScaled(_a[1]), getScaled(_a[2]), getScaled(_a[3]));
- sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[0]),
- SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0),
- SP_RGBA32_F_COMPOSE (rgbm[0], rgbm[1], rgbm[2], 1.0),
- SP_RGBA32_F_COMPOSE (rgb1[0], rgb1[1], rgb1[2], 1.0));
- }
- if ((channels != CSC_CHANNEL_M) && (channels != CSC_CHANNEL_CMYKA)) {
- /* Update M */
- sp_color_cmyk_to_rgb_floatv (rgb0, getScaled(_a[0]), 0.0, getScaled(_a[2]), getScaled(_a[3]));
- sp_color_cmyk_to_rgb_floatv (rgbm, getScaled(_a[0]), 0.5, getScaled(_a[2]), getScaled(_a[3]));
- sp_color_cmyk_to_rgb_floatv (rgb1, getScaled(_a[0]), 1.0, getScaled(_a[2]), getScaled(_a[3]));
- sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[1]),
- SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0),
- SP_RGBA32_F_COMPOSE (rgbm[0], rgbm[1], rgbm[2], 1.0),
- SP_RGBA32_F_COMPOSE (rgb1[0], rgb1[1], rgb1[2], 1.0));
- }
- if ((channels != CSC_CHANNEL_Y) && (channels != CSC_CHANNEL_CMYKA)) {
- /* Update Y */
- sp_color_cmyk_to_rgb_floatv (rgb0, getScaled(_a[0]), getScaled(_a[1]), 0.0, getScaled(_a[3]));
- sp_color_cmyk_to_rgb_floatv (rgbm, getScaled(_a[0]), getScaled(_a[1]), 0.5, getScaled(_a[3]));
- sp_color_cmyk_to_rgb_floatv (rgb1, getScaled(_a[0]), getScaled(_a[1]), 1.0, getScaled(_a[3]));
- sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[2]),
- SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0),
- SP_RGBA32_F_COMPOSE (rgbm[0], rgbm[1], rgbm[2], 1.0),
- SP_RGBA32_F_COMPOSE (rgb1[0], rgb1[1], rgb1[2], 1.0));
- }
- if ((channels != CSC_CHANNEL_K) && (channels != CSC_CHANNEL_CMYKA)) {
- /* Update K */
- sp_color_cmyk_to_rgb_floatv (rgb0, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), 0.0);
- sp_color_cmyk_to_rgb_floatv (rgbm, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), 0.5);
- sp_color_cmyk_to_rgb_floatv (rgb1, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), 1.0);
- sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[3]),
- SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0),
- SP_RGBA32_F_COMPOSE (rgbm[0], rgbm[1], rgbm[2], 1.0),
- SP_RGBA32_F_COMPOSE (rgb1[0], rgb1[1], rgb1[2], 1.0));
- }
- if (channels != CSC_CHANNEL_CMYKA) {
- /* Update alpha */
- sp_color_cmyk_to_rgb_floatv (rgb0, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), getScaled(_a[3]));
- sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[4]),
- SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 0.0),
- SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 0.5),
- SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0));
- }
- break;
- default:
- g_warning ("file %s: line %d: Illegal color selector mode", __FILE__, __LINE__);
- break;
- }
-
- // Force the internal color to be updated
- if ( !_updating )
- {
- _recalcColor( TRUE );
- }
-
-#ifdef SPCS_PREVIEW
- rgba = sp_color_scales_get_rgba32 (cs);
- sp_color_preview_set_rgba32 (SP_COLOR_PREVIEW (_p), rgba);
-#endif
-}
-
-static const gchar *
-sp_color_scales_hue_map (void)
-{
- static gchar *map = NULL;
-
- if (!map) {
- gchar *p;
- gint h;
- map = g_new (gchar, 4 * 1024);
- p = map;
- for (h = 0; h < 1024; h++) {
- gfloat rgb[3];
- sp_color_hsl_to_rgb_floatv (rgb, h / 1024.0, 1.0, 0.5);
- *p++ = SP_COLOR_F_TO_U (rgb[0]);
- *p++ = SP_COLOR_F_TO_U (rgb[1]);
- *p++ = SP_COLOR_F_TO_U (rgb[2]);
- *p++ = 255;
- }
- }
-
- return map;
-}
-
-
diff --git a/src/widgets/sp-color-scales.h b/src/widgets/sp-color-scales.h
deleted file mode 100644
index 72cbafa2f..000000000
--- a/src/widgets/sp-color-scales.h
+++ /dev/null
@@ -1,102 +0,0 @@
-#ifndef SEEN_SP_COLOR_SCALES_H
-#define SEEN_SP_COLOR_SCALES_H
-
-#include <glib.h>
-
-#include <widgets/sp-color-selector.h>
-
-struct SPColorScales;
-struct SPColorScalesClass;
-struct SPColorSlider;
-
-typedef enum {
- SP_COLOR_SCALES_MODE_NONE = 0,
- SP_COLOR_SCALES_MODE_RGB = 1,
- SP_COLOR_SCALES_MODE_HSV = 2,
- SP_COLOR_SCALES_MODE_CMYK = 3
-} SPColorScalesMode;
-
-
-
-class ColorScales: public ColorSelector
-{
-public:
- static gfloat getScaled( const GtkAdjustment *a );
- static void setScaled( GtkAdjustment *a, gfloat v);
-
- ColorScales(SPColorSelector *csel);
- virtual ~ColorScales();
-
- virtual void init();
-
- virtual void setSubmode(guint submode);
- virtual guint getSubmode() const;
-
- void setMode(SPColorScalesMode mode);
- SPColorScalesMode getMode() const;
-
-
-protected:
- virtual void _colorChanged();
-
- static void _adjustmentAnyChanged(GtkAdjustment *adjustment, SPColorScales *cs);
- static void _sliderAnyGrabbed(SPColorSlider *slider, SPColorScales *cs);
- static void _sliderAnyReleased(SPColorSlider *slider, SPColorScales *cs);
- static void _sliderAnyChanged(SPColorSlider *slider, SPColorScales *cs);
- static void _adjustmentChanged(SPColorScales *cs, guint channel);
-
- void _getRgbaFloatv(gfloat *rgba);
- void _getCmykaFloatv(gfloat *cmyka);
- guint32 _getRgba32();
- void _updateSliders(guint channels);
- void _recalcColor(gboolean changing);
-
- void _setRangeLimit( gdouble upper );
-
- SPColorScalesMode _mode;
- gdouble _rangeLimit;
- gboolean _updating : 1;
- gboolean _dragging : 1;
- GtkAdjustment *_a[5]; /* Channel adjustments */
- GtkWidget *_s[5]; /* Channel sliders */
- GtkWidget *_b[5]; /* Spinbuttons */
- GtkWidget *_l[5]; /* Labels */
-
-private:
- // By default, disallow copy constructor and assignment operator
- ColorScales(ColorScales const &obj);
- ColorScales &operator=(ColorScales const &obj );
-};
-
-
-
-#define SP_TYPE_COLOR_SCALES (sp_color_scales_get_type())
-#define SP_COLOR_SCALES(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_COLOR_SCALES, SPColorScales))
-#define SP_COLOR_SCALES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_COLOR_SCALES, SPColorScalesClass))
-#define SP_IS_COLOR_SCALES(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_COLOR_SCALES))
-#define SP_IS_COLOR_SCALES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_COLOR_SCALES))
-
-struct SPColorScales {
- SPColorSelector parent;
-};
-
-struct SPColorScalesClass {
- SPColorSelectorClass parent_class;
-};
-
-GType sp_color_scales_get_type();
-
-GtkWidget *sp_color_scales_new();
-
-#endif /* !SEEN_SP_COLOR_SCALES_H */
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
diff --git a/src/widgets/sp-color-selector.cpp b/src/widgets/sp-color-selector.cpp
index e97c36431..dad0a18b0 100644
--- a/src/widgets/sp-color-selector.cpp
+++ b/src/widgets/sp-color-selector.cpp
@@ -6,6 +6,11 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
+
+#if GLIBMM_DISABLE_DEPRECATED && HAVE_GLIBMM_THREADS_H
+#include <glibmm/threads.h>
+#endif
+
#include <math.h>
#include <gtk/gtk.h>
#include <glibmm/i18n.h>
@@ -289,7 +294,7 @@ void ColorSelector::_updateInternals( const SPColor& color, gfloat alpha, gboole
(_held ? "CHANGED" : "DRAGGED" ),
color.toRGBA32( alpha ), (color.icc?color.icc->colorProfile.c_str():"<null>"), FOO_NAME(_csel));
#endif
- g_signal_emit(G_OBJECT(_csel), csel_signals[_held ? CHANGED : DRAGGED], 0);
+ g_signal_emit(G_OBJECT(_csel), csel_signals[_held ? DRAGGED : CHANGED], 0);
}
}
diff --git a/src/widgets/sp-color-selector.h b/src/widgets/sp-color-selector.h
index 30061774a..308a5519c 100644
--- a/src/widgets/sp-color-selector.h
+++ b/src/widgets/sp-color-selector.h
@@ -1,6 +1,14 @@
#ifndef SEEN_SP_COLOR_SELECTOR_H
#define SEEN_SP_COLOR_SELECTOR_H
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if GLIBMM_DISABLE_DEPRECATED && HAVE_GLIBMM_THREADS_H
+#include <glibmm/threads.h>
+#endif
+
#include <gtk/gtk.h>
#include "color.h"
diff --git a/src/widgets/sp-color-slider.cpp b/src/widgets/sp-color-slider.cpp
deleted file mode 100644
index ab7e2cd84..000000000
--- a/src/widgets/sp-color-slider.cpp
+++ /dev/null
@@ -1,749 +0,0 @@
-/*
- * A slider with colored background
- *
- * Author:
- * Lauris Kaplinski <lauris@kaplinski.com>
- * bulia byak <buliabyak@users.sf.net>
- *
- * Copyright (C) 2001-2002 Lauris Kaplinski
- *
- * This code is in public domain
- */
-
-#include <gtk/gtk.h>
-#include "sp-color-scales.h"
-#include "sp-color-slider.h"
-#include "preferences.h"
-
-#define SLIDER_WIDTH 96
-#define SLIDER_HEIGHT 8
-#define ARROW_SIZE 7
-
-enum {
- GRABBED,
- DRAGGED,
- RELEASED,
- CHANGED,
- LAST_SIGNAL
-};
-
-static void sp_color_slider_dispose(GObject *object);
-
-static void sp_color_slider_realize (GtkWidget *widget);
-static void sp_color_slider_size_request (GtkWidget *widget, GtkRequisition *requisition);
-
-#if GTK_CHECK_VERSION(3,0,0)
-static void sp_color_slider_get_preferred_width(GtkWidget *widget,
- gint *minimal_width,
- gint *natural_width);
-
-static void sp_color_slider_get_preferred_height(GtkWidget *widget,
- gint *minimal_height,
- gint *natural_height);
-#else
-static gboolean sp_color_slider_expose(GtkWidget *widget, GdkEventExpose *event);
-#endif
-
-static void sp_color_slider_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-
-static gboolean sp_color_slider_draw(GtkWidget *widget, cairo_t *cr);
-
-static gint sp_color_slider_button_press (GtkWidget *widget, GdkEventButton *event);
-static gint sp_color_slider_button_release (GtkWidget *widget, GdkEventButton *event);
-static gint sp_color_slider_motion_notify (GtkWidget *widget, GdkEventMotion *event);
-
-static void sp_color_slider_adjustment_changed (GtkAdjustment *adjustment, SPColorSlider *slider);
-static void sp_color_slider_adjustment_value_changed (GtkAdjustment *adjustment, SPColorSlider *slider);
-
-static const guchar *sp_color_slider_render_gradient (gint x0, gint y0, gint width, gint height,
- gint c[], gint dc[], guint b0, guint b1, guint mask);
-static const guchar *sp_color_slider_render_map (gint x0, gint y0, gint width, gint height,
- guchar *map, gint start, gint step, guint b0, guint b1, guint mask);
-
-static guint slider_signals[LAST_SIGNAL] = {0};
-
-G_DEFINE_TYPE(SPColorSlider, sp_color_slider, GTK_TYPE_WIDGET);
-
-static void sp_color_slider_class_init(SPColorSliderClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS(klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
-
- slider_signals[GRABBED] = g_signal_new ("grabbed",
- G_TYPE_FROM_CLASS(object_class),
- (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
- G_STRUCT_OFFSET (SPColorSliderClass, grabbed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- slider_signals[DRAGGED] = g_signal_new ("dragged",
- G_TYPE_FROM_CLASS(object_class),
- (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
- G_STRUCT_OFFSET (SPColorSliderClass, dragged),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- slider_signals[RELEASED] = g_signal_new ("released",
- G_TYPE_FROM_CLASS(object_class),
- (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
- G_STRUCT_OFFSET (SPColorSliderClass, released),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- slider_signals[CHANGED] = g_signal_new ("changed",
- G_TYPE_FROM_CLASS(object_class),
- (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
- G_STRUCT_OFFSET (SPColorSliderClass, changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- object_class->dispose = sp_color_slider_dispose;
-
- widget_class->realize = sp_color_slider_realize;
-#if GTK_CHECK_VERSION(3,0,0)
- widget_class->get_preferred_width = sp_color_slider_get_preferred_width;
- widget_class->get_preferred_height = sp_color_slider_get_preferred_height;
- widget_class->draw = sp_color_slider_draw;
-#else
- widget_class->size_request = sp_color_slider_size_request;
- widget_class->expose_event = sp_color_slider_expose;
-#endif
- widget_class->size_allocate = sp_color_slider_size_allocate;
-/* widget_class->draw_focus = sp_color_slider_draw_focus; */
-/* widget_class->draw_default = sp_color_slider_draw_default; */
-
- widget_class->button_press_event = sp_color_slider_button_press;
- widget_class->button_release_event = sp_color_slider_button_release;
- widget_class->motion_notify_event = sp_color_slider_motion_notify;
-}
-
-static void
-sp_color_slider_init (SPColorSlider *slider)
-{
- /* We are widget with window */
- gtk_widget_set_has_window (GTK_WIDGET(slider), TRUE);
-
- slider->dragging = FALSE;
-
- slider->adjustment = NULL;
- slider->value = 0.0;
-
- slider->c0[0] = 0x00;
- slider->c0[1] = 0x00;
- slider->c0[2] = 0x00;
- slider->c0[3] = 0xff;
-
- slider->cm[0] = 0xff;
- slider->cm[1] = 0x00;
- slider->cm[2] = 0x00;
- slider->cm[3] = 0xff;
-
- slider->c1[0] = 0xff;
- slider->c1[1] = 0xff;
- slider->c1[2] = 0xff;
- slider->c1[3] = 0xff;
-
- slider->b0 = 0x5f;
- slider->b1 = 0xa0;
- slider->bmask = 0x08;
-
- slider->map = NULL;
-}
-
-static void sp_color_slider_dispose(GObject *object)
-{
- SPColorSlider *slider = SP_COLOR_SLIDER (object);
-
- if (slider->adjustment) {
- g_signal_handlers_disconnect_matched (G_OBJECT (slider->adjustment), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, slider);
- g_object_unref (slider->adjustment);
- slider->adjustment = NULL;
- }
-
- if (G_OBJECT_CLASS(sp_color_slider_parent_class)->dispose)
- G_OBJECT_CLASS(sp_color_slider_parent_class)->dispose (object);
-}
-
-static void
-sp_color_slider_realize (GtkWidget *widget)
-{
- GdkWindowAttr attributes;
- gint attributes_mask;
- GtkAllocation allocation;
-
- gtk_widget_get_allocation(widget, &allocation);
- gtk_widget_set_realized (widget, TRUE);
-
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.x = allocation.x;
- attributes.y = allocation.y;
- attributes.width = allocation.width;
- attributes.height = allocation.height;
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes.visual = gdk_screen_get_system_visual(gdk_screen_get_default());
-
-#if !GTK_CHECK_VERSION(3,0,0)
- attributes.colormap = gdk_screen_get_system_colormap(gdk_screen_get_default());
-#endif
-
- attributes.event_mask = gtk_widget_get_events (widget);
- attributes.event_mask |= (GDK_EXPOSURE_MASK |
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK |
- GDK_POINTER_MOTION_MASK |
- GDK_ENTER_NOTIFY_MASK |
- GDK_LEAVE_NOTIFY_MASK);
-#if GTK_CHECK_VERSION(3,0,0)
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
-#else
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-#endif
-
- gtk_widget_set_window(widget,
- gdk_window_new(gtk_widget_get_parent_window(widget),
- &attributes, attributes_mask));
-
- gdk_window_set_user_data(gtk_widget_get_window(widget), widget);
-
-#if !GTK_CHECK_VERSION(3,0,0)
- // This doesn't do anything in GTK+ 3
- gtk_widget_set_style(widget,
- gtk_style_attach(gtk_widget_get_style(widget),
- gtk_widget_get_window(widget)));
-#endif
-}
-
-static void
-sp_color_slider_size_request (GtkWidget *widget, GtkRequisition *requisition)
-{
- GtkStyle *style = gtk_widget_get_style(widget);
- requisition->width = SLIDER_WIDTH + style->xthickness * 2;
- requisition->height = SLIDER_HEIGHT + style->ythickness * 2;
-}
-
-#if GTK_CHECK_VERSION(3,0,0)
-static void sp_color_slider_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width)
-{
- GtkRequisition requisition;
- sp_color_slider_size_request(widget, &requisition);
- *minimal_width = *natural_width = requisition.width;
-}
-
-static void sp_color_slider_get_preferred_height(GtkWidget *widget, gint *minimal_height, gint *natural_height)
-{
- GtkRequisition requisition;
- sp_color_slider_size_request(widget, &requisition);
- *minimal_height = *natural_height = requisition.height;
-}
-#endif
-
-static void
-sp_color_slider_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
-{
- gtk_widget_set_allocation(widget, allocation);
-
- if (gtk_widget_get_realized (widget)) {
- /* Resize GdkWindow */
- gdk_window_move_resize(gtk_widget_get_window(widget),
- allocation->x, allocation->y,
- allocation->width, allocation->height);
- }
-}
-
-#if !GTK_CHECK_VERSION(3,0,0)
-static gboolean sp_color_slider_expose(GtkWidget *widget, GdkEventExpose * /*event*/)
-{
- gboolean result = FALSE;
-
- if (gtk_widget_is_drawable(widget)) {
- GdkWindow *window = gtk_widget_get_window(widget);
- cairo_t *cr = gdk_cairo_create(window);
- result = sp_color_slider_draw(widget, cr);
- cairo_destroy(cr);
- }
-
- return result;
-}
-#endif
-
-static gint
-sp_color_slider_button_press (GtkWidget *widget, GdkEventButton *event)
-{
- SPColorSlider *slider;
-
- slider = SP_COLOR_SLIDER (widget);
-
- if (event->button == 1) {
- GtkAllocation allocation;
- gtk_widget_get_allocation(widget, &allocation);
- gint cx, cw;
- cx = gtk_widget_get_style(widget)->xthickness;
- cw = allocation.width - 2 * cx;
- g_signal_emit (G_OBJECT (slider), slider_signals[GRABBED], 0);
- slider->dragging = TRUE;
- slider->oldvalue = slider->value;
- ColorScales::setScaled( slider->adjustment, CLAMP ((gfloat) (event->x - cx) / cw, 0.0, 1.0) );
- g_signal_emit (G_OBJECT (slider), slider_signals[DRAGGED], 0);
-
-#if GTK_CHECK_VERSION(3,0,0)
- gdk_device_grab(gdk_event_get_device(reinterpret_cast<GdkEvent *>(event)),
- gtk_widget_get_window(widget),
- GDK_OWNERSHIP_NONE,
- FALSE,
- static_cast<GdkEventMask>(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK),
- NULL,
- event->time);
-#else
- gdk_pointer_grab(gtk_widget_get_window(widget), FALSE,
- static_cast<GdkEventMask>(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK),
- NULL, NULL, event->time);
-#endif
- }
-
- return FALSE;
-}
-
-static gint
-sp_color_slider_button_release (GtkWidget *widget, GdkEventButton *event)
-{
- SPColorSlider *slider;
-
- slider = SP_COLOR_SLIDER (widget);
-
- if (event->button == 1) {
-
-#if GTK_CHECK_VERSION(3,0,0)
- gdk_device_ungrab(gdk_event_get_device(reinterpret_cast<GdkEvent *>(event)),
- gdk_event_get_time(reinterpret_cast<GdkEvent *>(event)));
-#else
- gdk_pointer_ungrab (event->time);
-#endif
-
- slider->dragging = FALSE;
- g_signal_emit (G_OBJECT (slider), slider_signals[RELEASED], 0);
- if (slider->value != slider->oldvalue) g_signal_emit (G_OBJECT (slider), slider_signals[CHANGED], 0);
- }
-
- return FALSE;
-}
-
-static gint
-sp_color_slider_motion_notify (GtkWidget *widget, GdkEventMotion *event)
-{
- SPColorSlider *slider;
-
- slider = SP_COLOR_SLIDER (widget);
-
- if (slider->dragging) {
- gint cx, cw;
- GtkAllocation allocation;
- gtk_widget_get_allocation(widget, &allocation);
- cx = gtk_widget_get_style(widget)->xthickness;
- cw = allocation.width - 2 * cx;
- ColorScales::setScaled( slider->adjustment, CLAMP ((gfloat) (event->x - cx) / cw, 0.0, 1.0) );
- g_signal_emit (G_OBJECT (slider), slider_signals[DRAGGED], 0);
- }
-
- return FALSE;
-}
-
-GtkWidget *sp_color_slider_new(GtkAdjustment *adjustment)
-{
- SPColorSlider *slider = SP_COLOR_SLIDER(g_object_new(SP_TYPE_COLOR_SLIDER, NULL));
-
- sp_color_slider_set_adjustment (slider, adjustment);
-
- return GTK_WIDGET (slider);
-}
-
-void sp_color_slider_set_adjustment(SPColorSlider *slider, GtkAdjustment *adjustment)
-{
- g_return_if_fail (slider != NULL);
- g_return_if_fail (SP_IS_COLOR_SLIDER (slider));
-
- if (!adjustment) {
- adjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 1.0, 0.01, 0.0, 0.0));
- } else {
- gtk_adjustment_set_page_increment(adjustment, 0.0);
- gtk_adjustment_set_page_size(adjustment, 0.0);
- }
-
- if (slider->adjustment != adjustment) {
- if (slider->adjustment) {
- g_signal_handlers_disconnect_matched (G_OBJECT (slider->adjustment), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, slider);
- g_object_unref (slider->adjustment);
- }
-
- slider->adjustment = adjustment;
- g_object_ref (adjustment);
- g_object_ref_sink (adjustment);
-
- g_signal_connect (G_OBJECT (adjustment), "changed",
- G_CALLBACK (sp_color_slider_adjustment_changed), slider);
- g_signal_connect (G_OBJECT (adjustment), "value_changed",
- G_CALLBACK (sp_color_slider_adjustment_value_changed), slider);
-
- slider->value = ColorScales::getScaled( adjustment );
-
- sp_color_slider_adjustment_changed (adjustment, slider);
- }
-}
-
-void
-sp_color_slider_set_colors (SPColorSlider *slider, guint32 start, guint32 mid, guint32 end)
-{
- g_return_if_fail (slider != NULL);
- g_return_if_fail (SP_IS_COLOR_SLIDER (slider));
-
- // Remove any map, if set
- slider->map = 0;
-
- slider->c0[0] = start >> 24;
- slider->c0[1] = (start >> 16) & 0xff;
- slider->c0[2] = (start >> 8) & 0xff;
- slider->c0[3] = start & 0xff;
-
- slider->cm[0] = mid >> 24;
- slider->cm[1] = (mid >> 16) & 0xff;
- slider->cm[2] = (mid >> 8) & 0xff;
- slider->cm[3] = mid & 0xff;
-
- slider->c1[0] = end >> 24;
- slider->c1[1] = (end >> 16) & 0xff;
- slider->c1[2] = (end >> 8) & 0xff;
- slider->c1[3] = end & 0xff;
-
- gtk_widget_queue_draw (GTK_WIDGET (slider));
-}
-
-void
-sp_color_slider_set_map (SPColorSlider *slider, const guchar *map)
-{
- g_return_if_fail (slider != NULL);
- g_return_if_fail (SP_IS_COLOR_SLIDER (slider));
-
- slider->map = const_cast<guchar *>(map);
-
- gtk_widget_queue_draw (GTK_WIDGET (slider));
-}
-
-void
-sp_color_slider_set_background (SPColorSlider *slider, guint dark, guint light, guint size)
-{
- g_return_if_fail (slider != NULL);
- g_return_if_fail (SP_IS_COLOR_SLIDER (slider));
-
- slider->b0 = dark;
- slider->b1 = light;
- slider->bmask = size;
-
- gtk_widget_queue_draw (GTK_WIDGET (slider));
-}
-
-static void
-sp_color_slider_adjustment_changed (GtkAdjustment */*adjustment*/, SPColorSlider *slider)
-{
- gtk_widget_queue_draw (GTK_WIDGET (slider));
-}
-
-static void
-sp_color_slider_adjustment_value_changed (GtkAdjustment *adjustment, SPColorSlider *slider)
-{
- GtkWidget *widget;
-
- widget = GTK_WIDGET (slider);
-
- if (slider->value != ColorScales::getScaled( adjustment )) {
- gint cx, cy, cw, ch;
- GtkStyle *style = gtk_widget_get_style(widget);
- GtkAllocation allocation;
- gtk_widget_get_allocation(widget, &allocation);
- cx = style->xthickness;
- cy = style->ythickness;
- cw = allocation.width - 2 * cx;
- ch = allocation.height - 2 * cy;
- if ((gint) (ColorScales::getScaled( adjustment ) * cw) != (gint) (slider->value * cw)) {
- gint ax, ay;
- gfloat value;
- value = slider->value;
- slider->value = ColorScales::getScaled( adjustment );
- ax = (int)(cx + value * cw - ARROW_SIZE / 2 - 2);
- ay = cy;
- gtk_widget_queue_draw_area (widget, ax, ay, ARROW_SIZE + 4, ch);
- ax = (int)(cx + slider->value * cw - ARROW_SIZE / 2 - 2);
- ay = cy;
- gtk_widget_queue_draw_area (widget, ax, ay, ARROW_SIZE + 4, ch);
- } else {
- slider->value = ColorScales::getScaled( adjustment );
- }
- }
-}
-
-static gboolean sp_color_slider_draw(GtkWidget *widget, cairo_t *cr)
-{
- SPColorSlider *slider = SP_COLOR_SLIDER(widget);
-
- gboolean colorsOnTop = Inkscape::Preferences::get()->getBool("/options/workarounds/colorsontop", false);
-
- GtkAllocation allocation;
- gtk_widget_get_allocation(widget, &allocation);
-
-#if GTK_CHECK_VERSION(3,0,0)
- GtkStyleContext *context = gtk_widget_get_style_context(widget);
-#else
- GdkWindow *window = gtk_widget_get_window(widget);
- GtkStyle *style = gtk_widget_get_style(widget);
-#endif
-
- // Draw shadow
- if (colorsOnTop) {
-#if GTK_CHECK_VERSION(3,0,0)
- gtk_render_frame(context,
- cr,
- 0, 0,
- allocation.width, allocation.height);
-#else
- gtk_paint_shadow( style, window,
- gtk_widget_get_state(widget), GTK_SHADOW_IN,
- NULL, widget, "colorslider",
- 0, 0,
- allocation.width, allocation.height);
-#endif
- }
-
- /* Paintable part of color gradient area */
- GdkRectangle carea;
-
-#if GTK_CHECK_VERSION(3,0,0)
- GtkBorder padding;
-
- gtk_style_context_get_padding(context,
- gtk_widget_get_state_flags(widget),
- &padding);
-
- carea.x = padding.left;
- carea.y = padding.top;
-#else
- carea.x = style->xthickness;
- carea.y = style->ythickness;
-#endif
-
- carea.width = allocation.width - 2 * carea.x;
- carea.height = allocation.height - 2 * carea.y;
-
- if (slider->map) {
- /* Render map pixelstore */
- gint d = (1024 << 16) / carea.width;
- gint s = 0;
-
- const guchar *b = sp_color_slider_render_map(0, 0, carea.width, carea.height,
- slider->map, s, d,
- slider->b0, slider->b1, slider->bmask);
-
- if (b != NULL && carea.width > 0) {
- GdkPixbuf *pb = gdk_pixbuf_new_from_data (b, GDK_COLORSPACE_RGB,
- 0, 8, carea.width, carea.height, carea.width * 3, NULL, NULL);
-
- gdk_cairo_set_source_pixbuf(cr, pb, carea.x, carea.y);
- cairo_paint(cr);
- g_object_unref(pb);
- }
-
- } else {
- gint c[4], dc[4];
-
- /* Render gradient */
-
- // part 1: from c0 to cm
- if (carea.width > 0) {
- for (gint i = 0; i < 4; i++) {
- c[i] = slider->c0[i] << 16;
- dc[i] = ((slider->cm[i] << 16) - c[i]) / (carea.width/2);
- }
- guint wi = carea.width/2;
- const guchar *b = sp_color_slider_render_gradient(0, 0, wi, carea.height,
- c, dc, slider->b0, slider->b1, slider->bmask);
-
- /* Draw pixelstore 1 */
- if (b != NULL && wi > 0) {
- GdkPixbuf *pb = gdk_pixbuf_new_from_data (b, GDK_COLORSPACE_RGB,
- 0, 8, wi, carea.height, wi * 3, NULL, NULL);
-
- gdk_cairo_set_source_pixbuf(cr, pb, carea.x, carea.y);
- cairo_paint(cr);
- g_object_unref(pb);
- }
- }
-
- // part 2: from cm to c1
- if (carea.width > 0) {
- for (gint i = 0; i < 4; i++) {
- c[i] = slider->cm[i] << 16;
- dc[i] = ((slider->c1[i] << 16) - c[i]) / (carea.width/2);
- }
- guint wi = carea.width/2;
- const guchar *b = sp_color_slider_render_gradient(carea.width/2, 0, wi, carea.height,
- c, dc,
- slider->b0, slider->b1, slider->bmask);
-
- /* Draw pixelstore 2 */
- if (b != NULL && wi > 0) {
- GdkPixbuf *pb = gdk_pixbuf_new_from_data (b, GDK_COLORSPACE_RGB,
- 0, 8, wi, carea.height, wi * 3, NULL, NULL);
-
- gdk_cairo_set_source_pixbuf(cr, pb, carea.width/2 + carea.x, carea.y);
- cairo_paint(cr);
-
- g_object_unref(pb);
- }
- }
- }
-
- /* Draw shadow */
- if (!colorsOnTop) {
-#if GTK_CHECK_VERSION(3,0,0)
- gtk_render_frame(context,
- cr,
- 0, 0,
- allocation.width, allocation.height);
-#else
- gtk_paint_shadow( style, window,
- gtk_widget_get_state(widget), GTK_SHADOW_IN,
- NULL, widget, "colorslider",
- 0, 0,
- allocation.width, allocation.height);
-#endif
- }
-
- /* Draw arrow */
- gint x = (int)(slider->value * (carea.width - 1) - ARROW_SIZE / 2 + carea.x);
- gint y1 = carea.y;
- gint y2 = carea.y + carea.height - 1;
- cairo_set_line_width(cr, 1.0);
-
- // Define top arrow
- cairo_move_to(cr, x - 0.5, y1 + 0.5);
- cairo_line_to(cr, x + ARROW_SIZE - 0.5, y1 + 0.5);
- cairo_line_to(cr, x + (ARROW_SIZE-1)/2.0, y1 + ARROW_SIZE/2.0 + 0.5);
- cairo_line_to(cr, x - 0.5, y1 + 0.5);
-
- // Define bottom arrow
- cairo_move_to(cr, x - 0.5, y2 + 0.5);
- cairo_line_to(cr, x + ARROW_SIZE - 0.5, y2 + 0.5);
- cairo_line_to(cr, x + (ARROW_SIZE-1)/2.0, y2 - ARROW_SIZE/2.0 + 0.5);
- cairo_line_to(cr, x - 0.5, y2 + 0.5);
-
- // Render both arrows
- cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
- cairo_stroke_preserve(cr);
- cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
- cairo_fill(cr);
-
- return FALSE;
-}
-
-/* Colors are << 16 */
-
-static const guchar *
-sp_color_slider_render_gradient (gint x0, gint y0, gint width, gint height,
- gint c[], gint dc[], guint b0, guint b1, guint mask)
-{
- static guchar *buf = NULL;
- static gint bs = 0;
- guchar *dp;
- gint x, y;
- guint r, g, b, a;
-
- if (buf && (bs < width * height)) {
- g_free (buf);
- buf = NULL;
- }
- if (!buf) {
- buf = g_new (guchar, width * height * 3);
- bs = width * height;
- }
-
- dp = buf;
- r = c[0];
- g = c[1];
- b = c[2];
- a = c[3];
- for (x = x0; x < x0 + width; x++) {
- gint cr, cg, cb, ca;
- guchar *d;
- cr = r >> 16;
- cg = g >> 16;
- cb = b >> 16;
- ca = a >> 16;
- d = dp;
- for (y = y0; y < y0 + height; y++) {
- guint bg, fc;
- /* Background value */
- bg = ((x & mask) ^ (y & mask)) ? b0 : b1;
- fc = (cr - bg) * ca;
- d[0] = bg + ((fc + (fc >> 8) + 0x80) >> 8);
- fc = (cg - bg) * ca;
- d[1] = bg + ((fc + (fc >> 8) + 0x80) >> 8);
- fc = (cb - bg) * ca;
- d[2] = bg + ((fc + (fc >> 8) + 0x80) >> 8);
- d += 3 * width;
- }
- r += dc[0];
- g += dc[1];
- b += dc[2];
- a += dc[3];
- dp += 3;
- }
-
- return buf;
-}
-
-/* Positions are << 16 */
-
-static const guchar *
-sp_color_slider_render_map (gint x0, gint y0, gint width, gint height,
- guchar *map, gint start, gint step, guint b0, guint b1, guint mask)
-{
- static guchar *buf = NULL;
- static gint bs = 0;
- guchar *dp;
- gint x, y;
-
- if (buf && (bs < width * height)) {
- g_free (buf);
- buf = NULL;
- }
- if (!buf) {
- buf = g_new (guchar, width * height * 3);
- bs = width * height;
- }
-
- dp = buf;
- for (x = x0; x < x0 + width; x++) {
- gint cr, cg, cb, ca;
- guchar *d = dp;
- guchar *sp = map + 4 * (start >> 16);
- cr = *sp++;
- cg = *sp++;
- cb = *sp++;
- ca = *sp++;
- for (y = y0; y < y0 + height; y++) {
- guint bg, fc;
- /* Background value */
- bg = ((x & mask) ^ (y & mask)) ? b0 : b1;
- fc = (cr - bg) * ca;
- d[0] = bg + ((fc + (fc >> 8) + 0x80) >> 8);
- fc = (cg - bg) * ca;
- d[1] = bg + ((fc + (fc >> 8) + 0x80) >> 8);
- fc = (cb - bg) * ca;
- d[2] = bg + ((fc + (fc >> 8) + 0x80) >> 8);
- d += 3 * width;
- }
- dp += 3;
- start += step;
- }
-
- return buf;
-}
-
diff --git a/src/widgets/sp-color-slider.h b/src/widgets/sp-color-slider.h
deleted file mode 100644
index b81d62e41..000000000
--- a/src/widgets/sp-color-slider.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef __SP_COLOR_SLIDER_H__
-#define __SP_COLOR_SLIDER_H__
-
-/*
- * A slider with colored background
- *
- * Author:
- * Lauris Kaplinski <lauris@kaplinski.com>
- *
- * Copyright (C) 2001-2002 Lauris Kaplinski
- *
- * This code is in public domain
- */
-
-#include <gtk/gtk.h>
-
-#define SP_TYPE_COLOR_SLIDER (sp_color_slider_get_type ())
-#define SP_COLOR_SLIDER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_COLOR_SLIDER, SPColorSlider))
-#define SP_COLOR_SLIDER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_SLIDER, SPColorSliderClass))
-#define SP_IS_COLOR_SLIDER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_COLOR_SLIDER))
-#define SP_IS_COLOR_SLIDER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_SLIDER))
-
-struct SPColorSlider {
- GtkWidget widget;
-
- guint dragging : 1;
-
- GtkAdjustment *adjustment;
-
- gfloat value;
- gfloat oldvalue;
- guchar c0[4], cm[4], c1[4];
- guchar b0, b1;
- guchar bmask;
-
- gint mapsize;
- guchar *map;
-};
-
-struct SPColorSliderClass {
- GtkWidgetClass parent_class;
-
- void (* grabbed) (SPColorSlider *slider);
- void (* dragged) (SPColorSlider *slider);
- void (* released) (SPColorSlider *slider);
- void (* changed) (SPColorSlider *slider);
-};
-
-GType sp_color_slider_get_type (void);
-
-GtkWidget *sp_color_slider_new (GtkAdjustment *adjustment);
-
-void sp_color_slider_set_adjustment (SPColorSlider *slider, GtkAdjustment *adjustment);
-void sp_color_slider_set_colors (SPColorSlider *slider, guint32 start, guint32 mid, guint32 end);
-void sp_color_slider_set_map (SPColorSlider *slider, const guchar *map);
-void sp_color_slider_set_background (SPColorSlider *slider, guint dark, guint light, guint size);
-
-
-
-#endif
diff --git a/src/widgets/sp-color-wheel-selector.cpp b/src/widgets/sp-color-wheel-selector.cpp
deleted file mode 100644
index 6cfa7c14d..000000000
--- a/src/widgets/sp-color-wheel-selector.cpp
+++ /dev/null
@@ -1,348 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-#include <math.h>
-#include <gtk/gtk.h>
-#include <glibmm/i18n.h>
-#include "ui/dialog-events.h"
-#include "sp-color-wheel-selector.h"
-#include "sp-color-scales.h"
-#include "sp-color-slider.h"
-#include "sp-color-icc-selector.h"
-#include "../svg/svg-icc-color.h"
-#include "ui/widget/gimpcolorwheel.h"
-
-G_BEGIN_DECLS
-
-static void sp_color_wheel_selector_dispose(GObject *object);
-
-static void sp_color_wheel_selector_show_all (GtkWidget *widget);
-static void sp_color_wheel_selector_hide(GtkWidget *widget);
-
-
-G_END_DECLS
-
-#define XPAD 4
-#define YPAD 1
-
-G_DEFINE_TYPE(SPColorWheelSelector, sp_color_wheel_selector, SP_TYPE_COLOR_SELECTOR);
-
-static void sp_color_wheel_selector_class_init(SPColorWheelSelectorClass *klass)
-{
- static const gchar* nameset[] = {N_("Wheel"), 0};
- GObjectClass *object_class = G_OBJECT_CLASS(klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
- SPColorSelectorClass *selector_class = SP_COLOR_SELECTOR_CLASS (klass);
-
- selector_class->name = nameset;
- selector_class->submode_count = 1;
-
- object_class->dispose = sp_color_wheel_selector_dispose;
-
- widget_class->show_all = sp_color_wheel_selector_show_all;
- widget_class->hide = sp_color_wheel_selector_hide;
-}
-
-ColorWheelSelector::ColorWheelSelector( SPColorSelector* csel )
- : ColorSelector( csel ),
- _updating( FALSE ),
- _dragging( FALSE ),
- _adj(0),
- _wheel(0),
- _slider(0),
- _sbtn(0),
- _label(0)
-{
-}
-
-ColorWheelSelector::~ColorWheelSelector()
-{
- _adj = 0;
- _wheel = 0;
- _sbtn = 0;
- _label = 0;
-}
-
-void sp_color_wheel_selector_init (SPColorWheelSelector *cs)
-{
- SP_COLOR_SELECTOR(cs)->base = new ColorWheelSelector( SP_COLOR_SELECTOR(cs) );
-
- if ( SP_COLOR_SELECTOR(cs)->base )
- {
- SP_COLOR_SELECTOR(cs)->base->init();
- }
-}
-
-void ColorWheelSelector::init()
-{
- gint row = 0;
-
- _updating = FALSE;
- _dragging = FALSE;
-
-#if GTK_CHECK_VERSION(3,0,0)
- GtkWidget *t = gtk_grid_new();
-#else
- GtkWidget *t = gtk_table_new (5, 3, FALSE);
-#endif
-
- gtk_widget_show (t);
- gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 0);
-
- /* Create components */
- row = 0;
-
- _wheel = gimp_color_wheel_new();
- gtk_widget_show( _wheel );
-
-#if GTK_CHECK_VERSION(3,0,0)
- gtk_widget_set_halign(_wheel, GTK_ALIGN_FILL);
- gtk_widget_set_valign(_wheel, GTK_ALIGN_FILL);
- gtk_widget_set_hexpand(_wheel, TRUE);
- gtk_widget_set_vexpand(_wheel, TRUE);
- gtk_grid_attach(GTK_GRID(t), _wheel, 0, row, 3, 1);
-#else
- gtk_table_attach(GTK_TABLE(t), _wheel, 0, 3, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0);
-#endif
-
- row++;
-
- /* Label */
- _label = gtk_label_new_with_mnemonic (_("_A:"));
- gtk_misc_set_alignment (GTK_MISC (_label), 1.0, 0.5);
- gtk_widget_show (_label);
-
-#if GTK_CHECK_VERSION(3,0,0)
- #if GTK_CHECK_VERSION(3,12,0)
- gtk_widget_set_margin_start(_label, XPAD);
- gtk_widget_set_margin_end(_label, XPAD);
- #else
- gtk_widget_set_margin_left(_label, XPAD);
- gtk_widget_set_margin_right(_label, XPAD);
- #endif
- gtk_widget_set_margin_top(_label, YPAD);
- gtk_widget_set_margin_bottom(_label, YPAD);
- gtk_widget_set_halign(_label, GTK_ALIGN_FILL);
- gtk_widget_set_valign(_label, GTK_ALIGN_FILL);
- gtk_grid_attach(GTK_GRID(t), _label, 0, row, 1, 1);
-#else
- gtk_table_attach (GTK_TABLE (t), _label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD);
-#endif
-
- /* Adjustment */
- _adj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 255.0, 1.0, 10.0, 10.0));
-
- /* Slider */
- _slider = sp_color_slider_new (_adj);
- gtk_widget_set_tooltip_text (_slider, _("Alpha (opacity)"));
- gtk_widget_show (_slider);
-
-#if GTK_CHECK_VERSION(3,0,0)
- #if GTK_CHECK_VERSION(3,12,0)
- gtk_widget_set_margin_start(_slider, XPAD);
- gtk_widget_set_margin_end(_slider, XPAD);
- #else
- gtk_widget_set_margin_left(_slider, XPAD);
- gtk_widget_set_margin_right(_slider, XPAD);
- #endif
- gtk_widget_set_margin_top(_slider, YPAD);
- gtk_widget_set_margin_bottom(_slider, YPAD);
- gtk_widget_set_hexpand(_slider, TRUE);
- gtk_widget_set_halign(_slider, GTK_ALIGN_FILL);
- gtk_widget_set_valign(_slider, GTK_ALIGN_FILL);
- gtk_grid_attach(GTK_GRID(t), _slider, 1, row, 1, 1);
-#else
- gtk_table_attach(GTK_TABLE (t), _slider, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, XPAD, YPAD);
-#endif
-
- sp_color_slider_set_colors (SP_COLOR_SLIDER (_slider),
- SP_RGBA32_F_COMPOSE (1.0, 1.0, 1.0, 0.0),
- SP_RGBA32_F_COMPOSE (1.0, 1.0, 1.0, 0.5),
- SP_RGBA32_F_COMPOSE (1.0, 1.0, 1.0, 1.0));
-
-
- /* Spinbutton */
- _sbtn = gtk_spin_button_new (GTK_ADJUSTMENT (_adj), 1.0, 0);
- gtk_widget_set_tooltip_text (_sbtn, _("Alpha (opacity)"));
- sp_dialog_defocus_on_enter (_sbtn);
- gtk_label_set_mnemonic_widget (GTK_LABEL(_label), _sbtn);
- gtk_widget_show (_sbtn);
-
-#if GTK_CHECK_VERSION(3,0,0)
- #if GTK_CHECK_VERSION(3,12,0)
- gtk_widget_set_margin_start(_sbtn, XPAD);
- gtk_widget_set_margin_end(_sbtn, XPAD);
- #else
- gtk_widget_set_margin_left(_sbtn, XPAD);
- gtk_widget_set_margin_right(_sbtn, XPAD);
- #endif
- gtk_widget_set_margin_top(_sbtn, YPAD);
- gtk_widget_set_margin_bottom(_sbtn, YPAD);
- gtk_widget_set_halign(_sbtn, GTK_ALIGN_CENTER);
- gtk_widget_set_valign(_sbtn, GTK_ALIGN_CENTER);
- gtk_grid_attach(GTK_GRID(t), _sbtn, 2, row, 1, 1);
-#else
- gtk_table_attach (GTK_TABLE (t), _sbtn, 2, 3, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD);
-#endif
-
- /* Signals */
- g_signal_connect (G_OBJECT (_adj), "value_changed",
- G_CALLBACK (_adjustmentChanged), _csel);
-
- g_signal_connect (G_OBJECT (_slider), "grabbed",
- G_CALLBACK (_sliderGrabbed), _csel);
- g_signal_connect (G_OBJECT (_slider), "released",
- G_CALLBACK (_sliderReleased), _csel);
- g_signal_connect (G_OBJECT (_slider), "changed",
- G_CALLBACK (_sliderChanged), _csel);
-
- g_signal_connect( G_OBJECT(_wheel), "changed",
- G_CALLBACK (_wheelChanged), _csel );
-}
-
-static void sp_color_wheel_selector_dispose(GObject *object)
-{
- if (G_OBJECT_CLASS(sp_color_wheel_selector_parent_class)->dispose)
- G_OBJECT_CLASS(sp_color_wheel_selector_parent_class)->dispose(object);
-}
-
-static void
-sp_color_wheel_selector_show_all (GtkWidget *widget)
-{
- gtk_widget_show (widget);
-}
-
-static void sp_color_wheel_selector_hide(GtkWidget *widget)
-{
- gtk_widget_hide(widget);
-}
-
-GtkWidget *sp_color_wheel_selector_new()
-{
- SPColorWheelSelector *csel = SP_COLOR_WHEEL_SELECTOR(g_object_new (SP_TYPE_COLOR_WHEEL_SELECTOR, NULL));
-
- return GTK_WIDGET (csel);
-}
-
-/* Helpers for setting color value */
-
-static void preserve_icc(SPColor *color, SPColorWheelSelector *cs){
- ColorSelector* selector = static_cast<ColorSelector*>(SP_COLOR_SELECTOR(cs)->base);
- color->icc = selector->getColor().icc ? new SVGICCColor(*selector->getColor().icc) : 0;
-}
-
-void ColorWheelSelector::_colorChanged()
-{
-#ifdef DUMP_CHANGE_INFO
- g_message("ColorWheelSelector::_colorChanged( this=%p, %f, %f, %f, %f)", this, color.v.c[0], color.v.c[1], color.v.c[2], alpha );
-#endif
- _updating = TRUE;
- {
- float hsv[3] = {0,0,0};
- sp_color_rgb_to_hsv_floatv(hsv, _color.v.c[0], _color.v.c[1], _color.v.c[2]);
- gimp_color_wheel_set_color( GIMP_COLOR_WHEEL(_wheel), hsv[0], hsv[1], hsv[2] );
- }
-
- guint32 start = _color.toRGBA32( 0x00 );
- guint32 mid = _color.toRGBA32( 0x7f );
- guint32 end = _color.toRGBA32( 0xff );
-
- sp_color_slider_set_colors(SP_COLOR_SLIDER(_slider), start, mid, end);
-
- ColorScales::setScaled(_adj, _alpha);
-
- _updating = FALSE;
-}
-
-void ColorWheelSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorWheelSelector *cs )
-{
-// TODO check this. It looks questionable:
- // if a value is entered between 0 and 1 exclusive, normalize it to (int) 0..255 or 0..100
- gdouble value = gtk_adjustment_get_value (adjustment);
- gdouble upper = gtk_adjustment_get_upper (adjustment);
-
- if (value > 0.0 && value < 1.0) {
- gtk_adjustment_set_value( adjustment, floor (value * upper + 0.5) );
- }
-
- ColorWheelSelector* wheelSelector = static_cast<ColorWheelSelector*>(SP_COLOR_SELECTOR(cs)->base);
- if (wheelSelector->_updating) return;
-
- wheelSelector->_updating = TRUE;
-
- preserve_icc(&wheelSelector->_color, cs);
- wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging );
-
- wheelSelector->_updating = FALSE;
-}
-
-void ColorWheelSelector::_sliderGrabbed( SPColorSlider *slider, SPColorWheelSelector *cs )
-{
- (void)slider;
- ColorWheelSelector* wheelSelector = static_cast<ColorWheelSelector*>(SP_COLOR_SELECTOR(cs)->base);
- if (!wheelSelector->_dragging) {
- wheelSelector->_dragging = TRUE;
- wheelSelector->_grabbed();
-
- preserve_icc(&wheelSelector->_color, cs);
- wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging );
- }
-}
-
-void ColorWheelSelector::_sliderReleased( SPColorSlider *slider, SPColorWheelSelector *cs )
-{
- (void)slider;
- ColorWheelSelector* wheelSelector = static_cast<ColorWheelSelector*>(SP_COLOR_SELECTOR(cs)->base);
- if (wheelSelector->_dragging) {
- wheelSelector->_dragging = FALSE;
- wheelSelector->_released();
-
- preserve_icc(&wheelSelector->_color, cs);
- wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging );
- }
-}
-
-void ColorWheelSelector::_sliderChanged( SPColorSlider *slider, SPColorWheelSelector *cs )
-{
- (void)slider;
- ColorWheelSelector* wheelSelector = static_cast<ColorWheelSelector*>(SP_COLOR_SELECTOR(cs)->base);
-
- preserve_icc(&wheelSelector->_color, cs);
- wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging );
-}
-
-void ColorWheelSelector::_wheelChanged( GimpColorWheel *wheel, SPColorWheelSelector *cs )
-{
- ColorWheelSelector* wheelSelector = static_cast<ColorWheelSelector*>(SP_COLOR_SELECTOR(cs)->base);
-
- gdouble h = 0;
- gdouble s = 0;
- gdouble v = 0;
- gimp_color_wheel_get_color( wheel, &h, &s, &v );
-
- float rgb[3] = {0,0,0};
- sp_color_hsv_to_rgb_floatv (rgb, h, s, v);
-
- SPColor color(rgb[0], rgb[1], rgb[2]);
-
- guint32 start = color.toRGBA32( 0x00 );
- guint32 mid = color.toRGBA32( 0x7f );
- guint32 end = color.toRGBA32( 0xff );
-
- sp_color_slider_set_colors (SP_COLOR_SLIDER(wheelSelector->_slider), start, mid, end);
-
- preserve_icc(&color, cs);
- wheelSelector->_updateInternals( color, wheelSelector->_alpha, gimp_color_wheel_is_adjusting(wheel) );
-}
-
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
diff --git a/src/widgets/sp-color-wheel-selector.h b/src/widgets/sp-color-wheel-selector.h
deleted file mode 100644
index 12b060dbe..000000000
--- a/src/widgets/sp-color-wheel-selector.h
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef SEEN_SP_COLOR_WHEEL_SELECTOR_H
-#define SEEN_SP_COLOR_WHEEL_SELECTOR_H
-
-#include <gtk/gtk.h>
-
-#include "sp-color-selector.h"
-
-typedef struct _GimpColorWheel GimpColorWheel;
-struct SPColorSlider;
-struct SPColorWheelSelector;
-struct SPColorWheelSelectorClass;
-
-class ColorWheelSelector: public ColorSelector
-{
-public:
- ColorWheelSelector( SPColorSelector* csel );
- virtual ~ColorWheelSelector();
-
- virtual void init();
-
-protected:
- virtual void _colorChanged();
-
- static void _adjustmentChanged ( GtkAdjustment *adjustment, SPColorWheelSelector *cs );
-
- static void _sliderGrabbed( SPColorSlider *slider, SPColorWheelSelector *cs );
- static void _sliderReleased( SPColorSlider *slider, SPColorWheelSelector *cs );
- static void _sliderChanged( SPColorSlider *slider, SPColorWheelSelector *cs );
- static void _wheelChanged( GimpColorWheel *wheel, SPColorWheelSelector *cs );
-
- static void _fooChanged( GtkWidget foo, SPColorWheelSelector *cs );
-
- void _recalcColor( gboolean changing );
-
- gboolean _updating : 1;
- gboolean _dragging : 1;
- GtkAdjustment* _adj; // Channel adjustment
- GtkWidget* _wheel;
- GtkWidget* _slider;
- GtkWidget* _sbtn; // Spinbutton
- GtkWidget* _label; // Label
-
-private:
- // By default, disallow copy constructor and assignment operator
- ColorWheelSelector( const ColorWheelSelector& obj );
- ColorWheelSelector& operator=( const ColorWheelSelector& obj );
-};
-
-
-
-#define SP_TYPE_COLOR_WHEEL_SELECTOR (sp_color_wheel_selector_get_type ())
-#define SP_COLOR_WHEEL_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_COLOR_WHEEL_SELECTOR, SPColorWheelSelector))
-#define SP_COLOR_WHEEL_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_WHEEL_SELECTOR, SPColorWheelSelectorClass))
-#define SP_IS_COLOR_WHEEL_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_COLOR_WHEEL_SELECTOR))
-#define SP_IS_COLOR_WHEEL_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_WHEEL_SELECTOR))
-
-struct SPColorWheelSelector {
- SPColorSelector parent;
-};
-
-struct SPColorWheelSelectorClass {
- SPColorSelectorClass parent_class;
-};
-
-GType sp_color_wheel_selector_get_type (void);
-
-GtkWidget *sp_color_wheel_selector_new (void);
-
-
-
-#endif // SEEN_SP_COLOR_WHEEL_SELECTOR_H
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
diff --git a/src/widgets/swatch-selector.cpp b/src/widgets/swatch-selector.cpp
index 7178ad072..6f2807255 100644
--- a/src/widgets/swatch-selector.cpp
+++ b/src/widgets/swatch-selector.cpp
@@ -5,11 +5,11 @@
#include "document-undo.h"
#include "gradient-chemistry.h"
#include "gradient-selector.h"
-#include "sp-color-notebook.h"
#include "sp-stop.h"
#include "svg/css-ostringstream.h"
#include "svg/svg-color.h"
#include "verbs.h"
+#include "ui/widget/color-notebook.h"
#include "xml/node.h"
namespace Inkscape
@@ -20,8 +20,10 @@ namespace Widgets
SwatchSelector::SwatchSelector() :
Gtk::VBox(),
_gsel(0),
- _csel(0)
+ _updating_color(false)
{
+ using Inkscape::UI::Widget::ColorNotebook;
+
GtkWidget *gsel = sp_gradient_selector_new();
_gsel = SP_GRADIENT_SELECTOR(gsel);
g_object_set_data( G_OBJECT(gobj()), "base", this );
@@ -31,27 +33,18 @@ SwatchSelector::SwatchSelector() :
pack_start(*Gtk::manage(Glib::wrap(gsel)));
+ Gtk::Widget *color_selector = Gtk::manage(new ColorNotebook(_selected_color));
+ color_selector->show();
+ pack_start(*color_selector);
- GtkWidget *csel = sp_color_selector_new( SP_TYPE_COLOR_NOTEBOOK );
- _csel = SP_COLOR_SELECTOR(csel);
- Gtk::Widget *wrappedCSel = Glib::wrap(csel);
- wrappedCSel->show();
- //gtk_widget_show(csel);
-
-
- GObject *obj = G_OBJECT(csel);
-
- g_signal_connect(obj, "grabbed", G_CALLBACK(_grabbedCb), this);
- g_signal_connect(obj, "dragged", G_CALLBACK(_draggedCb), this);
- g_signal_connect(obj, "released", G_CALLBACK(_releasedCb), this);
- g_signal_connect(obj, "changed", G_CALLBACK(_changedCb), this);
-
- pack_start(*Gtk::manage(wrappedCSel));
+ _selected_color.signal_grabbed.connect(sigc::mem_fun(this, &SwatchSelector::_grabbedCb));
+ _selected_color.signal_dragged.connect(sigc::mem_fun(this, &SwatchSelector::_draggedCb));
+ _selected_color.signal_released.connect(sigc::mem_fun(this, &SwatchSelector::_releasedCb));
+ _selected_color.signal_changed.connect(sigc::mem_fun(this, &SwatchSelector::_changedCb));
}
SwatchSelector::~SwatchSelector()
{
- _csel = 0; // dtor should be handled by Gtk::manage()
_gsel = 0;
}
@@ -60,13 +53,13 @@ SPGradientSelector *SwatchSelector::getGradientSelector()
return _gsel;
}
-void SwatchSelector::_grabbedCb(SPColorSelector * /*csel*/, void * /*data*/)
+void SwatchSelector::_grabbedCb()
{
}
-void SwatchSelector::_draggedCb(SPColorSelector * /*csel*/, void *data)
+void SwatchSelector::_draggedCb()
{
- if (data) {
+ // if (data) {
//SwatchSelector *swsel = reinterpret_cast<SwatchSelector*>(data);
// TODO might have to block cycles
@@ -92,50 +85,46 @@ void SwatchSelector::_draggedCb(SPColorSelector * /*csel*/, void *data)
}
}
*/
- }
+ // }
}
-void SwatchSelector::_releasedCb(SPColorSelector * /*csel*/, void * /*data*/)
+void SwatchSelector::_releasedCb()
{
}
-void SwatchSelector::_changedCb(SPColorSelector */*csel*/, void *data)
+void SwatchSelector::_changedCb()
{
- if (data) {
- SwatchSelector *swsel = reinterpret_cast<SwatchSelector*>(data);
+ if (_updating_color) {
+ return;
+ }
+ // TODO might have to block cycles
+
+ if (_gsel && _gsel->getVector()) {
+ SPGradient *gradient = _gsel->getVector();
+ SPGradient *ngr = sp_gradient_ensure_vector_normalized(gradient);
+ if (ngr != gradient) {
+ /* Our master gradient has changed */
+ // TODO replace with proper - sp_gradient_vector_widget_load_gradient(GTK_WIDGET(swsel->_gsel), ngr);
+ }
- // TODO might have to block cycles
+ ngr->ensureVector();
- if (swsel->_gsel && swsel->_gsel->getVector()) {
- SPGradient *gradient = swsel->_gsel->getVector();
- SPGradient *ngr = sp_gradient_ensure_vector_normalized(gradient);
- if (ngr != gradient) {
- /* Our master gradient has changed */
- // TODO replace with proper - sp_gradient_vector_widget_load_gradient(GTK_WIDGET(swsel->_gsel), ngr);
- }
- ngr->ensureVector();
+ SPStop* stop = ngr->getFirstStop();
+ if (stop) {
+ SPColor color = _selected_color.color();
+ gfloat alpha = _selected_color.alpha();
+ guint32 rgb = color.toRGBA32( 0x00 );
+ // TODO replace with generic shared code that also handles icc-color
+ Inkscape::CSSOStringStream os;
+ gchar c[64];
+ sp_svg_write_color(c, sizeof(c), rgb);
+ os << "stop-color:" << c << ";stop-opacity:" << static_cast<gdouble>(alpha) <<";";
+ stop->getRepr()->setAttribute("style", os.str().c_str());
- SPStop* stop = ngr->getFirstStop();
- if (stop) {
- SPColor color;
- float alpha = 0;
- guint32 rgb = 0;
-
- swsel->_csel->base->getColorAlpha( color, alpha );
- rgb = color.toRGBA32( 0x00 );
-
- // TODO replace with generic shared code that also handles icc-color
- Inkscape::CSSOStringStream os;
- gchar c[64];
- sp_svg_write_color(c, sizeof(c), rgb);
- os << "stop-color:" << c << ";stop-opacity:" << static_cast<gdouble>(alpha) <<";";
- stop->getRepr()->setAttribute("style", os.str().c_str());
-
- DocumentUndo::done(ngr->document, SP_VERB_CONTEXT_GRADIENT,
- _("Change swatch color"));
- }
+ DocumentUndo::done(ngr->document, SP_VERB_CONTEXT_GRADIENT,
+ _("Change swatch color"));
}
}
}
@@ -173,11 +162,10 @@ void SwatchSelector::setVector(SPDocument */*doc*/, SPGradient *vector)
SPStop* stop = vector->getFirstStop();
guint32 const colorVal = stop->get_rgba32();
- _csel->base->setAlpha(SP_RGBA32_A_F(colorVal));
- SPColor color( SP_RGBA32_R_F(colorVal), SP_RGBA32_G_F(colorVal), SP_RGBA32_B_F(colorVal) );
- // set its color, from the stored array
- _csel->base->setColor( color );
- gtk_widget_show_all( GTK_WIDGET(_csel) );
+ _updating_color = true;
+ _selected_color.setValue(colorVal);
+ _updating_color = false;
+ // gtk_widget_show_all( GTK_WIDGET(_csel) );
} else {
//gtk_widget_hide( GTK_WIDGET(_csel) );
}
diff --git a/src/widgets/swatch-selector.h b/src/widgets/swatch-selector.h
index 4b7aa483f..16a8cfac8 100644
--- a/src/widgets/swatch-selector.h
+++ b/src/widgets/swatch-selector.h
@@ -2,6 +2,7 @@
#define SEEN_SP_SWATCH_SELECTOR_H
#include <gtkmm/box.h>
+#include "ui/selected-color.h"
class SPDocument;
class SPGradient;
@@ -29,13 +30,14 @@ public:
SPGradientSelector *getGradientSelector();
private:
- static void _grabbedCb(SPColorSelector *csel, void *data);
- static void _draggedCb(SPColorSelector *csel, void *data);
- static void _releasedCb(SPColorSelector *csel, void *data);
- static void _changedCb(SPColorSelector *csel, void *data);
+ void _grabbedCb();
+ void _draggedCb();
+ void _releasedCb();
+ void _changedCb();
SPGradientSelector *_gsel;
- SPColorSelector *_csel;
+ Inkscape::UI::SelectedColor _selected_color;
+ bool _updating_color;
};