fix(draw/BpmnRenderer): ensure labels keep position if width doesn't change

* adjust positioning tests to pass on Arch Linux

Closes #613
This commit is contained in:
pedesen 2016-09-27 17:01:05 +02:00 committed by Nico Rehwaldt
parent 5441b2e09e
commit f4023cf321
5 changed files with 31 additions and 28 deletions

View File

@ -1277,7 +1277,7 @@ function BpmnRenderer(eventBus, styles, pathMap, priority) {
// update element.x so that the layouted text is still // update element.x so that the layouted text is still
// center alligned (newX = oldMidX - newWidth / 2) // center alligned (newX = oldMidX - newWidth / 2)
element.x = Math.round(element.x + element.width / 2) - Math.round((textBBox.width / 2)); element.x = Math.ceil(element.x + element.width / 2) - Math.ceil((textBBox.width / 2));
// take element width, height from actual bounds // take element width, height from actual bounds
element.width = Math.ceil(textBBox.width); element.width = Math.ceil(textBBox.width);

View File

@ -1,7 +1,5 @@
'use strict'; 'use strict';
var TestContainer = require('mocha-test-container-support');
var TestHelper = require('../../../TestHelper'); var TestHelper = require('../../../TestHelper');
/* global bootstrapViewer, inject */ /* global bootstrapViewer, inject */
@ -513,12 +511,6 @@ describe('features - label-editing', function() {
describe('zoom', function() { describe('zoom', function() {
var container;
beforeEach(function() {
container = TestContainer.get(this);
});
it('should have fixed dimensions (low zoom)', testTextboxSizing('empty-task', 0.5, 100, 80, oneWord)); it('should have fixed dimensions (low zoom)', testTextboxSizing('empty-task', 0.5, 100, 80, oneWord));
it('should have fixed dimensions (high zoom)', testTextboxSizing('empty-task', 1.5, 150, 120, oneWord)); it('should have fixed dimensions (high zoom)', testTextboxSizing('empty-task', 1.5, 150, 120, oneWord));
@ -526,7 +518,7 @@ describe('features - label-editing', function() {
it('should center text box position (low zoom)', inject(function(canvas, elementRegistry, directEditing) { it('should center text box position (low zoom)', inject(function(canvas, elementRegistry, directEditing) {
// given // given
canvas.zoom(0.5); canvas.zoom(0.5, { x: 0, y: 0 });
var shape = elementRegistry.get('empty-task'); var shape = elementRegistry.get('empty-task');
@ -534,17 +526,10 @@ describe('features - label-editing', function() {
directEditing.activate(shape); directEditing.activate(shape);
// then // then
var textbox = directEditing._textbox, var textbox = directEditing._textbox;
gfx = elementRegistry.getGraphics('empty-task'),
shapeClientRect = gfx.node.parentNode.getBoundingClientRect();
var shapeRect = { expect(textbox.content.offsetLeft).to.equal(211);
top: shapeClientRect.top - container.offsetTop, expect(textbox.content.offsetTop).to.equal(17);
left: shapeClientRect.left - container.offsetLeft
};
expect(textbox.content.offsetLeft).to.be.within(shapeRect.left - 28, shapeRect.left - 22);
expect(textbox.content.offsetTop).to.be.within(shapeRect.top - 22, shapeRect.top - 17);
})); }));

View File

@ -108,9 +108,9 @@ describe('label bounds', function() {
describe('label position', function() { describe('label position', function() {
var getExpectedX = function(shape) { var getExpectedX = function(shape) {
var shapeMid = shape.x + shape.width/2; var shapeMid = shape.x + Math.ceil(shape.width/2);
return Math.round(shapeMid - shape.label.width/2); return shapeMid - Math.ceil(shape.label.width/2);
}; };
it('should shift to left', inject(function(elementRegistry) { it('should shift to left', inject(function(elementRegistry) {
@ -124,7 +124,7 @@ describe('label bounds', function() {
// then // then
var expectedX = getExpectedX(shape); var expectedX = getExpectedX(shape);
expect(shape.label.x).to.be.within(expectedX - 1, expectedX); expect(shape.label.x).to.equal(expectedX);
})); }));
@ -139,7 +139,25 @@ describe('label bounds', function() {
// then // then
var expectedX = getExpectedX(shape); var expectedX = getExpectedX(shape);
expect(shape.label.x).to.be.within(expectedX -1, expectedX); expect(shape.label.x).to.equal(expectedX);
}));
it('should remain the same', inject(function(elementRegistry) {
// given
var shape = elementRegistry.get('StartEvent_1');
// when
updateLabel(shape, 'FOOBAR');
// copy old horizontal label position
var oldX = shape.label.x + 0;
updateLabel(shape, 'FOOBAR\n1');
// then
expect(shape.label.x).to.equal(oldX);
})); }));
}); });

View File

@ -309,7 +309,7 @@ describe('modeling - label layouting', function() {
dragging.end(); dragging.end();
// then // then
expect(Math.round(connection.label.x)).to.be.equal(467); expect(Math.round(connection.label.x)).to.be.within(467, 468);
expect(Math.round(connection.label.y)).to.be.within(170, 171); expect(Math.round(connection.label.y)).to.be.within(170, 171);
})); }));
@ -502,7 +502,7 @@ describe('modeling - label layouting', function() {
dragging.end(); dragging.end();
// then // then
expect(connection.label.y - labelPosition.y).to.be.within(-76, -72); expect(connection.label.y - labelPosition.y).to.be.within(-76, -70);
expect(connection.label.x - labelPosition.x).to.be.within(-53, -51); expect(connection.label.x - labelPosition.x).to.be.within(-53, -51);
})); }));

View File

@ -51,12 +51,12 @@ describe('import - labels', function() {
expect(endEvent.label.x).to.be.within(236, 237); expect(endEvent.label.x).to.be.within(236, 237);
expect(endEvent.label.y).to.be.within(256, 256); expect(endEvent.label.y).to.be.within(256, 256);
expect(endEvent.label.width).to.be.within(68, 69); expect(endEvent.label.width).to.be.within(68, 69);
expect(endEvent.label.height).to.be.within(25, 30); expect(endEvent.label.height).to.be.within(23, 30);
expect(sequenceFlow.label.x).to.be.within(441, 442); expect(sequenceFlow.label.x).to.be.within(441, 442);
expect(sequenceFlow.label.y).to.be.within(316, 317); expect(sequenceFlow.label.y).to.be.within(316, 317);
expect(sequenceFlow.label.width).to.be.within(79, 82); expect(sequenceFlow.label.width).to.be.within(79, 82);
expect(sequenceFlow.label.height).to.be.within(13, 15); expect(sequenceFlow.label.height).to.be.within(11, 15);
done(); done();
})(); })();