X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fview%2Fedit-widget.cpp;h=bac6854a13e873d874e65526fc3a0bee10c7788c;hb=0dd12485e26b98c7eb9963768ec4bd9869186d98;hp=626c3094107116fecb279779930106091382e9a1;hpb=33ac04c1d2903b1c2340cb55f2f6067003b80f4b;p=inkscape.git diff --git a/src/ui/view/edit-widget.cpp b/src/ui/view/edit-widget.cpp index 626c30941..bac6854a1 100644 --- a/src/ui/view/edit-widget.cpp +++ b/src/ui/view/edit-widget.cpp @@ -16,7 +16,11 @@ * Derek P. Moore * Lauris Kaplinski * Frank Felfe + * John Bintz + * Johan Engelen * + * Copyright (C) 2007 Johan Engelen + * Copyright (C) 2006 John Bintz * Copyright (C) 1999-2005 Authors * Copyright (C) 2000-2001 Ximian, Inc. * @@ -74,7 +78,8 @@ EditWidget::EditWidget (SPDocument *doc) _act_grp(Gtk::ActionGroup::create()), _ui_mgr(Gtk::UIManager::create()), _update_s_f(false), - _update_a_f(false) + _update_a_f(false), + _interaction_disabled_counter(0) { g_warning("Creating new EditWidget"); @@ -1149,11 +1154,9 @@ EditWidget::setPosition (NR::Point p) void EditWidget::setTransient (void* p, int i) { -#ifndef WIN32 gtk_window_set_transient_for (static_cast(p), this->gobj()); if (i==2) this->Gtk::Window::present(); -#endif } NR::Point @@ -1293,6 +1296,37 @@ EditWidget::requestCanvasUpdate() _svg_canvas.widget().queue_draw(); } +void +EditWidget::requestCanvasUpdateAndWait() +{ + requestCanvasUpdate(); + + while (gtk_events_pending()) + gtk_main_iteration_do(FALSE); +} + +void +EditWidget::enableInteraction() +{ + g_return_if_fail(_interaction_disabled_counter > 0); + + _interaction_disabled_counter--; + + if (_interaction_disabled_counter == 0) { + this->set_sensitive(true); + } +} + +void +EditWidget::disableInteraction() +{ + if (_interaction_disabled_counter == 0) { + this->set_sensitive(false); + } + + _interaction_disabled_counter++; +} + void EditWidget::activateDesktop() { @@ -1308,7 +1342,9 @@ EditWidget::deactivateDesktop() void EditWidget::viewSetPosition (NR::Point p) { - p -= _namedview->gridorigin; + // p -= _namedview->gridorigin; + /// \todo Why was the origin corrected for the grid origin? (johan) + double lo, up, pos, max; _top_ruler.get_range (lo, up, pos, max); _top_ruler.set_range (lo, up, p[NR::X], max); @@ -1319,18 +1355,19 @@ EditWidget::viewSetPosition (NR::Point p) void EditWidget::updateRulers() { - NR::Point origin = _namedview->gridorigin; - + //NR::Point gridorigin = _namedview->gridorigin; + /// \todo Why was the origin corrected for the grid origin? (johan) + NR::Rect const viewbox = _svg_canvas.spobj()->getViewbox(); double lo, up, pos, max; double const scale = _desktop->current_zoom(); - double s = viewbox.min()[NR::X] / scale - origin[NR::X]; - double e = viewbox.max()[NR::X] / scale - origin[NR::X]; + double s = viewbox.min()[NR::X] / scale; //- gridorigin[NR::X]; + double e = viewbox.max()[NR::X] / scale; //- gridorigin[NR::X]; _top_ruler.get_range(lo, up, pos, max); _top_ruler.set_range(s, e, pos, e); - s = viewbox.min()[NR::Y] / -scale - origin[NR::Y]; - e = viewbox.max()[NR::Y] / -scale - origin[NR::Y]; - _left_ruler.set_range(s, e, origin[NR::Y], e); + s = viewbox.min()[NR::Y] / -scale; //- gridorigin[NR::Y]; + e = viewbox.max()[NR::Y] / -scale; //- gridorigin[NR::Y]; + _left_ruler.set_range(s, e, 0 /*gridorigin[NR::Y]*/, e); /// \todo is that correct? } @@ -1346,11 +1383,11 @@ EditWidget::updateScrollbars (double scale) /* The desktop region we always show unconditionally */ SPDocument *doc = _desktop->doc(); - NR::Rect const r = sp_item_bbox_desktop(SP_ITEM(SP_DOCUMENT_ROOT(doc))); - NR::Rect darea(NR::Point(MIN(r.min()[NR::X], -sp_document_width(doc)), - MIN(r.min()[NR::Y], -sp_document_height(doc))), - NR::Point(MAX(r.max()[NR::X], 2 * sp_document_width(doc)), - MAX(r.max()[NR::Y], 2 * sp_document_height(doc)))); + NR::Rect darea = NR::Rect(NR::Point(-sp_document_width(doc), + -sp_document_height(doc)), + NR::Point(2 * sp_document_width(doc), + 2 * sp_document_height(doc))); + darea = NR::union_bounds(darea, sp_item_bbox_desktop(SP_ITEM(SP_DOCUMENT_ROOT(doc)))); /* Canvas region we always show unconditionally */ NR::Rect carea(NR::Point(darea.min()[NR::X] * scale - 64, @@ -1361,7 +1398,7 @@ EditWidget::updateScrollbars (double scale) NR::Rect const viewbox = _svg_canvas.spobj()->getViewbox(); /* Viewbox is always included into scrollable region */ - carea = NR::Rect::union_bounds(carea, viewbox); + carea = NR::union_bounds(carea, viewbox); Gtk::Adjustment *adj = _bottom_scrollbar.get_adjustment(); adj->set_value(viewbox.min()[NR::X]); @@ -1496,6 +1533,7 @@ EditWidget::initEdit (SPDocument *doc) _svg_canvas.init (_desktop); _desktop->init (_namedview, _svg_canvas.spobj()); sp_namedview_window_from_document (_desktop); + sp_namedview_update_layers_from_document (_desktop); _dt2r = 1.0 / _namedview->doc_units->unittobase; /// \todo convert to sigc++ when SPObject hierarchy gets converted @@ -1595,7 +1633,7 @@ EditWidget::onWindowRealize() NR::Rect d(NR::Point(0, 0), NR::Point(sp_document_width(_desktop->doc()), sp_document_height(_desktop->doc()))); - if (fabs(d.dimensions()[NR::X]) < 1.0 || fabs(d.dimensions()[NR::Y]) < 1.0) { + if (d.isEmpty(1.0)) { return; }