diff options
| author | Krzysztof Kosi??ski <tweenk.pl@gmail.com> | 2011-04-07 23:42:04 +0000 |
|---|---|---|
| committer | Krzysztof KosiĆski <tweenk.pl@gmail.com> | 2011-04-07 23:42:04 +0000 |
| commit | 945ce419c806c73d70203dec33ececafbe108a92 (patch) | |
| tree | cfcdb59bf47e9db7f9e01f7eebb59924bdeaea94 /src/ui/widget | |
| parent | Merge from trunk (again) (diff) | |
| parent | Extensions. SVG+media fix (see Bug #400356). (diff) | |
| download | inkscape-945ce419c806c73d70203dec33ececafbe108a92.tar.gz inkscape-945ce419c806c73d70203dec33ececafbe108a92.zip | |
Merge from trunk
(bzr r9508.1.73)
Diffstat (limited to 'src/ui/widget')
| -rw-r--r-- | src/ui/widget/attr-widget.h | 2 | ||||
| -rw-r--r-- | src/ui/widget/color-picker.h | 1 | ||||
| -rw-r--r-- | src/ui/widget/filter-effect-chooser.cpp | 4 | ||||
| -rw-r--r-- | src/ui/widget/layer-selector.cpp | 18 | ||||
| -rw-r--r-- | src/ui/widget/object-composite-settings.cpp | 5 | ||||
| -rw-r--r-- | src/ui/widget/page-sizer.cpp | 6 | ||||
| -rw-r--r-- | src/ui/widget/page-sizer.h | 1 | ||||
| -rw-r--r-- | src/ui/widget/preferences-widget.cpp | 138 | ||||
| -rw-r--r-- | src/ui/widget/preferences-widget.h | 14 | ||||
| -rw-r--r-- | src/ui/widget/registered-widget.cpp | 4 | ||||
| -rw-r--r-- | src/ui/widget/registered-widget.h | 8 | ||||
| -rw-r--r-- | src/ui/widget/ruler.cpp | 5 | ||||
| -rw-r--r-- | src/ui/widget/selected-style.cpp | 2 | ||||
| -rw-r--r-- | src/ui/widget/selected-style.h | 1 | ||||
| -rw-r--r-- | src/ui/widget/style-subject.h | 1 | ||||
| -rw-r--r-- | src/ui/widget/svg-canvas.cpp | 2 | ||||
| -rw-r--r-- | src/ui/widget/tolerance-slider.cpp | 2 |
17 files changed, 188 insertions, 26 deletions
diff --git a/src/ui/widget/attr-widget.h b/src/ui/widget/attr-widget.h index b9924a2ef..7b9c35ab7 100644 --- a/src/ui/widget/attr-widget.h +++ b/src/ui/widget/attr-widget.h @@ -149,7 +149,7 @@ protected: { const gchar* name = (const gchar*)sp_attribute_name(_attr); if(name && o) { - const gchar* val = SP_OBJECT_REPR(o)->attribute(name); + const gchar* val = o->getRepr()->attribute(name); return val; } return 0; diff --git a/src/ui/widget/color-picker.h b/src/ui/widget/color-picker.h index 2c246aaa3..346ce5121 100644 --- a/src/ui/widget/color-picker.h +++ b/src/ui/widget/color-picker.h @@ -13,6 +13,7 @@ #ifndef __COLOR_PICKER_H__ #define __COLOR_PICKER_H__ +#include <stddef.h> #include <sigc++/sigc++.h> #include <gtkmm/button.h> #include <gtkmm/dialog.h> diff --git a/src/ui/widget/filter-effect-chooser.cpp b/src/ui/widget/filter-effect-chooser.cpp index 309730600..37202c8b4 100644 --- a/src/ui/widget/filter-effect-chooser.cpp +++ b/src/ui/widget/filter-effect-chooser.cpp @@ -22,8 +22,8 @@ namespace UI { namespace Widget { SimpleFilterModifier::SimpleFilterModifier(int flags) - : _lb_blend(_("_Blend mode:")), - _lb_blur(_("Blur:"), Gtk::ALIGN_LEFT), + : _lb_blend(_("Blend mode:")), + _lb_blur(_("_Blur:"), Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, true), _blend(BlendModeConverter, SP_ATTR_INVALID, false), _blur(0, 0, 100, 1, 0.01, 1) { diff --git a/src/ui/widget/layer-selector.cpp b/src/ui/widget/layer-selector.cpp index 6d1da0af0..ba4629c82 100644 --- a/src/ui/widget/layer-selector.cpp +++ b/src/ui/widget/layer-selector.cpp @@ -236,6 +236,8 @@ void LayerSelector::_selectLayer(SPObject *layer) { using Inkscape::Util::reverse_list; _selection_changed_connection.block(); + _visibility_toggled_connection.block(); + _lock_toggled_connection.block(); while (!_layer_model->children().empty()) { Gtk::ListStore::iterator first_row(_layer_model->children().begin()); @@ -285,6 +287,8 @@ void LayerSelector::_selectLayer(SPObject *layer) { _lock_toggle.set_active(( SP_IS_ITEM(layer) ? SP_ITEM(layer)->isLocked() : false )); } + _lock_toggled_connection.unblock(); + _visibility_toggled_connection.unblock(); _selection_changed_connection.unblock(); } @@ -460,7 +464,7 @@ void LayerSelector::_buildEntry(unsigned depth, SPObject &object) { ); SPObject *layer=_desktop->currentLayer(); - if ( &object == layer || &object == SP_OBJECT_PARENT(layer) ) { + if ( (&object == layer) || (&object == layer->parent) ) { callbacks->update_list = sigc::bind( sigc::mem_fun(*this, &LayerSelector::_protectUpdate), sigc::bind( @@ -498,12 +502,12 @@ void LayerSelector::_buildEntry(unsigned depth, SPObject &object) { sp_object_ref(&object, NULL); row->set_value(_model_columns.object, &object); - Inkscape::GC::anchor(SP_OBJECT_REPR(&object)); - row->set_value(_model_columns.repr, SP_OBJECT_REPR(&object)); + Inkscape::GC::anchor(object.getRepr()); + row->set_value(_model_columns.repr, object.getRepr()); row->set_value(_model_columns.callbacks, reinterpret_cast<void *>(callbacks)); - sp_repr_add_listener(SP_OBJECT_REPR(&object), vector, callbacks); + sp_repr_add_listener(object.getRepr(), vector, callbacks); } /** Removes a row from the _model_columns object, disconnecting listeners @@ -536,13 +540,13 @@ void LayerSelector::_prepareLabelRenderer( // (or before one has been selected) something appears to // "invent" an iterator with null data and try to render it; // where does it come from, and how can we avoid it? - if ( object && SP_OBJECT_REPR(object) ) { + if ( object && object->getRepr() ) { SPObject *layer=( _desktop ? _desktop->currentLayer() : NULL ); SPObject *root=( _desktop ? _desktop->currentRoot() : NULL ); - bool isancestor = !( (layer && (SP_OBJECT_PARENT(object) == SP_OBJECT_PARENT(layer))) || ((layer == root) && (SP_OBJECT_PARENT(object) == root))); + bool isancestor = !( (layer && (object->parent == layer->parent)) || ((layer == root) && (object->parent == root))); - bool iscurrent = ( object == layer && object != root ); + bool iscurrent = ( (object == layer) && (object != root) ); gchar *format = g_strdup_printf ( "<span size=\"smaller\" %s><tt>%*s%s</tt>%s%s%s%%s%s%s%s</span>", diff --git a/src/ui/widget/object-composite-settings.cpp b/src/ui/widget/object-composite-settings.cpp index 1de425da3..06d57c4ac 100644 --- a/src/ui/widget/object-composite-settings.cpp +++ b/src/ui/widget/object-composite-settings.cpp @@ -60,7 +60,7 @@ ObjectCompositeSettings::ObjectCompositeSettings(unsigned int verb_code, char co _opacity_tag(Glib::ustring(history_prefix) + ":opacity"), _opacity_vbox(false, 0), _opacity_label_box(false, 0), - _opacity_label(_("Opacity (%):"), 0.0, 1.0, true), + _opacity_label(_("_Opacity (%):"), 0.0, 1.0, true), _opacity_adjustment(100.0, 0.0, 100.0, 1.0, 1.0, 0.0), _opacity_hscale(_opacity_adjustment), _opacity_spin_button(_opacity_adjustment, 0.01, 1), @@ -86,6 +86,7 @@ ObjectCompositeSettings::ObjectCompositeSettings(unsigned int verb_code, char co _opacity_hscale.set_draw_value(false); _opacity_hscale.set_update_policy(Gtk::UPDATE_DELAYED); _opacity_adjustment.signal_value_changed().connect(sigc::mem_fun(*this, &ObjectCompositeSettings::_opacityValueChanged)); + _opacity_label.set_mnemonic_widget(_opacity_hscale); show_all_children(); @@ -145,7 +146,7 @@ ObjectCompositeSettings::_blendBlurValueChanged() } SPItem * item = SP_ITEM(*i); - SPStyle *style = SP_OBJECT_STYLE(item); + SPStyle *style = item->style; g_assert(style != NULL); if (blendmode != "normal") { diff --git a/src/ui/widget/page-sizer.cpp b/src/ui/widget/page-sizer.cpp index f7cb6f145..f306b9eea 100644 --- a/src/ui/widget/page-sizer.cpp +++ b/src/ui/widget/page-sizer.cpp @@ -422,7 +422,7 @@ PageSizer::setDim (double w, double h, bool changeList) // The origin for the user is in the lower left corner; this point should remain stationary when // changing the page size. The SVG's origin however is in the upper left corner, so we must compensate for this Geom::Translate const vert_offset(Geom::Point(0, (old_height - h))); - SP_GROUP(SP_ROOT(doc->root))->translateChildItems(vert_offset); + SP_GROUP(SP_ROOT(doc->root))->translateChildItems(vert_offset); DocumentUndo::done(doc, SP_VERB_NONE, _("Set page size")); } @@ -538,8 +538,8 @@ PageSizer::fire_fit_canvas_to_selection_or_drawing() SPNamedView *nv; Inkscape::XML::Node *nv_repr; if ((doc = sp_desktop_document(SP_ACTIVE_DESKTOP)) - && (nv = sp_document_namedview(doc, 0)) - && (nv_repr = SP_OBJECT_REPR(nv))) { + && (nv = sp_document_namedview(doc, 0)) + && (nv_repr = nv->getRepr())) { sp_repr_set_svg_double(nv_repr, "fit-margin-top", _marginTop.getValue()); sp_repr_set_svg_double(nv_repr, "fit-margin-left", _marginLeft.getValue()); sp_repr_set_svg_double(nv_repr, "fit-margin-right", _marginRight.getValue()); diff --git a/src/ui/widget/page-sizer.h b/src/ui/widget/page-sizer.h index ba6c8dd13..2072aeccd 100644 --- a/src/ui/widget/page-sizer.h +++ b/src/ui/widget/page-sizer.h @@ -13,6 +13,7 @@ #define INKSCAPE_UI_WIDGET_PAGE_SIZER__H #include <gtkmm.h> +#include <stddef.h> #include <sigc++/sigc++.h> #include "helper/units.h" diff --git a/src/ui/widget/preferences-widget.cpp b/src/ui/widget/preferences-widget.cpp index 4816304db..afcaa338e 100644 --- a/src/ui/widget/preferences-widget.cpp +++ b/src/ui/widget/preferences-widget.cpp @@ -14,6 +14,10 @@ # include <config.h> #endif +#ifdef WIN32 +#include <windows.h> +#endif + #include <gtkmm/frame.h> #include <gtkmm/alignment.h> #include <gtkmm/box.h> @@ -22,7 +26,9 @@ #include "ui/widget/preferences-widget.h" #include "verbs.h" #include "selcue.h" +#include "io/sys.h" #include <iostream> +#include "desktop.h" #include "enums.h" #include "inkscape.h" #include "desktop-handles.h" @@ -30,6 +36,7 @@ #include "style.h" #include "selection.h" #include "selection-chemistry.h" +#include "ui/dialog/filedialog.h" #include "xml/repr.h" using namespace Inkscape::UI::Widget; @@ -618,6 +625,137 @@ void PrefEntryButtonHBox::onRelatedButtonClickedCallback() } } +void PrefEntryFileButtonHBox::init(Glib::ustring const &prefs_path, + bool visibility) +{ + _prefs_path = prefs_path; + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + + relatedEntry = new Gtk::Entry(); + relatedEntry->set_invisible_char('*'); + relatedEntry->set_visibility(visibility); + relatedEntry->set_text(prefs->getString(_prefs_path)); + + relatedButton = new Gtk::Button(); + Gtk::HBox* pixlabel = new Gtk::HBox(false, 3); + Gtk::Image *im = new Gtk::Image(Gtk::StockID(Gtk::Stock::INDEX), + Gtk::ICON_SIZE_BUTTON); + pixlabel->pack_start(*im); + Gtk::Label *l = new Gtk::Label(); + l->set_markup_with_mnemonic(_("_Browse...")); + pixlabel->pack_start(*l); + relatedButton->add(*pixlabel); + + this->pack_end(*relatedButton, false, false, 4); + this->pack_start(*relatedEntry, true, true, 0); + + relatedButton->signal_clicked().connect( + sigc::mem_fun(*this, &PrefEntryFileButtonHBox::onRelatedButtonClickedCallback)); + relatedEntry->signal_changed().connect( + sigc::mem_fun(*this, &PrefEntryFileButtonHBox::onRelatedEntryChangedCallback)); +} + +void PrefEntryFileButtonHBox::onRelatedEntryChangedCallback() +{ + if (this->is_visible()) //only take action if user changed value + { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setString(_prefs_path, relatedEntry->get_text()); + } +} + +static Inkscape::UI::Dialog::FileOpenDialog * selectPrefsFileInstance = NULL; + +void PrefEntryFileButtonHBox::onRelatedButtonClickedCallback() +{ + if (this->is_visible()) //only take action if user changed value + { + //# Get the current directory for finding files + static Glib::ustring open_path; + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + + + Glib::ustring attr = prefs->getString(_prefs_path); + if (!attr.empty()) open_path = attr; + + //# Test if the open_path directory exists + if (!Inkscape::IO::file_test(open_path.c_str(), + (GFileTest)(G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))) + open_path = ""; + +#ifdef WIN32 + //# If no open path, default to our win32 documents folder + if (open_path.empty()) + { + // The path to the My Documents folder is read from the + // value "HKEY_CURRENT_USER\Software\Windows\CurrentVersion\Explorer\Shell Folders\Personal" + HKEY key = NULL; + if(RegOpenKeyExA(HKEY_CURRENT_USER, + "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", + 0, KEY_QUERY_VALUE, &key) == ERROR_SUCCESS) + { + WCHAR utf16path[_MAX_PATH]; + DWORD value_type; + DWORD data_size = sizeof(utf16path); + if(RegQueryValueExW(key, L"Personal", NULL, &value_type, + (BYTE*)utf16path, &data_size) == ERROR_SUCCESS) + { + g_assert(value_type == REG_SZ); + gchar *utf8path = g_utf16_to_utf8( + (const gunichar2*)utf16path, -1, NULL, NULL, NULL); + if(utf8path) + { + open_path = Glib::ustring(utf8path); + g_free(utf8path); + } + } + } + } +#endif + + //# If no open path, default to our home directory + if (open_path.empty()) + { + open_path = g_get_home_dir(); + open_path.append(G_DIR_SEPARATOR_S); + } + + //# Create a dialog + SPDesktop *desktop = SP_ACTIVE_DESKTOP; + if (!selectPrefsFileInstance) { + selectPrefsFileInstance = + Inkscape::UI::Dialog::FileOpenDialog::create( + *desktop->getToplevel(), + open_path, + Inkscape::UI::Dialog::EXE_TYPES, + _("Select a bitmap editor")); + } + + //# Show the dialog + bool const success = selectPrefsFileInstance->show(); + + if (!success) { + return; + } + + //# User selected something. Get name and type + Glib::ustring fileName = selectPrefsFileInstance->getFilename(); + + if (!fileName.empty()) + { + Glib::ustring newFileName = Glib::filename_to_utf8(fileName); + + if ( newFileName.size() > 0) + open_path = newFileName; + else + g_warning( "ERROR CONVERTING OPEN FILENAME TO UTF-8" ); + + prefs->setString(_prefs_path, open_path); + } + + relatedEntry->set_text(fileName); + } +} void PrefFileButton::init(Glib::ustring const &prefs_path) { diff --git a/src/ui/widget/preferences-widget.h b/src/ui/widget/preferences-widget.h index 6c4533451..6c7f9ce4a 100644 --- a/src/ui/widget/preferences-widget.h +++ b/src/ui/widget/preferences-widget.h @@ -26,6 +26,7 @@ #include <gtkmm/drawingarea.h> #include <gtkmm/frame.h> #include <gtkmm/filechooserbutton.h> +#include <stddef.h> #include <sigc++/sigc++.h> #include <glibmm/i18n.h> @@ -176,6 +177,19 @@ protected: void onRelatedButtonClickedCallback(); }; +class PrefEntryFileButtonHBox : public Gtk::HBox +{ +public: + void init(Glib::ustring const &prefs_path, + bool mask); +protected: + Glib::ustring _prefs_path; + Gtk::Button *relatedButton; + Gtk::Entry *relatedEntry; + void onRelatedEntryChangedCallback(); + void onRelatedButtonClickedCallback(); +}; + class PrefFileButton : public Gtk::FileChooserButton { public: diff --git a/src/ui/widget/registered-widget.cpp b/src/ui/widget/registered-widget.cpp index 04bd27285..c2580013a 100644 --- a/src/ui/widget/registered-widget.cpp +++ b/src/ui/widget/registered-widget.cpp @@ -344,7 +344,7 @@ RegisteredColorPicker::on_changed (guint32 rgba) SPDesktop *dt = SP_ACTIVE_DESKTOP; if (!dt) return; - local_repr = SP_OBJECT_REPR (sp_desktop_namedview(dt)); + local_repr = sp_desktop_namedview(dt)->getRepr(); local_doc = sp_desktop_document(dt); } @@ -553,7 +553,7 @@ RegisteredTransformedPoint::setValue(Geom::Point const & p) } void -RegisteredTransformedPoint::setTransform(Geom::Matrix const & canvas_to_svg) +RegisteredTransformedPoint::setTransform(Geom::Affine const & canvas_to_svg) { // check if matrix is singular / has inverse if ( ! canvas_to_svg.isSingular() ) { diff --git a/src/ui/widget/registered-widget.h b/src/ui/widget/registered-widget.h index efb5eb70e..560c63dd4 100644 --- a/src/ui/widget/registered-widget.h +++ b/src/ui/widget/registered-widget.h @@ -18,7 +18,7 @@ #include <gtkmm/adjustment.h> #include <gtkmm/tooltips.h> #include <gtkmm/togglebutton.h> -#include <2geom/matrix.h> +#include <2geom/affine.h> #include "xml/node.h" #include "registry.h" @@ -101,7 +101,7 @@ protected: if (!local_repr) { // no repr specified, use active desktop's namedview's repr SPDesktop* dt = SP_ACTIVE_DESKTOP; - local_repr = SP_OBJECT_REPR (sp_desktop_namedview(dt)); + local_repr = reinterpret_cast<SPObject *>(sp_desktop_namedview(dt))->getRepr(); local_doc = sp_desktop_document(dt); } @@ -326,14 +326,14 @@ public: // redefine setValue, because transform must be applied void setValue(Geom::Point const & p); - void setTransform(Geom::Matrix const & canvas_to_svg); + void setTransform(Geom::Affine const & canvas_to_svg); protected: sigc::connection _value_x_changed_connection; sigc::connection _value_y_changed_connection; void on_value_changed(); - Geom::Matrix to_svg; + Geom::Affine to_svg; }; diff --git a/src/ui/widget/ruler.cpp b/src/ui/widget/ruler.cpp index 107f4e8c6..a220a54ad 100644 --- a/src/ui/widget/ruler.cpp +++ b/src/ui/widget/ruler.cpp @@ -26,6 +26,7 @@ #include "ui/widget/ruler.h" #include "xml/repr.h" +#include "display/sp-canvas.h" #include "display/guideline.h" #include "desktop.h" #include "desktop-handles.h" @@ -101,7 +102,7 @@ Ruler::on_button_press_event(GdkEventButton *evb) { g_assert(_dt); Geom::Point const &event_dt = get_event_dt(); - Inkscape::XML::Node *repr = SP_OBJECT_REPR(_dt->namedview); + Inkscape::XML::Node *repr = _dt->namedview->getRepr(); if (evb->button == 1) { _dragging = true; @@ -152,7 +153,7 @@ Ruler::on_button_release_event(GdkEventButton *evb) repr->setAttribute("orientation", _horiz_f ? "horizontal" : "vertical"); double const guide_pos_dt = event_dt[ _horiz_f ? Geom::Y : Geom::X ]; sp_repr_set_svg_double(repr, "position", guide_pos_dt); - SP_OBJECT_REPR(_dt->namedview)->appendChild(repr); + _dt->namedview->getRepr()->appendChild(repr); Inkscape::GC::release(repr); DocumentUndo::done(sp_desktop_document(_dt), SP_VERB_NONE, /* TODO: annotate */ "ruler.cpp:157"); diff --git a/src/ui/widget/selected-style.cpp b/src/ui/widget/selected-style.cpp index e7d8ac5a3..50476dc65 100644 --- a/src/ui/widget/selected-style.cpp +++ b/src/ui/widget/selected-style.cpp @@ -950,7 +950,7 @@ SelectedStyle::update() if (paint->set && paint->isPaintserver()) { SPPaintServer *server = (i == SS_FILL)? SP_STYLE_FILL_SERVER (query) : SP_STYLE_STROKE_SERVER (query); if ( server ) { - Inkscape::XML::Node *srepr = SP_OBJECT_REPR(server); + Inkscape::XML::Node *srepr = server->getRepr(); _paintserver_id[i] += "url(#"; _paintserver_id[i] += srepr->attribute("id"); _paintserver_id[i] += ")"; diff --git a/src/ui/widget/selected-style.h b/src/ui/widget/selected-style.h index 0229364c7..e74d5b1ae 100644 --- a/src/ui/widget/selected-style.h +++ b/src/ui/widget/selected-style.h @@ -23,6 +23,7 @@ #include <gtkmm/adjustment.h> #include <gtkmm/spinbutton.h> +#include <stddef.h> #include <sigc++/sigc++.h> #include <glibmm/i18n.h> diff --git a/src/ui/widget/style-subject.h b/src/ui/widget/style-subject.h index 77e4c4846..6d5c96350 100644 --- a/src/ui/widget/style-subject.h +++ b/src/ui/widget/style-subject.h @@ -14,6 +14,7 @@ #include "libnr/nr-rect.h" #include <2geom/rect.h> #include "sp-item.h" +#include <stddef.h> #include <sigc++/sigc++.h> class SPDesktop; diff --git a/src/ui/widget/svg-canvas.cpp b/src/ui/widget/svg-canvas.cpp index 64657296d..7d37ec355 100644 --- a/src/ui/widget/svg-canvas.cpp +++ b/src/ui/widget/svg-canvas.cpp @@ -12,8 +12,8 @@ #include <gtkmm/widget.h> #include "desktop.h" #include "desktop-events.h" +#include "display/sp-canvas.h" #include "display/canvas-arena.h" -#include "display/display-forward.h" #include "ui/widget/svg-canvas.h" namespace Inkscape { diff --git a/src/ui/widget/tolerance-slider.cpp b/src/ui/widget/tolerance-slider.cpp index cc179ddbc..51e0a262f 100644 --- a/src/ui/widget/tolerance-slider.cpp +++ b/src/ui/widget/tolerance-slider.cpp @@ -189,7 +189,7 @@ ToleranceSlider::update (double val) SPDocument *doc = sp_desktop_document(dt); bool saved = DocumentUndo::getUndoSensitive(doc); DocumentUndo::setUndoSensitive(doc, false); - Inkscape::XML::Node *repr = SP_OBJECT_REPR (sp_desktop_namedview(dt)); + Inkscape::XML::Node *repr = sp_desktop_namedview(dt)->getRepr(); repr->setAttribute(_key.c_str(), os.str().c_str()); DocumentUndo::setUndoSensitive(doc, saved); |
