Skip to content

Commit d1a4c4e

Browse files
80x24adt-hgkimgmsa
authored
Feature, transformScale (#505)
* Feature, transformScale * Build * Build-lib * Fix, Min and max size Co-authored-by: adt-hgkim <[email protected]> Co-authored-by: Gustavo Santos <[email protected]>
1 parent 19cedd0 commit d1a4c4e

10 files changed

+13204
-376
lines changed

dist/vue-grid-layout.common.js

Lines changed: 146 additions & 176 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/vue-grid-layout.common.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/vue-grid-layout.umd.js

Lines changed: 146 additions & 176 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/vue-grid-layout.umd.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/vue-grid-layout.umd.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/vue-grid-layout.umd.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

Lines changed: 12836 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/App.vue

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
<div id="content">
2424
<button @click="decreaseWidth">Decrease Width</button>
2525
<button @click="increaseWidth">Increase Width</button>
26+
<button @click="scaleHalf">Scale x0.5</button>
27+
<button @click="scaleThreeQuarters">Scale x0.75</button>
28+
<button @click="scaleIdentity">Scale x1.0</button>
2629
<button @click="addItem">Add an item</button>
2730
<button @click="addItemDynamically">Add an item dynamically</button>
2831
<!-- Add to show rtl support -->
@@ -39,7 +42,8 @@
3942
Margin x: <input type="number" v-model="marginX"/> Margin y: <input type="number" v-model="marginY"/>
4043
</div>
4144
<grid-layout
42-
:margin="[parseInt(marginX), parseInt(marginY)]"
45+
id="grid-layout"
46+
:margin="[parseInt(marginX), parseInt(marginY)]"
4347
:layout.sync="layout"
4448
:col-num="parseInt(colNum)"
4549
:row-height="rowHeight"
@@ -52,6 +56,7 @@
5256
:restore-on-drag="restoreOnDrag"
5357
:use-css-transforms="true"
5458
:responsive="responsive"
59+
:transformScale="transformScale"
5560
@layout-created="layoutCreatedEvent"
5661
@layout-before-mount="layoutBeforeMountEvent"
5762
@layout-mounted="layoutMountedEvent"
@@ -169,6 +174,7 @@
169174
mirrored: false,
170175
responsive: true,
171176
bounded: false,
177+
transformScale: 1,
172178
preventCollision: false,
173179
compact: true,
174180
restoreOnDrag: true,
@@ -196,6 +202,18 @@
196202
width -= 20;
197203
document.getElementById("content").style.width = width+"px";
198204
},
205+
scaleHalf: function() {
206+
this.transformScale = 0.5
207+
document.getElementById("grid-layout").style.transform = "scale(0.5)";
208+
},
209+
scaleThreeQuarters: function() {
210+
this.transformScale = 0.75
211+
document.getElementById("grid-layout").style.transform = "scale(0.75)";
212+
},
213+
scaleIdentity: function() {
214+
this.transformScale = 1
215+
document.getElementById("grid-layout").style.transform = "scale(1)";
216+
},
199217
removeItem: function(i) {
200218
console.log("### REMOVE " + i);
201219
const index = this.layout.map(item => item.i).indexOf(i);

src/components/GridItem.vue

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@
229229
maxRows: Infinity,
230230
draggable: null,
231231
resizable: null,
232+
transformScale: 1,
232233
useCssTransforms: true,
233234
useStyleCursor: true,
234235
@@ -279,11 +280,17 @@
279280
self.resizable = isResizable;
280281
}
281282
};
283+
282284
self.setBoundedHandler = function (isBounded) {
283285
if (self.isBounded === null) {
284286
self.bounded = isBounded;
285287
}
286288
};
289+
290+
self.setTransformScaleHandler = function (transformScale) {
291+
self.transformScale = transformScale
292+
};
293+
287294
self.setRowHeightHandler = function (rowHeight) {
288295
self.rowHeight = rowHeight;
289296
};
@@ -306,6 +313,7 @@
306313
this.eventBus.$on('setDraggable', self.setDraggableHandler);
307314
this.eventBus.$on('setResizable', self.setResizableHandler);
308315
this.eventBus.$on('setBounded', self.setBoundedHandler);
316+
this.eventBus.$on('setTransformScale', self.setTransformScaleHandler)
309317
this.eventBus.$on('setRowHeight', self.setRowHeightHandler);
310318
this.eventBus.$on('setMaxRows', self.setMaxRowsHandler);
311319
this.eventBus.$on('directionchange', self.directionchangeHandler);
@@ -321,6 +329,7 @@
321329
this.eventBus.$off('setDraggable', self.setDraggableHandler);
322330
this.eventBus.$off('setResizable', self.setResizableHandler);
323331
this.eventBus.$off('setBounded', self.setBoundedHandler);
332+
this.eventBus.$off('setTransformScale', self.setTransformScaleHandler)
324333
this.eventBus.$off('setRowHeight', self.setRowHeightHandler);
325334
this.eventBus.$off('setMaxRows', self.setMaxRowsHandler);
326335
this.eventBus.$off('directionchange', self.directionchangeHandler);
@@ -355,6 +364,7 @@
355364
} else {
356365
this.bounded = this.isBounded;
357366
}
367+
this.transformScale = this.layout.transformScale
358368
this.useCssTransforms = this.layout.useCssTransforms;
359369
this.useStyleCursor = this.layout.useStyleCursor;
360370
this.createStyle();
@@ -540,6 +550,7 @@
540550
let pos;
541551
switch (event.type) {
542552
case "resizestart": {
553+
this.tryMakeResizable()
543554
this.previousW = this.innerW;
544555
this.previousH = this.innerH;
545556
pos = this.calcPosition(this.innerX, this.innerY, this.innerW, this.innerH);
@@ -553,11 +564,11 @@
553564
// console.log("### resize => " + event.type + ", lastW=" + this.lastW + ", lastH=" + this.lastH);
554565
const coreEvent = createCoreData(this.lastW, this.lastH, x, y);
555566
if (this.renderRtl) {
556-
newSize.width = this.resizing.width - coreEvent.deltaX;
567+
newSize.width = this.resizing.width - coreEvent.deltaX / this.transformScale;
557568
} else {
558-
newSize.width = this.resizing.width + coreEvent.deltaX;
569+
newSize.width = this.resizing.width + coreEvent.deltaX / this.transformScale;
559570
}
560-
newSize.height = this.resizing.height + coreEvent.deltaY;
571+
newSize.height = this.resizing.height + coreEvent.deltaY / this.transformScale;
561572
562573
///console.log("### resize => " + event.type + ", deltaX=" + coreEvent.deltaX + ", deltaY=" + coreEvent.deltaY);
563574
this.resizing = newSize;
@@ -627,12 +638,20 @@
627638
628639
let parentRect = event.target.offsetParent.getBoundingClientRect();
629640
let clientRect = event.target.getBoundingClientRect();
641+
642+
const cLeft = clientRect.left / this.transformScale;
643+
const pLeft = parentRect.left / this.transformScale;
644+
const cRight = clientRect.right / this.transformScale;
645+
const pRight = parentRect.right / this.transformScale;
646+
const cTop = clientRect.top / this.transformScale;
647+
const pTop = parentRect.top / this.transformScale;
648+
630649
if (this.renderRtl) {
631-
newPosition.left = (clientRect.right - parentRect.right) * -1;
650+
newPosition.left = (cRight - pRight) * -1;
632651
} else {
633-
newPosition.left = clientRect.left - parentRect.left;
652+
newPosition.left = cLeft - pLeft;
634653
}
635-
newPosition.top = clientRect.top - parentRect.top;
654+
newPosition.top = cTop - pTop;
636655
this.dragging = newPosition;
637656
this.isDragging = true;
638657
break;
@@ -641,13 +660,21 @@
641660
if (!this.isDragging) return;
642661
let parentRect = event.target.offsetParent.getBoundingClientRect();
643662
let clientRect = event.target.getBoundingClientRect();
663+
664+
const cLeft = clientRect.left / this.transformScale;
665+
const pLeft = parentRect.left / this.transformScale;
666+
const cRight = clientRect.right / this.transformScale;
667+
const pRight = parentRect.right / this.transformScale;
668+
const cTop = clientRect.top / this.transformScale;
669+
const pTop = parentRect.top / this.transformScale;
670+
644671
// Add rtl support
645672
if (this.renderRtl) {
646-
newPosition.left = (clientRect.right - parentRect.right) * -1;
673+
newPosition.left = (cRight - pRight) * -1;
647674
} else {
648-
newPosition.left = clientRect.left - parentRect.left;
675+
newPosition.left = cLeft - pLeft;
649676
}
650-
newPosition.top = clientRect.top - parentRect.top;
677+
newPosition.top = cTop - pTop;
651678
// console.log("### drag end => " + JSON.stringify(newPosition));
652679
// console.log("### DROP: " + JSON.stringify(newPosition));
653680
this.dragging = null;
@@ -659,11 +686,11 @@
659686
const coreEvent = createCoreData(this.lastX, this.lastY, x, y);
660687
// Add rtl support
661688
if (this.renderRtl) {
662-
newPosition.left = this.dragging.left - coreEvent.deltaX;
689+
newPosition.left = this.dragging.left - coreEvent.deltaX / this.transformScale;
663690
} else {
664-
newPosition.left = this.dragging.left + coreEvent.deltaX;
691+
newPosition.left = this.dragging.left + coreEvent.deltaX / this.transformScale;
665692
}
666-
newPosition.top = this.dragging.top + coreEvent.deltaY;
693+
newPosition.top = this.dragging.top + coreEvent.deltaY / this.transformScale;
667694
if(this.bounded){
668695
const bottomBoundary = event.target.offsetParent.clientHeight - this.calcGridItemWHPx(this.h, this.rowHeight, this.margin[1]);
669696
newPosition.top = this.clamp(newPosition.top, 0, bottomBoundary);
@@ -848,7 +875,7 @@
848875
}
849876
}
850877
if (this.resizable && !this.static) {
851-
let maximum = this.calcPosition(0,0,this.maxW, this.maxH);
878+
let maximum = this.calcPosition(0,0, this.maxW, this.maxH);
852879
let minimum = this.calcPosition(0,0, this.minW, this.minH);
853880
854881
// console.log("### MAX " + JSON.stringify(maximum));
@@ -865,12 +892,12 @@
865892
ignoreFrom: this.resizeIgnoreFrom,
866893
restrictSize: {
867894
min: {
868-
height: minimum.height,
869-
width: minimum.width
895+
height: minimum.height * this.transformScale,
896+
width: minimum.width * this.transformScale
870897
},
871898
max: {
872-
height: maximum.height,
873-
width: maximum.width
899+
height: maximum.height * this.transformScale,
900+
width: maximum.width * this.transformScale
874901
}
875902
},
876903
...this.resizeOption,

src/components/GridLayout.vue

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,10 @@
104104
return {};
105105
}
106106
},
107+
transformScale: {
108+
type: Number,
109+
default: 1
110+
},
107111
breakpoints:{
108112
type: Object,
109113
default: function(){return{ lg: 1200, md: 996, sm: 768, xs: 480, xxs: 0 }}
@@ -179,7 +183,7 @@
179183
const self = this;
180184
this.$nextTick(function() {
181185
self.initResponsiveFeatures();
182-
186+
183187
self.onWindowResize();
184188
185189
@@ -256,6 +260,9 @@
256260
isBounded: function() {
257261
this.eventBus.$emit("setBounded", this.isBounded);
258262
},
263+
transformScale: function() {
264+
this.eventBus.$emit("setTransformScale", this.transformScale);
265+
},
259266
responsive() {
260267
if (!this.responsive) {
261268
this.$emit('update:layout', this.originalLayout);

0 commit comments

Comments
 (0)