Browse Source

Fix toolbars position after device change

pull/2524/head
Artur Arseniev 7 years ago
parent
commit
c57a22e491
  1. 14
      src/canvas/index.js
  2. 16
      src/canvas/view/CanvasView.js

14
src/canvas/index.js

@ -402,7 +402,7 @@ export default () => {
return result;
},
canvasRectOffset(el, pos) {
canvasRectOffset(el, pos, opts = {}) {
const getFrameElFromDoc = doc => {
const { defaultView } = doc;
return defaultView && defaultView.frameElement;
@ -412,11 +412,17 @@ export default () => {
const zoom = this.em.getZoomDecimal();
const side = top ? 'top' : 'left';
const doc = el.ownerDocument;
const { offsetTop = 0, offsetLeft = 0 } = getFrameElFromDoc(doc);
const { offsetTop = 0, offsetLeft = 0 } = opts.offset
? getFrameElFromDoc(doc)
: {};
const { scrollTop = 0, scrollLeft = 0 } = doc.body || {};
const scroll = top ? scrollTop : scrollLeft;
const offset = top ? offsetTop : offsetLeft;
// if (!top) {
// console.log('LEFT', { posLeft: pos[side], scroll, offset }, el);
// }
return pos[side] - (scroll - offset) * zoom;
};
@ -434,7 +440,7 @@ export default () => {
const elRight = pos.left + pos.width;
const cv = this.getCanvasView();
const frCvOff = cv.getPosition();
const frameOffset = cv.getFrameOffset();
const frameOffset = cv.getFrameOffset(el);
const { event } = opts;
let top = -toolbarH;
@ -565,7 +571,7 @@ export default () => {
startAutoscroll() {
this.dragging = 1;
let toListen = this.getScrollListeners();
frameRect = CanvasView.getFrameOffset(1);
frameRect = CanvasView.getFrameOffset();
// By detaching those from the stack avoid browsers lags
// Noticeable with "fast" drag of blocks

16
src/canvas/view/CanvasView.js

@ -118,8 +118,9 @@ export default Backbone.View.extend({
* @return {Boolean}
*/
isElInViewport(el) {
const rect = getElRect(getElement(el));
const frameRect = this.getFrameOffset();
const elem = getElement(el);
const rect = getElRect(elem);
const frameRect = this.getFrameOffset(elem);
const rTop = rect.top;
const rLeft = rect.left;
return (
@ -356,8 +357,13 @@ export default Backbone.View.extend({
* @return {Object}
* @private
*/
getFrameOffset(force = 0) {
if (!this.frmOff || force) this.frmOff = this.offset(this.frame.el);
getFrameOffset(el) {
if (!this.frmOff || el) {
const frEl = el
? el.ownerDocument.defaultView.frameElement
: this.frame.el;
this.frmOff = this.offset(frEl);
}
return this.frmOff;
},
@ -380,7 +386,7 @@ export default Backbone.View.extend({
getElementPos(el, opts) {
const zoom = this.getZoom();
var opt = opts || {};
var frmOff = this.getFrameOffset();
var frmOff = this.getFrameOffset(el);
var cvsOff = this.getCanvasOffset();
var eo = this.offset(el, opts);

Loading…
Cancel
Save