summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
authorDiederik van Lierop <mail@diedenrezi.nl>2019-04-30 20:40:33 +0000
committerDiederik van Lierop <mail@diedenrezi.nl>2019-04-30 20:40:33 +0000
commitd137944b06575b9e79d0a3e79a3e5f5b8f6665e2 (patch)
tree6017a86cc0040ca9d7615c879036bd320f6e5de7 /src/ui
parentFix disappearing and antialiasing of grid lines (diff)
parentSet spacing in About Dialog (diff)
downloadinkscape-d137944b06575b9e79d0a3e79a3e5f5b8f6665e2.tar.gz
inkscape-d137944b06575b9e79d0a3e79a3e5f5b8f6665e2.zip
Merge branch 'master' of gitlab.com:inkscape/inkscape
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/dialog/aboutbox.cpp3
-rw-r--r--src/ui/dialog/layers.cpp1
-rw-r--r--src/ui/dialog/livepatheffect-add.cpp9
-rw-r--r--src/ui/dialog/selectordialog.cpp84
-rw-r--r--src/ui/toolbar/arc-toolbar.cpp3
-rw-r--r--src/ui/toolbar/rect-toolbar.cpp2
-rw-r--r--src/ui/toolbar/text-toolbar.cpp2
-rw-r--r--src/ui/tools/flood-tool.cpp9
-rw-r--r--src/ui/tools/measure-tool.cpp6
-rw-r--r--src/ui/widget/color-icc-selector.cpp8
-rw-r--r--src/ui/widget/color-scales.cpp1
-rw-r--r--src/ui/widget/color-wheel-selector.cpp10
-rw-r--r--src/ui/widget/unit-tracker.cpp2
13 files changed, 89 insertions, 51 deletions
diff --git a/src/ui/dialog/aboutbox.cpp b/src/ui/dialog/aboutbox.cpp
index e829091cb..87141c655 100644
--- a/src/ui/dialog/aboutbox.cpp
+++ b/src/ui/dialog/aboutbox.cpp
@@ -91,6 +91,9 @@ AboutBox::AboutBox()
set_comments (_("Open Source Scalable Vector Graphics Editor\n"
"Draw Freely."));
// clang-format on
+
+ get_content_area()->set_border_width(3);
+ get_action_area()->set_border_width(3);
}
/**
diff --git a/src/ui/dialog/layers.cpp b/src/ui/dialog/layers.cpp
index 79bf767c7..449d6be1a 100644
--- a/src/ui/dialog/layers.cpp
+++ b/src/ui/dialog/layers.cpp
@@ -383,6 +383,7 @@ void LayersPanel::_layersChanged()
// g_message("_layersChanged()");
if (_desktop) {
SPDocument* document = _desktop->doc();
+ g_return_if_fail(document != nullptr); // bug #158: Crash on File>Quit
SPRoot* root = document->getRoot();
if ( root ) {
_selectedConnection.block();
diff --git a/src/ui/dialog/livepatheffect-add.cpp b/src/ui/dialog/livepatheffect-add.cpp
index 8e4d7db15..737d1e5ff 100644
--- a/src/ui/dialog/livepatheffect-add.cpp
+++ b/src/ui/dialog/livepatheffect-add.cpp
@@ -101,11 +101,10 @@ LivePathEffectAdd::LivePathEffectAdd()
_LPESelectorFlowBox->signal_child_activated().connect(sigc::mem_fun(*this, &LivePathEffectAdd::on_activate));
_LPEDialogSelector->add_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK |
Gdk::ENTER_NOTIFY_MASK | Gdk::LEAVE_NOTIFY_MASK);
- Glib::ustring effectgladefile = get_filename(Inkscape::IO::Resource::UIS, "dialog-livepatheffect-add-effect.ui");
for (int i = 0; i < static_cast<int>(converter._length); ++i) {
Glib::RefPtr<Gtk::Builder> builder_effect;
try {
- builder_effect = Gtk::Builder::create_from_file(effectgladefile);
+ builder_effect = Gtk::Builder::create_from_file(gladefile);
} catch (const Glib::Error &ex) {
g_warning("Glade file loading failed for filter effect dialog");
return;
@@ -136,10 +135,10 @@ LivePathEffectAdd::LivePathEffectAdd()
Gtk::Label *LPEDescription;
builder_effect->get_widget("LPEDescription", LPEDescription);
LPEDescription->set_text(converter.get_description(data->id));
- Gtk::ToggleButton *LPEExperimental;
- builder_effect->get_widget("LPEExperimental", LPEExperimental);
+ Gtk::ToggleButton *LPEExperimentalToggle;
+ builder_effect->get_widget("LPEExperimentalToggle", LPEExperimentalToggle);
bool active = converter.get_experimental(data->id) ? true : false;
- LPEExperimental->set_active(active);
+ LPEExperimentalToggle->set_active(active);
Gtk::Image *LPEIcon;
builder_effect->get_widget("LPEIcon", LPEIcon);
LPEIcon->set_from_icon_name(converter.get_icon(data->id), Gtk::BuiltinIconSize(Gtk::ICON_SIZE_DIALOG));
diff --git a/src/ui/dialog/selectordialog.cpp b/src/ui/dialog/selectordialog.cpp
index 3db239933..4847facfb 100644
--- a/src/ui/dialog/selectordialog.cpp
+++ b/src/ui/dialog/selectordialog.cpp
@@ -457,7 +457,8 @@ void SelectorDialog::_readStyleElement()
coltype colType = SELECTOR;
for (auto tok : tokensplus) {
REMOVE_SPACES(tok);
- if (tok.find(" ") != -1 || tok.erase(0, 1).find(".") != -1) {
+ if (SPAttributeRelSVG::isSVGElement(tok) || tok.find(" ") != -1 || tok[0] == '>' || tok[0] == '+' ||
+ tok[0] == '~' || tok[0] == '*' || tok.erase(0, 1).find(".") != -1) {
colType = UNHANDLED;
}
}
@@ -485,16 +486,14 @@ void SelectorDialog::_readStyleElement()
row[_mColumns._colType] = colType;
row[_mColumns._colObj] = objVec;
row[_mColumns._colProperties] = properties;
- if (colType == SELECTOR) {
- // Add as children, objects that match selector.
- for (auto &obj : objVec) {
- Gtk::TreeModel::Row childrow = *(_store->append(row->children()));
- childrow[_mColumns._colSelector] = "#" + Glib::ustring(obj->getId());
- childrow[_mColumns._colExpand] = false;
- childrow[_mColumns._colType] = OBJECT;
- childrow[_mColumns._colObj] = std::vector<SPObject *>(1, obj);
- childrow[_mColumns._colProperties] = ""; // Unused
- }
+ // Add as children, objects that match selector.
+ for (auto &obj : objVec) {
+ Gtk::TreeModel::Row childrow = *(_store->append(row->children()));
+ childrow[_mColumns._colSelector] = "#" + Glib::ustring(obj->getId());
+ childrow[_mColumns._colExpand] = false;
+ childrow[_mColumns._colType] = colType == UNHANDLED ? UNHANDLED : OBJECT;
+ childrow[_mColumns._colObj] = std::vector<SPObject *>(1, obj);
+ childrow[_mColumns._colProperties] = ""; // Unused
}
}
_updating = false;
@@ -693,6 +692,9 @@ void SelectorDialog::_removeFromSelector(Gtk::TreeModel::Row row)
if (*row) {
Glib::ustring objectLabel = row[_mColumns._colSelector];
+ if (row[_mColumns._colType] == UNHANDLED) {
+ return;
+ };
Gtk::TreeModel::iterator iter = row->parent();
if (iter) {
Gtk::TreeModel::Row parent = *iter;
@@ -788,8 +790,21 @@ Glib::ustring SelectorDialog::_getIdList(std::vector<SPObject*> sel)
*/
std::vector<SPObject *> SelectorDialog::_getObjVec(Glib::ustring selector) {
- std::vector<SPObject *> objVec = SP_ACTIVE_DOCUMENT->getObjectsBySelector( selector );
-
+ std::vector<SPObject *> objVec;
+ std::vector<Glib::ustring> tokensplus = Glib::Regex::split_simple("[,]+", selector);
+ bool unhandled = false;
+ for (auto tok : tokensplus) {
+ REMOVE_SPACES(tok);
+ if (SPAttributeRelSVG::isSVGElement(tok) || tok.find(" ") != -1 || tok[0] == '>' || tok[0] == '+' ||
+ tok[0] == '~' || tok[0] == '*' || tok.erase(0, 1).find(".") != -1) {
+ unhandled = true;
+ std::vector<SPObject *> objVecSplited = SP_ACTIVE_DOCUMENT->getObjectsBySelector(tok);
+ objVec.insert(objVec.end(), objVecSplited.begin(), objVecSplited.end());
+ }
+ }
+ if (!unhandled) {
+ objVec = SP_ACTIVE_DOCUMENT->getObjectsBySelector(selector);
+ }
g_debug("SelectorDialog::_getObjVec: | %s |", selector.c_str());
for (auto& obj: objVec) {
g_debug(" %s", obj->getId() ? obj->getId() : "null");
@@ -943,17 +958,44 @@ void SelectorDialog::_addSelector()
* set to ".Class1"
*/
selectorValue = textEditPtr->get_text();
- Glib::ustring firstWord = selectorValue.substr(0, selectorValue.find_first_of(" >+~"));
- if (firstWord != selectorValue) {
- handled = false;
- }
+
del->set_sensitive(true);
+ std::vector<Glib::ustring> tokensplus = Glib::Regex::split_simple("[,]+", selectorValue);
+ bool unhandled = false;
+ bool partialinvalid = false;
+ for (auto tok : tokensplus) {
+ REMOVE_SPACES(tok);
+ if (SPAttributeRelSVG::isSVGElement(tok) || tok.find(" ") != -1 || tok[0] == '>' || tok[0] == '+' ||
+ tok[0] == '~' || tok[0] == '*' || tok.erase(0, 1).find(".") != -1) {
+ unhandled = true;
+ Glib::ustring firstWord = tok.substr(0, tok.find_first_of(" >+~"));
+ if (firstWord != tok) {
+ handled = false;
+ }
- if (selectorValue[0] == '.' || selectorValue[0] == '#' || selectorValue[0] == '*' ||
- SPAttributeRelSVG::isSVGElement(selectorValue)) {
- invalid = false;
- } else {
+ if (!partialinvalid &&
+ (tok[0] == '.' || tok[0] == '#' || tok[0] == '*' || SPAttributeRelSVG::isSVGElement(tok))) {
+ partialinvalid = false;
+ } else {
+ partialinvalid = true;
+ }
+ }
+ }
+ if (!unhandled) {
+ Glib::ustring firstWord = selectorValue.substr(0, selectorValue.find_first_of(" >+~"));
+ if (firstWord != selectorValue) {
+ handled = false;
+ }
+ if (selectorValue[0] == '.' || selectorValue[0] == '#' || selectorValue[0] == '*' ||
+ SPAttributeRelSVG::isSVGElement(selectorValue)) {
+ invalid = false;
+ } else {
+ textLabelPtr->show();
+ }
+ } else if (partialinvalid) {
textLabelPtr->show();
+ } else {
+ invalid = false;
}
}
delete textDialogPtr;
diff --git a/src/ui/toolbar/arc-toolbar.cpp b/src/ui/toolbar/arc-toolbar.cpp
index e9e25b7df..751efaa80 100644
--- a/src/ui/toolbar/arc-toolbar.cpp
+++ b/src/ui/toolbar/arc-toolbar.cpp
@@ -39,6 +39,7 @@
#include "verbs.h"
#include "object/sp-ellipse.h"
+#include "object/sp-namedview.h"
#include "ui/icon-names.h"
#include "ui/pref-pusher.h"
@@ -78,7 +79,7 @@ ArcToolbar::ArcToolbar(SPDesktop *desktop) :
_freeze(false),
_repr(nullptr)
{
- _tracker->setActiveUnit(unit_table.getUnit("px"));
+ _tracker->setActiveUnit(desktop->getNamedView()->display_units);
auto prefs = Inkscape::Preferences::get();
{
diff --git a/src/ui/toolbar/rect-toolbar.cpp b/src/ui/toolbar/rect-toolbar.cpp
index 960ddaac9..a8b49e62d 100644
--- a/src/ui/toolbar/rect-toolbar.cpp
+++ b/src/ui/toolbar/rect-toolbar.cpp
@@ -84,7 +84,7 @@ RectToolbar::RectToolbar(SPDesktop *desktop)
// rx/ry units menu: create
//tracker->addUnit( SP_UNIT_PERCENT, 0 );
// fixme: add % meaning per cent of the width/height
- _tracker->setActiveUnit(unit_table.getUnit("px"));
+ _tracker->setActiveUnit(desktop->getNamedView()->display_units);
_mode_item->set_use_markup(true);
/* W */
diff --git a/src/ui/toolbar/text-toolbar.cpp b/src/ui/toolbar/text-toolbar.cpp
index bd73fe584..3b55f8b08 100644
--- a/src/ui/toolbar/text-toolbar.cpp
+++ b/src/ui/toolbar/text-toolbar.cpp
@@ -265,7 +265,7 @@ TextToolbar::TextToolbar(SPDesktop *desktop)
_tracker(new UnitTracker(Inkscape::Util::UNIT_TYPE_LINEAR))
{
/* Line height unit tracker */
- _tracker->prependUnit(unit_table.getUnit("")); // No unit
+ _tracker->prependUnit(unit_table.getUnit("")); // Ratio
_tracker->addUnit(unit_table.getUnit("%"));
_tracker->addUnit(unit_table.getUnit("em"));
_tracker->addUnit(unit_table.getUnit("ex"));
diff --git a/src/ui/tools/flood-tool.cpp b/src/ui/tools/flood-tool.cpp
index 6db530917..68987dfcc 100644
--- a/src/ui/tools/flood-tool.cpp
+++ b/src/ui/tools/flood-tool.cpp
@@ -627,7 +627,7 @@ static ScanlineCheckResult perform_bitmap_scanline_check(std::deque<Geom::Point>
bool can_paint_top = (top_ty > 0);
bool can_paint_bottom = (bottom_ty < bci.height);
- Geom::Point t = fill_queue->front();
+ Geom::Point front_of_queue = fill_queue->empty() ? Geom::Point() : fill_queue->front();
do {
ok = false;
@@ -645,8 +645,11 @@ static ScanlineCheckResult perform_bitmap_scanline_check(std::deque<Geom::Point>
paint_directions = paint_pixel(px, trace_px, orig_color, bci, current_trace_t);
if (bci.radius == 0) {
mark_pixel_checked(current_trace_t);
- if ((t[Geom::X] == bci.x) && (t[Geom::Y] == bci.y)) {
- fill_queue->pop_front(); t = fill_queue->front();
+ if ((!fill_queue->empty()) &&
+ (front_of_queue[Geom::X] == bci.x) &&
+ (front_of_queue[Geom::Y] == bci.y)) {
+ fill_queue->pop_front();
+ front_of_queue = fill_queue->empty() ? Geom::Point() : fill_queue->front();
}
}
diff --git a/src/ui/tools/measure-tool.cpp b/src/ui/tools/measure-tool.cpp
index f8c8517c9..64824514e 100644
--- a/src/ui/tools/measure-tool.cpp
+++ b/src/ui/tools/measure-tool.cpp
@@ -810,7 +810,7 @@ void MeasureTool::toMarkDimension()
setLine(start, end, true, color);
Glib::ustring unit_name = prefs->getString("/tools/measure/unit");
if (!unit_name.compare("")) {
- unit_name = "px";
+ unit_name = DEFAULT_UNIT_NAME;
}
double fontsize = prefs->getDouble("/tools/measure/fontsize", 10.0);
int precision = prefs->getInt("/tools/measure/precision", 2);
@@ -1162,7 +1162,7 @@ void MeasureTool::showInfoBox(Geom::Point cursor, bool into_groups)
Glib::ustring unit_name = prefs->getString("/tools/measure/unit");
bool only_selected = prefs->getBool("/tools/measure/only_selected", false);
if (!unit_name.compare("")) {
- unit_name = "px";
+ unit_name = DEFAULT_UNIT_NAME;
}
Geom::Scale zoom = Geom::Scale(Inkscape::Util::Quantity::convert(desktop->current_zoom(), "px", unit->abbr)).inverse();
if(newover != over){
@@ -1324,7 +1324,7 @@ void MeasureTool::showCanvasItems(bool to_guides, bool to_item, bool to_phantom,
}
Glib::ustring unit_name = prefs->getString("/tools/measure/unit");
if (!unit_name.compare("")) {
- unit_name = "px";
+ unit_name = DEFAULT_UNIT_NAME;
}
double scale = prefs->getDouble("/tools/measure/scale", 100.0) / 100.0;
double fontsize = prefs->getDouble("/tools/measure/fontsize", 10.0);
diff --git a/src/ui/widget/color-icc-selector.cpp b/src/ui/widget/color-icc-selector.cpp
index 0970c779c..a8e1d255f 100644
--- a/src/ui/widget/color-icc-selector.cpp
+++ b/src/ui/widget/color-icc-selector.cpp
@@ -486,7 +486,7 @@ void ColorICCSelector::init()
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));
+ _impl->_adj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 100.0, 1.0, 10.0, 10.0));
// Slider
_impl->_slider = Gtk::manage(new Inkscape::UI::Widget::ColorSlider(Glib::wrap(_impl->_adj, true)));
@@ -941,12 +941,6 @@ void ColorICCSelectorImpl::_updateSliders(gint ignore)
void ColorICCSelectorImpl::_adjustmentChanged(GtkAdjustment *adjustment, ColorICCSelectorImpl *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
diff --git a/src/ui/widget/color-scales.cpp b/src/ui/widget/color-scales.cpp
index 588e9a84d..d68d19aec 100644
--- a/src/ui/widget/color-scales.cpp
+++ b/src/ui/widget/color-scales.cpp
@@ -376,6 +376,7 @@ void ColorScales::setMode(SPColorScalesMode mode)
switch (mode) {
case SP_COLOR_SCALES_MODE_RGB:
_setRangeLimit(255.0);
+ gtk_adjustment_set_upper(_a[3], 100.0);
gtk_label_set_markup_with_mnemonic(GTK_LABEL(_l[0]), _("_R:"));
_s[0]->set_tooltip_text(_("Red"));
gtk_widget_set_tooltip_text(_b[0], _("Red"));
diff --git a/src/ui/widget/color-wheel-selector.cpp b/src/ui/widget/color-wheel-selector.cpp
index 1c2660876..969530302 100644
--- a/src/ui/widget/color-wheel-selector.cpp
+++ b/src/ui/widget/color-wheel-selector.cpp
@@ -78,7 +78,7 @@ void ColorWheelSelector::_initUI()
attach(*label, 0, row, 1, 1);
/* Adjustment */
- _alpha_adjustment = Gtk::Adjustment::create(0.0, 0.0, 255.0, 1.0, 10.0, 10.0);
+ _alpha_adjustment = Gtk::Adjustment::create(0.0, 0.0, 100.0, 1.0, 10.0, 10.0);
/* Slider */
_slider = Gtk::manage(new Inkscape::UI::Widget::ColorSlider(_alpha_adjustment));
@@ -137,14 +137,6 @@ void ColorWheelSelector::_adjustmentChanged()
return;
}
- // 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 = _alpha_adjustment->get_value();
- gdouble upper = _alpha_adjustment->get_upper();
- if (value > 0.0 && value < 1.0) {
- _alpha_adjustment->set_value(floor(value * upper + 0.5));
- }
-
_color.preserveICC();
_color.setAlpha(ColorScales::getScaled(_alpha_adjustment->gobj()));
}
diff --git a/src/ui/widget/unit-tracker.cpp b/src/ui/widget/unit-tracker.cpp
index 665bb7497..4abfaa9c8 100644
--- a/src/ui/widget/unit-tracker.cpp
+++ b/src/ui/widget/unit-tracker.cpp
@@ -180,7 +180,9 @@ UnitTracker::create_tool_item(Glib::ustring const &label,
Glib::ustring const &tooltip)
{
auto combo = ComboToolItem::create(label, tooltip, "NotUsed", _store);
+ combo->set_active(_active);
combo->signal_changed().connect(sigc::mem_fun(*this, &UnitTracker::_unitChangedCB));
+ combo->set_data("unit-tracker", this);
_combo_list.push_back(combo);
return combo;
}