summaryrefslogtreecommitdiffstats
path: root/src/extension
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2015-06-25 16:15:05 +0000
committerJabiertxof <jtx@jtx.marker.es>2015-06-25 16:15:05 +0000
commit5c2d982cc636ee4e2bc12703c01c86e245dd821f (patch)
tree6e6f22800c7d38314e14eccd486b65c3c4286d81 /src/extension
parentupdate to trunk (diff)
parentFix for the bug 1468396 (diff)
downloadinkscape-5c2d982cc636ee4e2bc12703c01c86e245dd821f.tar.gz
inkscape-5c2d982cc636ee4e2bc12703c01c86e245dd821f.zip
update to trunk
(bzr r13645.1.94)
Diffstat (limited to 'src/extension')
-rw-r--r--src/extension/internal/cairo-render-context.cpp17
-rw-r--r--src/extension/internal/emf-print.cpp8
-rw-r--r--src/extension/internal/filter/color.h2
-rw-r--r--src/extension/internal/pdfinput/pdf-input.cpp203
-rw-r--r--src/extension/internal/pdfinput/pdf-input.h13
-rw-r--r--src/extension/internal/pdfinput/pdf-parser.cpp47
-rw-r--r--src/extension/internal/pdfinput/svg-builder.cpp36
-rw-r--r--src/extension/internal/pdfinput/svg-builder.h17
-rw-r--r--src/extension/internal/text_reassemble.c12
-rw-r--r--src/extension/internal/wmf-inout.cpp6
-rw-r--r--src/extension/internal/wmf-print.cpp4
-rw-r--r--src/extension/param/color.cpp71
-rw-r--r--src/extension/param/color.h9
-rw-r--r--src/extension/param/parameter.cpp7
14 files changed, 270 insertions, 182 deletions
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp
index 27e34dbcf..c3e416184 100644
--- a/src/extension/internal/cairo-render-context.cpp
+++ b/src/extension/internal/cairo-render-context.cpp
@@ -1008,17 +1008,16 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver
ps2user = Geom::identity();
pcs2dev = Geom::identity();
- double x = pattern_x(pat);
- double y = pattern_y(pat);
- double width = pattern_width(pat);
- double height = pattern_height(pat);
+ double x = pat->x();
+ double y = pat->y();
+ double width = pat->width();
+ double height = pat->height();
double bbox_width_scaler;
double bbox_height_scaler;
TRACE(("%f x %f pattern\n", width, height));
- if (pbox && pattern_patternUnits(pat) == SP_PATTERN_UNITS_OBJECTBOUNDINGBOX) {
- //Geom::Affine bbox2user (pbox->x1 - pbox->x0, 0.0, 0.0, pbox->y1 - pbox->y0, pbox->x0, pbox->y0);
+ if (pbox && pat->patternUnits() == SPPattern::UNITS_OBJECTBOUNDINGBOX) {
bbox_width_scaler = pbox->width();
bbox_height_scaler = pbox->height();
ps2user[4] = x * bbox_width_scaler + pbox->left();
@@ -1031,13 +1030,13 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver
}
// apply pattern transformation
- Geom::Affine pattern_transform(pattern_patternTransform(pat));
+ Geom::Affine pattern_transform(pat->getTransform());
ps2user *= pattern_transform;
Geom::Point ori (ps2user[4], ps2user[5]);
// create pattern contents coordinate system
if (pat->viewBox_set) {
- Geom::Rect view_box = *pattern_viewBox(pat);
+ Geom::Rect view_box = *pat->viewbox();
double x, y, w, h;
x = 0;
@@ -1050,7 +1049,7 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver
pcs2dev[3] = h / view_box.height();
pcs2dev[4] = x - view_box.left() * pcs2dev[0];
pcs2dev[5] = y - view_box.top() * pcs2dev[3];
- } else if (pbox && pattern_patternContentUnits(pat) == SP_PATTERN_UNITS_OBJECTBOUNDINGBOX) {
+ } else if (pbox && pat->patternContentUnits() == SPPattern::UNITS_OBJECTBOUNDINGBOX) {
pcs2dev[0] = pbox->width();
pcs2dev[3] = pbox->height();
}
diff --git a/src/extension/internal/emf-print.cpp b/src/extension/internal/emf-print.cpp
index ed3ae158a..40d0955e3 100644
--- a/src/extension/internal/emf-print.cpp
+++ b/src/extension/internal/emf-print.cpp
@@ -388,8 +388,8 @@ int PrintEmf::create_brush(SPStyle const *style, PU_COLORREF fcolor)
} else if (SP_IS_PATTERN(SP_STYLE_FILL_SERVER(style))) { // must be paint-server
SPPaintServer *paintserver = style->fill.value.href->getObject();
SPPattern *pat = SP_PATTERN(paintserver);
- double dwidth = pattern_width(pat);
- double dheight = pattern_height(pat);
+ double dwidth = pat->width();
+ double dheight = pat->height();
width = dwidth;
height = dheight;
brush_classify(pat, 0, &pixbuf, &hatchType, &hatchColor, &bkColor);
@@ -573,8 +573,8 @@ int PrintEmf::create_pen(SPStyle const *style, const Geom::Affine &transform)
if (SP_IS_PATTERN(SP_STYLE_STROKE_SERVER(style))) { // must be paint-server
SPPaintServer *paintserver = style->stroke.value.href->getObject();
SPPattern *pat = SP_PATTERN(paintserver);
- double dwidth = pattern_width(pat);
- double dheight = pattern_height(pat);
+ double dwidth = pat->width();
+ double dheight = pat->height();
width = dwidth;
height = dheight;
brush_classify(pat, 0, &pixbuf, &hatchType, &hatchColor, &bkColor);
diff --git a/src/extension/internal/filter/color.h b/src/extension/internal/filter/color.h
index c3c26bf8b..b9c76615c 100644
--- a/src/extension/internal/filter/color.h
+++ b/src/extension/internal/filter/color.h
@@ -258,7 +258,7 @@ public:
"<param name=\"type\" gui-text=\"" N_("Blindness type:") "\" type=\"enum\">\n"
"<_item value=\"0.618 0.32 0.062 0 0 0.163 0.775 0.062 0 0 0.163 0.32 0.516 0 0 0 0 0 1 0 \">" N_("Rod monochromacy (atypical achromatopsia)") "</_item>\n"
"<_item value=\"0.299 0.587 0.114 0 0 0.299 0.587 0.114 0 0 0.299 0.587 0.114 0 0 0 0 0 1 0 \">" N_("Cone monochromacy (typical achromatopsia)") "</_item>\n"
- "<_item value=\"0.8 0.2 0 0 0 0.2583 0.74167 0 0 0 0 0.14167 0.85833 0 0 0 0 0 1 0 \">" N_("Geen weak (deuteranomaly)") "</_item>\n"
+ "<_item value=\"0.8 0.2 0 0 0 0.2583 0.74167 0 0 0 0 0.14167 0.85833 0 0 0 0 0 1 0 \">" N_("Green weak (deuteranomaly)") "</_item>\n"
"<_item value=\"0.625 0.375 0 0 0 0.7 0.3 0 0 0 0 0.3 0.7 0 0 0 0 0 1 0 \">" N_("Green blind (deuteranopia)") "</_item>\n"
"<_item value=\"0.8166 0.1833 0 0 0 0.333 0.666 0 0 0 0 0.125 0.875 0 0 0 0 0 1 0 \">" N_("Red weak (protanomaly)") "</_item>\n"
"<_item value=\"0.566 0.43333 0 0 0 0.55833 0.4416 0 0 0 0 0.24167 0.75833 0 0 0 0 0 1 0 \">" N_("Red blind (protanopia)") "</_item>\n"
diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp
index 148d2dcba..363061734 100644
--- a/src/extension/internal/pdfinput/pdf-input.cpp
+++ b/src/extension/internal/pdfinput/pdf-input.cpp
@@ -36,8 +36,14 @@
#include <gtkmm/comboboxtext.h>
#include <gtkmm/drawingarea.h>
#include <gtkmm/frame.h>
+#include <gtkmm/radiobutton.h>
#include <gtkmm/scale.h>
+#if WITH_GTKMM_3_0
+#include <glibmm/convert.h>
+#include <glibmm/miscutils.h>
+#endif
+
#include "extension/system.h"
#include "extension/input.h"
#include "svg-builder.h"
@@ -81,7 +87,6 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/)
_poppler_doc = NULL;
#endif // HAVE_POPPLER_CAIRO
_pdf_doc = doc;
-
cancelbutton = Gtk::manage(new class Gtk::Button(Gtk::StockID("gtk-cancel")));
okbutton = Gtk::manage(new class Gtk::Button(Gtk::StockID("gtk-ok")));
_labelSelect = Gtk::manage(new class Gtk::Label(_("Select page:")));
@@ -125,8 +130,13 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/)
_labelPrecisionWarning = Gtk::manage(new class Gtk::Label(_("<b>Note</b>: setting the precision too high may result in a large SVG file and slow performance.")));
#ifdef HAVE_POPPLER_CAIRO
- _importviaPopplerCheck = Gtk::manage(new class Gtk::CheckButton(_("import via Poppler")));
+ Gtk::RadioButton::Group group;
+ _importViaPoppler = Gtk::manage(new class Gtk::RadioButton(group,_("Poppler/Cairo import")));
+ _labelViaPoppler = Gtk::manage(new class Gtk::Label(_("Import via external library. Text consists of groups containing cloned glyphs where each glyph is a path. Images are stored internally. Meshes cause entire document to be rendered as a raster image.")));
+ _importViaInternal = Gtk::manage(new class Gtk::RadioButton(group,_("Internal import")));
+ _labelViaInternal = Gtk::manage(new class Gtk::Label(_("Import via internal (Poppler derived) library. Text is stored as text but white space is missing. Meshes are converted to tiles, the number depends on the precision set below.")));
#endif
+
#if WITH_GTKMM_3_0
_fallbackPrecisionSlider_adj = Gtk::Adjustment::create(2, 1, 256, 1, 10, 10);
_fallbackPrecisionSlider = Gtk::manage(new class Gtk::Scale(_fallbackPrecisionSlider_adj));
@@ -139,13 +149,15 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/)
hbox6 = Gtk::manage(new class Gtk::HBox(false, 4));
// Text options
- _labelText = Gtk::manage(new class Gtk::Label(_("Text handling:")));
- _textHandlingCombo = Gtk::manage(new class Gtk::ComboBoxText());
- _textHandlingCombo->append(_("Import text as text"));
- _textHandlingCombo->set_active_text(_("Import text as text"));
+ // _labelText = Gtk::manage(new class Gtk::Label(_("Text handling:")));
+ // _textHandlingCombo = Gtk::manage(new class Gtk::ComboBoxText());
+ // _textHandlingCombo->append(_("Import text as text"));
+ // _textHandlingCombo->set_active_text(_("Import text as text"));
+ // hbox5 = Gtk::manage(new class Gtk::HBox(false, 4));
+
+ // Font option
_localFontsCheck = Gtk::manage(new class Gtk::CheckButton(_("Replace PDF fonts by closest-named installed fonts")));
- hbox5 = Gtk::manage(new class Gtk::HBox(false, 4));
_embedImagesCheck = Gtk::manage(new class Gtk::CheckButton(_("Embed images")));
vbox3 = Gtk::manage(new class Gtk::VBox(false, 4));
_importSettingsFrame = Gtk::manage(new class Inkscape::UI::Widget::Frame(_("Import settings")));
@@ -202,12 +214,19 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/)
_labelPrecisionWarning->set_line_wrap(true);
_labelPrecisionWarning->set_use_markup(true);
_labelPrecisionWarning->set_selectable(false);
+
#ifdef HAVE_POPPLER_CAIRO
- _importviaPopplerCheck->set_can_focus();
- _importviaPopplerCheck->set_relief(Gtk::RELIEF_NORMAL);
- _importviaPopplerCheck->set_mode(true);
- _importviaPopplerCheck->set_active(false);
+ _importViaPoppler->set_can_focus();
+ _importViaPoppler->set_relief(Gtk::RELIEF_NORMAL);
+ _importViaPoppler->set_mode(true);
+ _importViaPoppler->set_active(false);
+ _importViaInternal->set_can_focus();
+ _importViaInternal->set_relief(Gtk::RELIEF_NORMAL);
+ _importViaInternal->set_mode(true);
+ _labelViaPoppler->set_line_wrap(true);
+ _labelViaInternal->set_line_wrap(true);
#endif
+
_fallbackPrecisionSlider->set_size_request(180,-1);
_fallbackPrecisionSlider->set_can_focus();
_fallbackPrecisionSlider->set_inverted(false);
@@ -223,14 +242,14 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/)
_labelPrecisionComment->set_selectable(false);
hbox6->pack_start(*_fallbackPrecisionSlider, Gtk::PACK_SHRINK, 4);
hbox6->pack_start(*_labelPrecisionComment, Gtk::PACK_SHRINK, 0);
- _labelText->set_alignment(0.5,0.5);
- _labelText->set_padding(4,0);
- _labelText->set_justify(Gtk::JUSTIFY_LEFT);
- _labelText->set_line_wrap(false);
- _labelText->set_use_markup(false);
- _labelText->set_selectable(false);
- hbox5->pack_start(*_labelText, Gtk::PACK_SHRINK, 0);
- hbox5->pack_start(*_textHandlingCombo, Gtk::PACK_SHRINK, 0);
+ // _labelText->set_alignment(0.5,0.5);
+ // _labelText->set_padding(4,0);
+ // _labelText->set_justify(Gtk::JUSTIFY_LEFT);
+ // _labelText->set_line_wrap(false);
+ // _labelText->set_use_markup(false);
+ // _labelText->set_selectable(false);
+ // hbox5->pack_start(*_labelText, Gtk::PACK_SHRINK, 0);
+ // hbox5->pack_start(*_textHandlingCombo, Gtk::PACK_SHRINK, 0);
_localFontsCheck->set_can_focus();
_localFontsCheck->set_relief(Gtk::RELIEF_NORMAL);
_localFontsCheck->set_mode(true);
@@ -240,14 +259,17 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/)
_embedImagesCheck->set_mode(true);
_embedImagesCheck->set_active(true);
#ifdef HAVE_POPPLER_CAIRO
- vbox3->pack_start(*_importviaPopplerCheck, Gtk::PACK_SHRINK, 0);
+ vbox3->pack_start(*_importViaPoppler, Gtk::PACK_SHRINK, 0);
+ vbox3->pack_start(*_labelViaPoppler, Gtk::PACK_SHRINK, 0);
+ vbox3->pack_start(*_importViaInternal, Gtk::PACK_SHRINK, 0);
+ vbox3->pack_start(*_labelViaInternal, Gtk::PACK_SHRINK, 0);
#endif
+ vbox3->pack_start(*_localFontsCheck, Gtk::PACK_SHRINK, 0);
+ vbox3->pack_start(*_embedImagesCheck, Gtk::PACK_SHRINK, 0);
vbox3->pack_start(*_labelPrecision, Gtk::PACK_SHRINK, 0);
vbox3->pack_start(*hbox6, Gtk::PACK_SHRINK, 0);
vbox3->pack_start(*_labelPrecisionWarning, Gtk::PACK_SHRINK, 0);
- vbox3->pack_start(*hbox5, Gtk::PACK_SHRINK, 4);
- vbox3->pack_start(*_localFontsCheck, Gtk::PACK_SHRINK, 0);
- vbox3->pack_start(*_embedImagesCheck, Gtk::PACK_SHRINK, 0);
+ // vbox3->pack_start(*hbox5, Gtk::PACK_SHRINK, 4);
_importSettingsFrame->add(*vbox3);
_importSettingsFrame->set_border_width(4);
vbox1->pack_start(*_pageSettingsFrame, Gtk::PACK_EXPAND_PADDING, 0);
@@ -273,36 +295,9 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/)
this->property_destroy_with_parent().set_value(false);
this->add_action_widget(*cancelbutton, -6);
this->add_action_widget(*okbutton, -5);
- cancelbutton->show();
- okbutton->show();
- _labelSelect->show();
- _pageNumberSpin->show();
- _labelTotalPages->show();
- hbox2->show();
- _cropCheck->show();
- _cropTypeCombo->show();
- hbox3->show();
- vbox2->show();
- _pageSettingsFrame->show();
- _labelPrecision->show();
- _labelPrecisionWarning->show();
-#ifdef HAVE_POPPLER_CAIRO
- _importviaPopplerCheck->show();
-#endif
- _fallbackPrecisionSlider->show();
- _labelPrecisionComment->show();
- hbox6->show();
- _labelText->show();
- _textHandlingCombo->show();
- hbox5->show();
- _localFontsCheck->show();
- _embedImagesCheck->show();
- vbox3->show();
- _importSettingsFrame->show();
- vbox1->show();
- _previewArea->show();
- hbox1->show();
+ this->show_all();
+
// Connect signals
#if WITH_GTKMM_3_0
_previewArea->signal_draw().connect(sigc::mem_fun(*this, &PdfImportDialog::_onDraw));
@@ -313,17 +308,28 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/)
_pageNumberSpin_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PdfImportDialog::_onPageNumberChanged));
_cropCheck->signal_toggled().connect(sigc::mem_fun(*this, &PdfImportDialog::_onToggleCropping));
_fallbackPrecisionSlider_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PdfImportDialog::_onPrecisionChanged));
+#ifdef HAVE_POPPLER_CAIRO
+ _importViaPoppler->signal_toggled().connect(sigc::mem_fun(*this, &PdfImportDialog::_onToggleImport));
+#endif
_render_thumb = false;
#ifdef HAVE_POPPLER_CAIRO
_cairo_surface = NULL;
_render_thumb = true;
+
// Create PopplerDocument
- gchar *doc_uri = g_filename_to_uri(_pdf_doc->getFileName()->getCString(),NULL,NULL);
- if (doc_uri) {
- _poppler_doc = poppler_document_new_from_file(doc_uri, NULL, NULL);
- g_free(doc_uri);
+ Glib::ustring filename = _pdf_doc->getFileName()->getCString();
+ if (!Glib::path_is_absolute(filename)) {
+ filename = Glib::build_filename(Glib::get_current_dir(),filename);
+ }
+ Glib::ustring full_uri = Glib::filename_to_uri(filename);
+
+ if (!full_uri.empty()) {
+ _poppler_doc = poppler_document_new_from_file(full_uri.c_str(), NULL, NULL);
}
+
+ // Set sensitivity of some widgets based on selected import type.
+ _onToggleImport();
#endif
// Set default preview size
@@ -373,11 +379,11 @@ int PdfImportDialog::getSelectedPage() {
return _current_page;
}
-int PdfImportDialog::getImportMethod() {
+bool PdfImportDialog::getImportMethod() {
#ifdef HAVE_POPPLER_CAIRO
- return (_importviaPopplerCheck->get_active()) ? 1 : 0;
+ return _importViaPoppler->get_active();
#else
- return 0;
+ return false;
#endif
}
@@ -413,7 +419,7 @@ void PdfImportDialog::getImportSettings(Inkscape::XML::Node *prefs) {
prefs->setAttribute("embedImages", "0");
}
#ifdef HAVE_POPPLER_CAIRO
- if (_importviaPopplerCheck->get_active()) {
+ if (_importViaPoppler->get_active()) {
prefs->setAttribute("importviapoppler", "1");
} else {
prefs->setAttribute("importviapoppler", "0");
@@ -454,6 +460,23 @@ void PdfImportDialog::_onPageNumberChanged() {
}
#ifdef HAVE_POPPLER_CAIRO
+void PdfImportDialog::_onToggleImport() {
+ if( _importViaPoppler->get_active() ) {
+ hbox3->set_sensitive(false);
+ _localFontsCheck->set_sensitive(false);
+ _embedImagesCheck->set_sensitive(false);
+ hbox6->set_sensitive(false);
+ } else {
+ hbox3->set_sensitive();
+ _localFontsCheck->set_sensitive();
+ _embedImagesCheck->set_sensitive();
+ hbox6->set_sensitive();
+ }
+}
+#endif
+
+
+#ifdef HAVE_POPPLER_CAIRO
/**
* \brief Copies image data from a Cairo surface to a pixbuf
*
@@ -673,8 +696,13 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
globalParams = new GlobalParams();
#endif // ENABLE_OSX_APP_LOCATIONS
}
- // poppler does not use glib g_open. So on win32 we must use unicode call. code was copied from glib gstdio.c
+
+
+ // PDFDoc is from poppler. PDFDoc is used for preview and for native import.
+
#ifndef WIN32
+ // poppler does not use glib g_open. So on win32 we must use unicode call. code was copied from
+ // glib gstdio.c
GooString *filename_goo = new GooString(uri);
PDFDoc *pdf_doc = new PDFDoc(filename_goo, NULL, NULL, NULL); // TODO: Could ask for password
//delete filename_goo;
@@ -730,26 +758,20 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
}
}
- // Get needed page
- int page_num;
- if (dlg)
+ // Get options
+ int page_num = 1;
+ bool is_importvia_poppler = false;
+ if (dlg) {
page_num = dlg->getSelectedPage();
- else
- page_num = 1;
- Catalog *catalog = pdf_doc->getCatalog();
- Page *page = catalog->getPage(page_num);
-
- int is_importvia_poppler = 0;
- if(dlg)
- {
#ifdef HAVE_POPPLER_CAIRO
is_importvia_poppler = dlg->getImportMethod();
+ // printf("PDF import via %s.\n", is_importvia_poppler ? "poppler" : "native");
#endif
}
SPDocument *doc = NULL;
bool saved = false;
- if(is_importvia_poppler == 0)
+ if(!is_importvia_poppler)
{
// native importer
doc = SPDocument::createNewDoc(NULL, TRUE, TRUE);
@@ -769,12 +791,14 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
if (dlg)
dlg->getImportSettings(prefs);
- printf("pdf import via %s.", (is_importvia_poppler != 0) ? "poppler" : "native");
-
// Apply crop settings
PDFRectangle *clipToBox = NULL;
double crop_setting;
sp_repr_get_double(prefs, "cropTo", &crop_setting);
+
+ Catalog *catalog = pdf_doc->getCatalog();
+ Page *page = catalog->getPage(page_num);
+
if ( crop_setting >= 0.0 ) { // Do page clipping
int crop_choice = (int)crop_setting;
switch (crop_choice) {
@@ -798,11 +822,11 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
}
}
- // Create parser
+ // Create parser (extension/internal/pdfinput/pdf-parser.h)
PdfParser *pdf_parser = new PdfParser(pdf_doc->getXRef(), builder, page_num-1, page->getRotate(),
page->getResourceDict(), page->getCropBox(), clipToBox);
- // Set up approximation precision for parser
+ // Set up approximation precision for parser. Used for convering Mesh Gradients into tiles.
double color_delta;
sp_repr_get_double(prefs, "approximationPrecision", &color_delta);
if ( color_delta <= 0.0 ) {
@@ -831,13 +855,20 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
{
#ifdef HAVE_POPPLER_CAIRO
// the poppler import
- gchar* filename_uri = g_filename_to_uri(uri, NULL, NULL);
+
+ Glib::ustring full_path = uri;
+ if (!Glib::path_is_absolute(uri)) {
+ full_path = Glib::build_filename(Glib::get_current_dir(),uri);
+ }
+ Glib::ustring full_uri = Glib::filename_to_uri(full_path);
+
GError *error = NULL;
- /// @todo handle passwort
+ /// @todo handle password
/// @todo check if win32 unicode needs special attention
- PopplerDocument* document = poppler_document_new_from_file(filename_uri, NULL, &error);
+ PopplerDocument* document = poppler_document_new_from_file(full_uri.c_str(), NULL, &error);
if(error != NULL) {
+ std::cerr << "PDFInput::open: error opening document: " << full_uri << std::endl;
g_error_free (error);
}
@@ -850,6 +881,13 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
Glib::ustring output;
cairo_surface_t* surface = cairo_svg_surface_create_for_stream(Inkscape::Extension::Internal::_write_ustring_cb,
&output, width, height);
+
+ // This magical function results in more fine-grain fallbacks. In particular, a mesh
+ // gradient won't necessarily result in the whole PDF being rasterized. Of course, SVG
+ // 1.2 never made it as a standard, but hey, we'll take what we can get. This trick was
+ // found by examining the 'pdftocairo' code.
+ cairo_svg_surface_restrict_to_version( surface, CAIRO_SVG_VERSION_1_2 );
+
cairo_t* cr = cairo_create(surface);
poppler_page_render_for_printing(page, cr);
@@ -867,13 +905,10 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
}
else
{
- doc = SPDocument::createNewDoc(NULL, TRUE, TRUE); // fallback create empthy document
+ doc = SPDocument::createNewDoc(NULL, TRUE, TRUE); // fallback create empty document
}
saved = DocumentUndo::getUndoSensitive(doc);
DocumentUndo::setUndoSensitive(doc, false); // No need to undo in this temporary document
-
- // Cleanup
- g_free(filename_uri);
#endif
}
diff --git a/src/extension/internal/pdfinput/pdf-input.h b/src/extension/internal/pdfinput/pdf-input.h
index 866db5d82..6e36603c3 100644
--- a/src/extension/internal/pdfinput/pdf-input.h
+++ b/src/extension/internal/pdfinput/pdf-input.h
@@ -44,6 +44,7 @@ namespace Gtk {
#else
class HScale;
#endif
+ class RadioButton;
class VBox;
class Label;
}
@@ -71,7 +72,7 @@ public:
bool showDialog();
int getSelectedPage();
- int getImportMethod();
+ bool getImportMethod();
void getImportSettings(Inkscape::XML::Node *prefs);
private:
@@ -86,7 +87,10 @@ private:
void _onPageNumberChanged();
void _onToggleCropping();
void _onPrecisionChanged();
-
+#ifdef HAVE_POPPLER_CAIRO
+ void _onToggleImport();
+#endif
+
class Gtk::Button * cancelbutton;
class Gtk::Button * okbutton;
class Gtk::Label * _labelSelect;
@@ -101,7 +105,10 @@ private:
class Gtk::Label * _labelPrecision;
class Gtk::Label * _labelPrecisionWarning;
#ifdef HAVE_POPPLER_CAIRO
- class Gtk::CheckButton * _importviaPopplerCheck; // using poppler_cairo for importing
+ class Gtk::RadioButton * _importViaPoppler; // Use poppler_cairo importing
+ class Gtk::Label * _labelViaPoppler;
+ class Gtk::RadioButton * _importViaInternal; // Use native (poppler based) importing
+ class Gtk::Label * _labelViaInternal;
#endif
#if WITH_GTKMM_3_0
class Gtk::Scale * _fallbackPrecisionSlider;
diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
index cc0b38515..836c34c32 100644
--- a/src/extension/internal/pdfinput/pdf-parser.cpp
+++ b/src/extension/internal/pdfinput/pdf-parser.cpp
@@ -2780,12 +2780,14 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
Dict *dict;
int width, height;
int bits;
+ GBool interpolate;
StreamColorSpaceMode csMode;
GBool mask;
GBool invert;
Object maskObj, smaskObj;
GBool haveColorKeyMask, haveExplicitMask, haveSoftMask;
GBool maskInvert;
+ GBool maskInterpolate;
Object obj1, obj2;
// get info from the stream
@@ -2828,6 +2830,19 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
}
obj1.free();
+ // image interpolation
+ dict->lookup("Interpolate", &obj1);
+ if (obj1.isNull()) {
+ obj1.free();
+ dict->lookup("I", &obj1);
+ }
+ if (obj1.isBool())
+ interpolate = obj1.getBool();
+ else
+ interpolate = gFalse;
+ obj1.free();
+ maskInterpolate = gFalse;
+
// image or mask?
dict->lookup(const_cast<char*>("ImageMask"), &obj1);
if (obj1.isNull()) {
@@ -2884,7 +2899,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
obj1.free();
// draw it
- builder->addImageMask(state, str, width, height, invert);
+ builder->addImageMask(state, str, width, height, invert, interpolate);
} else {
// get color space and color map
@@ -2986,6 +3001,16 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
}
int maskBits = obj1.getInt();
obj1.free();
+ maskDict->lookup("Interpolate", &obj1);
+ if (obj1.isNull()) {
+ obj1.free();
+ maskDict->lookup("I", &obj1);
+ }
+ if (obj1.isBool())
+ maskInterpolate = obj1.getBool();
+ else
+ maskInterpolate = gFalse;
+ obj1.free();
maskDict->lookup(const_cast<char*>("ColorSpace"), &obj1);
if (obj1.isNull()) {
obj1.free();
@@ -3071,6 +3096,16 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
goto err2;
}
obj1.free();
+ maskDict->lookup("Interpolate", &obj1);
+ if (obj1.isNull()) {
+ obj1.free();
+ maskDict->lookup("I", &obj1);
+ }
+ if (obj1.isBool())
+ maskInterpolate = obj1.getBool();
+ else
+ maskInterpolate = gFalse;
+ obj1.free();
maskInvert = gFalse;
maskDict->lookup(const_cast<char*>("Decode"), &obj1);
if (obj1.isNull()) {
@@ -3092,14 +3127,14 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
// draw it
if (haveSoftMask) {
- builder->addSoftMaskedImage(state, str, width, height, colorMap,
- maskStr, maskWidth, maskHeight, maskColorMap);
+ builder->addSoftMaskedImage(state, str, width, height, colorMap, interpolate,
+ maskStr, maskWidth, maskHeight, maskColorMap, maskInterpolate);
delete maskColorMap;
} else if (haveExplicitMask) {
- builder->addMaskedImage(state, str, width, height, colorMap,
- maskStr, maskWidth, maskHeight, maskInvert);
+ builder->addMaskedImage(state, str, width, height, colorMap, interpolate,
+ maskStr, maskWidth, maskHeight, maskInvert, maskInterpolate);
} else {
- builder->addImage(state, str, width, height, colorMap,
+ builder->addImage(state, str, width, height, colorMap, interpolate,
haveColorKeyMask ? maskColors : static_cast<int *>(NULL));
}
delete colorMap;
diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp
index a3abb4045..58e2030d9 100644
--- a/src/extension/internal/pdfinput/svg-builder.cpp
+++ b/src/extension/internal/pdfinput/svg-builder.cpp
@@ -1485,7 +1485,9 @@ void png_flush_base64stream(png_structp png_ptr)
*
*/
Inkscape::XML::Node *SvgBuilder::_createImage(Stream *str, int width, int height,
- GfxImageColorMap *color_map, int *mask_colors, bool alpha_only, bool invert_alpha) {
+ GfxImageColorMap *color_map, bool interpolate,
+ int *mask_colors, bool alpha_only,
+ bool invert_alpha) {
// Create PNG write struct
png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
@@ -1655,6 +1657,13 @@ Inkscape::XML::Node *SvgBuilder::_createImage(Stream *str, int width, int height
Inkscape::XML::Node *image_node = _xml_doc->createElement("svg:image");
sp_repr_set_svg_double(image_node, "width", 1);
sp_repr_set_svg_double(image_node, "height", 1);
+ if( !interpolate ) {
+ SPCSSAttr *css = sp_repr_css_attr_new();
+ // This should be changed after CSS4 Images widely supported.
+ sp_repr_css_set_property(css, "image-rendering", "optimizeSpeed");
+ sp_repr_css_change(image_node, css, "style");
+ sp_repr_css_attr_unref(css);
+ }
// PS/PDF images are placed via a transformation matrix, no preserveAspectRatio used
image_node->setAttribute("preserveAspectRatio", "none");
@@ -1715,9 +1724,9 @@ Inkscape::XML::Node *SvgBuilder::_createMask(double width, double height) {
}
void SvgBuilder::addImage(GfxState * /*state*/, Stream *str, int width, int height,
- GfxImageColorMap *color_map, int *mask_colors) {
+ GfxImageColorMap *color_map, bool interpolate, int *mask_colors) {
- Inkscape::XML::Node *image_node = _createImage(str, width, height, color_map, mask_colors);
+ Inkscape::XML::Node *image_node = _createImage(str, width, height, color_map, interpolate, mask_colors);
if (image_node) {
_container->appendChild(image_node);
Inkscape::GC::release(image_node);
@@ -1725,7 +1734,7 @@ void SvgBuilder::addImage(GfxState * /*state*/, Stream *str, int width, int heig
}
void SvgBuilder::addImageMask(GfxState *state, Stream *str, int width, int height,
- bool invert) {
+ bool invert, bool interpolate) {
// Create a rectangle
Inkscape::XML::Node *rect = _xml_doc->createElement("svg:rect");
@@ -1742,7 +1751,8 @@ void SvgBuilder::addImageMask(GfxState *state, Stream *str, int width, int heigh
// Scaling 1x1 surfaces might not work so skip setting a mask with this size
if ( width > 1 || height > 1 ) {
- Inkscape::XML::Node *mask_image_node = _createImage(str, width, height, NULL, NULL, true, invert);
+ Inkscape::XML::Node *mask_image_node =
+ _createImage(str, width, height, NULL, interpolate, NULL, true, invert);
if (mask_image_node) {
// Create the mask
Inkscape::XML::Node *mask_node = _createMask(1.0, 1.0);
@@ -1762,13 +1772,13 @@ void SvgBuilder::addImageMask(GfxState *state, Stream *str, int width, int heigh
}
void SvgBuilder::addMaskedImage(GfxState * /*state*/, Stream *str, int width, int height,
- GfxImageColorMap *color_map,
+ GfxImageColorMap *color_map, bool interpolate,
Stream *mask_str, int mask_width, int mask_height,
- bool invert_mask) {
+ bool invert_mask, bool mask_interpolate) {
Inkscape::XML::Node *mask_image_node = _createImage(mask_str, mask_width, mask_height,
- NULL, NULL, true, invert_mask);
- Inkscape::XML::Node *image_node = _createImage(str, width, height, color_map, NULL);
+ NULL, mask_interpolate, NULL, true, invert_mask);
+ Inkscape::XML::Node *image_node = _createImage(str, width, height, color_map, interpolate, NULL);
if ( mask_image_node && image_node ) {
// Create mask for the image
Inkscape::XML::Node *mask_node = _createMask(1.0, 1.0);
@@ -1795,13 +1805,13 @@ void SvgBuilder::addMaskedImage(GfxState * /*state*/, Stream *str, int width, in
}
void SvgBuilder::addSoftMaskedImage(GfxState * /*state*/, Stream *str, int width, int height,
- GfxImageColorMap *color_map,
+ GfxImageColorMap *color_map, bool interpolate,
Stream *mask_str, int mask_width, int mask_height,
- GfxImageColorMap *mask_color_map) {
+ GfxImageColorMap *mask_color_map, bool mask_interpolate) {
Inkscape::XML::Node *mask_image_node = _createImage(mask_str, mask_width, mask_height,
- mask_color_map, NULL, true);
- Inkscape::XML::Node *image_node = _createImage(str, width, height, color_map, NULL);
+ mask_color_map, mask_interpolate, NULL, true);
+ Inkscape::XML::Node *image_node = _createImage(str, width, height, color_map, interpolate, NULL);
if ( mask_image_node && image_node ) {
// Create mask for the image
Inkscape::XML::Node *mask_node = _createMask(1.0, 1.0);
diff --git a/src/extension/internal/pdfinput/svg-builder.h b/src/extension/internal/pdfinput/svg-builder.h
index f1ce02cf0..ad15c9c06 100644
--- a/src/extension/internal/pdfinput/svg-builder.h
+++ b/src/extension/internal/pdfinput/svg-builder.h
@@ -112,17 +112,17 @@ public:
// Image handling
void addImage(GfxState *state, Stream *str, int width, int height,
- GfxImageColorMap *color_map, int *mask_colors);
+ GfxImageColorMap *color_map, bool interpolate, int *mask_colors);
void addImageMask(GfxState *state, Stream *str, int width, int height,
- bool invert);
+ bool invert, bool interpolate);
void addMaskedImage(GfxState *state, Stream *str, int width, int height,
- GfxImageColorMap *color_map,
+ GfxImageColorMap *color_map, bool interpolate,
Stream *mask_str, int mask_width, int mask_height,
- bool invert_mask);
+ bool invert_mask, bool mask_interpolate);
void addSoftMaskedImage(GfxState *state, Stream *str, int width, int height,
- GfxImageColorMap *color_map,
+ GfxImageColorMap *color_map, bool interpolate,
Stream *mask_str, int mask_width, int mask_height,
- GfxImageColorMap *mask_color_map);
+ GfxImageColorMap *mask_color_map, bool mask_interpolate);
// Transparency group and soft mask handling
void pushTransparencyGroup(GfxState *state, double *bbox,
@@ -180,8 +180,9 @@ private:
bool is_stroke=false);
// Image/mask creation
Inkscape::XML::Node *_createImage(Stream *str, int width, int height,
- GfxImageColorMap *color_map, int *mask_colors,
- bool alpha_only=false, bool invert_alpha=false);
+ GfxImageColorMap *color_map, bool interpolate,
+ int *mask_colors, bool alpha_only=false,
+ bool invert_alpha=false);
Inkscape::XML::Node *_createMask(double width, double height);
// Style setting
SPCSSAttr *_setStyle(GfxState *state, bool fill, bool stroke, bool even_odd=false);
diff --git a/src/extension/internal/text_reassemble.c b/src/extension/internal/text_reassemble.c
index d3aafef12..fa983b83d 100644
--- a/src/extension/internal/text_reassemble.c
+++ b/src/extension/internal/text_reassemble.c
@@ -67,8 +67,8 @@ Optional compiler switches for development:
File: text_reassemble.c
-Version: 0.0.16
-Date: 25-FEB-2015
+Version: 0.0.17
+Date: 21-MAY-2015
Author: David Mathog, Biology Division, Caltech
email: mathog@caltech.edu
Copyright: 2015 David Mathog and California Institute of Technology (Caltech)
@@ -2204,10 +2204,10 @@ void TR_layout_2_svg(TR_INFO *tri){
sprintf(obuf,"text-decoration:");
/* multiple text decoration styles may be set */
utmp = tsp->decoration & TXTDECOR_TMASK;
- if(utmp & TXTDECOR_UNDER ){ strcat(obuf,"underline"); }
- if(utmp & TXTDECOR_OVER ){ strcat(obuf,"overline"); }
- if(utmp & TXTDECOR_BLINK ){ strcat(obuf,"blink"); }
- if(utmp & TXTDECOR_STRIKE){ strcat(obuf,"line-through");}
+ if(utmp & TXTDECOR_UNDER ){ strcat(obuf," underline"); }
+ if(utmp & TXTDECOR_OVER ){ strcat(obuf," overline"); }
+ if(utmp & TXTDECOR_BLINK ){ strcat(obuf," blink"); }
+ if(utmp & TXTDECOR_STRIKE){ strcat(obuf," line-through");}
if(*obuf){
/* only a single text decoration line type may be set */
switch(tsp->decoration & TXTDECOR_LMASK){
diff --git a/src/extension/internal/wmf-inout.cpp b/src/extension/internal/wmf-inout.cpp
index f76fa16b4..d17180d91 100644
--- a/src/extension/internal/wmf-inout.cpp
+++ b/src/extension/internal/wmf-inout.cpp
@@ -449,7 +449,8 @@ uint32_t Wmf::add_dib_image(PWMF_CALLBACK_DATA d, const char *dib, uint32_t iUsa
char *rgba_px = NULL; // RGBA pixels
const char *px = NULL; // DIB pixels
const U_RGBQUAD *ct = NULL; // DIB color table
- int32_t width, height, colortype, numCt, invert; // if needed these values will be set by wget_DIB_params
+ uint32_t numCt;
+ int32_t width, height, colortype, invert; // if needed these values will be set by wget_DIB_params
if(iUsage == U_DIB_RGB_COLORS){
// next call returns pointers and values, but allocates no memory
dibparams = wget_DIB_params(dib, &px, &ct, &numCt, &width, &height, &colortype, &invert);
@@ -1318,7 +1319,8 @@ void Wmf::common_dib_to_image(PWMF_CALLBACK_DATA d, const char *dib,
char *sub_px = NULL; // RGBA pixels, subarray
const char *px = NULL; // DIB pixels
const U_RGBQUAD *ct = NULL; // color table
- int32_t width, height, colortype, numCt, invert; // if needed these values will be set in wget_DIB_params
+ uint32_t numCt;
+ int32_t width, height, colortype, invert; // if needed these values will be set in wget_DIB_params
if(iUsage == U_DIB_RGB_COLORS){
// next call returns pointers and values, but allocates no memory
dibparams = wget_DIB_params(dib, &px, &ct, &numCt, &width, &height, &colortype, &invert);
diff --git a/src/extension/internal/wmf-print.cpp b/src/extension/internal/wmf-print.cpp
index 9fe1a0259..768909173 100644
--- a/src/extension/internal/wmf-print.cpp
+++ b/src/extension/internal/wmf-print.cpp
@@ -380,8 +380,8 @@ int PrintWmf::create_brush(SPStyle const *style, U_COLORREF *fcolor)
} else if (SP_IS_PATTERN(SP_STYLE_FILL_SERVER(style))) { // must be paint-server
SPPaintServer *paintserver = style->fill.value.href->getObject();
SPPattern *pat = SP_PATTERN(paintserver);
- double dwidth = pattern_width(pat);
- double dheight = pattern_height(pat);
+ double dwidth = pat->width();
+ double dheight = pat->height();
width = dwidth;
height = dheight;
brush_classify(pat, 0, &pixbuf, &hatchType, &hatchColor, &bkColor);
diff --git a/src/extension/param/color.cpp b/src/extension/param/color.cpp
index b774bac83..3162e8a40 100644
--- a/src/extension/param/color.cpp
+++ b/src/extension/param/color.cpp
@@ -24,41 +24,37 @@
#include "color.h"
#include <color.h>
-#include "widgets/sp-color-selector.h"
-#include "widgets/sp-color-notebook.h"
+#include "ui/widget/color-notebook.h"
#include "preferences.h"
-
namespace Inkscape {
namespace Extension {
-void sp_color_param_changed(SPColorSelector *csel, GObject *cp);
-
-
ParamColor::~ParamColor(void)
{
-
+ _color_changed.disconnect();
}
guint32 ParamColor::set( guint32 in, SPDocument * /*doc*/, Inkscape::XML::Node * /*node*/ )
{
- _value = in;
+ _color_changed.block(true);
+ _color.setValue(in);
+ _color_changed.block(false);
gchar * prefname = this->pref_name();
std::string value;
string(value);
-
+
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setString(extension_pref_root + prefname, value);
g_free(prefname);
- return _value;
+ return in;
}
-ParamColor::ParamColor(const gchar *name, const gchar *guitext, const gchar *desc, const Parameter::_scope_t scope,
- bool gui_hidden, const gchar *gui_tip, Inkscape::Extension::Extension *ext,
- Inkscape::XML::Node *xml)
- : Parameter(name, guitext, desc, scope, gui_hidden, gui_tip, ext), _value(0), _changeSignal(0)
+ParamColor::ParamColor (const gchar * name, const gchar * guitext, const gchar * desc, const Parameter::_scope_t scope, bool gui_hidden, const gchar * gui_tip, Inkscape::Extension::Extension * ext, Inkscape::XML::Node * xml) :
+ Parameter(name, guitext, desc, scope, gui_hidden, gui_tip, ext),
+ _changeSignal(0)
{
const char * defaulthex = NULL;
if (xml->firstChild() != NULL)
@@ -72,51 +68,46 @@ ParamColor::ParamColor(const gchar *name, const gchar *guitext, const gchar *des
if (!paramval.empty())
defaulthex = paramval.data();
- if (defaulthex)
- _value = atoi(defaulthex);
+ if (defaulthex) {
+ _color.setValue(atoi(defaulthex));
+ }
+ _color_changed = _color.signal_changed.connect(sigc::mem_fun(this, &ParamColor::_onColorChanged));
+
}
void ParamColor::string(std::string &string) const
{
char str[16];
- sprintf(str, "%i", _value);
+ snprintf(str, 16, "%i", _color.value());
string += str;
}
Gtk::Widget *ParamColor::get_widget( SPDocument * /*doc*/, Inkscape::XML::Node * /*node*/, sigc::signal<void> * changeSignal )
{
- if (_gui_hidden) return NULL;
+ using Inkscape::UI::Widget::ColorNotebook;
+
+ if (_gui_hidden) return NULL;
_changeSignal = new sigc::signal<void>(*changeSignal);
- Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4));
- SPColorSelector* spColorSelector = (SPColorSelector*)sp_color_selector_new(SP_TYPE_COLOR_NOTEBOOK);
- ColorSelector* colorSelector = spColorSelector->base;
- if (_value < 1) {
- _value = 0xFF000000;
+ if (_color.value() < 1) {
+ _color_changed.block(true);
+ _color.setValue(0xFF000000);
+ _color_changed.block(false);
}
- SPColor *color = new SPColor( _value );
- float alpha = (_value & 0xff) / 255.0F;
- colorSelector->setColorAlpha(*color, alpha);
-
- hbox->pack_start (*Glib::wrap(&spColorSelector->vbox), true, true, 0);
- g_signal_connect(G_OBJECT(spColorSelector), "changed", G_CALLBACK(sp_color_param_changed), (void*)this);
- gtk_widget_show(GTK_WIDGET(spColorSelector));
+ Gtk::HBox *hbox = Gtk::manage(new Gtk::HBox(false, 4));
+ Gtk::Widget *selector = Gtk::manage(new ColorNotebook(_color));
+ hbox->pack_start (*selector, true, true, 0);
+ selector->show();
hbox->show();
-
- return dynamic_cast<Gtk::Widget *>(hbox);
+ return hbox;
}
-void sp_color_param_changed(SPColorSelector *csel, GObject *obj)
+void ParamColor::_onColorChanged()
{
- const SPColor color = csel->base->getColor();
- float alpha = csel->base->getAlpha();
-
- ParamColor* ptr = reinterpret_cast<ParamColor*>(obj);
- ptr->set(color.toRGBA32( alpha ), NULL, NULL);
-
- ptr->_changeSignal->emit();
+ if (_changeSignal)
+ _changeSignal->emit();
}
}; /* namespace Extension */
diff --git a/src/extension/param/color.h b/src/extension/param/color.h
index 9894965a9..ed2e57ceb 100644
--- a/src/extension/param/color.h
+++ b/src/extension/param/color.h
@@ -9,6 +9,7 @@
*/
#include "parameter.h"
+#include "ui/selected-color.h"
class SPDocument;
@@ -25,14 +26,17 @@ namespace Extension {
class ParamColor : public Parameter {
private:
- guint32 _value;
+ void _onColorChanged();
+
+ Inkscape::UI::SelectedColor _color;
+ sigc::connection _color_changed;
public:
ParamColor(const gchar * name, const gchar * guitext, const gchar * desc, const Parameter::_scope_t scope, bool gui_hidden, const gchar * gui_tip, Inkscape::Extension::Extension * ext, Inkscape::XML::Node * xml);
virtual ~ParamColor(void);
/** Returns \c _value, with a \i const to protect it. */
- guint32 get( SPDocument const * /*doc*/, Inkscape::XML::Node const * /*node*/ ) const { return _value; }
+ guint32 get( SPDocument const * /*doc*/, Inkscape::XML::Node const * /*node*/ ) const { return _color.value(); }
guint32 set (guint32 in, SPDocument * doc, Inkscape::XML::Node * node);
@@ -44,6 +48,7 @@ public:
virtual void string (std::string &string) const;
sigc::signal<void> * _changeSignal;
+
}; // class ParamColor
} // namespace Extension
diff --git a/src/extension/param/parameter.cpp b/src/extension/param/parameter.cpp
index 202b8110f..8c99ee55d 100644
--- a/src/extension/param/parameter.cpp
+++ b/src/extension/param/parameter.cpp
@@ -15,6 +15,10 @@
# include "config.h"
#endif
+#if GLIBMM_DISABLE_DEPRECATED && HAVE_GLIBMM_THREADS_H
+#include <glibmm/threads.h>
+#endif
+
#ifdef linux // does the dollar sign need escaping when passed as string parameter?
# define ESCAPE_DOLLAR_COMMANDLINE
#endif
@@ -26,8 +30,7 @@
#include "document-private.h"
#include "sp-object.h"
#include <color.h>
-#include "widgets/sp-color-selector.h"
-#include "widgets/sp-color-notebook.h"
+#include "ui/widget/color-notebook.h"
#include "parameter.h"
#include "bool.h"