diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js index 248ebab6cbf97b0d21df917dda2371ac8837b79b..b660e39289ed63a38c2ab1d6a26bebfb1b80b20a 100644 --- a/pd/nw/pdgui.js +++ b/pd/nw/pdgui.js @@ -3517,8 +3517,17 @@ function gui_textarea(cid, tag, x, y, max_char_width, text, font_size, state) { var range, svg_view; var gobj = get_gobj(cid, tag); if (state !== 0) { - // Hide the gobj while we edit - configure_item(gobj, { display: 'none' }); + // Hide the gobj while we edit. However, we want the gobj to + // contribute to the svg's bbox-- that way when the new_object_textentry + // goes away we still have the same dimensions. Otherwise the user + // can get strange jumps in the viewport when instantiating an object + // at the extremities of the patch. + // To solve this, we use 'visibility' instead of 'display', since it + // still uses the hidden item when calculating the bbox. + // (We can probably solve this problem by throwing in yet another + // gui_canvas_getscroll, but this seems like the right way to go + // anyway.) + configure_item(gobj, { visibility: 'hidden' }); var p = patchwin[cid].window.document.createElement('p'); configure_item(p, { id: 'new_object_textentry' @@ -3544,7 +3553,7 @@ function gui_textarea(cid, tag, x, y, max_char_width, text, font_size, state) { patchwin[cid].window.canvas_events.floating_text(); } } else { - configure_item(gobj, { display: 'inline' }); + configure_item(gobj, { visibility: 'normal' }); var p = patchwin[cid].window.document.getElementById('new_object_textentry'); if (p !== null) { p.parentNode.removeChild(p); @@ -3562,12 +3571,12 @@ function gui_undo_menu(cid, undo_text, redo_text) { } function do_getscroll(cid) { -return; var svg = get_item(cid, 'patchsvg'); var bbox = svg.getBBox(); var width = bbox.x > 0 ? bbox.x + bbox.width : bbox.width, height = bbox.y > 0 ? bbox.y + bbox.height : bbox.height; if (width === 0) { +gui_post("our width is 0"); width = patchwin[cid].window.innerWidth; } if (height === 0) { @@ -3604,7 +3613,7 @@ var getscroll_var = {}; // which would be a buggy UI function gui_canvas_getscroll(cid) { clearTimeout(getscroll_var); - getscroll_var = setTimeout(do_getscroll, 100, cid); + getscroll_var = setTimeout(do_getscroll, 250, cid); } // handling the selection